Commit ca0ab156 by Maria Agustina

casi terminado cobranzas

1 parent 55cd7c04
......@@ -7,6 +7,11 @@ class vnt_cobros(models.Model):
_name = 'vnt.cobros'
_inherit = ['asw.generador_comprobante', 'asw.action.manager']
co_institucion = fields.Many2one(
comodel_name='hgt.instituciones',
string=u'Institución',
)
co_cliente = fields.Many2one(
string='Cliente',
comodel_name='asw.cliente',
......@@ -88,6 +93,14 @@ class vnt_cobros(models.Model):
copy=False
)
# #dominio de clientes segun institucion
# @api.onchange('co_institucion')
# def onchange_co_institucion(self):
# result = {}
# result['domain'] = []
# ids = self.env[]
# result['domain'] = {'co_cliente': [('id', 'in', ids)]}
def seleccionar_todo(self):
for lin in self.co_lin_deuda:
lin.ld_select = True
......@@ -219,8 +232,9 @@ class vnt_cobros(models.Model):
lista = []
for li in self.co_lin_deuda:
if li.ld_select:
#lista tiene todas las nd
lista.append(li.ld_nd.id)
if li.ld_nd:
#lista tiene todas las nd
lista.append(li.ld_nd.id)
datos = {'vnd_cliente': self.co_cliente.id,
'vnd_total': self.co_total,
......
......@@ -96,43 +96,44 @@ class vnt_linea_deuda(models.Model):
cliente_id = record.ld_factura.comp_cliente.id
config_int = self.env['vnt.interes'].search([('int_cliente', '=', cliente_id)], limit=1)
if not config_int:
raise UserError("No hay configuración de interés para el cliente seleccionado")
tasa_an = (config_int.int_tasa_anual * record.ld_total)/100
tasa_diaria = tasa_an/dias_anio
if config_int.int_ritmo == 'mensual':
#en d2 tengo la fecha de hoy y en d1 la del vto, resto los meses y agrego el q paso desde el vto
meses_pasados = d2.month - d1.month + 12*(d2.year - d1.year)
meses_pasados = meses_pasados + 1
anio = d1.year
#calculo del intres
calc_int = 0
for i in range (meses_pasados):
mes= d1.month
mes = mes + i
if (mes % 12 == 0):
mes = 12
else:
mes = mes % 12
calc_int = calc_int + (tasa_diaria * record.number_of_days_in_month(anio, mes))
if (mes == 12):
anio = anio + 1
int_calculado = calc_int
if config_int.int_ritmo == 'quincenal':
tasa_quincenal = tasa_diaria * 15
cociente = dias_pasados // 15
cociente = cociente + 1
int_calculado = cociente * tasa_quincenal
if config_int.int_ritmo == 'semanal':
tasa_semanal = tasa_diaria * 7
cociente = dias_pasados // 7
cociente = cociente + 1
int_calculado = cociente * tasa_semanal
if config_int.int_ritmo == 'diaria':
int_calculado = dias_pasados * tasa_diaria
raise UserError("No hay configuración de interés para el cliente seleccionado. Por favor, diríjase al menú Deudas e Intereses - Configuración de Intereses para dar de alta al cliente con su correspondiente tasa de interés")
else:
tasa_an = (config_int.int_tasa_anual * record.ld_comp_adeudado)/100
tasa_diaria = tasa_an/dias_anio
if config_int.int_ritmo == 'mensual':
#en d2 tengo la fecha de hoy y en d1 la del vto, resto los meses y agrego el q paso desde el vto
meses_pasados = d2.month - d1.month + 12*(d2.year - d1.year)
meses_pasados = meses_pasados + 1
anio = d1.year
#calculo del intres
calc_int = 0
for i in range (meses_pasados):
mes= d1.month
mes = mes + i
if (mes % 12 == 0):
mes = 12
else:
mes = mes % 12
calc_int = calc_int + (tasa_diaria * record.number_of_days_in_month(anio, mes))
if (mes == 12):
anio = anio + 1
int_calculado = calc_int
if config_int.int_ritmo == 'quincenal':
tasa_quincenal = tasa_diaria * 15
cociente = dias_pasados // 15
cociente = cociente + 1
int_calculado = cociente * tasa_quincenal
if config_int.int_ritmo == 'semanal':
tasa_semanal = tasa_diaria * 7
cociente = dias_pasados // 7
cociente = cociente + 1
int_calculado = cociente * tasa_semanal
if config_int.int_ritmo == 'diaria':
int_calculado = dias_pasados * tasa_diaria
else:
int_calculado = 0
record.ld_interes = int_calculado
......
......@@ -21,8 +21,7 @@
<field name="arch" type="xml">
<tree>
<field name="co_cliente" />
<field name="co_total_deuda"/>
<field name="co_total_interes" />
<field name="co_estado" />
<field name="co_total" />
</tree>
</field>
......@@ -45,21 +44,33 @@
<button name="pagar_deuda" string="Cobrar Todo" type="object" class='btn btn-primary' attrs="{'invisible':[('co_estado','in',['b','a','p','c'])]}"/>
<button name="cancelar" string="Cancelar" type="object" class='btn btn-primary' attrs="{'invisible':[('co_estado','in',['b','a','c','pr'])]}"/>
<button name="volver_borrador" string="Volver a Borrador" type="object" class='btn btn-primary' attrs="{'invisible':[('co_estado','in',['b','p','c'])]}"/>
<field name="co_estado" widget="statusbar"/>
<field invisible="1" name="co_deucarg" />
</header>
<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),('co_estado','in',['p','c'])]}" />
<div style="border: 1px solid black; width: 65%;">
<p><b>Instrucciones:</b><br/>1)Seleccione la institución y/o el CUIT buscados<br/>2)Haga click en "Cargar Deudas" para traer los comprobantes adeudados<br/>3)Seleccione manualmente o mediante el botón "Seleccionar todo" aquellos que desee cobrar <br/> 4)Elija el modo de cobro mediante los botones "Cobrar Todo", "Cobro Negociado", "Interés perdido" <br/>5)Haga click en "Confirmar Deuda" y en "Procesar Cobro" para continuar, el sistema lo guiará en el resto de los pasos <br/>6)En la pestaña Comprobantes hallará los comprobantes asociados a cada transacción realizada</p>
</div>
<group col="2" string="Cliente">
<field name="co_institucion" attrs="{ 'readonly' : [('co_deucarg','=',True),('co_estado','in',['a','p','c','pr'])]}" />
<field name="co_cliente" attrs="{ 'readonly' : [('co_deucarg','=',True),('co_estado','in',['a','p','c','pr'])]}" />
<field name="co_resumen" attrs="{ 'readonly' : [('co_deucarg','=',True),('co_estado','in',['a','p','c','pr'])]}" />
</group>
<notebook colspan="4">
<page string="Deudas">
<field name="co_modo_elegido" />
<field name="co_modo_elegido" invisible="1"/>
<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)]}" />
......
......@@ -46,53 +46,53 @@ class vnt_confirmar_cancelacion(models.TransientModel):
comprobante.comp_fecha_cancelacion = datetime.today()
def crear_notacred(self):
lista =[]
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
lista =[]
comprobantes = self.cc_cobro.co_recibos.filtered(lambda t: t.comp_talonario.tal_codigo == 'NDEB')
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
)
for comprobante in comprobantes:
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.write({
'referencia_orig_ptv': comprobante.comp_talonario.tal_pto_vta,
'referencia_orig_numero': comprobante.comp_nro,
'referencia_orig_letra': comprobante.comp_talonario.tal_letra,
'referencia_orig_fact': comprobante.id,
})
contra_comprobante.write({
'referencia_orig_ptv': comprobante.comp_talonario.tal_pto_vta,
'referencia_orig_numero': comprobante.comp_nro,
'referencia_orig_letra': comprobante.comp_talonario.tal_letra,
'referencia_orig_fact': comprobante.id,
})
contra_comprobante.comp_fecha = datetime.today()
#linea de NCred
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': contra_comprobante.id,
'lcp_precio': comprobante.comp_total,
'lcp_importe': comprobante.comp_total,
})
contra_comprobante.comp_fecha = datetime.today()
#linea de NCred
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': contra_comprobante.id,
'lcp_precio': comprobante.comp_total,
'lcp_importe': comprobante.comp_total,
})
contra_comprobante.validar()
contra_comprobante.validar()
#se agrega al recibo original
comprobante.write({
'comp_nota_credito' : contra_comprobante.id
})
#La agrego a lista de faturas en cobro
lista.append(contra_comprobante.id)
self.cc_cobro.co_notascred = lista
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
#se agrega al recibo original
comprobante.write({
'comp_nota_credito' : contra_comprobante.id
})
#La agrego a lista de faturas en cobro
lista.append(contra_comprobante.id)
self.cc_cobro.co_notascred = lista
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
......@@ -17,7 +17,7 @@
</group>
<footer>
<p>La opción Porcentaje aplicará el porcentaje a todas las líneas de deuda seleccionadas</p>
<p>La opción Porcentaje aplicará el porcentaje al monto de intereses calculados en cada línea de deuda seleccionada</p>
<p>La opción Monto distribuirá el monto elegido entre las líneas de deuda seleccionadas</p>
<button name="aceptar_in" string="Aceptar" type="object" class="oe_highlight"/>
<button special="cancel" string="Cancel"/>
......
......@@ -22,6 +22,44 @@ class asw_pago_deuda_wizzard(models.TransientModel):
comodel_name='vnt.cobros',
)
# Formas de pago
pcw_che_recibidos = fields.Many2many(
comodel_name='asw.cheque',
relation='pago_cliente_chq_recibido2',
column1='asw_cheque_id',
column2='asw_cliente_id',
string='Cheques Recibidos'
)
pcw_chq_emitidos = fields.Many2many(
comodel_name='asw.cheque',
relation='pago_cliente_chq_emitido2',
column1='asw_cheque_id',
column2='asw_cliente_id',
string='Cheques Emitidos'
)
pcw_transferencias_recibidas = fields.Many2many(
comodel_name='asw.valores',
relation='pago_cliente_transferencia_recibida2',
column1='pago_cliente_id',
column2='asw_valores_id',
string='Transferencias Recibidas'
)
pcw_transferencias_emitidas = fields.Many2many(
comodel_name='asw.valores',
relation='pago_cliente_transferencia_emitida2',
column1='pago_cliente_id',
column2='asw_valores_id',
string='Transferencias Emitidas'
)
pcw_tarjetas = fields.Many2many(
comodel_name='asw.valores',
relation='pago_cliente_tarjeta2',
column1='pago_cliente_id',
column2='asw_valores_id',
string='Tarjetas'
)
@api.multi
def generar_recibo(self):
lista = []
......@@ -36,9 +74,6 @@ class asw_pago_deuda_wizzard(models.TransientModel):
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
......
......@@ -13,6 +13,7 @@
<field name="pcw_efectivo" colspan='2'/>
<field name="pcw_retencion_recibida" colspan="2"/>
<field name="pcw_referencia" />
<field name="pcw_caja" />
<notebook colspan="4">
<page string="Cheques Recibidos">
<group col="4">
......
......@@ -7,20 +7,20 @@
<form>
<group>
<field name="vnd_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"/>
<tree create="0" edit="0" editable="0" delete="false">
<field name="name" readonly="1"/>
<field name="comp_talonario" readonly="1"/>
<field name="comp_nro" readonly="1"/>
<field name="comp_pto_vta" readonly="1"/>
<field name="comp_cliente" readonly="1" />
<field name="comp_estado" readonly="1"/>
<button name="validarNotaD" string="Validar" type="object" class="oe_highlight"/>
</tree>
</field>
</group>
<footer>
<p>La validación de las Notas de Débito debe realizarse de esta manera debido a las limitaciones generadas por el sistema de AFIP</p>
<p>La validación de las Notas de Débito debe realizarse una por una debido a las limitaciones generadas por el sistema de AFIP</p>
<p>Una vez que las notas están validadas sólo pueden cancelarse manualmente, no desde este menú</p>
<button name="cobrar_todo" string="Pasar a Cobro" type="object" class="oe_highlight"/>
</footer>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!