comprobante.py
6.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# -*- 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"