2
2
# License AGPL-3 or later (http://www.gnu.org/licenses/agpl)
3
3
4
4
import re
5
- from datetime import datetime
5
+ from datetime import datetime , timedelta
6
6
7
7
from erpbrasil .transmissao import TransmissaoSOAP
8
8
from lxml import objectify
@@ -37,6 +37,8 @@ class DFeMonitor(models.Model):
37
37
38
38
last_nsu = fields .Char (related = "company_id.last_nsu" , readonly = False )
39
39
40
+ max_nsu = fields .Char (readonly = True )
41
+
40
42
last_query = fields .Datetime (string = "Last query" )
41
43
42
44
use_cron = fields .Boolean (
@@ -109,10 +111,17 @@ def _document_distribution(self):
109
111
if self .last_nsu and self .last_nsu .isdigit ()
110
112
else "000000000000000"
111
113
)
112
- maxNSU = ""
114
+ maxNSU = self .max_nsu or ""
115
+ if last_nsu == maxNSU :
116
+ last_query = self .last_query or fields .Datetime .now ()
117
+ time_difference = fields .Datetime .now () - last_query
118
+ if time_difference < timedelta (hours = 1 ):
119
+ self .message_post (body = _ ("Waiting 1 hour before making a new request." ))
120
+ return
121
+
113
122
last_query = fields .Datetime .now ()
114
123
115
- while maxNSU != last_nsu :
124
+ while True :
116
125
try :
117
126
result = self ._get_processor ().consultar_distribuicao (
118
127
cnpj_cpf = re .sub ("[^0-9]" , "" , self .company_id .cnpj_cpf ),
@@ -125,18 +134,21 @@ def _document_distribution(self):
125
134
break
126
135
127
136
last_nsu = result .resposta .ultNSU
128
- last_query = fields .Datetime .now ()
137
+ if not maxNSU :
138
+ maxNSU = result .resposta .maxNSU
129
139
130
140
if not self .validate_distribution_response (result ):
131
141
break
132
142
133
143
self ._process_distribution (result )
144
+ if last_nsu == maxNSU :
145
+ break
134
146
135
- maxNSU = result .resposta .maxNSU
136
147
self .write (
137
148
{
138
149
"last_nsu" : last_nsu ,
139
150
"last_query" : last_query ,
151
+ "max_nsu" : maxNSU ,
140
152
}
141
153
)
142
154
0 commit comments