Commit 3e2b4bf7 by Juan

Correccion de asociacion factura factura

1 parent e91af91e
...@@ -7,4 +7,5 @@ from . import gastosmobil ...@@ -7,4 +7,5 @@ from . import gastosmobil
from . import currency from . import currency
from . import pago_discriminado from . import pago_discriminado
from . import cheque from . import cheque
from . import valor
\ No newline at end of file \ No newline at end of file
from . import valor
from . import cta_cte
\ No newline at end of file \ No newline at end of file
# -*- 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 res_currency(models.Model):
_inherit = 'asw.cta_cte'
"""Heredo esta classe para modificar el comportamiento de la cuenta corriente
No quiero que se afecte Factura - Factura"""
@api.multi
def afectar(self, id_afectada=False):
""" si se pasa un id_afectada la afectacion se realiza sobre este
de otra manera se afecta a todos los comprobantes en orden de aparicion """
afectaciones = []
if (id_afectada is not False and isinstance(id_afectada, int)):
# Solo debe afectar por el monto adeudado del comprobante
cc_afectadora = self.search([('cc_comprobante', '=', id_afectada)])
afectacion = self.genera_afectacion(cc_afectadora)
afectaciones.append(afectacion)
elif (self.cc_cliente.id is False):
return
fac = ["fac","rem","rve","ped","pre","inv"]#Esto cambio el metodo de reintegro hay q pensar q hacemos
res = ["rec","rem","rve","ped","pre","inv"]
blokear = [] #Por puta seguridad
if self.cc_comprobante.comp_talonario.tal_menu == "fac":
blokear = fac # Si es factura blokea factura
else:
blokear = res # si no es factura es recibo blokero recibos
cc_cliente = self.search([('cc_cliente','=', self.cc_cliente.id),
('cc_tipo_relacionado','!=', self.cc_tipo_relacionado),
('cc_monto_adeudado','!=', 0)])
for cc_afectada in cc_cliente:
if cc_afectada.cc_comprobante.comp_talonario.tal_menu in blokear:#si esta en la lista me lo salto
break
cc_afectada._compute_cc_monto_adeudado()
if(self.cc_monto_adeudado != 0):
afectacion = self.genera_afectacion(cc_afectada)
afectaciones.append(afectacion)
else:
break
return afectaciones
\ No newline at end of file \ No newline at end of file
...@@ -50,6 +50,9 @@ class hgt_cobro_multiple(models.Model): ...@@ -50,6 +50,9 @@ class hgt_cobro_multiple(models.Model):
nota = fields.Text(string='nota',readonly=True, nota = fields.Text(string='nota',readonly=True,
compute='_compute_nota') compute='_compute_nota')
nota_fija = fields.Char(string='Nota Fija')
pcw_referencia = fields.Char( pcw_referencia = fields.Char(
string=u'Referencia', string=u'Referencia',
...@@ -81,7 +84,7 @@ class hgt_cobro_multiple(models.Model): ...@@ -81,7 +84,7 @@ class hgt_cobro_multiple(models.Model):
# Formas de pago # Formas de pago
pcw_chq_emitidos = fields.Many2many( pcw_chq_emitidos = fields.Many2many(
comodel_name='asw.cheque', comodel_name='asw.cheque',
relation='pago_discriminado_chq_emitido', #ya lo edite relation='pago_discriminado_chq_emitido_pagos', #ya lo edite
column1='asw_cheque_id', column1='asw_cheque_id',
column2='asw_cliente_id', column2='asw_cliente_id',
string='Cheques Propios' string='Cheques Propios'
...@@ -94,7 +97,7 @@ class hgt_cobro_multiple(models.Model): ...@@ -94,7 +97,7 @@ class hgt_cobro_multiple(models.Model):
pcw_chq_terceros = fields.Many2many( pcw_chq_terceros = fields.Many2many(
comodel_name='asw.cheque', comodel_name='asw.cheque',
relation='pago_discriminado_chq_terceros', #ya lo edite relation='pago_discriminado_chq_terceros_pagos', #ya lo edite
column1='asw_cheque_id', column1='asw_cheque_id',
column2='asw_cliente_id', column2='asw_cliente_id',
string='Cheques Propios', string='Cheques Propios',
...@@ -102,7 +105,7 @@ class hgt_cobro_multiple(models.Model): ...@@ -102,7 +105,7 @@ class hgt_cobro_multiple(models.Model):
pcw_transferencias_emitidas = fields.Many2many( pcw_transferencias_emitidas = fields.Many2many(
comodel_name='asw.valores', comodel_name='asw.valores',
relation='pago_discriminado_transferencia_emitida', #Ya lo edite relation='pago_discriminado_transferencia_emitida_pagos', #Ya lo edite
column1='pago_cliente_id', column1='pago_cliente_id',
column2='asw_valores_id', column2='asw_valores_id',
string='Transferencias Emitidas' string='Transferencias Emitidas'
...@@ -110,7 +113,7 @@ class hgt_cobro_multiple(models.Model): ...@@ -110,7 +113,7 @@ class hgt_cobro_multiple(models.Model):
pcw_tarjetas = fields.Many2many( pcw_tarjetas = fields.Many2many(
comodel_name='asw.valores', comodel_name='asw.valores',
relation='hgt_pago_discriminado_tarjeta', #ya lo edite relation='hgt_pago_discriminado_tarjeta_pagos', #ya lo edite
column1='pago_cliente_id', column1='pago_cliente_id',
column2='asw_valores_id', column2='asw_valores_id',
string='Tarjetas' string='Tarjetas'
...@@ -118,7 +121,7 @@ class hgt_cobro_multiple(models.Model): ...@@ -118,7 +121,7 @@ class hgt_cobro_multiple(models.Model):
pcw_retenciones = fields.Many2many( pcw_retenciones = fields.Many2many(
comodel_name='asw.valores', comodel_name='asw.valores',
relation='pago_discriminado_retencion',#ya lo edite relation='pago_discriminado_retencion_pagos',#ya lo edite
column1='pago_cliente_id', column1='pago_cliente_id',
column2='asw_valores_id', column2='asw_valores_id',
string='Retenciones' string='Retenciones'
...@@ -136,6 +139,7 @@ class hgt_cobro_multiple(models.Model): ...@@ -136,6 +139,7 @@ class hgt_cobro_multiple(models.Model):
) )
comprobantes = fields.Many2many(comodel_name='asw.comprobante', string='Comprobantes') comprobantes = fields.Many2many(comodel_name='asw.comprobante', string='Comprobantes')
pcw_total_balance = fields.Monetary( pcw_total_balance = fields.Monetary(
string='Diferencia', string='Diferencia',
...@@ -195,6 +199,12 @@ class hgt_cobro_multiple(models.Model): ...@@ -195,6 +199,12 @@ class hgt_cobro_multiple(models.Model):
record.compute_nota() record.compute_nota()
def compute_nota(self): def compute_nota(self):
if self.nota_fija != False:
self.nota = self.nota_fija
return(None)
self.nota = self.calcular_nota()
def calcular_nota(self):
context = self.env.context context = self.env.context
Texto = "Facturas de proveedores a pagar:" Texto = "Facturas de proveedores a pagar:"
Total = 0 Total = 0
...@@ -202,8 +212,8 @@ class hgt_cobro_multiple(models.Model): ...@@ -202,8 +212,8 @@ class hgt_cobro_multiple(models.Model):
Total = Total + factura.comp_adeudado Total = Total + factura.comp_adeudado
Texto = f"{Texto}\n{factura.display_name} {factura.comp_adeudado}" Texto = f"{Texto}\n{factura.display_name} {factura.comp_adeudado}"
Texto = f"{Texto}\nTotal {Total}".replace(".",self.PuntoDecimal()) Texto = f"{Texto}\nTotal {Total}".replace(".",self.PuntoDecimal())
self.nota = Texto
#print(self.nota) #print(self.nota)
return(Texto)
@api.depends('pcw_efectivo','pcw_tarjetas','pcw_transferencias_emitidas','pcw_retenciones','pcw_chq_emitidos','pcw_chq_terceros') @api.depends('pcw_efectivo','pcw_tarjetas','pcw_transferencias_emitidas','pcw_retenciones','pcw_chq_emitidos','pcw_chq_terceros')
...@@ -225,6 +235,7 @@ class hgt_cobro_multiple(models.Model): ...@@ -225,6 +235,7 @@ class hgt_cobro_multiple(models.Model):
def _calcular_diferencia(self): def _calcular_diferencia(self):
total = self.pcw_total_pagar - self.pcw_total #+ self.pcw_retencion_recibida total = self.pcw_total_pagar - self.pcw_total #+ self.pcw_retencion_recibida
self.pcw_total_balance = total self.pcw_total_balance = total
@api.depends('comprobantes') @api.depends('comprobantes')
def _calcular_pago(self): def _calcular_pago(self):
total = 0 total = 0
...@@ -236,14 +247,14 @@ class hgt_cobro_multiple(models.Model): ...@@ -236,14 +247,14 @@ class hgt_cobro_multiple(models.Model):
@api.multi @api.multi
def pago_facturas_masivo(self): def pago_facturas_masivo(self):
context = self.env.context facturas = self.comprobantes
active_ids = context.get('active_ids') self.FijarNota()#Acienta el estado del detalle
facturas = self.env['asw.comprobante'].search([('id', 'in', active_ids)],order="id asc")
if len(facturas) == 0:#no hay facturas seleccionadas if len(facturas) == 0:#no hay facturas seleccionadas
raise Warning("No se seleccionaron facturas") raise Warning("No se seleccionaron facturas")
resivo = self.CrearValidarResivoMultiple() resivo = self.CrearValidarResivoMultiple()#revisado
if self.pcw_total != resivo.comp_total: if self.pcw_total != resivo.comp_total:#Error en el calculo
raise Warning("Error al procesar el pago informar a soporte") raise Warning("Error al procesar el pago informar a soporte")
##############Aca terminan las validaciones y empesamos a asignaR############################################
total = self.pcw_total total = self.pcw_total
for factura in facturas: for factura in facturas:
if factura.comp_estado in ["c","b"]: if factura.comp_estado in ["c","b"]:
...@@ -273,6 +284,7 @@ class hgt_cobro_multiple(models.Model): ...@@ -273,6 +284,7 @@ class hgt_cobro_multiple(models.Model):
def generar_recibo(self): def generar_recibo(self):
resivo = self.pago_facturas_masivo() resivo = self.pago_facturas_masivo()
self.ValoresEnCajas(resivo) self.ValoresEnCajas(resivo)
self.estado = "aprobado"
return { return {
'view_type': 'form', 'view_type': 'form',
'view_mode': 'form', 'view_mode': 'form',
...@@ -311,20 +323,22 @@ class hgt_cobro_multiple(models.Model): ...@@ -311,20 +323,22 @@ class hgt_cobro_multiple(models.Model):
def CrearValidarResivoMultiple(self,tipo="r"): def CrearValidarResivoMultiple(self,tipo="r"):
talonario = self.env['asw.talonario'].search([('tal_menu','=','rec'),('tal_tipo','=',tipo),('tal_mov_caja', '!=', 'sn')], limit=1) talonario = self.env['asw.talonario'].search([('tal_menu','=','rec'),
('tal_tipo','=',tipo),('tal_mov_caja', '!=', 'sn'),
("tal_codigo","!=","OP")], limit=1)
self.pcw_recibo = self.env['asw.comprobante'].generar_comprobante( self.pcw_recibo = self.env['asw.comprobante'].generar_comprobante(
talonario, talonario,
self.pcw_cliente, self.pcw_cliente,
self.pcw_total, self.pcw_total,
self.pcw_referencia self.pcw_referencia
) )
self.agregar_efectivo() self.agregar_efectivo()#OK
self.agregar_retencion() self.agregar_retencion()#OK
self.agregar_cheques() self.agregar_cheques()#OK
self.agregar_transferencias_recibidas() self.agregar_transferencias_emitidas()#ok 350
self.agregar_tarjetas() self.agregar_tarjetas()#OK
self.pcw_recibo._onchange_comp_linea_facturas() self.pcw_recibo._onchange_comp_linea_facturas()
self.pcw_recibo.realizar_validaciones() self.pcw_recibo.realizar_validaciones()#
self.pcw_recibo._onchange_talonario() self.pcw_recibo._onchange_talonario()
return(self.pcw_recibo) return(self.pcw_recibo)
...@@ -342,14 +356,17 @@ class hgt_cobro_multiple(models.Model): ...@@ -342,14 +356,17 @@ class hgt_cobro_multiple(models.Model):
def agregar_cheques(self):# aca cambia la cosa, lo voy a usar como cheque propio def agregar_cheques(self):# aca cambia la cosa, lo voy a usar como cheque propio
if(len(self.pcw_chq_emitidos) > 0): if(len(self.pcw_chq_emitidos) > 0):
cheque_recibido = self.env['asw.tipos_valores'].search([('tv_tipo', '=', 'che')]) cheque_propio = self.env['asw.tipos_valores'].search([('tv_tipo', '=', 'che')])
for cheque in self.pcw_chq_emitidos: for cheque in self.pcw_chq_emitidos: #Cheques propios
self.pcw_recibo.agregar_cheque(cheque, cheque_recibido, self.caja_cheque.id) self.pcw_recibo.agregar_cheque(cheque, cheque_propio, False)#No afecta caja despues manejo
if(len(self.pcw_chq_terceros) > 0):
def agregar_transferencias_recibidas(self): cheque_terceros = self.env['asw.tipos_valores'].search([('tv_tipo', '=', 'che')])
transferencia_recibida = self.env['asw.tipos_valores'].search([('tv_tipo','=','trr')]) for cheque in self.pcw_chq_terceros: #Cheques terceros
self.pcw_recibo.agregar_cheque(cheque, cheque_terceros, False)#No afecta caja despues manejo
self.pcw_transferencias_recibidas.write({'val_comprobante' : self.pcw_recibo.id, 'val_tipo' : transferencia_recibida.id})
def agregar_transferencias_emitidas(self):
transferencia_recibida = self.env['asw.tipos_valores'].search([('tv_tipo','=','tre')],limit=1)
self.pcw_transferencias_emitidas.write({'val_comprobante' : self.pcw_recibo.id, 'val_tipo' : transferencia_recibida.id})
def agregar_tarjetas(self): def agregar_tarjetas(self):
tarjeta_credito = self.env['asw.tipos_valores'].search([('tv_tipo','=','ta'),('tv_descripcion','ilike','credito')]) tarjeta_credito = self.env['asw.tipos_valores'].search([('tv_tipo','=','ta'),('tv_descripcion','ilike','credito')])
...@@ -388,9 +405,9 @@ class hgt_cobro_multiple(models.Model): ...@@ -388,9 +405,9 @@ class hgt_cobro_multiple(models.Model):
tarjetas.append(valor) tarjetas.append(valor)
#Asocio segun el tipo de valor #Asocio segun el tipo de valor
self.MoverValores(efectivo, self.caja_efectivo.id) self.MoverValores(efectivo, self.caja_efectivo.id)
self.MoverValores(cheques, self.caja_cheque.id) #self.MoverValores(cheques, self.caja_cheque.id)
self.MoverValores(transferencias) #self.MoverValores(transferencias)
self.MoverValores(tarjetas) #self.MoverValores(tarjetas)
def MoverValores(self, valores, caja_destino_id=True): def MoverValores(self, valores, caja_destino_id=True):
...@@ -398,8 +415,8 @@ class hgt_cobro_multiple(models.Model): ...@@ -398,8 +415,8 @@ class hgt_cobro_multiple(models.Model):
for valor in valores: for valor in valores:
if caja_destino_id == True: if caja_destino_id == True:
caja_destino_id = valor.valor_caja_id.id caja_destino_id = valor.valor_caja_id.id
if caja_destino_id == False: #if caja_destino_id == False:
raise Warning("No esta definida una de las cajas, todos los valores deven tener cajas asignadas") #raise Warning("No esta definida una de las cajas, todos los valores deven tener cajas asignadas")
valor.valor_caja_id.caja_valor_ids = [(3,valor.id,)]#elimino el valor de la caja actual valor.valor_caja_id.caja_valor_ids = [(3,valor.id,)]#elimino el valor de la caja actual
valor.valor_caja_id = caja_destino_id #cambio la caja en el valor valor.valor_caja_id = caja_destino_id #cambio la caja en el valor
valor.valor_caja_id.caja_valor_ids = [(4,valor.id,)]#agrego el valor a la caja destino valor.valor_caja_id.caja_valor_ids = [(4,valor.id,)]#agrego el valor a la caja destino
...@@ -453,10 +470,18 @@ class hgt_cobro_multiple(models.Model): ...@@ -453,10 +470,18 @@ class hgt_cobro_multiple(models.Model):
cheques.pop cheques.pop
self.pcw_chq_terceros = False self.pcw_chq_terceros = False
self.env.cr.commit() self.env.cr.commit()
def FijarNota(self):
"""esta funcion debe ser llamada antes de realizar la gestion de recibo"""
self.nota_fija = self.calcular_nota()
@api.multi @api.multi
def write(self, values): def write(self, values):
name = f"ERO {str(self.id).zfill(5)}"#Genero el codigo del pago name = f"ERO {str(self.id).zfill(5)}"#Genero el codigo del pago
values["name"] = name values["name"] = name
return super(hgt_cobro_multiple, self).write(values) return super(hgt_cobro_multiple, self).write(values)
def cancel(self):
self.estado = "cancelado"
\ No newline at end of file \ No newline at end of file
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
<field name="pcw_referencia" /> <field name="pcw_referencia" />
<field name="pcw_efectivo" colspan='2'/> <field name="pcw_efectivo" colspan='2'/>
<field name="caja_efectivo"/> <field name="caja_efectivo"/>
<field name="pcw_recibo" readonly="1"/>
</group> </group>
<group string="Detalles" > <group string="Detalles" >
<field name="nota" nolabel="1"/> <field name="nota" nolabel="1"/>
...@@ -106,8 +107,8 @@ ...@@ -106,8 +107,8 @@
</group> </group>
<h4>Nota 4: La diferencia si es negativa implica que se esta abonando más que lo adeudado en las facturas seleccionadas impactando un saldo a favor de la empresa en la cta cte del proveedor, de existir facturas pendientes no seleccionadas dicho saldo se aplicará a la más vieja</h4> <h4>Nota 4: La diferencia si es negativa implica que se esta abonando más que lo adeudado en las facturas seleccionadas impactando un saldo a favor de la empresa en la cta cte del proveedor, de existir facturas pendientes no seleccionadas dicho saldo se aplicará a la más vieja</h4>
<footer> <footer>
<button name="generar_recibo" string="Generar Recibo" type="object" class="btn btn-success"/> <button name="generar_recibo" string="Generar Recibo" type="object" class="btn btn-success" attrs="{ 'invisible':[('estado', '!=', 'borrador')]}"/>
<button special="cancel" string="Cancel"/> <button special="cancel" string="Cancel" attrs="{ 'invisible':[('estado', '=', 'cancelado')]}"/>
</footer> </footer>
</form> </form>
</field> </field>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!