# -*- coding: utf-8 -*- from odoo import models, fields, api, exceptions from .qr import qrfiscal from odoo.exceptions import UserError, ValidationError, Warning, RedirectWarning import base64, datetime class asw_comprobante(models.Model): _inherit = 'asw.comprobante' _order = 'id desc' name_ref = fields.Char( string="Nombre", ) referencia_corr = fields.One2many( string=u'Referencia', comodel_name='asw.referencias', inverse_name='factura', ) referencia_compras_corr = fields.One2many( string=u'Referencia de Compra', comodel_name='hgt.refcompra', inverse_name='comprobante', store=True, ) qr = fields.Binary( string=u'QR', ) afip_qr_img = fields.Binary( compute='_compute_afip_qr', string='QR Fiscal', default="QR Fiscal" ) afip_qr = fields.Char( compute='_compute_afip_qr', string='QR Fiscal' ) referencia_orig_ptv = fields.Integer(string='Punto de venta factura original') referencia_orig_numero = fields.Integer(string='Numero factura original') referencia_orig_letra = fields.Char(string='Codigo comprobante original') referencia_orig_fact = fields.Many2one(comodel_name='asw.comprobante', string='Factura referencia') @api.depends('afip_qr_img') def _compute_afip_qr(self): for rec in self: if type(rec.id) != int: rec.afip_qr_img = False return() #Si es uno nuevo no hago nada fecha_emision = rec.comp_fecha cod_afip = rec.comp_talonario.tal_tpc_id.tc_cod_afip punt_venta = rec.comp_talonario.tal_ptv_id.ptv_nro afip_aut = rec.afip_auth_code total = rec.comp_total documento_tipo = rec.comp_cliente.cli_tipo_documento.tdoc_codigo_afip numero_doc = rec.comp_cliente.cli_nro_doc numero_comprobante = rec.comp_nro #print("fsdsdfc") #import ipdb; ipdb.set_trace() try: cuit = int(rec.company_id.vat) if rec.afip_auth_code == False: rec.afip_qr_img = False continue #print(self.cae_due_qr(rec)) QR = qrfiscal(FechaEmision=rec.comp_fecha, cuit=cuit, PuntoVenta=int(punt_venta), tipoComprobante=int(cod_afip), nroCmp=numero_comprobante, importe=total, tipoDocRec=int(documento_tipo), nroDocRec=int(numero_doc), codAut=int(afip_aut)) QR.GenerarQR() rec.afip_qr_img = QR.LeerQR() rec. afip_qr = QR.URL except: rec.afip_qr_img = False def cae_due_qr(self, rec):# no me va es la fecha cae_due = ''.join( [c for c in str( rec.afip_auth_code_due or '') if c.isdigit()]) return(cae_due) #metodo p q campo de referencia escriba name #como el campo es one2many puse que tome el nombre de la primer referencia elegida @api.onchange('referencia_corr') def _onchange_name(self): first_line = self.env['asw.referencias'].search([('id', 'in', self.referencia_corr.ids)], limit=1) if first_line and first_line.name: self.name_ref = first_line.name #metodo para llamar wizard producto por precio final def abrir_wizard_ppf(self): nwizard = self.env['asw.prod_pfinal'].create({'ppf_comprobante': self.id}) return { 'name': "Carga Producto Precio Final", 'type': 'ir.actions.act_window', 'res_model': 'asw.prod_pfinal', 'view_mode': 'form', 'view_type': 'form', 'res_id': nwizard.id, 'target': 'new', } def recalcularTotal(self): self._onchange_comp_linea_facturas() def impresion_directa(self): result = self.imprimir() report_action = self.env[result['type']]._get_report_from_name(result['report_name']) pdf = report_action.render_aeroo([self.id], {'context': self.env.context}) try: #pdf = self.env.ref('hgt_produccion.remito_qweb').render_qweb_pdf(self.ids) val = {} val["tipo"] = 'impresora' val["bs64"] = base64.encodestring(pdf[0]) impresora = self.env["hw.puesto_trabajo"] #print(base64.encodestring(pdf[0])) except: raise Warning("No tiene instalado este modulo en su sistema contactese con HGT") impresora.UsarDispositivo(val) #metodo para llamar wizard correcion nro talonario def abrir_wizard_cn(self): nwizard = self.env['asw.corrector_numtal'].create({'corr_talonario': self.comp_talonario.id}) return { 'name': "Corrección de número AFIP", 'type': 'ir.actions.act_window', 'res_model': 'asw.corrector_numtal', 'view_mode': 'form', 'view_type': 'form', 'res_id': nwizard.id, 'target': 'new', } def generarNota(self): datos = {'gn_comprobante': self.id} nw = self.env['tpv.generar_nota'].create(datos) return { 'name': "Generar Nota Débito/Crédito", 'type': 'ir.actions.act_window', 'res_model': 'tpv.generar_nota', 'view_mode': 'form', 'view_type': 'form', 'res_id': nw.id, 'target': 'new', } def CorrejirFacturaSinCAE(self): if not self.env.user.has_group("tpv_correcciones.module_category_tpv_corrector_electronica_admin"): raise Warning("No tenes permiso para correjir facturas") try: electronica = self.comp_talonario.tal_es_fe except: electronica = self.comp_talonario.tal_ptv_id.ptv_type == 'electronica' if electronica == False: raise Warning("No es factura electronica, no puedo hacer nada") if not self.afip_auth_code_due == False: raise Warning("Esta factura ya fue Autorizada en AFIP, si no ves el CAE, por favor reporte a soporte") estado_actual = self.comp_estado #guardo el estado por si fue abonada if self.lista_precio_dist == False: self.lista_precio_dist = 1 self.comp_estado = "b" #la dejo en borrador self.comp_fecha = datetime.datetime.now().strftime('%Y-%m-%d') self.validar() #revalido en este punto si falla se cancela todo el proceso self.comp_estado = estado_actual #le dejo el estado original def ForzarMarcarPagado(self): if self.comp_estado in ["b","c"]: raise Warning("El comprobante tiene que estar validado y no puede estar cancelado") if self.comp_adeudado != 0.0: raise Warning("El comprobante tiene que estar saldado para marcar como pagado") self.comp_estado = "p"