GoodERP
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

83 líneas
3.4KB

  1. # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. from odoo import api, fields, models
  4. class ResCurrency(models.Model):
  5. _inherit = 'res.currency'
  6. company_id = fields.Many2one(
  7. 'res.company',
  8. string='公司',
  9. change_default=True,
  10. default=lambda self: self.env.company)
  11. @api.model
  12. def _toggle_group_multi_currency(self):
  13. """
  14. 取消自动将全部内部用户纳入到 group_multi_currency 组
  15. 重写父类方法,不做任何操作
  16. """
  17. pass
  18. @api.model
  19. def _activate_group_multi_currency(self):
  20. """
  21. 取消自动将全部内部用户纳入到 group_multi_currency 组
  22. 重写父类方法,不做任何操作
  23. """
  24. pass
  25. @api.model
  26. def _deactivate_group_multi_currency(self):
  27. """
  28. 取消自动将全部内部用户移出 group_multi_currency 组
  29. 重写父类方法,不做任何操作
  30. """
  31. pass
  32. @api.model
  33. def rmb_upper(self, value):
  34. """
  35. 人民币大写
  36. 来自:http://topic.csdn.net/u/20091129/20/b778a93d-9f8f-4829-9297-d05b08a23f80.html
  37. 传入浮点类型的值返回 unicode 字符串
  38. :param 传入阿拉伯数字
  39. :return 返回值是对应阿拉伯数字的绝对值的中文数字
  40. """
  41. rmbmap = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]
  42. unit = ["分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿",
  43. "拾", "佰", "仟", "万", "拾", "佰", "仟", "兆"]
  44. # 冲红负数处理
  45. xflag = 0
  46. if value < 0:
  47. xflag = value
  48. value = abs(value)
  49. # 先把value 数字进行格式化保留两位小数,转成字符串然后去除小数点
  50. nums = list(map(int, list(str('%0.2f' % value).replace('.', ''))))
  51. words = []
  52. zflag = 0 # 标记连续0次数,以删除万字,或适时插入零字
  53. start = len(nums) - 3
  54. for i in range(start, -3, -1): # 使i对应实际位数,负数为角分
  55. # 大部分情况对应数字不等于零 或者是刚开始循环
  56. if 0 != nums[start - i] or len(words) == 0:
  57. if zflag:
  58. words.append(rmbmap[0])
  59. zflag = 0
  60. words.append(rmbmap[nums[start - i]]) # 数字对应的中文字符
  61. words.append(unit[i + 2]) # 列表此位置的单位
  62. # 控制‘万/元’ 万和元比较特殊,如2拾万和2拾1万 无论有没有这个1 万字是必须的
  63. elif 0 == i or (0 == i % 4 and zflag < 3):
  64. # 上面那种情况定义了 2拾1万 的显示 这个是特殊对待的 2拾万(一类)的显示
  65. words.append(unit[i + 2])
  66. # 元(控制条件为 0 == i )和万(控制条为(0 == i % 4 and zflag < 3))的情况的处理是一样的
  67. zflag = 0
  68. else:
  69. zflag += 1
  70. if words[-1] != unit[0]: # 结尾非‘分’补整字 最小单位 如果最后一个字符不是最小单位(分)则要加一个整字
  71. words.append("整")
  72. if xflag < 0: # 如果为负数则要在数字前面加上‘负’字
  73. words.insert(0, "负")
  74. return ''.join(words)
上海开阖软件有限公司 沪ICP备12045867号-1