diff --git a/l10n_ar_account_tax_settlement_mendoza/__init__.py b/l10n_ar_account_tax_settlement_mendoza/__init__.py new file mode 100644 index 00000000..aee8895e --- /dev/null +++ b/l10n_ar_account_tax_settlement_mendoza/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/l10n_ar_txt_mendoza/__manifest__.py b/l10n_ar_account_tax_settlement_mendoza/__manifest__.py similarity index 87% rename from l10n_ar_txt_mendoza/__manifest__.py rename to l10n_ar_account_tax_settlement_mendoza/__manifest__.py index 53362ed1..4bfb5e8d 100644 --- a/l10n_ar_txt_mendoza/__manifest__.py +++ b/l10n_ar_account_tax_settlement_mendoza/__manifest__.py @@ -1,11 +1,12 @@ { - 'name': 'TXT Mendoza', + 'name': 'Tax settlement Mendoza', 'version': "16.0.1.0.0", 'category': 'Accounting', 'author': 'ADHOC SA', 'depends': [ 'l10n_ar_account_tax_settlement', 'l10n_ar_account_withholding', + 'base_import_match', ], 'data': [ 'views/account_move_views.xml', diff --git a/l10n_ar_txt_mendoza/models/__init__.py b/l10n_ar_account_tax_settlement_mendoza/models/__init__.py similarity index 100% rename from l10n_ar_txt_mendoza/models/__init__.py rename to l10n_ar_account_tax_settlement_mendoza/models/__init__.py diff --git a/l10n_ar_txt_mendoza/models/account_journal.py b/l10n_ar_account_tax_settlement_mendoza/models/account_journal.py similarity index 85% rename from l10n_ar_txt_mendoza/models/account_journal.py rename to l10n_ar_account_tax_settlement_mendoza/models/account_journal.py index adede83c..a344b1a4 100644 --- a/l10n_ar_txt_mendoza/models/account_journal.py +++ b/l10n_ar_account_tax_settlement_mendoza/models/account_journal.py @@ -1,9 +1,6 @@ -from odoo import models, fields, api, _ -from odoo.exceptions import ValidationError, RedirectWarning -from odoo.tools.float_utils import float_round -# from odoo.tools.misc import formatLang -# from odoo.tools import DEFAULT_SERVER_DATE_FORMAT -import re +from odoo import models, _ +from odoo.exceptions import RedirectWarning + class AccountJournal(models.Model): _inherit = 'account.journal' diff --git a/l10n_ar_txt_mendoza/models/account_move.py b/l10n_ar_account_tax_settlement_mendoza/models/account_move.py similarity index 90% rename from l10n_ar_txt_mendoza/models/account_move.py rename to l10n_ar_account_tax_settlement_mendoza/models/account_move.py index f46db416..0812e111 100644 --- a/l10n_ar_txt_mendoza/models/account_move.py +++ b/l10n_ar_account_tax_settlement_mendoza/models/account_move.py @@ -1,4 +1,4 @@ -from odoo import models, fields, api +from odoo import models, fields class AccountMove(models.Model): diff --git a/l10n_ar_txt_mendoza/models/account_payment.py b/l10n_ar_account_tax_settlement_mendoza/models/account_payment.py similarity index 63% rename from l10n_ar_txt_mendoza/models/account_payment.py rename to l10n_ar_account_tax_settlement_mendoza/models/account_payment.py index 2c44d4aa..9ef15c8c 100644 --- a/l10n_ar_txt_mendoza/models/account_payment.py +++ b/l10n_ar_account_tax_settlement_mendoza/models/account_payment.py @@ -5,4 +5,4 @@ class AccountPayment(models.Model): _inherit = "account.payment" - alicuota_mendoza = fields.Float(store=True, readonly=True) + alicuota_mendoza = fields.Float(readonly=True) diff --git a/l10n_ar_txt_mendoza/models/account_payment_group.py b/l10n_ar_account_tax_settlement_mendoza/models/account_payment_group.py similarity index 55% rename from l10n_ar_txt_mendoza/models/account_payment_group.py rename to l10n_ar_account_tax_settlement_mendoza/models/account_payment_group.py index 890d5cbd..048ff356 100644 --- a/l10n_ar_txt_mendoza/models/account_payment_group.py +++ b/l10n_ar_account_tax_settlement_mendoza/models/account_payment_group.py @@ -2,7 +2,7 @@ # For copyright and license notices, see __manifest__.py file in module root # directory ############################################################################## -from odoo import models, api, fields, _ +from odoo import models, fields from odoo.exceptions import ValidationError @@ -14,19 +14,13 @@ class AccountPaymentGroup(models.Model): alicuota_mendoza = fields.Float(help="Guardamos la alícuota para el txt de mendoza.", readonly=True) def compute_withholdings(self): - """Para el cálculo de retenciones automáticas de aplicadas de Mendoza siempre tiene que haber una factura vinculada al payment group.""" + """ Para el cálculo de retenciones automáticas de aplicadas de Mendoza siempre tiene que haber una factura vinculada al payment group. Además debemos guardar en el payment de mendoza la alícuota aplicada. """ + res = super().compute_withholdings() tax_group_mendoza_id = self.env.ref('l10n_ar_ux.tax_group_retencion_iibb_za').id - retencion_mdza_aplicada = self.env['account.tax'].with_context(type=None).search([ - ('type_tax_use', '=', self.partner_type), - ('company_id', '=', self.company_id.id), - ('tax_group_id', '=', tax_group_mendoza_id), - ], limit=1) - if retencion_mdza_aplicada and not self.to_pay_move_line_ids: - raise ValidationError('No puede calcular retenciones automáticas de aplicadas de Mendoza si no seleccionó una factura para pagar') - else: - super().compute_withholdings() - - # Agregamos la alícuota de mendoza al payment (es necesario para generar el txt iibb_aplicado_sircar_files_values) payment_mendoza = self.payment_ids.filtered(lambda x: x.tax_withholding_id.tax_group_id.id == tax_group_mendoza_id and x.tax_withholding_id.withholding_type == 'code' and x.state == 'draft') if payment_mendoza: + if not self.to_pay_move_line_ids: + raise ValidationError('No puede calcular retenciones automáticas de aplicadas de Mendoza si no seleccionó una factura para pagar') + # Agregamos la alícuota de mendoza al payment (es necesario para generar el txt iibb_aplicado_sircar_files_values) payment_mendoza.alicuota_mendoza = self.alicuota_mendoza + return res diff --git a/l10n_ar_account_tax_settlement_mendoza/models/account_tax.py b/l10n_ar_account_tax_settlement_mendoza/models/account_tax.py new file mode 100644 index 00000000..7a36befc --- /dev/null +++ b/l10n_ar_account_tax_settlement_mendoza/models/account_tax.py @@ -0,0 +1,13 @@ +from odoo import models + + +class AccountTax(models.Model): + _inherit = "account.tax" + + def get_partner_alicuot(self, partner, date, line=None): + """ La alícuota para el archivo txt de mendoza que se genera desde el método iibb_aplicado_sircar_files_values + no se obtiene del partner sino que se obtiene del payment, y el código de régimen se obtiene del impuesto pero + extendemos el método get_partner_alicuot original para usarlo como puente, agregamos 'line' como parámentro. """ + if line and line.payment_id and line.payment_id.alicuota_mendoza and line.payment_id.tax_withholding_id.codigo_regimen: + return self.env['res.partner.arba_alicuot'].new({'alicuota_retencion': line.payment_id.alicuota_mendoza * 100, 'partner_id': partner, 'regimen_retencion': line.payment_id.tax_withholding_id.codigo_regimen}) + return super().get_partner_alicuot(partner, date, line=line) diff --git a/l10n_ar_txt_mendoza/models/afip_activity.py b/l10n_ar_account_tax_settlement_mendoza/models/afip_activity.py similarity index 97% rename from l10n_ar_txt_mendoza/models/afip_activity.py rename to l10n_ar_account_tax_settlement_mendoza/models/afip_activity.py index 16de27a3..79284f1d 100644 --- a/l10n_ar_txt_mendoza/models/afip_activity.py +++ b/l10n_ar_account_tax_settlement_mendoza/models/afip_activity.py @@ -15,7 +15,7 @@ def menor_alicuota(self, actividades_con_alicuota_cero): activity_codes = self.mapped('code') activities = self.env['afip.activity'].search([('code', 'in', activity_codes)]) activities_with_aliquots = activities.filtered(lambda x: x.alicuota_general or x.posee_tasa_cero or x.no_posee_certificado_tasa_cero) - if not activities_with_aliquots: + if activities and not activities_with_aliquots: raise UserError('No hay actividades con alícuotas') actividades_con_alic = activities_with_aliquots.mapped('code') elementos_no_en_ambas = [activity for activity in activity_codes if activity not in actividades_con_alic] diff --git a/l10n_ar_txt_mendoza/models/res_company.py b/l10n_ar_account_tax_settlement_mendoza/models/res_company.py similarity index 85% rename from l10n_ar_txt_mendoza/models/res_company.py rename to l10n_ar_account_tax_settlement_mendoza/models/res_company.py index 816ba525..7aeea187 100644 --- a/l10n_ar_txt_mendoza/models/res_company.py +++ b/l10n_ar_account_tax_settlement_mendoza/models/res_company.py @@ -19,7 +19,7 @@ def write(self, vals): vals['riesgo_fiscal_csv_file_last_update'] = fields.Datetime.now() return super(ResCompany, self).write(vals) - def process_csv_file(self, partner_vat, activity_codes): + def process_mendoza_csv_file(self, partner_vat, activity_codes): if self.riesgo_fiscal_csv_file: # Decode the base64 file content and parse the CSV csv_content = base64.b64decode(self.riesgo_fiscal_csv_file) @@ -35,5 +35,4 @@ def process_csv_file(self, partner_vat, activity_codes): if row[7] == 'S': actividades_con_riesgo.append(row[3]) return actividades_con_riesgo, actividades_con_alicuota_cero - else: - raise UserError('Debe subir el archivo de riesgo fiscal en la sección de ajustes de contabilidad para calcular la retención automática de Mendoza.') + raise UserError('Debe subir el archivo de riesgo fiscal en la sección de ajustes de contabilidad para calcular la retención automática de Mendoza.') diff --git a/l10n_ar_txt_mendoza/views/account_move_views.xml b/l10n_ar_account_tax_settlement_mendoza/views/account_move_views.xml similarity index 81% rename from l10n_ar_txt_mendoza/views/account_move_views.xml rename to l10n_ar_account_tax_settlement_mendoza/views/account_move_views.xml index 73b0fc71..71b4bbef 100644 --- a/l10n_ar_txt_mendoza/views/account_move_views.xml +++ b/l10n_ar_account_tax_settlement_mendoza/views/account_move_views.xml @@ -1,7 +1,7 @@ - - account.move.form.personalizations + + account.move.form account.move diff --git a/l10n_ar_txt_mendoza/views/account_payment_view.xml b/l10n_ar_account_tax_settlement_mendoza/views/account_payment_view.xml similarity index 100% rename from l10n_ar_txt_mendoza/views/account_payment_view.xml rename to l10n_ar_account_tax_settlement_mendoza/views/account_payment_view.xml diff --git a/l10n_ar_txt_mendoza/views/afip_activity_view.xml b/l10n_ar_account_tax_settlement_mendoza/views/afip_activity_view.xml similarity index 100% rename from l10n_ar_txt_mendoza/views/afip_activity_view.xml rename to l10n_ar_account_tax_settlement_mendoza/views/afip_activity_view.xml diff --git a/l10n_ar_txt_mendoza/wizard/__init__.py b/l10n_ar_account_tax_settlement_mendoza/wizard/__init__.py similarity index 100% rename from l10n_ar_txt_mendoza/wizard/__init__.py rename to l10n_ar_account_tax_settlement_mendoza/wizard/__init__.py diff --git a/l10n_ar_txt_mendoza/wizard/res_config_settings.py b/l10n_ar_account_tax_settlement_mendoza/wizard/res_config_settings.py similarity index 90% rename from l10n_ar_txt_mendoza/wizard/res_config_settings.py rename to l10n_ar_account_tax_settlement_mendoza/wizard/res_config_settings.py index 99904586..5d145aa1 100644 --- a/l10n_ar_txt_mendoza/wizard/res_config_settings.py +++ b/l10n_ar_account_tax_settlement_mendoza/wizard/res_config_settings.py @@ -9,5 +9,4 @@ class ResConfigSettings(models.TransientModel): ) riesgo_fiscal_csv_file_last_update = fields.Datetime( related='company_id.riesgo_fiscal_csv_file_last_update', - string="Última Modificación" ) diff --git a/l10n_ar_txt_mendoza/wizard/res_config_settings_views.xml b/l10n_ar_account_tax_settlement_mendoza/wizard/res_config_settings_views.xml similarity index 100% rename from l10n_ar_txt_mendoza/wizard/res_config_settings_views.xml rename to l10n_ar_account_tax_settlement_mendoza/wizard/res_config_settings_views.xml diff --git a/l10n_ar_account_tax_settlement_mendoza/wizards/__init__.py b/l10n_ar_account_tax_settlement_mendoza/wizards/__init__.py new file mode 100644 index 00000000..e5010bbc --- /dev/null +++ b/l10n_ar_account_tax_settlement_mendoza/wizards/__init__.py @@ -0,0 +1,5 @@ +############################################################################## +# For copyright and license notices, see __manifest__.py file in module root +# directory +############################################################################## +from . import res_config_settings diff --git a/l10n_ar_account_tax_settlement_mendoza/wizards/res_config_settings.py b/l10n_ar_account_tax_settlement_mendoza/wizards/res_config_settings.py new file mode 100644 index 00000000..5d145aa1 --- /dev/null +++ b/l10n_ar_account_tax_settlement_mendoza/wizards/res_config_settings.py @@ -0,0 +1,12 @@ +from odoo import models, fields + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + riesgo_fiscal_csv_file = fields.Binary( + related='company_id.riesgo_fiscal_csv_file', + readonly=False, + ) + riesgo_fiscal_csv_file_last_update = fields.Datetime( + related='company_id.riesgo_fiscal_csv_file_last_update', + ) diff --git a/l10n_ar_account_tax_settlement_mendoza/wizards/res_config_settings_views.xml b/l10n_ar_account_tax_settlement_mendoza/wizards/res_config_settings_views.xml new file mode 100644 index 00000000..ad45644d --- /dev/null +++ b/l10n_ar_account_tax_settlement_mendoza/wizards/res_config_settings_views.xml @@ -0,0 +1,33 @@ + + + + + res.config.settings.view.form.inherit.l10n_ar_afip_ws + res.config.settings + + +
+
+
+
+
+
+
+ + + + diff --git a/l10n_ar_txt_mendoza/__init__.py b/l10n_ar_txt_mendoza/__init__.py deleted file mode 100644 index 9b429614..00000000 --- a/l10n_ar_txt_mendoza/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import models -from . import wizard diff --git a/l10n_ar_txt_mendoza/models/account_tax.py b/l10n_ar_txt_mendoza/models/account_tax.py deleted file mode 100644 index 0d48e4aa..00000000 --- a/l10n_ar_txt_mendoza/models/account_tax.py +++ /dev/null @@ -1,15 +0,0 @@ -from odoo import models, fields, api, _ -from odoo.exceptions import UserError -from dateutil.relativedelta import relativedelta - - -class AccountTax(models.Model): - _inherit = "account.tax" - - def get_partner_alicuot(self, partner, date, line=None): - """ La alícuota para el archivo txt de mendoza que se genera desde el método iibb_aplicado_sircar_files_values no se obtiene del partner sino que se obtiene del payment, y el código de régimen se obtiene del impuesto pero extendemos el método get_partner_alicuot original para usarlo como puente, agregamos 'line' como parámentro. """ - if line.payment_id.alicuota_mendoza and line.payment_id.tax_withholding_id.codigo_regimen: - aliquot = self.env['res.partner.arba_alicuot'].new({'alicuota_retencion': line.payment_id.alicuota_mendoza * 100, 'partner_id': partner, 'regimen_retencion': line.payment_id.tax_withholding_id.codigo_regimen}) - else: - aliquot = super().get_partner_alicuot(partner, date) - return aliquot