diff --git a/source/app/controllers/util.py b/source/app/controllers/util.py index f21dc87..a706cbd 100644 --- a/source/app/controllers/util.py +++ b/source/app/controllers/util.py @@ -2509,6 +2509,26 @@ def local_copy(files): return +def sync_files(files, auth={}): + if not MV: + return + + path_bk = _join(str(Path.home()), DIR_FACTURAS) + if not os.path.isdir(path_bk): + msg = 'No existe la carpeta: facturas' + log.error(msg) + return + + for obj, name, target in files: + path = _validar_directorios(path_bk, target) + path_file = _join(path, name) + m = 'wb' + if name.endswith('xml'): + m = 'w' + save_file(path_file, obj, m) + return + + def sync_cfdi(auth, files): local_copy(files) diff --git a/source/app/models/main.py b/source/app/models/main.py index a37e35a..774bcf1 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -5508,6 +5508,8 @@ class CfdiPagos(BaseModel): 'id': obj.id, 'row': row, } + if result['ok']: + self._sync(self, obj.id) return result def _get_related(self, values): @@ -5533,6 +5535,14 @@ class CfdiPagos(BaseModel): obj = CfdiPagos.get(CfdiPagos.id==id) folio = str(obj.folio).zfill(6) name = '{}{}_{}.xml'.format(obj.serie, folio, obj.socio.rfc) + + emisor = Emisor.select()[0] + target = emisor.rfc + '/' + str(obj.fecha)[:7].replace('-', '/') + files = ( + (obj.xml, name, target), + ) + cls._sync_files(cls, files) + return obj.xml, name def _get_not_in_xml(self, invoice, emisor): @@ -5575,14 +5585,31 @@ class CfdiPagos(BaseModel): if obj.uuid is None: return b'', name + target = emisor.rfc + '/' + str(obj.fecha)[:7].replace('-', '/') values = cls._get_not_in_xml(cls, obj, emisor) data = util.get_data_from_xml(obj, values) obj = SATFormaPago.get(SATFormaPago.key==data['pays']['FormaDePagoP']) data['pays']['formadepago'] = '{} ({})'.format(obj.name, obj.key) doc = util.to_pdf(data, emisor.rfc) + files = ( + (doc, name, target), + ) + cls._sync_files(cls, files) + return doc, name + @util.run_in_thread + def _sync(self, id): + CfdiPagos.get_file_xml(id) + CfdiPagos.get_file_pdf(id) + return + + @util.run_in_thread + def _sync_files(self, files): + util.sync_files(files) + return + @classmethod def get_values(cls, values): opt = values.pop('opt')