Commit ff983ac4 by Maria Agustina

casi terminado cobranzas

1 parent ff31cd4e
......@@ -35,6 +35,7 @@
'wizard/interes_negociado.xml',
'wizard/validar_nd.xml',
'wizard/pago_deuda_wizzard.xml',
'wizard/confirmar_cancelacion_wizzard_vista.xml',
'views/menu.xml',
],
# only loaded in demonstration mode
......
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
......@@ -57,6 +57,31 @@ class vnt_cobros(models.Model):
compute="_compute_co_modo_elegido",
)
co_facturas = fields.Many2many(
string='Facturas',
comodel_name='asw.comprobante',
ondelete='restrict',
)
co_notasdeb = fields.Many2many(
string='Notas Débito',
comodel_name='asw.comprobante',
ondelete='restrict',
)
co_recibos = fields.Many2many(
string='Recibos de Cobro',
comodel_name='asw.comprobante',
ondelete='restrict',
)
co_usuario_cancelacion = fields.Many2one(
string=u'Cancelado por',
comodel_name='res.users',
ondelete='set null',
copy=False
)
def seleccionar_todo(self):
for lin in self.co_lin_deuda:
lin.ld_select = True
......@@ -98,9 +123,12 @@ class vnt_cobros(models.Model):
self.co_deucarg = True
#recupero comprobantes de venta, adeudados, con el cliente seleccionado
comp_venta_adeud = self.env['asw.comprobante'].search([('comp_talonario.tal_menu','=','fac'),('comp_tipo_comp','=','e'),('comp_estado', '=', 'a'),('comp_cliente', '=', self.co_cliente.id)])
lista = []
if comp_venta_adeud:
for comp in comp_venta_adeud:
nva_linea = self.env['vnt.linea_deuda'].create({'ld_factura': comp.id, 'ld_cobros': self.id})
lista.append(comp.id)
self.co_facturas = lista
else:
raise UserError("No hay deudas registradas del cliente seleccionado")
......@@ -124,6 +152,7 @@ class vnt_cobros(models.Model):
self.co_estado = 'a'
def procesar_notas(self):
lista = []
for li in self.co_lin_deuda:
if li.ld_select:
#obtener total. si hay interes se hace nota de debito
......@@ -138,28 +167,34 @@ class vnt_cobros(models.Model):
tal_letra = tal_original.tal_letra
tal_pto = tal_original.tal_pto_vta
talonario = self.env['asw.talonario'].search([('tal_pto_vta','=',tal_pto),('tal_letra','=', tal_letra),('tal_codigo','=','NDEB')])
referencia = 'Nota de débito del comprobante : ' + fac.comp_talonario.tal_codigo + "/" +fac.comp_nro_letras
nota_debito = self.generar_comprobante(
talonario = talonario,
cliente = fac.comp_cliente,
total = total_int,
referencia = referencia,
comp_estado = fac.comp_estado,
comp_nro_letras = fac.comp_nro_letras,
comp_moneda = fac.comp_moneda.id,
#comp_nota_credito = fac.id,
)
#crear lineas nd
inter_prod = self.env['asw.producto'].search([('prod_descripcion','=','INTERES')])
linea_comp = self.env['asw.linea_comprobante'].create({
'lcp_producto': inter_prod.id,
'lcp_comprobante': nota_debito.id,
'lcp_precio': total_int,
'lcp_importe': total_int,
})
#asociar nd a linea deuda tb
li.ld_nd = nota_debito.id
if talonario:
referencia = 'Nota de débito del comprobante : ' + fac.comp_talonario.tal_codigo + "/" +fac.comp_nro_letras
nota_debito = self.generar_comprobante(
talonario = talonario,
cliente = fac.comp_cliente,
total = total_int,
referencia = referencia,
comp_estado = fac.comp_estado,
comp_nro_letras = fac.comp_nro_letras,
comp_moneda = fac.comp_moneda.id,
#comp_nota_credito = fac.id,
)
#crear lineas nd
inter_prod = self.env['asw.producto'].search([('prod_descripcion','=','INTERES')])
linea_comp = self.env['asw.linea_comprobante'].create({
'lcp_producto': inter_prod.id,
'lcp_comprobante': nota_debito.id,
'lcp_precio': total_int,
'lcp_importe': total_int,
})
#asociar nd a linea deuda tb
li.ld_nd = nota_debito.id
lista.append(nota_debito.id)
else:
raise UserError('No existe talonario para la Nota de Débito correspondiente. Créelo o diríjase a soporte para que lo haga, y vuelva a este menú')
self.co_notasdeb = lista
self.co_estado = 'pr'
......@@ -186,80 +221,38 @@ class vnt_cobros(models.Model):
'target': 'new',
}
# #paga factura original
# fac_id = li.ld_factura.id
# fac = self.env['asw.comprobante'].search([('id', '=', fac_id)])
# fac.comp_estado = 'p'
# #obtener total. si hay interes se hace nota de debito
# total_int = li.ld_interes
# if (total_int != 0.0):
# #crear notas de debito
# tal_original = fac.comp_talonario
# tal_letra = tal_original.tal_letra
# tal_pto = tal_original.tal_pto_vta
# referencia = 'Nota de débito del comprobante : ' + fac.comp_talonario.tal_codigo + "/" +fac.comp_nro_letras
# #crear talonario con mismo pto de venta y letra
# tipo_comprobante = self.env['asw.tipo_comprobante'].search([('tc_descripcion', '=', 'NOTA DE DEBITO A')])
# talonario_nvo = self.env['asw.talonario'].create({
# 'tal_pto_vta': tal_pto,
# 'tal_letra': tal_letra,
# 'tal_codigo': "NDEB"+ tal_original.tal_codigo + str(self.id),
# 'tal_descripcion': "NDEB-" + tal_original.tal_descripcion + str(self.id),
# 'tal_tipo': tal_original.tal_tipo,
# 'tal_menu': tal_original.tal_menu,
# })
# talonario_nvo.tal_tpc_id = tipo_comprobante.id
# contra_comprobante = self.generar_comprobante(
# talonario = talonario_nvo,
# cliente = fac.comp_cliente,
# total = total_int,
# referencia = referencia,
# comp_estado = fac.comp_estado,
# comp_nro_letras = fac.comp_nro_letras,
# comp_moneda = fac.comp_moneda.id,
# comp_nota_credito = fac.id,
# )
# contra_comprobante.comp_fecha_validacion = datetime.today()
# #crear lineas nd
# linea_comp = self.env['asw.linea_comprobante'].create({
# 'lcp_descripcion_producto': referencia,
# 'lcp_comprobante': contra_comprobante.id,
# 'lcp_importe': total_int
# })
# # contra_comprobante.comp_linea_facturas = (4,linea_comp.id)
# #asociar nd a factura original
# fac.write({
# 'comp_nota_credito' : contra_comprobante.id
# })
# #asociar nd a linea deuda tb
# li.ld_nd = contra_comprobante.id
# self.co_estado = 'p'
def cancelar(self):
self.co_estado = 'c'
#y marcar comprobantes como adeudados de nuevo
#cancelar notas de debito
lista = []
lista_f = []
for li in self.co_lin_deuda:
if li.ld_select:
fac_id = li.ld_factura.id
fac = self.env['asw.comprobante'].search([('id', '=', fac_id)])
fac.comp_estado = 'a'
if li.ld_nd:
nd_id = li.ld_nd.id
nd = self.env['asw.comprobante'].search([('id', '=', nd_id)])
nd.comp_fecha_cancelacion = datetime.today()
#lista tiene todas las nd
lista.append(li.ld_nd.id)
lista_f.append(li.ld_factura.id)
datos = {'cc_cliente': self.co_cliente.id,
'cc_total': self.co_total,
'cc_cobro': self.id}
nvo_w = self.env['vnt.confirmar_cancelacion'].create(datos)
nvo_w.cc_notas = lista
nvo_w.cc_facturas = lista_f
return {
'type': 'ir.actions.act_window',
'res_model': 'vnt.confirmar_cancelacion',
'view_mode': 'form',
'view_type': 'form',
'res_id': nvo_w.id,
'target': 'new',
}
def cancelar_cobro(self):
self.co_estado = 'c'
self.co_usuario_cancelacion = self.env.uid
#cancelar recibo
recibo = self.co_recibos.filtered(lambda t: t.comp_talonario.tal_menu == 'rec')
recibo.comp_fecha_cancelacion = datetime.today()
#hay que crear NC
def cobrar_todo(self):
for lin in self.co_lin_deuda:
......
......@@ -16,4 +16,10 @@ class asw_comprobante(models.Model):
"type": "ir.actions.do_nothing",
}
def cancelarNotaD(self):
self.cancelar()
return {
"type": "ir.actions.do_nothing",
}
......@@ -149,6 +149,9 @@ class vnt_linea_deuda(models.Model):
suma += self.number_of_days_in_month(anio, m)
return suma
def pagar_facturas(self):
self.ld_factura.comp_fecha_validacion = fields.Datetime.now()
return (True)
# def cobrar_todo(self):
# self.ld_cobro = 'todo'
......
......@@ -21,9 +21,9 @@
<field name="arch" type="xml">
<tree>
<field name="co_cliente" />
<field name="co_total_deuda" sum="Total Deuda Facturas"/>
<field name="co_total_interes" sum="Total Interés"/>
<field name="co_total" sum="Total"/>
<field name="co_total_deuda"/>
<field name="co_total_interes" />
<field name="co_total" />
</tree>
</field>
</record>
......@@ -49,15 +49,18 @@
<field name="co_estado" widget="statusbar"/>
<field invisible="1" name="co_deucarg" />
</header>
<group col="2" string="Cliente y resumen">
<field colspan="1" nolabel="1" name="co_cliente" attrs="{ 'readonly' : [('co_deucarg','=',True)]}" />
<group>
<field name="co_usuario_cancelacion" attrs="{'invisible':[('co_estado','not in',['c'])]}"/>
</group>
<group col="2" string="Cliente y resumen">
<field colspan="1" nolabel="1" name="co_cliente" attrs="{ 'readonly' : [('co_deucarg','=',True),('co_estado','in',['p','c','pr'])]}" />
<div colspan="1"></div>
<field colspan="1" nolabel="1" name="co_resumen" attrs="{ 'readonly' : [('co_deucarg','=',True)]}" />
<field colspan="1" nolabel="1" name="co_resumen" attrs="{ 'readonly' : [('co_deucarg','=',True),('co_estado','in',['p','c'])]}" />
</group>
<notebook colspan="4">
<page string="Deudas">
<field name="co_modo_elegido" />
<button type="object" class="btn btn-info" style="margin:5px;" name="seleccionar_todo" string="Seleccionar todo" attrs="{'invisible':[('co_estado','in',['a','p','pr','c']),('co_modo_elegido','=',True)]}" />
<button type="object" class="btn btn-info" style="margin:5px;" name="seleccionar_todo" string="Seleccionar todo" attrs="{'invisible':[('co_estado','in',['a','p','pr','c']),('co_modo_elegido','=',True)], 'readonly':[('co_estado','in',['p','c'])]}" />
<button type="object" class="btn btn-primary" style="margin:5px;" name="cobrar_todo" string="Cobrar Todo" attrs="{'invisible':[('co_modo_elegido','=',True)]}" />
<button type="object" class="btn btn-primary" style="margin:5px;" name="cobrar_negociado" string="Cobro Negociado" attrs="{'invisible':[('co_modo_elegido','=',True)]}" />
<button type="object" class="btn btn-primary" style="margin:5px;" name="interes_perdido" string="Interés Perdido" attrs="{'invisible':[('co_modo_elegido','=',True)]}" />
......@@ -80,8 +83,12 @@
</tree>
</field>
</page>
<page string="Comprobantes">
<field name="co_facturas" readonly="1" />
</page>
</notebook>
<group name='total' class="oe_subtotal_footer oe_right">
<group name='total' class="oe_subtotal_footer oe_right" attrs="{'invisible':[('co_estado','in',['p','c'])]}">
<field name="co_total_deuda" readonly="1" />
<field name="co_total_interes" readonly="1" />
<field name="co_total" readonly="1" />
......
from . import interes_negociado
from . import validar_nd
from . import pago_deuda_wizzard
from . import confirmar_cancelacion_wizzard
No preview for this file type
No preview for this file type
No preview for this file type
# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.exceptions import UserError
from datetime import datetime
class vnt_confirmar_cancelacion(models.TransientModel):
_name = 'vnt.confirmar_cancelacion'
_description = 'Confirmar Cancelación'
_inherit = ['asw.generador_comprobante', 'asw.action.manager']
cc_notas = fields.Many2many(
string=u"Nota Débito",
comodel_name='asw.comprobante',
)
cc_facturas = fields.Many2many(
string=u"Facturas Originales",
comodel_name='asw.comprobante',
)
cc_cobro = fields.Many2one(
string='Cobro',
comodel_name='vnt.cobros',
)
def cancelar(self):
self.chequear_cancelacion_notas()
self.cancelar_facturas()
self.crear_notacred()
self.cc_cobro.cancelar_cobro()
def cancelar_facturas(self):
for fac in self.cc_facturas:
fac.comp_estado = 'a'
def chequear_cancelacion_notas(self):
for nota in self.cc_notas:
if nota.comp_fecha_cancelacion == False:
raise UserError("Todas las notas deben ser canceladas para continuar con la cancelación")
def crear_notacred(self):
comprobante = self.cc_cobro.co_recibos.filtered(lambda t: t.comp_talonario.tal_menu == 'rec')
referencia = 'Reintegro del comprobante : ' + comprobante.comp_talonario.tal_codigo + "/" +comprobante.comp_nro_letras
talonario = self.env['asw.talonario'].search([('tal_pto_vta','=',comprobante.comp_talonario.tal_pto_vta),('tal_letra','=', comprobante.comp_talonario.tal_letra),('tal_codigo','=','NCRED')])
if talonario:
contra_comprobante = self.generar_comprobante(
talonario = talonario,
cliente = comprobante.comp_cliente,
total = comprobante.comp_total,
referencia = referencia,
comp_estado = comprobante.comp_estado,
comp_nro_letras = comprobante.comp_nro_letras,
comp_subtotal = comprobante.comp_subtotal,
comp_moneda = comprobante.comp_moneda.id,
comp_nota_credito = comprobante.id
)
contra_comprobante.comp_fecha = datetime.today()
contra_comprobante.duplicar_lineas(comprobante)
comprobante.write({
'comp_nota_credito' : contra_comprobante.id
})
else:
raise UserError('No existe talonario para la Nota de Crédito correspondiente. Créelo o diríjase a soporte para que lo haga, y vuelva a este menú')
\ No newline at end of file
<odoo>
<data>
<record id="vnt_confirmar_cancelacion" model="ir.ui.view">
<field name="name">Confirmar Cancelación</field>
<field name="model">vnt.confirmar_cancelacion</field>
<field name="arch" type="xml">
<form>
<group>
<field name="cc_notas" nolabel="1">
<tree create="0" edit="1" editable="1">
<field name="name"/>
<field name="comp_talonario"/>
<field name="comp_nro"/>
<field name="comp_pto_vta"/>
<field name="comp_cliente"/>
<field name="comp_estado"/>
<button name="cancelarNotaD" string="Cancelar" type="object" class="oe_highlight"/>
</tree>
</field>
</group>
<footer>
<p>La cancelación de las Notas de Débito debe realizarse de esta manera debido a las limitaciones generadas por el sistema de AFIP</p>
<p>Si pulsa Confirmar Cancelación se procederá a cancelar el Recibo de Cobro y a modificar las Facturas originales a Adeudadas</p>
<button name="cancelar" string="Confirmar Cancelación" type="object" class="oe_highlight"/>
</footer>
</form>
</field>
</record>
<act_window id="vnt_confirmar_cancelacion_wizard_action"
name="Confirmar Cancelación"
src_model="vnt.confirmar_cancelacion"
res_model="vnt.confirmar_cancelacion"
view_mode="form"
target="new"
multi="True"/>
</data>
</odoo>
\ No newline at end of file
......@@ -23,7 +23,8 @@ class asw_pago_deuda_wizzard(models.TransientModel):
)
@api.multi
def generar_recibo(self):
def generar_recibo(self):
lista = []
self.chequear_montos()
self.armar_recibo()
self.validar_afectar(self.pcw_recibo)
......@@ -32,6 +33,11 @@ class asw_pago_deuda_wizzard(models.TransientModel):
self.pcw_recibo.comp_estado = 'p'
self.pcw_cobro_deu.co_estado = 'p'
lista.append(self.pcw_recibo.id)
self.pcw_cobro_deu.co_recibos = lista
for lin in self.pcw_cobro_deu.co_lin_deuda:
lin.pagar_facturas()
accion = self.get_action_navega('asw_recibos_list_action', self.pcw_recibo.id)
return accion
......
......@@ -27,6 +27,9 @@ class vnt_validar_nd(models.TransientModel):
#metodo para abrir wizard pago
def cobrar_todo(self):
for lin in self.vnd_notas:
if lin.comp_fecha_validacion == False:
raise UserError("Todas las notas deben ser validadas para continuar con el cobro")
datos = {'pcw_cliente': self.vnd_cliente.id,
'pcw_totalcobrar': self.vnd_total,
'pcw_cobro_deu': self.vnd_cobro.id}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!