11# Copyright 2025 Moduon Team S.L.
2+ # Copyright 2026 Tecnativa - Christian Ramos
23# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl
34
5+ import math
6+
47from odoo import api , exceptions , fields , models
58
9+ ACTIVITY_PRORATE_TYPES = [
10+ ("G" , "General" ),
11+ ("E" , "Especial" ),
12+ ]
13+
614
715class L10nEsAeatMod390Report (models .Model ):
816 _inherit = "l10n.es.aeat.mod390.report"
@@ -20,6 +28,172 @@ class L10nEsAeatMod390Report(models.Model):
2028 readonly = True ,
2129 )
2230
31+ first_dev_activity = fields .Char (string = "1 - Actividad desarrollada" , size = 40 )
32+ first_dev_activity_cnae_code = fields .Char (string = "1 - Código CNAE [114]" , size = 3 )
33+ first_dev_activity_operation_amount = fields .Float (
34+ string = "1 - Importe operaciones [115]" ,
35+ digits = (15 , 2 ),
36+ )
37+ first_dev_activity_operation_amount_deductible = fields .Float (
38+ string = "1 - Importe de operaciones con derecho a deducción [116]" ,
39+ digits = (15 , 2 ),
40+ )
41+ first_dev_activity_prorate_type = fields .Selection (
42+ ACTIVITY_PRORATE_TYPES ,
43+ string = "1 - Tipo de prorrata [117]" ,
44+ )
45+ first_dev_activity_prorate_percent = fields .Float (
46+ string = "1 - % de prorrata [118]" ,
47+ readonly = True ,
48+ compute = "_compute_dev_activity_first_prorate_percentage" ,
49+ )
50+ second_dev_activity = fields .Char (string = "2 - Actividad desarrollada" , size = 40 )
51+ second_dev_activity_cnae_code = fields .Char (string = "2 - Código CNAE [114]" , size = 3 )
52+ second_dev_activity_operation_amount = fields .Float (
53+ string = "2 - Importe operaciones [115]" ,
54+ digits = (15 , 2 ),
55+ )
56+ second_dev_activity_operation_amount_deductible = fields .Float (
57+ string = "2 - Importe de operaciones con derecho a deducción [116]" ,
58+ digits = (15 , 2 ),
59+ )
60+ second_dev_activity_prorate_type = fields .Selection (
61+ ACTIVITY_PRORATE_TYPES ,
62+ string = "2 - Tipo de prorrata [117]" ,
63+ )
64+ second_dev_activity_prorate_percent = fields .Float (
65+ string = "2 - % de prorrata [118]" ,
66+ readonly = True ,
67+ compute = "_compute_dev_activity_second_prorate_percentage" ,
68+ )
69+ third_dev_activity = fields .Char (string = "3 - Actividad desarrollada" , size = 40 )
70+ third_dev_activity_cnae_code = fields .Char (string = "3 - Código CNAE [114]" , size = 3 )
71+ third_dev_activity_operation_amount = fields .Float (
72+ string = "3 - Importe operaciones [115]" ,
73+ digits = (15 , 2 ),
74+ )
75+ third_dev_activity_operation_amount_deductible = fields .Float (
76+ string = "3 - Importe de operaciones con derecho a deducción [116]" ,
77+ digits = (15 , 2 ),
78+ )
79+ third_dev_activity_prorate_type = fields .Selection (
80+ ACTIVITY_PRORATE_TYPES ,
81+ string = "3 - Tipo de prorrata [117]" ,
82+ )
83+ third_dev_activity_prorate_percent = fields .Float (
84+ string = "3 - % de prorrata [118]" ,
85+ readonly = True ,
86+ compute = "_compute_dev_activity_third_prorate_percentage" ,
87+ )
88+ fourth_dev_activity = fields .Char (string = "4 - Actividad desarrollada" , size = 40 )
89+ fourth_dev_activity_cnae_code = fields .Char (string = "4 - Código CNAE [114]" , size = 3 )
90+ fourth_dev_activity_operation_amount = fields .Float (
91+ string = "4 - Importe operaciones [115]" ,
92+ digits = (15 , 2 ),
93+ )
94+ fourth_dev_activity_operation_amount_deductible = fields .Float (
95+ string = "4 - Importe de operaciones con derecho a deducción [116]" ,
96+ digits = (15 , 2 ),
97+ )
98+ fourth_dev_activity_prorate_type = fields .Selection (
99+ ACTIVITY_PRORATE_TYPES ,
100+ string = "4 - Tipo de prorrata [117]" ,
101+ )
102+ fourth_dev_activity_prorate_percent = fields .Float (
103+ string = "4 - % de prorrata [118]" ,
104+ readonly = True ,
105+ compute = "_compute_dev_activity_fourth_prorate_percentage" ,
106+ )
107+ fifth_dev_activity = fields .Char (string = "5 - Actividad desarrollada" , size = 40 )
108+ fifth_dev_activity_cnae_code = fields .Char (string = "5 - Código CNAE [114]" , size = 3 )
109+ fifth_dev_activity_operation_amount = fields .Float (
110+ string = "5 - Importe operaciones [115]" ,
111+ digits = (15 , 2 ),
112+ )
113+ fifth_dev_activity_operation_amount_deductible = fields .Float (
114+ string = "5 - Importe de operaciones con derecho a deducción [116]" ,
115+ digits = (15 , 2 ),
116+ )
117+ fifth_dev_activity_prorate_type = fields .Selection (
118+ ACTIVITY_PRORATE_TYPES ,
119+ string = "5 - Tipo de prorrata [117]" ,
120+ )
121+ fifth_dev_activity_prorate_percent = fields .Float (
122+ string = "5 - % de prorrata [118]" ,
123+ readonly = True ,
124+ compute = "_compute_dev_activity_fifth_prorate_percentage" ,
125+ )
126+
127+ @api .depends (
128+ "first_dev_activity_operation_amount" ,
129+ "first_dev_activity_operation_amount_deductible" ,
130+ )
131+ def _compute_dev_activity_first_prorate_percentage (self ):
132+ for record in self :
133+ record .first_dev_activity_prorate_percent = (
134+ self ._get_dev_activity_prorate_percentage (
135+ record .first_dev_activity_operation_amount ,
136+ record .first_dev_activity_operation_amount_deductible ,
137+ )
138+ )
139+
140+ @api .depends (
141+ "second_dev_activity_operation_amount" ,
142+ "second_dev_activity_operation_amount_deductible" ,
143+ )
144+ def _compute_dev_activity_second_prorate_percentage (self ):
145+ for record in self :
146+ record .second_dev_activity_prorate_percent = (
147+ self ._get_dev_activity_prorate_percentage (
148+ record .second_dev_activity_operation_amount ,
149+ record .second_dev_activity_operation_amount_deductible ,
150+ )
151+ )
152+
153+ @api .depends (
154+ "third_dev_activity_operation_amount" ,
155+ "third_dev_activity_operation_amount_deductible" ,
156+ )
157+ def _compute_dev_activity_third_prorate_percentage (self ):
158+ for record in self :
159+ record .third_dev_activity_prorate_percent = (
160+ self ._get_dev_activity_prorate_percentage (
161+ record .third_dev_activity_operation_amount ,
162+ record .third_dev_activity_operation_amount_deductible ,
163+ )
164+ )
165+
166+ @api .depends (
167+ "fourth_dev_activity_operation_amount" ,
168+ "fourth_dev_activity_operation_amount_deductible" ,
169+ )
170+ def _compute_dev_activity_fourth_prorate_percentage (self ):
171+ for record in self :
172+ record .fourth_dev_activity_prorate_percent = (
173+ self ._get_dev_activity_prorate_percentage (
174+ record .fourth_dev_activity_operation_amount ,
175+ record .fourth_dev_activity_operation_amount_deductible ,
176+ )
177+ )
178+
179+ @api .depends (
180+ "fifth_dev_activity_operation_amount" ,
181+ "fifth_dev_activity_operation_amount_deductible" ,
182+ )
183+ def _compute_dev_activity_fifth_prorate_percentage (self ):
184+ for record in self :
185+ record .fifth_dev_activity_prorate_percent = (
186+ self ._get_dev_activity_prorate_percentage (
187+ record .fifth_dev_activity_operation_amount ,
188+ record .fifth_dev_activity_operation_amount_deductible ,
189+ )
190+ )
191+
192+ def _get_dev_activity_prorate_percentage (self , amount , amount_deductible ):
193+ if amount > 0 and amount_deductible > 0 :
194+ return math .ceil ((amount_deductible / amount ) * 100 )
195+ return 0.0
196+
23197 @api .depends (
24198 "company_id.vat_prorate_ids" ,
25199 "company_id.with_vat_prorate" ,
0 commit comments