Proyecto

General

Perfil

Correccion - Mejora #3267

Permitir cambio de moneda en recepción de fondos sin cuenta origen

Añadido por Santiago Ramos hace alrededor de 6 años. Actualizado hace alrededor de 6 años.

Estado:
Resuelta
Prioridad:
Normal
Asignado a:
Categoría:
Desarrollo
Versión prevista:
Fecha de inicio:
2018-02-07
Fecha fin:
% Realizado:

100%

Tiempo estimado:
16.00 h

Descripción

En los movimientos de recepción de fondos sin cuenta origen, actualmente no se permite la recepción en una moneda distinta a la de la cuenta bancaria de destino.

Esto provoca que si nos envían una transferencia en una moneda distinta de la nominal de la cuenta no sea posible registrar el movimiento de transferencia, teniendo que recurrir a una cuenta bancaria "ficticia" para poder recoger la recepción de fondos y su posterior cambio de moneda.

Debería permitirse definir la moneda de recepción de fondos para, en los casos necesarios, poder diferenciar y registrar las tasas de cambio de la transferencia.

Los tipos de transferencia afectados son:

  • Ingreso sin Cta. origen (Adelanto, Donación, ...)
  • Subvención

Otros tipos de esta casuística que no deberían estar afectados son:

  • Recuperacion IVA
  • Intereses

Histórico

#1 Actualizado por Santiago Ramos hace alrededor de 6 años

  • Estado cambiado Asignada por Resuelta
  • % Realizado cambiado 0 por 100

#2 Actualizado por Pascal Carrie hace alrededor de 6 años

  • Estado cambiado Resuelta por Asignada

tengo una exeption
undefined method `/' for nil:NilClass
/home/pascal/gor/db/migrate/20180207091055_monedas_en_transferencias.rb:25

para pasar lo he tenido que poner un rescue true
es curioso porque en muchas transferencia tengo
(byebug) transferencia.importe_cambiado
nil
(byebug) transferencia.importe_recibido
nil
y a pesar de eso pasan sin problema (?)
no lo voy a subir porque no conosco la implicación pero para poder pasar con los bbdd de ciertas ong habría que hacer algo al respeto

#3 Actualizado por Santiago Ramos hace alrededor de 6 años

La línea donde se indica el error creo que es:

      if transferencia.libro_destino && transferencia.importe_cambiado.to_f != 0.0 && transferencia.tasa_cambio.to_f == 0.0
        transferencia.update_column(:tasa_cambio, format("%.8f",transferencia.importe_recibido / transferencia.importe_cambiado)
      end

Si la transferencia no está finalizada por no haberse recibido aún, se da el caso en que teniendo "libro_destino" no existe aún "importe_recibido". Lo raro es que antes de hacer la operación se comprueba que exista el "importe cambiado", y difícilmente debería existir un "importe cambiado" si no existe un "importe recibido".

Sospecho que tienes una una inconsistencia de datos que deberías corregir lo antes posible. Podrías comprobar si existe esta situación (importe_recibido == nil con importe_cambiado != nil) en alguna otra instalación de las ONGs que manejáis?

De todas formas, dejo abierto el ticket para retocar la el aviso de validación de importes por financiadores en el listado de transferencias cuando no coinciden las monedas recibidas y cambiadas.

#4 Actualizado por Pascal Carrie hace alrededor de 6 años

[18, 27] in /home/pascal/gor/db/migrate/20180207091055_monedas_en_transferencias.rb
18: # Ajusta la moneda recibida
19: transferencia.update_column(:moneda_recibida_id, (transferencia.libro_origen||transferencia.libro_destino).moneda_id) if transferencia.libro_destino
20: # Ajusta la TC si no esta cargada
21: if transferencia.libro_destino && transferencia.importe_cambiado.to_f != 0.0 && transferencia.tasa_cambio.to_f == 0.0
22: byebug if transferencia.importe_recibido.nil?
=> 23: transferencia.update_column(:tasa_cambio, format("%.8f",transferencia.importe_recibido / transferencia.importe_cambiado))
24: end
25: end
26: end
27:
(byebug) transferencia
#<Transferencia id: 398, proyecto_id: nil, agente_id: nil, observaciones: "Saldo apertura 2014", iban: nil, tasa_cambio: nil, tipo: "remanente", numero_cheque: nil, remanente: false, subtipo_movimiento_id: nil, fecha_enviado: nil, importe_enviado: nil, libro_origen_id: nil, fecha_recibido: "2014-01-01", importe_recibido: nil, importe_cambiado: #<BigDecimal:5564bf905b18,'0.18185666E6',18(18)>, libro_destino_id: 95, ref_contable_enviado: nil, ref_contable_recibido: nil, marcado_id: nil, moneda_recibida_id: 5>

creo que habría que comprobar con and transferencia.importe_recibido

#5 Actualizado por Santiago Ramos hace alrededor de 6 años

Ufff... remanentes!...

Ok, a poner en el cálculo de TC de la migración una condición adicional para comprobar importe_recibido (lo subo en otro commit), pero quizás habría que abrir un ticket para revisar ese campo "importe_recibido" en los remanentes y existentes y en la generación de estos, pues escapan de la lógica del resto de transferencias.

#6 Actualizado por Santiago Ramos hace alrededor de 6 años

  • Estado cambiado Asignada por Resuelta

Ya he modificado la migración para que no calcule la tc si no existe el importe_recibido:

https://gong.org.es/projects/gor/repository/revisions/8595/diff/trunk/gor/db/migrate/20180207091055_monedas_en_transferencias.rb

Sin embargo, al cambiar cómo se obtiene el importe_recibido por defecto para contemplar los remantentes:

https://gong.org.es/projects/gor/repository/revisions/8595/diff/trunk/gor/app/models/transferencia.rb

veo que hay código que te tiene que estar fallando con los datos que tienes en BBDD:

https://gong.org.es/projects/gor/repository/entry/trunk/gor/app/models/transferencia.rb#L227

por lo que insisto en que deberías verificar esos datos y corregir esa inconsistencia.

Exportar a: Atom PDF

Financiado por:

Desarrollado por:
Software libre forjado en: