CREATE OR REPLACE FUNCTION getpartner_tartozas(p_partner_kod integer, p_elszamolasi_datum date, p_kvota_modosithato boolean)
  RETURNS partner_tartozas AS
'declare

partner_tartozas_ki partner_tartozas;
j_kvota_engedely integer;
j_osszes_tartozas integer;
j_lejart_tartozas integer;

j_kvota_engedely_rendszer integer;
j_kvota_engedely_szallitok_is_tartozas integer;
j_kvota_engedely_statusz_00 integer;
j_kvota_engedely_statusz_01 integer;
j_kvota_engedely_statusz_10 integer;
j_kvota_engedely_statusz_11 integer;

begin

   SELECT kvota_engedely_rendszer, kvota_engedely_szallitok_is_tartozas, kvota_engedely_statusz_00, 
       kvota_engedely_statusz_01, kvota_engedely_statusz_10, kvota_engedely_statusz_11 INTO
       j_kvota_engedely_rendszer, j_kvota_engedely_szallitok_is_tartozas, j_kvota_engedely_statusz_00, 
       j_kvota_engedely_statusz_01, j_kvota_engedely_statusz_10, j_kvota_engedely_statusz_11       
   FROM _setup_main
   LIMIT 1;
 
   SELECT kvota_engedely, osszes_tartozas, lejart_tartozas INTO j_kvota_engedely, j_osszes_tartozas, j_lejart_tartozas
     FROM partner
     WHERE kod = p_partner_kod;

   partner_tartozas_ki.partner_kod := p_partner_kod;
   partner_tartozas_ki.elszamolasi_datum := p_elszamolasi_datum;
   partner_tartozas_ki.tartozas := 0;
   partner_tartozas_ki.lejart_tartozas := 0;
   partner_tartozas_ki.szallitos_tartozas := 0;
   partner_tartozas_ki.kvota_engedely := 0;

   IF j_kvota_engedely_rendszer = 1 THEN

      SELECT ROUND(SUM(raktar_mozgas_fej.brutto_arbevetel_vegosszeg) - null_to_zero(SUM(penzeszkoz_iktato.osszeg)),0) INTO partner_tartozas_ki.tartozas
        FROM raktar_mozgas_fej
        LEFT OUTER JOIN 
           (SELECT raktar_mozgas_fej_kod, SUM(penzeszkoz_iktato.osszeg) AS osszeg 
            FROM penzeszkoz_iktato 
            WHERE raktar_mozgas_fej_kod <> 0 
              AND partner_kod = p_partner_kod
            GROUP BY 1 
            ORDER BY 1) penzeszkoz_iktato ON (raktar_mozgas_fej.kod = penzeszkoz_iktato.raktar_mozgas_fej_kod)
        WHERE ((raktar_mozgas_fej.bizonylat_fajta = 5) OR (raktar_mozgas_fej.bizonylat_fajta = 3) )
          AND raktar_mozgas_fej.partner_kod = p_partner_kod
          AND raktar_mozgas_fej.sztornozott_bizonylat_kod = 0
          AND raktar_mozgas_fej.sztornozo_bizonylat_kod = 0;  

      IF partner_tartozas_ki.tartozas IS NULL THEN
         partner_tartozas_ki.tartozas := 0;
      END IF;

      SELECT ROUND(SUM(raktar_mozgas_fej.brutto_arbevetel_vegosszeg) - null_to_zero(SUM(penzeszkoz_iktato.osszeg)),0) INTO partner_tartozas_ki.lejart_tartozas
        FROM raktar_mozgas_fej
        LEFT OUTER JOIN 
           (SELECT raktar_mozgas_fej_kod, SUM(penzeszkoz_iktato.osszeg) as osszeg 
              FROM penzeszkoz_iktato 
             WHERE raktar_mozgas_fej_kod <> 0 
               AND partner_kod = p_partner_kod
             GROUP BY 1 
             ORDER BY 1) penzeszkoz_iktato ON (raktar_mozgas_fej.kod = penzeszkoz_iktato.raktar_mozgas_fej_kod)
        WHERE ((raktar_mozgas_fej.bizonylat_fajta = 5) OR (raktar_mozgas_fej.bizonylat_fajta = 3) )
          AND raktar_mozgas_fej.partner_kod = p_partner_kod
          AND raktar_mozgas_fej.fiz_hatarido <= p_elszamolasi_datum      
          AND raktar_mozgas_fej.sztornozott_bizonylat_kod = 0
          AND raktar_mozgas_fej.sztornozo_bizonylat_kod = 0;      

      IF partner_tartozas_ki.lejart_tartozas IS NULL THEN
         partner_tartozas_ki.lejart_tartozas := 0;
      END IF;          

      SELECT ROUND(sum(raktar_mozgas.brutto_egysegar_huf * (raktar_mozgas.mennyiseg - raktar_mozgas.mennyiseg_szamlazva)),0) INTO partner_tartozas_ki.szallitos_tartozas
        FROM raktar_mozgas_fej, raktar_mozgas
       WHERE raktar_mozgas_fej.kod = raktar_mozgas.fej_kod
         AND (raktar_mozgas_fej.sztornozott_bizonylat_kod = 0)
         AND (raktar_mozgas_fej.sztornozo_bizonylat_kod = 0)
         AND (raktar_mozgas_fej.bizonylat_fajta = 4)
         AND (raktar_mozgas.cel_raktar_kod = 0)
         AND raktar_mozgas_fej.partner_kod = p_partner_kod    
         AND ((raktar_mozgas.mennyiseg - raktar_mozgas.mennyiseg_szamlazva) <> 0)
       GROUP BY raktar_mozgas_fej.partner_kod;

      IF partner_tartozas_ki.szallitos_tartozas IS NULL THEN
         partner_tartozas_ki.szallitos_tartozas := 0;
      END IF;          

      IF j_kvota_engedely_szallitok_is_tartozas = 1 THEN
         partner_tartozas_ki.tartozas:= partner_tartozas_ki.tartozas+ partner_tartozas_ki.szallitos_tartozas;
      END IF;

       IF p_kvota_modosithato AND (j_kvota_engedely < 10) THEN
          IF (partner_tartozas_ki.lejart_tartozas <= j_lejart_tartozas) AND (partner_tartozas_ki.tartozas <= j_osszes_tartozas) THEN
             j_kvota_engedely := j_kvota_engedely_statusz_00;
          END IF; 
          IF (partner_tartozas_ki.lejart_tartozas <= j_lejart_tartozas) AND (partner_tartozas_ki.tartozas > j_osszes_tartozas) THEN
             j_kvota_engedely := j_kvota_engedely_statusz_01;
          END IF; 
          IF (partner_tartozas_ki.lejart_tartozas > j_lejart_tartozas) AND (partner_tartozas_ki.tartozas <= j_osszes_tartozas) THEN
             j_kvota_engedely := j_kvota_engedely_statusz_10;
          END IF; 
          IF (partner_tartozas_ki.lejart_tartozas > j_lejart_tartozas) AND (partner_tartozas_ki.tartozas > j_osszes_tartozas) THEN
             j_kvota_engedely := j_kvota_engedely_statusz_11;
          END IF; 

          UPDATE partner set kvota_engedely = j_kvota_engedely WHERE kod = p_partner_kod;
       END IF;
   END IF;

   partner_tartozas_ki.kvota_engedely := j_kvota_engedely;

   RETURN partner_tartozas_ki;
  
end;'
  LANGUAGE plpgsql VOLATILE
  COST 100;