Sobre cambio de moneda en dictamen de evaluación (RESPONDIDO)

Hola, tenemos un problema que parece similar a lo que se describe aquí: http://foro.comunidad.siu.edu.ar/index.php?topic=9126.0.
Para no revivir un thread tan viejo, creo este nuevo.

En resumen, la universidad recibió una oferta en dólares por la compra de cierto sistema. Esa oferta debe ser así registrada en el sistema por temas legales. Luego, la misma se convirtió a pesos y se generaron los renglones que figuran con “monto unitario” y “monto total” en pesos. A continuación, en la ficha de dictamen de evaluación el valor “get_sumatoria_renglones_orden_merito” aparece con la moneda en dólares y el importe en pesos.

Mi pregunta es si este es un problema en la generación de datos y de qué forma podría evitarlo. Entiendo que debería calcular mediante el Jasper la suma de renglones preadjudicados por oferente (pero con la moneda correcta).

Desde ya, muchas gracias.
Saludos, Elián.

Hola Elián,
Cómo va?
Te queríamos consultar con respecto al parámetro " USAR_MONEDA_EXTRANJERA_OC" como lo está aplicado? ustedes personalizan las plantillas jasper?
Saludos.
Juan Manuel.

Hola Juan Manuel, muchas gracias por la respuesta.
Si, el parámetro “USAR_MONEDA_EXTRANJERA_OC” figura en “Si” para el valor de la institución (lo estamos usando).
La plantilla de la que estamos hablando está personalizada. El valor de “sum_renglon_orden_merito” se está utilizando para mostrar una leyenda:

"MONTO TOTAL ACONSEJADO PARA LA ADJUDICACION: " + $F{sum_renglon_orden_merito}

Según entiendo, la idea es mostrar la suma de los renglones preadjudicados por oferente.

Saludos, Elián.

Hola, pude reunir un poco más de información. El método que genera el campo sum_renglon_orden_merito es “get_sumatoria_renglones_orden_merito”. Aparentemente allí se le asigna como moneda la misma del oferente:

`function get_sumatoria_renglones_orden_merito($filtro=array())
{
$where = ‘’;
if(isset($filtro[‘id_acto_apertura’]))
$where .=" AND aa.id_acto_apertura=".$filtro[‘id_acto_apertura’];

	// solo para el caso que se necesite incluir ofertas tipo prorrogas
	if(!isset($filtro['incluir_todas_ofertas']) || $filtro['incluir_todas_ofertas'] === false)
		$where .=" AND ro.id_oferta_tipo NOT IN ('g')";

	$sql="SELECT
			sum(ro.monto_total) as sum_renglon_orden_merito
		  FROM
			scp_actos_apertura aa,
			scp_oferentes o,
			scp_renglones_oferentes ro,
			scp_oferentes_estimados_renglones oer
		  WHERE
			aa.id_acto_apertura=o.id_acto_apertura
			AND o.id_oferente=ro.id_oferente
			AND ro.id_renglon_oferente=oer.id_renglon_oferente
			{$where}
			AND oer.orden_merito=1";
	$rs=consultar_fuente($sql);
	if(is_array($rs) && count($rs) > 0 && isset($rs[0]['sum_renglon_orden_merito'])){
		[b]$oferentes=$this->get_oferentes_orden_merito($filtro);[/b]
		if(isset($oferentes[0])){
			[b]$moneda=dao_consultas()->get_moneda($oferentes[0]['id_moneda']);[/b]
			$formateo = new diaguita_formateo('html');
			$rs[0]['sum_renglon_orden_merito'] = $formateo->formato_moneda($rs[0]['sum_renglon_orden_merito'],$moneda['simbolo']);
			return $rs;
		}
	}
}`

El problema radica al existir una diferencia entre la moneda del oferente y la moneda del renglón del mismo oferente con orden de mérito 1. El sistema termina generando el campo con importe correcto pero le asigna la moneda de la oferta (que podría no coincidir con la del renglón).

Saludos, Elián.

Lo mismo pasa con el campo sum_oferente_orden_merito. El método que genera este valor es “get_sumatoria_oferentes_orden_merito”:
` function get_sumatoria_oferentes_orden_merito($id_dictamen=‘’,$id_oferente=‘’)
{
$salida = array(‘sum_oferente_orden_merito’ => 0);
if($id_dictamen !=‘’ && $id_dictamen != ‘’){
$where=" AND oe.id_dictamen_evaluacion=$id_dictamen
AND oe.id_oferente=$id_oferente
";

		$sql="SELECT
				sum(ro.monto_total) as sum_oferente_orden_merito
			FROM

				scp_actos_apertura aa,
				scp_oferentes o,
				scp_oferentes_estimados oe,
				scp_renglones_oferentes ro,
				scp_oferentes_estimados_renglones oer
			WHERE
				aa.id_acto_apertura=o.id_acto_apertura
				AND o.id_oferente=ro.id_oferente
				AND o.id_oferente=oe.id_oferente
				AND ro.id_renglon_oferente=oer.id_renglon_oferente
				{$where}
				AND oer.orden_merito=1
				GROUP by o.id_oferente,oer.orden_merito,o.persona;";
			$rs=consultar_fuente($sql);
			if(is_array($rs) && count($rs) > 0 && isset($rs[0]['sum_oferente_orden_merito'])){
				[b]$datos_oferente=  dao_acto_apertura()->get_oferentes(array('id_oferente'=>$id_oferente));[/b]
				[b]$moneda=dao_consultas()->get_moneda($datos_oferente[0]['id_moneda']);[/b]
				$formateo = new diaguita_formateo('html');
				$salida['sum_oferente_orden_merito'] = $formateo->formato_moneda($rs[0]['sum_oferente_orden_merito'],$moneda['simbolo']);
			}
	}
	return $salida;
}`

Pasa lo mismo que comenté antes. El signo queda seteado como la oferta y el importe como el renglón.

Saludos, Elián.

Hola Elian, buenas tardes.

Por lo que pudimos ver, aparentemente se trataría de un error en la visualización de la moneda cuando las ofertas y los renglones difieren en la moneda. Te pido que crees un GDS, así procedemos a revisar y corregirlo si efectivamente se trata de un error.

Saludos,
Fernando.