+page.server.js 2.8 KB
import { supabase } from '$lib/supabase';
import { error } from '@sveltejs/kit';

export async function load({ params }) {
  const { codigo } = params;

  const { data, error: dbError } = await supabase
    .schema('ppto')
    .from('clas_rubros')
    .select('*')
    .eq('rubro', codigo);

  if (dbError || !data || data.length === 0) {
    throw error(404, 'Rubro no encontrado');
  }

  const rubro = data[0];

  // Obtener jerarquía (padres e hijos)
  let padres = [];
  let hijos = [];

  // Buscar padre según nivel
  if (rubro.nivel === 'sub_cuenta') {
    // Padre es cuenta
    const { data: padreData } = await supabase
      .schema('ppto')
      .from('clas_rubros')
      .select('*')
      .eq('nivel', 'cuenta')
      .eq('tipo', rubro.tipo)
      .eq('clase', rubro.clase)
      .eq('cuenta', rubro.cuenta);
    if (padreData?.length) padres.push(padreData[0]);
  }

  if (rubro.nivel === 'cuenta' || rubro.nivel === 'sub_cuenta') {
    // Padre es clase
    const { data: padreData } = await supabase
      .schema('ppto')
      .from('clas_rubros')
      .select('*')
      .eq('nivel', 'clase')
      .eq('tipo', rubro.tipo)
      .eq('clase', rubro.clase);
    if (padreData?.length) padres.unshift(padreData[0]);
  }

  if (rubro.nivel !== 'tipo') {
    // Padre es tipo
    const { data: padreData } = await supabase
      .schema('ppto')
      .from('clas_rubros')
      .select('*')
      .eq('nivel', 'tipo')
      .eq('tipo', rubro.tipo);
    if (padreData?.length) padres.unshift(padreData[0]);
  }

  // Buscar hijos según nivel
  if (rubro.nivel === 'tipo') {
    const { data: hijosData } = await supabase
      .schema('ppto')
      .from('clas_rubros')
      .select('*')
      .eq('nivel', 'clase')
      .eq('tipo', rubro.tipo)
      .order('rubro');
    hijos = hijosData?.reduce((acc, item) => {
      if (!acc.find(h => h.rubro === item.rubro)) acc.push(item);
      return acc;
    }, []) || [];
  } else if (rubro.nivel === 'clase') {
    const { data: hijosData } = await supabase
      .schema('ppto')
      .from('clas_rubros')
      .select('*')
      .eq('nivel', 'cuenta')
      .eq('tipo', rubro.tipo)
      .eq('clase', rubro.clase)
      .order('rubro');
    hijos = hijosData?.reduce((acc, item) => {
      if (!acc.find(h => h.rubro === item.rubro)) acc.push(item);
      return acc;
    }, []) || [];
  } else if (rubro.nivel === 'cuenta') {
    const { data: hijosData } = await supabase
      .schema('ppto')
      .from('clas_rubros')
      .select('*')
      .eq('nivel', 'sub_cuenta')
      .eq('tipo', rubro.tipo)
      .eq('clase', rubro.clase)
      .eq('cuenta', rubro.cuenta)
      .order('rubro');
    hijos = hijosData?.reduce((acc, item) => {
      if (!acc.find(h => h.rubro === item.rubro)) acc.push(item);
      return acc;
    }, []) || [];
  }

  return {
    rubro,
    padres,
    hijos
  };
}