mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
Initial commit of connector_walmart for Odoo 11.0 (using beta version of connector_ecommerce)
This commit is contained in:
1
connector_walmart/models/account/__init__.py
Normal file
1
connector_walmart/models/account/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import account_fiscal_position
|
||||
68
connector_walmart/models/account/account_fiscal_position.py
Normal file
68
connector_walmart/models/account/account_fiscal_position.py
Normal file
@@ -0,0 +1,68 @@
|
||||
# © 2017,2018 Hibou Corp.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
from logging import getLogger
|
||||
|
||||
_logger = getLogger(__name__)
|
||||
|
||||
|
||||
class AccountFiscalPosition(models.Model):
|
||||
_inherit = 'account.fiscal.position'
|
||||
|
||||
is_connector_walmart = fields.Boolean(string='Use Walmart Order Item Rate')
|
||||
|
||||
@api.multi
|
||||
def map_tax(self, taxes, product=None, partner=None, order_line=None):
|
||||
|
||||
if not taxes or not self.is_connector_walmart:
|
||||
return super(AccountFiscalPosition, self).map_tax(taxes, product=product, partner=partner)
|
||||
|
||||
AccountTax = self.env['account.tax'].sudo()
|
||||
result = AccountTax.browse()
|
||||
|
||||
for tax in taxes:
|
||||
if not order_line:
|
||||
raise ValidationError('Walmart Connector fiscal position requires order item details.')
|
||||
|
||||
if not order_line.walmart_bind_ids:
|
||||
if order_line.price_unit == 0.0:
|
||||
continue
|
||||
else:
|
||||
raise ValidationError('Walmart Connector fiscal position requires Walmart Order Lines')
|
||||
|
||||
tax_rate = order_line.walmart_bind_ids[0].tax_rate
|
||||
|
||||
if tax_rate == 0.0:
|
||||
continue
|
||||
|
||||
# step 1: Check if we already have this rate.
|
||||
tax_line = self.tax_ids.filtered(lambda x: tax_rate == x.tax_dest_id.amount and x.tax_src_id.id == tax.id)
|
||||
if not tax_line:
|
||||
#step 2: find or create this tax and tax_line
|
||||
new_tax = AccountTax.search([
|
||||
('name', 'like', 'Walmart %'),
|
||||
('amount', '=', tax_rate),
|
||||
('amount_type', '=', 'percent'),
|
||||
('type_tax_use', '=', 'sale'),
|
||||
], limit=1)
|
||||
if not new_tax:
|
||||
new_tax = AccountTax.create({
|
||||
'name': 'Walmart Tax %0.2f %%' % (tax_rate,),
|
||||
'amount': tax_rate,
|
||||
'amount_type': 'percent',
|
||||
'type_tax_use': 'sale',
|
||||
'account_id': tax.account_id.id,
|
||||
'refund_account_id': tax.refund_account_id.id,
|
||||
})
|
||||
tax_line = self.env['account.fiscal.position.tax'].sudo().create({
|
||||
'position_id': self.id,
|
||||
'tax_src_id': tax.id,
|
||||
'tax_dest_id': new_tax.id,
|
||||
})
|
||||
|
||||
# step 3: map the tax
|
||||
result |= tax_line.tax_dest_id
|
||||
return result
|
||||
Reference in New Issue
Block a user