Загрузка данных


CREATE OR REPLACE FUNCTION mtrustgate.get_list_account_balances_bu(p_period date, p_ogrn character varying, p_service_type character varying, p_account text)
 RETURNS TABLE(account text, debitbalance numeric, creditbalance numeric, uidpensionscheme text, uidsubtypeactivity text)
 LANGUAGE plpgsql
AS $function$

  declare

    basePath     text;

    endPath      text;

    body_content text;

    v_header_out text;

    v_typeofactivity int;

    respCode     int4;

    resp_b       bytea;

    resp_text    text;



  begin

    select case p_service_type 

           when 'OPS' then 1

           when 'NPO' then 2

           when 'PDS' then 3

           else '0'

           end

    into v_typeofactivity;

    

    if v_typeofactivity = 0 then

      RAISE NOTICE 'Не поддерживается вид деятельности';

      return query 

      select null, null, null, null, null;

    end if;



	 --bath path:

      select m.value 

      into basePath

      from mtrustgate.misc m

      where m.code = 'N00B02';



      --end-point:

      select m.value 

      into endPath

      from mtrustgate.misc m

      where m.code = 'S00S01';

	  

    body_content = concat('<?xml version="1.0" encoding="utf-8"?>

      <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 

                        xmlns:npf="http://www.futurenpf.ru/npfAccountBalances">

        <soapenv:Header/>

        <soapenv:Body>

          <npf:GetListAccountBalances>

            <npf:period>', p_period, '</npf:period>

            <npf:ogrn>', p_ogrn, '</npf:ogrn>

            <npf:typeofactivity>', v_typeofactivity,'</npf:typeofactivity>

            <npf:listofaccounts>', p_account, '</npf:listofaccounts>

          </npf:GetListAccountBalances>

        </soapenv:Body>

      </soapenv:Envelope>

    ');

   

	  perform curl.curl_easy_reset();

    perform curl.curl_easy_setopt_url(basePath);

    perform curl.curl_easy_setopt_post(1);

    perform curl.curl_easy_setopt_username('robotws');

    perform curl.curl_easy_setopt_password('Xe3KY7ve');

    

    perform curl.curl_easy_getinfo_content_type(concat('application/soap+xml; charset=utf-8; action="http://www.futurenpf.ru/npfAccountBalances/', endPath, '"'));

    perform curl.curl_easy_setopt_postfields(convert_to(body_content, 'utf-8'));

    perform curl.curl_easy_setopt_ssl_verifypeer(0);

    perform curl.curl_easy_setopt_ssl_verifyhost(0);

    perform curl.curl_easy_setopt_ssl_verifystatus(0);

    perform curl.curl_easy_perform();

     

    resp_b := curl.curl_easy_getinfo_header_out();

    v_header_out := convert_from(resp_b, 'utf-8');

    respCode := curl.curl_easy_getinfo_response_code();

    resp_b:= curl.curl_easy_getinfo_data_in();

    resp_text:= convert_from(resp_b,'UTF8');

   

    RAISE NOTICE 'header: %', v_header_out;

    RAISE NOTICE ' CONTEXT: %', resp_text;



    return query

    WITH xml_input AS (

      SELECT resp_text::XML AS xml_data

    )

    SELECT 

      x.account::TEXT,

      COALESCE(x.debit_balance::TEXT::NUMERIC, 0) AS debit_balance,

      COALESCE(x.credit_balance::TEXT::NUMERIC, 0) AS credit_balance,

      x.uid_pension_scheme::TEXT,

      x.uid_subtype_activity::TEXT

    FROM xml_input,

    LATERAL XMLTABLE(

      xmlnamespaces(

        'http://www.futurenpf.ru/npfAccountBalances' AS m,

        'http://schemas.xmlsoap.org/soap/envelope/' AS soap

      ),

      '/soap:Envelope/soap:Body/m:GetListAccountBalancesResponse/m:return/m:AccountBalances'

      PASSING xml_data

      COLUMNS

        account VARCHAR(50) PATH 'm:Account',

        debit_balance TEXT PATH 'm:DebitBalance',

        credit_balance TEXT PATH 'm:CreditBalance',

        uid_pension_scheme TEXT PATH 'm:UIDPensionScheme',

        uid_subtype_activity TEXT PATH 'm:UIDSubTypeActivity'

    ) AS x;



  end;

 

$function$