Commit ca0ab156 by Maria Agustina

casi terminado cobranzas

1 parent 55cd7c04
...@@ -7,6 +7,11 @@ class vnt_cobros(models.Model): ...@@ -7,6 +7,11 @@ class vnt_cobros(models.Model):
_name = 'vnt.cobros' _name = 'vnt.cobros'
_inherit = ['asw.generador_comprobante', 'asw.action.manager'] _inherit = ['asw.generador_comprobante', 'asw.action.manager']
co_institucion = fields.Many2one(
comodel_name='hgt.instituciones',
string=u'Institución',
)
co_cliente = fields.Many2one( co_cliente = fields.Many2one(
string='Cliente', string='Cliente',
comodel_name='asw.cliente', comodel_name='asw.cliente',
...@@ -88,6 +93,14 @@ class vnt_cobros(models.Model): ...@@ -88,6 +93,14 @@ class vnt_cobros(models.Model):
copy=False 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): def seleccionar_todo(self):
for lin in self.co_lin_deuda: for lin in self.co_lin_deuda:
lin.ld_select = True lin.ld_select = True
...@@ -219,8 +232,9 @@ class vnt_cobros(models.Model): ...@@ -219,8 +232,9 @@ class vnt_cobros(models.Model):
lista = [] lista = []
for li in self.co_lin_deuda: for li in self.co_lin_deuda:
if li.ld_select: if li.ld_select:
#lista tiene todas las nd if li.ld_nd:
lista.append(li.ld_nd.id) #lista tiene todas las nd
lista.append(li.ld_nd.id)
datos = {'vnd_cliente': self.co_cliente.id, datos = {'vnd_cliente': self.co_cliente.id,
'vnd_total': self.co_total, 'vnd_total': self.co_total,
......
...@@ -96,43 +96,44 @@ class vnt_linea_deuda(models.Model): ...@@ -96,43 +96,44 @@ class vnt_linea_deuda(models.Model):
cliente_id = record.ld_factura.comp_cliente.id cliente_id = record.ld_factura.comp_cliente.id
config_int = self.env['vnt.interes'].search([('int_cliente', '=', cliente_id)], limit=1) config_int = self.env['vnt.interes'].search([('int_cliente', '=', cliente_id)], limit=1)
if not config_int: if not config_int:
raise UserError("No hay configuración de interés para el cliente seleccionado") 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")
tasa_an = (config_int.int_tasa_anual * record.ld_total)/100 else:
tasa_diaria = tasa_an/dias_anio 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 if config_int.int_ritmo == 'mensual':
meses_pasados = d2.month - d1.month + 12*(d2.year - d1.year) #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 = meses_pasados + 1 meses_pasados = d2.month - d1.month + 12*(d2.year - d1.year)
anio = d1.year meses_pasados = meses_pasados + 1
#calculo del intres anio = d1.year
calc_int = 0 #calculo del intres
for i in range (meses_pasados): calc_int = 0
mes= d1.month for i in range (meses_pasados):
mes = mes + i mes= d1.month
if (mes % 12 == 0): mes = mes + i
mes = 12 if (mes % 12 == 0):
else: mes = 12
mes = mes % 12 else:
calc_int = calc_int + (tasa_diaria * record.number_of_days_in_month(anio, mes)) mes = mes % 12
if (mes == 12): calc_int = calc_int + (tasa_diaria * record.number_of_days_in_month(anio, mes))
anio = anio + 1 if (mes == 12):
int_calculado = calc_int anio = anio + 1
int_calculado = calc_int
if config_int.int_ritmo == 'quincenal':
tasa_quincenal = tasa_diaria * 15 if config_int.int_ritmo == 'quincenal':
cociente = dias_pasados // 15 tasa_quincenal = tasa_diaria * 15
cociente = cociente + 1 cociente = dias_pasados // 15
int_calculado = cociente * tasa_quincenal cociente = cociente + 1
int_calculado = cociente * tasa_quincenal
if config_int.int_ritmo == 'semanal':
tasa_semanal = tasa_diaria * 7 if config_int.int_ritmo == 'semanal':
cociente = dias_pasados // 7 tasa_semanal = tasa_diaria * 7
cociente = cociente + 1 cociente = dias_pasados // 7
int_calculado = cociente * tasa_semanal cociente = cociente + 1
int_calculado = cociente * tasa_semanal
if config_int.int_ritmo == 'diaria':
int_calculado = dias_pasados * tasa_diaria if config_int.int_ritmo == 'diaria':
int_calculado = dias_pasados * tasa_diaria
else: else:
int_calculado = 0 int_calculado = 0
record.ld_interes = int_calculado record.ld_interes = int_calculado
......
...@@ -21,8 +21,7 @@ ...@@ -21,8 +21,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree> <tree>
<field name="co_cliente" /> <field name="co_cliente" />
<field name="co_total_deuda"/> <field name="co_estado" />
<field name="co_total_interes" />
<field name="co_total" /> <field name="co_total" />
</tree> </tree>
</field> </field>
...@@ -45,21 +44,33 @@ ...@@ -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="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="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'])]}"/> <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 name="co_estado" widget="statusbar"/>
<field invisible="1" name="co_deucarg" /> <field invisible="1" name="co_deucarg" />
</header> </header>
<group> <group>
<field name="co_usuario_cancelacion" attrs="{'invisible':[('co_estado','not in',['c'])]}"/> <field name="co_usuario_cancelacion" attrs="{'invisible':[('co_estado','not in',['c'])]}"/>
</group> </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 style="border: 1px solid black; width: 65%;">
<div colspan="1"></div> <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>
<field colspan="1" nolabel="1" name="co_resumen" attrs="{ 'readonly' : [('co_deucarg','=',True),('co_estado','in',['p','c'])]}" /> </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> </group>
<notebook colspan="4"> <notebook colspan="4">
<page string="Deudas"> <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-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_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="cobrar_negociado" string="Cobro Negociado" attrs="{'invisible':[('co_modo_elegido','=',True)]}" />
......
...@@ -46,53 +46,53 @@ class vnt_confirmar_cancelacion(models.TransientModel): ...@@ -46,53 +46,53 @@ class vnt_confirmar_cancelacion(models.TransientModel):
comprobante.comp_fecha_cancelacion = datetime.today() comprobante.comp_fecha_cancelacion = datetime.today()
def crear_notacred(self): 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')]) for comprobante in comprobantes:
referencia = 'Reintegro del comprobante : ' + comprobante.comp_talonario.tal_codigo + "/" +comprobante.comp_nro_letras
if talonario: 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')])
contra_comprobante = self.generar_comprobante(
talonario = talonario, if talonario:
cliente = comprobante.comp_cliente, contra_comprobante = self.generar_comprobante(
total = comprobante.comp_total, talonario = talonario,
referencia = referencia, cliente = comprobante.comp_cliente,
comp_estado = comprobante.comp_estado, total = comprobante.comp_total,
comp_nro_letras = comprobante.comp_nro_letras, referencia = referencia,
comp_subtotal = comprobante.comp_subtotal, comp_estado = comprobante.comp_estado,
comp_moneda = comprobante.comp_moneda.id, comp_nro_letras = comprobante.comp_nro_letras,
comp_nota_credito = comprobante.id comp_subtotal = comprobante.comp_subtotal,
) comp_moneda = comprobante.comp_moneda.id,
comp_nota_credito = comprobante.id
)
contra_comprobante.write({ contra_comprobante.write({
'referencia_orig_ptv': comprobante.comp_talonario.tal_pto_vta, 'referencia_orig_ptv': comprobante.comp_talonario.tal_pto_vta,
'referencia_orig_numero': comprobante.comp_nro, 'referencia_orig_numero': comprobante.comp_nro,
'referencia_orig_letra': comprobante.comp_talonario.tal_letra, 'referencia_orig_letra': comprobante.comp_talonario.tal_letra,
'referencia_orig_fact': comprobante.id, 'referencia_orig_fact': comprobante.id,
}) })
contra_comprobante.comp_fecha = datetime.today() contra_comprobante.comp_fecha = datetime.today()
#linea de NCred #linea de NCred
inter_prod = self.env['asw.producto'].search([('prod_descripcion','=','INTERES')]) inter_prod = self.env['asw.producto'].search([('prod_descripcion','=','INTERES')])
linea_comp = self.env['asw.linea_comprobante'].create({ linea_comp = self.env['asw.linea_comprobante'].create({
'lcp_producto': inter_prod.id, 'lcp_producto': inter_prod.id,
'lcp_comprobante': contra_comprobante.id, 'lcp_comprobante': contra_comprobante.id,
'lcp_precio': comprobante.comp_total, 'lcp_precio': comprobante.comp_total,
'lcp_importe': 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 \ 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 \ No newline at end of file
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
</group> </group>
<footer> <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> <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 name="aceptar_in" string="Aceptar" type="object" class="oe_highlight"/>
<button special="cancel" string="Cancel"/> <button special="cancel" string="Cancel"/>
......
...@@ -22,6 +22,44 @@ class asw_pago_deuda_wizzard(models.TransientModel): ...@@ -22,6 +22,44 @@ class asw_pago_deuda_wizzard(models.TransientModel):
comodel_name='vnt.cobros', 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 @api.multi
def generar_recibo(self): def generar_recibo(self):
lista = [] lista = []
...@@ -36,9 +74,6 @@ class asw_pago_deuda_wizzard(models.TransientModel): ...@@ -36,9 +74,6 @@ class asw_pago_deuda_wizzard(models.TransientModel):
lista.append(self.pcw_recibo.id) lista.append(self.pcw_recibo.id)
self.pcw_cobro_deu.co_recibos = lista 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) accion = self.get_action_navega('asw_recibos_list_action', self.pcw_recibo.id)
return accion return accion
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
<field name="pcw_efectivo" colspan='2'/> <field name="pcw_efectivo" colspan='2'/>
<field name="pcw_retencion_recibida" colspan="2"/> <field name="pcw_retencion_recibida" colspan="2"/>
<field name="pcw_referencia" /> <field name="pcw_referencia" />
<field name="pcw_caja" />
<notebook colspan="4"> <notebook colspan="4">
<page string="Cheques Recibidos"> <page string="Cheques Recibidos">
<group col="4"> <group col="4">
......
...@@ -7,20 +7,20 @@ ...@@ -7,20 +7,20 @@
<form> <form>
<group> <group>
<field name="vnd_notas" nolabel="1"> <field name="vnd_notas" nolabel="1">
<tree create="0" edit="1" editable="1"> <tree create="0" edit="0" editable="0" delete="false">
<field name="name"/> <field name="name" readonly="1"/>
<field name="comp_talonario"/> <field name="comp_talonario" readonly="1"/>
<field name="comp_nro"/> <field name="comp_nro" readonly="1"/>
<field name="comp_pto_vta"/> <field name="comp_pto_vta" readonly="1"/>
<field name="comp_cliente"/> <field name="comp_cliente" readonly="1" />
<field name="comp_estado"/> <field name="comp_estado" readonly="1"/>
<button name="validarNotaD" string="Validar" type="object" class="oe_highlight"/> <button name="validarNotaD" string="Validar" type="object" class="oe_highlight"/>
</tree> </tree>
</field> </field>
</group> </group>
<footer> <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> <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"/> <button name="cobrar_todo" string="Pasar a Cobro" type="object" class="oe_highlight"/>
</footer> </footer>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!