You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
3.6 KiB

  1. # -*- coding: utf-8 -*-
  2. # Copyright 2017 LasLabs Inc.
  3. # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
  4. from odoo import api, fields, models
  5. class WizardAddressValidate(models.TransientModel):
  6. _name = 'wizard.address.validate'
  7. _description = 'Validate Address Wizard'
  8. partner_id = fields.Many2one(
  9. string='Partner',
  10. comodel_name='res.partner',
  11. required=True,
  12. default=lambda s: s._default_partner_id(),
  13. )
  14. interface_id = fields.Many2one(
  15. string='Validation Interface',
  16. comodel_name='address.validate',
  17. default=lambda s: s._default_interface_id(),
  18. )
  19. street = fields.Char()
  20. street2 = fields.Char()
  21. city = fields.Char()
  22. zip = fields.Char()
  23. state_id = fields.Many2one(
  24. string='State',
  25. comodel_name='res.country.state',
  26. )
  27. country_id = fields.Many2one(
  28. string='Country',
  29. comodel_name='res.country',
  30. )
  31. latitude = fields.Float()
  32. longitude = fields.Float()
  33. is_valid = fields.Boolean()
  34. validation_messages = fields.Text()
  35. street_original = fields.Char(
  36. related='partner_id.street',
  37. readonly=True,
  38. )
  39. street2_original = fields.Char(
  40. related='partner_id.street2',
  41. readonly=True,
  42. )
  43. city_original = fields.Char(
  44. related='partner_id.city',
  45. readonly=True,
  46. )
  47. zip_original = fields.Char(
  48. related='partner_id.zip',
  49. readonly=True,
  50. )
  51. state_id_original = fields.Many2one(
  52. string='State',
  53. comodel_name='res.country.state',
  54. related='partner_id.state_id',
  55. readonly=True,
  56. )
  57. country_id_original = fields.Many2one(
  58. string='Country',
  59. comodel_name='res.country',
  60. related='partner_id.country_id',
  61. readonly=True,
  62. )
  63. latitude_original = fields.Float(
  64. string='Latitude',
  65. related='partner_id.latitude',
  66. )
  67. longitude_original = fields.Float(
  68. string='Longitude',
  69. related='partner_id.longitude',
  70. )
  71. @api.model
  72. def _default_partner_id(self):
  73. active_model = self.env.context.get('active_model')
  74. active_id = self.env.context.get('active_id')
  75. if active_model == 'res.partner':
  76. return active_id
  77. if active_model == 'res.company':
  78. company = self.env['res.company'].browse(active_id)
  79. return company.partner_id.id
  80. @api.model
  81. def _default_interface_id(self):
  82. return self.env.user.company_id.default_address_validate_id.id
  83. @api.multi
  84. def action_validate(self):
  85. """Get the suggested address from the provider."""
  86. self.ensure_one()
  87. self.write(
  88. self.interface_id.get_address(self.partner_id)
  89. )
  90. return {
  91. 'context': self.env.context,
  92. 'view_type': 'form',
  93. 'view_mode': 'form',
  94. 'res_model': self._name,
  95. 'src_model': 'res.partner',
  96. 'res_id': self.id,
  97. 'view_id': False,
  98. 'type': 'ir.actions.act_window',
  99. 'target': 'new',
  100. }
  101. @api.multi
  102. def action_confirm(self):
  103. """Copy the validated information to the partner."""
  104. for record in self:
  105. record.partner_id.write({
  106. 'street': record.street,
  107. 'street2': record.street2,
  108. 'city': record.city,
  109. 'state_id': record.state_id.id,
  110. 'country_id': record.country_id.id,
  111. 'zip': record.zip,
  112. })
  113. return {
  114. 'type': 'ir.actions.act_window_close',
  115. }