GoodERP
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

259 rindas
10KB

  1. # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. from odoo.exceptions import UserError
  4. from odoo import models, fields, api
  5. class Country(models.Model):
  6. _name = 'country'
  7. _description = '国家/地区'
  8. name = fields.Char('国家/地区名称')
  9. state_ids = fields.One2many('country.state', 'country_id', '省/直辖市/自治区')
  10. company_id = fields.Many2one(
  11. 'res.company',
  12. string='公司',
  13. change_default=True,
  14. default=lambda self: self.env.company)
  15. _sql_constraints = [
  16. ('code_uniq', 'unique(name)', '国家/地区名称必须唯一')
  17. ]
  18. class CountryState(models.Model):
  19. _name = 'country.state'
  20. _description = '省/直辖市/自治区'
  21. country_id = fields.Many2one('country', '国家/地区', required=True)
  22. name = fields.Char('名称', required=True)
  23. code = fields.Char('编号', required=True)
  24. city_ids = fields.One2many('all.city', 'province_id', '下辖市/区')
  25. company_id = fields.Many2one(
  26. 'res.company',
  27. string='公司',
  28. change_default=True,
  29. default=lambda self: self.env.company)
  30. class AllCity(models.Model):
  31. _name = 'all.city'
  32. _rec_name = 'city_name'
  33. _description = '地级市'
  34. city_name = fields.Char('名称', required=True)
  35. country_id = fields.Many2one('country', '国家/地区', related='province_id.country_id', readonly=True, store=True)
  36. county_ids = fields.One2many('all.county', 'city_id', '下辖县/市')
  37. province_id = fields.Many2one('country.state', '省/直辖市/自治区', required=True)
  38. company_id = fields.Many2one(
  39. 'res.company',
  40. string='公司',
  41. change_default=True,
  42. default=lambda self: self.env.company)
  43. class AllCounty(models.Model):
  44. _name = 'all.county'
  45. _rec_name = 'county_name'
  46. _description = '县/市/区'
  47. country_id = fields.Many2one('country', '国家/地区', related='city_id.province_id.country_id', readonly=True, store=True)
  48. province_id = fields.Many2one('country.state', '省', related='city_id.province_id', readonly=True, store=True)
  49. city_id = fields.Many2one('all.city', '地级市', required=True)
  50. county_name = fields.Char('名称', required=True)
  51. description = fields.Char('描述')
  52. company_id = fields.Many2one(
  53. 'res.company',
  54. string='公司',
  55. change_default=True,
  56. default=lambda self: self.env.company)
  57. class StateCityCounty(models.Model):
  58. _name = 'state.city.county'
  59. _description = '县'
  60. country_id = fields.Many2one('country', '国家')
  61. province_id = fields.Many2one('country.state', '省')
  62. city_id = fields.Many2one('all.city', '市')
  63. county_id = fields.Many2one('all.county', '区县')
  64. company_id = fields.Many2one(
  65. 'res.company',
  66. string='公司',
  67. change_default=True,
  68. default=lambda self: self.env.company)
  69. @api.onchange('country_id')
  70. def onchange_country(self):
  71. # 为地址填写时方便,当选定国家时 ,省的列表里面只有所选国家的
  72. if self.country_id:
  73. domain_dict = {'province_id': [
  74. ('country_id', '=', self.country_id.id)]}
  75. if self.province_id:
  76. if self.province_id.country_id == self.country_id:
  77. if self.city_id:
  78. if self.city_id.province_id == self.province_id:
  79. domain_dict = {}
  80. else:
  81. self.city_id = False
  82. else:
  83. self.province_id = False
  84. else:
  85. self.province_id = False
  86. self.city_id = False
  87. self.county_id = False
  88. domain_dict = {'province_id': [], 'city_id': []}
  89. return {'domain': domain_dict}
  90. @api.onchange('province_id')
  91. def onchange_province(self):
  92. # 为地址填写时方便,当选定省时 ,市区的列表里面只有所选省的
  93. if self.province_id:
  94. domain_dict = {'city_id': [
  95. ('province_id', '=', self.province_id.id)]}
  96. if self.city_id:
  97. if self.city_id.province_id == self.province_id:
  98. if self.county_id:
  99. if self.county_id.city_id == self.city_id:
  100. domain_dict = {}
  101. else:
  102. self.county_id = False
  103. else:
  104. self.city_id = False
  105. self.country_id = self.province_id.country_id
  106. else:
  107. self.city_id = False
  108. self.county_id = False
  109. domain_dict = {'city_id': [], 'county_id': []}
  110. return {'domain': domain_dict}
  111. @api.onchange('city_id')
  112. def onchange_city(self):
  113. # 为地址填写时方便,当选定市时 ,县区的列表里面只有所选市的
  114. if self.city_id:
  115. domain_dict = {'county_id': [('city_id', '=', self.city_id.id)]}
  116. province = self.city_id.province_id
  117. if not self.province_id:
  118. if self.county_id:
  119. if self.county_id.city_id != self.city_id:
  120. self.county_id = False
  121. self.province_id = province
  122. else:
  123. self.province_id = province
  124. else:
  125. domain_dict.update(
  126. {'city_id': [('province_id', '=', province.id)]})
  127. if self.county_id:
  128. if self.county_id.city_id == self.city_id:
  129. if province != self.province_id:
  130. self.province_id = province
  131. else:
  132. if province != self.province_id:
  133. self.province_id = province
  134. self.county_id = False
  135. else:
  136. self.county_id = False
  137. else:
  138. if province != self.province_id:
  139. self.province_id = province
  140. else:
  141. self.county_id = False
  142. domain_dict = {'county_id': []}
  143. return {'domain': domain_dict}
  144. @api.onchange('county_id')
  145. def onchange_county(self):
  146. # 选定了一个区县,自动填充其所属的省和市
  147. if self.county_id \
  148. and self.county_id.city_id \
  149. and self.county_id.city_id.province_id:
  150. city_obj = self.county_id.city_id
  151. self.city_id = city_obj
  152. self.province_id = city_obj.province_id
  153. return {'domain': {'county_id': [('city_id', '=', city_obj.id)]}}
  154. class PartnerAddress(models.Model):
  155. _name = 'partner.address'
  156. _inherit = "state.city.county"
  157. _description = '联系人地址'
  158. _order = 'address_func'
  159. _rec_name = 'contact'
  160. partner_id = fields.Many2one('partner', '业务伙伴')
  161. contact = fields.Char('联系人', required=True)
  162. mobile = fields.Char('手机')
  163. phone = fields.Char('座机')
  164. qq = fields.Char('QQ')
  165. email = fields.Char('邮箱')
  166. town = fields.Char('乡镇')
  167. detail_address = fields.Char('详细地址')
  168. is_default_add = fields.Boolean('默认收货人')
  169. department = fields.Char('部门')
  170. job = fields.Char('职务')
  171. supervisor_id = fields.Many2one(
  172. 'partner.address', '上级', domain="[('partner_id','=',partner_id)]")
  173. gone = fields.Boolean('已离职')
  174. note = fields.Text('备注')
  175. address_func = fields.Many2one('core.value', '联系人类型',
  176. ondelete='restrict',
  177. domain=[('type', '=', 'address_func')])
  178. def name_get(self):
  179. res = []
  180. for adds in self:
  181. add_str = '%s%s%s%s%s' % (
  182. adds.province_id and adds.province_id.name or '',
  183. adds.city_id and adds.city_id.city_name or '',
  184. adds.county_id and adds.county_id.county_name or '',
  185. adds.town or '',
  186. adds.detail_address or '')
  187. res.append((adds.id, add_str))
  188. return res
  189. class Partner(models.Model):
  190. _inherit = 'partner'
  191. def _put_info_to_partner(self, child):
  192. self.contact = child.contact
  193. self.mobile = child.mobile
  194. self.phone = child.phone
  195. self.qq = child.qq
  196. address = '%s%s%s%s%s' % (
  197. child.province_id and child.province_id.name or '',
  198. child.city_id and child.city_id.city_name or '',
  199. child.county_id and child.county_id.county_name or '',
  200. child.town or '',
  201. child.detail_address or '')
  202. self.address = address
  203. @api.depends('child_ids.is_default_add', 'child_ids.province_id',
  204. 'child_ids.city_id', 'child_ids.county_id', 'child_ids.town',
  205. 'child_ids.detail_address')
  206. def _compute_partner_address(self):
  207. '''如果业务伙伴地址中有默认地址,则显示在业务伙伴列表上'''
  208. for s in self:
  209. s.contact = s.mobile = ""
  210. s.phone = s.qq = s.address = ""
  211. for child in s.child_ids:
  212. if child.is_default_add: # 如果有默认地址取默认地址
  213. s._put_info_to_partner(child)
  214. # 如果没有默认地址取第一个联系人的
  215. if not any([child.is_default_add for child in s.child_ids]):
  216. partners_add = s.env['partner.address'].search(
  217. [('partner_id', '=', s.id)], order='id')
  218. child = partners_add and partners_add[0] or False
  219. if child:
  220. s._put_info_to_partner(child)
  221. child_ids = fields.One2many('partner.address', 'partner_id', '业务伙伴地址')
  222. contact = fields.Char(
  223. '联系人', compute='_compute_partner_address', store=True)
  224. mobile = fields.Char('手机', compute='_compute_partner_address', store=True)
  225. phone = fields.Char('座机', compute='_compute_partner_address', store=True)
  226. qq = fields.Char('QQ', compute='_compute_partner_address', store=True)
  227. address = fields.Char(
  228. '送货地址', compute='_compute_partner_address', store=True)
上海开阖软件有限公司 沪ICP备12045867号-1