comprobante.py 4.15 KB
# -*- coding: utf-8 -*-
from odoo import models, fields, api, exceptions
from .qr import qrfiscal
from odoo.exceptions import UserError, ValidationError, Warning, RedirectWarning
import base64

class asw_comprobante(models.Model):
    _inherit = 'asw.comprobante'

    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'
    )

    @api.depends('afip_qr_img')
    def _compute_afip_qr(self):
        for rec in self:
            #import ipdb; ipdb.def_colors='NoColor'; ipdb.set_trace()
            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)