feat(account.voucher): implement CFDI complemento de pagos
Add option to sign account.voucher objects also known as Complemento de Pagos or Recibo Electrónico
added 3 commits
-
eebb929b...fc673a97 - 2 commits from branch
l10n_mx:master
- cc8a3f47 - feat(account.voucher): implement CFDI complemento de pagos
-
eebb929b...fc673a97 - 2 commits from branch
@alfonso.moreno @cuauhtemoc.diaz @jose.maldonado si me pueden regalar una revisión por aquí por favor!!!
added 1 commit
- efef4921 - feat(account.voucher): implement CFDI complemento de pagos
buen dia @agb80 ya baje estos cambios, pero al momento de meterme a pagos no me despliega ni uno ya que me sale este warning
En bekook si me muestra los pagos sin ningun problema, no me sale el error que sale en SACSA Cuando habro un pago viene un boton que dice sign me supongo que ese es el boton que timbra el pago, hice un pago nuevo de una factura que ya estaba registrada, al momento de darle clic al boton sign me sale este error
2017-10-26 19:29:03,465 6968 ERROR BEKOOK_CFDI openerp.http: Exception during JSON request handling. Traceback (most recent call last): File "/home/administrador/master/parts/server/openerp/http.py", line 538, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/home/administrador/master/parts/server/openerp/http.py", line 575, in dispatch result = self._call_function(**self.params) File "/home/administrador/master/parts/server/openerp/http.py", line 311, in _call_function return checked_call(self.db, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/service/model.py", line 113, in wrapper return f(dbname, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/http.py", line 308, in checked_call return self.endpoint(*a, **kw) File "/home/administrador/master/parts/server/openerp/http.py", line 804, in __call__ return self.method(*args, **kw) File "/home/administrador/master/parts/server/openerp/http.py", line 404, in response_wrap response = f(*args, **kw) File "/home/administrador/master/parts/server/addons/web/controllers/main.py", line 948, in call_button action = self._call_kw(model, method, args, {}) File "/home/administrador/master/parts/server/addons/web/controllers/main.py", line 936, in _call_kw return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/api.py", line 363, in old_api result = method(recs, *args, **kwargs) File "/home/administrador/master/parts/l10n_mx_facturae/l10n_mx_facturae/models/account_voucher.py", line 19, in sign_voucher receipts.filtered(lambda r: not r.cfdi_id.exists()).create_cfdi() File "/home/administrador/master/parts/server/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/api.py", line 407, in new_api result = [method(rec, *args, **kwargs) for rec in self] File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/base_cfdi_mixin.py", line 88, in create_cfdi self.cfdi_id.action_validate() File "/home/administrador/master/parts/server/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/ir_attachment_facturae.py", line 439, in action_validate self.sign_cfdi_sat() File "/home/administrador/master/parts/server/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/api.py", line 407, in new_api result = [method(rec, *args, **kwargs) for rec in self] File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/ir_attachment_facturae.py", line 717, in sign_cfdi_sat record.id, config.template_xml_sign, model=record._name, File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/ir_attachment_facturae.py", line 675, in create_report_xml result = self.create_report(attach_id, report_name, model) File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/ir_attachment_facturae.py", line 659, in create_report report_name, {'model': model}, File "/home/administrador/master/parts/server/openerp/report/__init__.py", line 40, in render_report return registry['ir.actions.report.xml'].render_report(cr, uid, ids, name, data, context) File "/home/administrador/master/parts/server/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/addons/base/ir/ir_actions.py", line 159, in render_report return new_report.create(cr, uid, res_ids, data, context) File "/home/administrador/master/parts/aeroo_reports/report_aeroo/report_aeroo.py", line 824, in create res = fnct(cr, uid, ids, data, report_xml, context) File "/home/administrador/master/parts/aeroo_reports/report_aeroo/report_aeroo.py", line 750, in create_source_odt return self.create_single_pdf(cr, uid, ids, data, report_xml, context) File "/home/administrador/master/parts/aeroo_reports/report_aeroo/report_aeroo.py", line 634, in create_single_pdf return self.create_genshi_raw_report(cr, uid, ids, data, report_xml, context=context, output='raw') File "/home/administrador/master/parts/aeroo_reports/report_aeroo/report_aeroo.py", line 407, in create_genshi_raw_report basic.generate(**oo_parser.localcontext).render().encode( File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/core.py", line 184, in render return encode(generator, method=method, encoding=encoding, out=out) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/output.py", line 57, in encode return _encode(''.join(list(iterator))) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/output.py", line 577, in __call__ for event in stream: File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/core.py", line 289, in _ensure for event in stream: File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/base.py", line 618, in _include for event in stream: File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/base.py", line 558, in _flatten for kind, data, pos in stream: File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/directives.py", line 594, in __call__ info[2] = _eval_expr(self.expr, ctxt, vars) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/base.py", line 289, in _eval_expr retval = expr.evaluate(ctxt) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/eval.py", line 177, in evaluate return eval(self.code, _globals, {'__data__': data}) File "<string>", line 94, in <Expression u'o.payment_type_id.code'> File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/eval.py", line 325, in lookup_attr val = cls.undefined(key, owner=obj) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/eval.py", line 413, in undefined raise UndefinedError(key, owner=owner) UndefinedError: account.voucher(9103,) has no member named "payment_type_id"
Edited by Agustín CruzSaludos @alfonso.moreno te dejo mis comentarios para los 2 errores que estás teniendo:
- Para el error de SACSA voy a necesitar la traza del mensaje porque no tengo ni idea de porque te aparece ese mensaje o a que se refiere
- Para el error de Beekok, se me olvidó que el cambio está asociado también con este MR: http://gitlab.openpyme.mx/account/account_payment_type/merge_requests/24
Edited by Agustín Cruz@agb80 aqui te paso el LOG de SACSA cuando trato de ingresar a los pagos de cliente y me marca un error y no los despliega
2017-10-26 22:41:40,611 6968 ERROR SACSA_33 openerp.http: Exception during JSON request handling. Traceback (most recent call last): File "/home/administrador/master/parts/server/openerp/http.py", line 538, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/home/administrador/master/parts/server/openerp/http.py", line 575, in dispatch result = self._call_function(**self.params) File "/home/administrador/master/parts/server/openerp/http.py", line 311, in _call_function return checked_call(self.db, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/service/model.py", line 113, in wrapper return f(dbname, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/http.py", line 308, in checked_call return self.endpoint(*a, **kw) File "/home/administrador/master/parts/server/openerp/http.py", line 804, in __call__ return self.method(*args, **kw) File "/home/administrador/master/parts/server/openerp/http.py", line 404, in response_wrap response = f(*args, **kw) File "/home/administrador/master/parts/server/addons/web/controllers/main.py", line 884, in search_read return self.do_search_read(model, fields, offset, limit, domain, sort) File "/home/administrador/master/parts/server/addons/web/controllers/main.py", line 905, in do_search_read request.context) File "/home/administrador/master/parts/server/openerp/http.py", line 909, in proxy result = meth(cr, request.uid, *args, **kw) File "/home/administrador/master/parts/server/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/models.py", line 5175, in search_read result = self.read(cr, uid, record_ids, fields, context=read_ctx) File "/home/administrador/master/parts/server/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/models.py", line 3143, in read result = BaseModel.read(records, fields, load=load) File "/home/administrador/master/parts/server/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/models.py", line 3189, in read values[name] = field.convert_to_read(record[name], use_name_get) File "/home/administrador/master/parts/server/openerp/models.py", line 5606, in __getitem__ return self._fields[key].__get__(self, type(self)) File "/home/administrador/master/parts/server/openerp/fields.py", line 817, in __get__ self.determine_value(record) File "/home/administrador/master/parts/server/openerp/fields.py", line 919, in determine_value self.compute_value(recs) File "/home/administrador/master/parts/server/openerp/fields.py", line 875, in compute_value self._compute_value(records) File "/home/administrador/master/parts/server/openerp/fields.py", line 867, in _compute_value self.compute(records) File "/home/administrador/master/parts/server/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/administrador/master/parts/local_modules/account_voucher_attachment/models/account_voucher.py", line 56, in _has_attachment voucher.write({'has_attachment': has_attachment}) File "/home/administrador/master/parts/server/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/api.py", line 556, in new_api result = method(self._model, cr, uid, self.ids, *args, **kwargs) File "/home/administrador/master/parts/local_modules/account_voucher_disable_date/models/account_voucher.py", line 68, in write _("Date field can't be distinct to current date") except_orm: (u'\xa1Aviso!', u'La fecha no puede ser distinta a la fecha actual.')
Edited by Agustín CruzSaludos @alfonso.moreno en el log que me mandas dice que el error anda entre los módulos
account_voucher_disable_date
y/oaccount_voucher_attachment
No conozco ninguno de esos dos módulos
@agb80 es verdad esos modulo los desarollo jorge los voy a tener desinstalar
@agb80 ya pude timbrar un pago sin ningun problema pero quiero timbrar otro pero hice la factura ahora mismo y arme el pago y lo valide y lo quise timbrar pero me lanza un error si no mal recuerdo me comentaste que no se timbraban los pagos que se capturaban el mismo dia que se timbro la factura mas no se si este error salga por eso, te lo comparto
2017-10-27 23:11:43,224 4865 ERROR SACSA_33 openerp.http: Exception during JSON request handling. Traceback (most recent call last): File "/home/administrador/master/parts/server/openerp/http.py", line 538, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/home/administrador/master/parts/server/openerp/http.py", line 575, in dispatch result = self._call_function(**self.params) File "/home/administrador/master/parts/server/openerp/http.py", line 311, in _call_function return checked_call(self.db, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/service/model.py", line 113, in wrapper return f(dbname, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/http.py", line 308, in checked_call return self.endpoint(*a, **kw) File "/home/administrador/master/parts/server/openerp/http.py", line 804, in __call__ return self.method(*args, **kw) File "/home/administrador/master/parts/server/openerp/http.py", line 404, in response_wrap response = f(*args, **kw) File "/home/administrador/master/parts/server/addons/web/controllers/main.py", line 948, in call_button action = self._call_kw(model, method, args, {}) File "/home/administrador/master/parts/server/addons/web/controllers/main.py", line 936, in _call_kw return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/api.py", line 363, in old_api result = method(recs, *args, **kwargs) File "/home/administrador/master/parts/l10n_mx_facturae/l10n_mx_facturae/models/account_voucher.py", line 19, in sign_voucher receipts.filtered(lambda r: not r.cfdi_id.exists()).create_cfdi() File "/home/administrador/master/parts/server/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/api.py", line 407, in new_api result = [method(rec, *args, **kwargs) for rec in self] File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/base_cfdi_mixin.py", line 88, in create_cfdi self.cfdi_id.action_validate() File "/home/administrador/master/parts/server/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/ir_attachment_facturae.py", line 439, in action_validate self.sign_cfdi_sat() File "/home/administrador/master/parts/server/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/api.py", line 407, in new_api result = [method(rec, *args, **kwargs) for rec in self] File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/ir_attachment_facturae.py", line 717, in sign_cfdi_sat record.id, config.template_xml_sign, model=record._name, File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/ir_attachment_facturae.py", line 675, in create_report_xml result = self.create_report(attach_id, report_name, model) File "/home/administrador/master/parts/facturacion/l10n_mx_ir_attachment_facturae/models/ir_attachment_facturae.py", line 659, in create_report report_name, {'model': model}, File "/home/administrador/master/parts/server/openerp/report/__init__.py", line 40, in render_report return registry['ir.actions.report.xml'].render_report(cr, uid, ids, name, data, context) File "/home/administrador/master/parts/server/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/administrador/master/parts/server/openerp/addons/base/ir/ir_actions.py", line 159, in render_report return new_report.create(cr, uid, res_ids, data, context) File "/home/administrador/master/parts/aeroo_reports/report_aeroo/report_aeroo.py", line 824, in create res = fnct(cr, uid, ids, data, report_xml, context) File "/home/administrador/master/parts/aeroo_reports/report_aeroo/report_aeroo.py", line 750, in create_source_odt return self.create_single_pdf(cr, uid, ids, data, report_xml, context) File "/home/administrador/master/parts/aeroo_reports/report_aeroo/report_aeroo.py", line 634, in create_single_pdf return self.create_genshi_raw_report(cr, uid, ids, data, report_xml, context=context, output='raw') File "/home/administrador/master/parts/aeroo_reports/report_aeroo/report_aeroo.py", line 407, in create_genshi_raw_report basic.generate(**oo_parser.localcontext).render().encode( File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/core.py", line 184, in render return encode(generator, method=method, encoding=encoding, out=out) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/output.py", line 57, in encode return _encode(''.join(list(iterator))) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/output.py", line 577, in __call__ for event in stream: File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/core.py", line 289, in _ensure for event in stream: File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/base.py", line 618, in _include for event in stream: File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/base.py", line 598, in _flatten stream = _apply_directives(data[1], data[0], ctxt, vars) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/base.py", line 274, in _apply_directives stream = directives[0](iter(stream), directives[1:], ctxt, **vars) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/directives.py", line 401, in __call__ value = _eval_expr(self.expr, ctxt, vars) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/base.py", line 289, in _eval_expr retval = expr.evaluate(ctxt) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/eval.py", line 177, in evaluate return eval(self.code, _globals, {'__data__': data}) File "<string>", line 180, in <Expression u"invoice.payment_term.payment_method_id.code == 'PPD' or len(o.DoctosRelacionados) > 1"> File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/eval.py", line 325, in lookup_attr val = cls.undefined(key, owner=obj) File "/home/administrador/master/eggs/Genshi-0.7-py2.7-linux-i686.egg/genshi/template/eval.py", line 413, in undefined raise UndefinedError(key, owner=owner) UndefinedError: account.voucher(40889,) has no member named "DoctosRelacionados"
Edited by Agustín Cruz@agb80 los timbres de los pagos se podran cancelar como se cancela una factura timbrada?
added 1 commit
- 9805bef1 - feat(account.voucher): implement CFDI complemento de pagos
Acabo de subir un cambio adicional para el último error que me comentaste. Con respecto a lo de las cancelaciones, la verdad todavía no he pensado en ese proceso.
Supuestamente una vez que ya emitiste un recibo de pagos ya no lo puedes cancelar a menos que lo cambies por otro, pero en el sistema tendríamos que implementar un asistente adicional para reemplazarlo, ¿cómo ves si de momento simplemente le quitamos la opción de cancelarlo un pago una vez timbrado?
esa correcion quedo aqui en esta misma rama verdad? para nomas correr el buildout y bajar los cambios otra cosita @agb80 ya ves que me comentaste que a lo mejor la configuracion para que el sistema timbrara los pagos ya se en automatico o manual iba a quedar a eleccion del usuario, si añadiste esa configuracion? o si se tendra que hacer manual todo el tiempo?
otra pequeña duda @agb80 los pagos que generas el mismo dia que se hiso la factura es obligatorio no timbrarlos? o es a eleccion del contribuyente timbrarlos o no? te pregunto esto por lo que me comentaste de que los pagos que se hagan el mismo dia no se timbran si este mismo esta pagando una factura del mismo dia Saludos y que tengas un buen fin de semana!!!!
added 1 commit
- 49cb3916 - refactor(account.invoice): stop using replace on views