分类: python

  • Python实现人民币大写 金额为负时显示错误时的解决方法

    Python实现人民币大写 金额为负时显示错误时的解决方法

    GeekerMaster奇客大师用Odoo开发的一些订单和结算报表都包括金额的人民币大写,采用Num2MoneyFormat的方法,不知道当初是谁分享了这段代码,反正它拯救了很多程序猿的时间。

    取自于斯,分享与斯。这里ITGeeker技术奇客也分享一下改写的Odoo人民币大写转换Python代码@api 8(gist@github):

    使用此段代码创建一个模块,然后在别的模块调用就可以了,调用代码Sample:

        # compute balance RMB
        @api.one
        @api.depends('balance')
        def compute_balance_cn(self):
            if self.balance:
                self.balance_cn = self.env['geeker.rmb.capital'].Num2MoneyFormat(
                    self.balance)
    
        balance_cn = fields.Char(
            'Renminbi (RMB)', compute=compute_balance_cn, readonly=True, store=True, track_visibility='onchange')

    问题: 金额为负时显示大写不正确

    当然最好的解决方法是自己修改源代码解决这个问题,但稍显复杂,也不知道是否会引起别的问题,毕竟是抄的别人的代码。如果有大神愿意指点就更好了。

    那就抄近路变通方式吧,更改前面的调用代码为:

        # compute balance RMB
        @api.one
        @api.depends('balance')
        def compute_balance_cn(self):
            if self.balance >= 0.00:
                self.balance_cn = self.env['geeker.rmb.capital'].Num2MoneyFormat(
                    self.balance)
            else:
                balance_cn_minus = 0 - self.balance
                self.balance_cn = '- ' + self.env['geeker.rmb.capital'].Num2MoneyFormat(
                    balance_cn_minus)
    
        balance_cn = fields.Char(
            'Renminbi (RMB)', compute=compute_balance_cn, readonly=True, track_visibility='onchange')

    把负的金额变成正的,然后再计算出来的人民币大写前面加上一个负号“-”,你也可以改成你想要的其他字符,例如“倒欠”等。

  • Odoo如何获取上个月的第1天和最后一天

    Odoo如何获取上个月的第1天和最后一天

    GeekerMaster奇客大师有一个SAP自由顾问管理模块,每个月初可以添加上个月的人天数记录,为了减少录入工作量,奇客大师设置了自动获取上个月的工作周期,从月初到月末,代码如下:

    import datetime
    
    date_from = fields.Date('Date From', required=True, default=datetime.date(datetime.date.today().year, datetime.date.today().month-1, 1))
    date_to = fields.Date('Date To', required=True, default=datetime.date(datetime.date.today().year, datetime.date.today().month, 1)-datetime.timedelta(1))

    一直工作正常,结果刚刚进入2019新年,爆出 错误代码:

    date_from = fields.Date('Date From', required=True, default=datetime.date(datetime.date.today().year,datetime.date.today().month-1,1))
    ValueError: month must be in 1..12

    应该是因为现在是1月,如果month-1之后就是0月,系统认为只有1-12个月才存在的缘故吧。使用odoo api进行改造吧:

        @api.multi
        def default_last_month_first_day(self):
            tday = datetime.date.today()
            now_month = tday.month
            if now_month > 1:
                last_month = datetime.date(
                        tday.year, tday.month-1, 1)
            else:
                last_month = datetime.date(
                    tday.year, tday.month, 1
                )
            return(last_month)

    可以工作,但不完美,也就是如果是1月份,那么date_from获取的是当前月份的第一天,不是上个月的第一天。

    引入relativedelta完美解决

    import datetime
    from dateutil import relativedelta
    
        @api.multi
        def default_last_month_first_day(self):
            today = datetime.date.today()
            d = today - relativedelta.relativedelta(months=1)
            return datetime.date(d.year, d.month, 1)
    
        date_from = fields.Date('Date From', required=True, default=default_last_month_first_day, track_visibility='onchange')

  • 升级Python到2.7.15 on CentOS 6 x64

    Centos 6 自带的2.6版本队友有些情况总会出现各种错误,例如:

    File "/usr/lib/python2.6/site-packages/pip/_internal/index.py", line 526 
    {str(c.version) for c in all_candidates}, ^ 
    SyntaxError: invalid syntax

    明确你的Linux版本

    cat /etc/redhat-release

    安装依赖:

    yum groupinstall -y "Development tools"
    yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel

    下载最新版本并编译安装

    cd /tmp
    wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz
    tar zxf Python-2.7.15.tgz
    cd Python-2.7.15
    ./configure
    make && make install

    #新版目录

    ll -tr /usr/local/bin/python*

    #系统自带老版本目录

    ll -tr /usr/bin/python*

    备份老版本命令,创建新版本软连接

    mv /usr/bin/python /usr/bin/python.old
    rm -f /usr/bin/python-config
    ln -s /usr/local/bin/python /usr/bin/python && ln -s /usr/local/bin/python-config /usr/bin/python-config && ln -s /usr/local/include/python2.7/ /usr/include/python2.7
    

    检查一下是否正确

    python --version

    为新版 Python 安装 setuptools

    wget https://bootstrap.pypa.io/ez_setup.py -O - | python
    easy_install pip

    然后就可以pip安装了

    pip install itgeeker
奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4