88 lines
3.8 KiB
Python
88 lines
3.8 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ResCompany(models.Model):
|
|
_inherit = 'res.company'
|
|
|
|
# ---------------
|
|
# Default methods
|
|
# ---------------
|
|
|
|
def _default_l10n_my_edi_industrial_classification(self):
|
|
return self.env.ref('l10n_my_edi.class_00000', raise_if_not_found=False)
|
|
|
|
# ------------------
|
|
# Fields declaration
|
|
# ------------------
|
|
|
|
l10n_my_edi_proxy_user_id = fields.Many2one(
|
|
comodel_name="account_edi_proxy_client.user",
|
|
compute="_compute_l10n_my_edi_proxy_user_id",
|
|
)
|
|
l10n_my_identification_type = fields.Selection(related='partner_id.l10n_my_identification_type', readonly=False)
|
|
l10n_my_identification_number = fields.Char(related='partner_id.l10n_my_identification_number', readonly=False)
|
|
l10n_my_identification_number_placeholder = fields.Char(compute="_compute_l10n_my_identification_number_placeholder")
|
|
l10n_my_edi_industrial_classification = fields.Many2one(
|
|
comodel_name='l10n_my_edi.industry_classification',
|
|
string="Ind. Classification",
|
|
default=_default_l10n_my_edi_industrial_classification,
|
|
)
|
|
l10n_my_edi_mode = fields.Selection(
|
|
selection=[
|
|
('test', 'Pre-Production'),
|
|
('prod', 'Production'),
|
|
],
|
|
# Nothing will happen until the user register, so it can be set by default.
|
|
default="test",
|
|
)
|
|
# /!\ this was a planned feature that got scrapped due to API limitations. It may come back if their system provides better support for it.
|
|
l10n_my_edi_default_import_journal_id = fields.Many2one(
|
|
comodel_name="account.journal",
|
|
domain="[('type', '=', 'purchase')]",
|
|
string="Default import journal",
|
|
help="The journal on which invoices imported from MyInvois will be booked. Leave empty to use the default purchase journal.",
|
|
)
|
|
|
|
# --------------------------------
|
|
# Compute, inverse, search methods
|
|
# --------------------------------
|
|
|
|
@api.depends("account_edi_proxy_client_ids", 'l10n_my_edi_mode')
|
|
def _compute_l10n_my_edi_proxy_user_id(self):
|
|
""" Each company is expected to have at most one proxy user for malaysia for each mode.
|
|
Thus, we can easily find said user.
|
|
"""
|
|
for company in self:
|
|
company.l10n_my_edi_proxy_user_id = company.account_edi_proxy_client_ids.filtered(
|
|
lambda u: u.proxy_type == 'l10n_my_edi' and u.edi_mode == company.l10n_my_edi_mode
|
|
)[:1]
|
|
|
|
@api.depends('l10n_my_identification_type')
|
|
def _compute_l10n_my_identification_number_placeholder(self):
|
|
""" Computes a dynamic placeholder that depends on the selected type to help the user inputs their data.
|
|
The placeholders have been taken from the MyInvois doc.
|
|
"""
|
|
for company in self:
|
|
placeholder = 'N/A'
|
|
if company.l10n_my_identification_type == 'NRIC':
|
|
placeholder = '830503-11-4923'
|
|
elif company.l10n_my_identification_type == 'BRN':
|
|
placeholder = '202201234565'
|
|
elif company.l10n_my_identification_type == 'PASSPORT':
|
|
placeholder = 'A00000000'
|
|
elif company.l10n_my_identification_type == 'ARMY':
|
|
placeholder = '830805-13-4983'
|
|
company.l10n_my_identification_number_placeholder = placeholder
|
|
|
|
# ----------------
|
|
# Business methods
|
|
# ----------------
|
|
|
|
def _l10n_my_edi_create_proxy_user(self):
|
|
""" This method will create a new proxy user for the current company based on the selected mode, if no users already exists. """
|
|
self.ensure_one()
|
|
if not self.l10n_my_edi_proxy_user_id:
|
|
self.env['account_edi_proxy_client.user']._register_proxy_user(self, 'l10n_my_edi', self.l10n_my_edi_mode)
|