<% /*
     $Revision$
     $Id$

    File:        bedrijf_list.inc
    Description: Definieert de serverside functie bedrijf_list () die een lijst van bedrijven toont die
                 voldoen aan de gegeven parameters/criteria, binnen de readautorisaties van de user.
    Parameters:  -
    Context:     -

    Note:

*/ %>
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../Shared/getkenmerksql.inc" -->
<!-- #include file="prs.inc" -->

<%
FCLTHeader.Requires({plugins:["suggest","jQuery"],
                     js: ["jquery-ui.js"]});

function bedrijf_list (pautfunction, params)
{
  var authparams = user.checkAutorisation(pautfunction);

  // AUTORISATIES
  // Ik zoek wat zaken van de huidige gebruiker uit, die gevolgen kunnen hebben voor met name de actions
  // Autorisatie check is al gedaan in prs_perslid_search_list.asp


  // Voor resulttable de globalen zetten; zou nog anders moeten.
  var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc.
  var isIntern= params.isIntern;
  var showall = params.showall;
  var naam = params.naam.toUpperCase();
  var levNr = params.levNr;
  var postcode = params.postcode;
  var contactpersoon = params.contactpersoon;
  var plaats = params.plaats;
  var locatie_key = params.locatiekey;
  var gebouw_key = params.gebouwkey;
  var dienst_key = params.dienstkey;
  var reltype_key = params.reltypekey;
  var isLeverancier = params.isLeverancier;
  var isUitvoerende = params.isUitvoerende;
  var isContractant = params.isContractant;
  var isHuurder     = params.isHuurder;
  var tooningids = params.tooningids;

  // Controleer of er diensten zijn
  var sql = "SELECT prs_dienst_key FROM prs_dienst";
  var oRs = Oracle.Execute( sql );
  var there_is_dienst = false;
  var showexploded = false; // geen diensten of locatie/gebouwen, tenzij een van deze gegeven is (ander veel te veel)
  if ( !oRs.eof ) {
        there_is_dienst=true;
        showexploded = (locatie_key || gebouw_key || dienst_key);
  }

%>
  <html>
    <head>
<%
      FCLTHeader.Generate({ outputmode: outputmode });
%>
    <script>
        function prsEdit(row)
        {
          $(row).addClass('dirty');
          var bedrijf_key = row.getAttribute("ROWKEY");
          url = "appl/prs/prs_bedrijf.asp?bedrijf_key=" + bedrijf_key + "&intern=<%=isIntern?1:0%>";
          FcltMgr.openDetail(url, '<%=L("lcl_company")%>' + ' ' + bedrijf_key);  // TODO
        }
    </script>
    </head>

    <body id="listbody">
<%
      sql = "SELECT b.prs_bedrijf_key"
           + ",     b.prs_bedrijf_naam"
           + ",     b.prs_bedrijf_bezoek_adres"
           + ",     b.prs_bedrijf_bezoek_plaats"
           + ",     b.prs_bedrijf_contact_persoon"
           + ",     b.prs_bedrijf_naam_upper"
           + ",     b.prs_bedrijf_leverancier"
           + ",     b.prs_bedrijf_uitvoerende"
           + ",     b.prs_bedrijf_contract"
           + ",     b.prs_bedrijf_huurder"
           + ",     b.prs_bedrijf_post_adres"
           + ",     b.prs_bedrijf_post_postcode"
           + ",     b.prs_bedrijf_post_plaats"
           + ",     b.prs_bedrijf_post_land"
           + ",     b.prs_bedrijf_telefoon"
           + ",     b.prs_bedrijf_fax"
           + ",     b.prs_bedrijf_telefoon2"
           + ",     b.prs_bedrijf_email"
           + ",     b.prs_bedrijf_contact_telefoon"
           + ",     b.prs_bedrijf_contact_fax"
           + ",     b.prs_overeenkomst_nr"
           + ",     b.prs_leverancier_nr"
           + ",     (SELECT COUNT(*) FROM prs_bedrijfadres pba WHERE pba.prs_bedrijf_key = b.prs_bedrijf_key) cnttech";
      if (showexploded) {
          sql += ", " + lcl.xsqla('d.prs_dienst_omschrijving', 'd.prs_dienst_key')
               + ",     l.alg_locatie_omschrijving"
               + ",     g.alg_gebouw_omschrijving";
      }
      sql += " FROM prs_bedrijf b";

      if (showexploded) {
          sql += ",     prs_dienst d"
               + ",     prs_bedrijfdienstlocatie dl"
               + ",     alg_v_aanweziglocatie l"
               + ",     alg_v_aanweziggebouw g";
      }

      sql += " WHERE b.prs_bedrijf_verwijder IS NULL";

      if (showexploded) {
          sql += "   AND dl.prs_bedrijf_key(+) = b.prs_bedrijf_key"
               + "   AND d.prs_dienst_key(+) = dl.prs_dienst_key"
               + "   AND l.alg_locatie_key(+) = dl.alg_locatie_key"
               + "   AND g.alg_gebouw_key(+) = dl.alg_gebouw_key";
      }

       if (naam)
           sql+= " AND b.prs_bedrijf_naam_upper LIKE "+safe.quoted_sql_wild("%"+naam+"%");
           
       if (levNr)
           sql+= " AND b.prs_leverancier_nr LIKE "+safe.quoted_sql_wild("%"+levNr+"%");           

       if (contactpersoon)
           sql+= " AND UPPER(b.prs_bedrijf_contact_persoon) LIKE "+safe.quoted_sql_wild("%"+contactpersoon+"%");

       if (postcode)
           sql+= " AND (UPPER(b.prs_bedrijf_bezoek_postcode) LIKE "+safe.quoted_sql_wild("%"+postcode+"%")
                 + "    OR UPPER(b.prs_bedrijf_post_postcode) LIKE "+safe.quoted_sql_wild("%"+postcode+"%") +")";

       if (plaats)
           sql+= " AND (UPPER(b.prs_bedrijf_bezoek_plaats) LIKE "+safe.quoted_sql_wild("%"+plaats+"%")
                 + "    OR UPPER(b.prs_bedrijf_post_plaats) LIKE "+safe.quoted_sql_wild("%"+plaats+"%") +")";

       // Weet dat Of de locatiekey of de gebouwkey ingevuld is (of allebei niet)
       if (locatie_key && !gebouw_key)
           sql+= " AND (dl.alg_locatie_key = " + locatie_key
               + "  OR (dl.alg_locatie_key IS NULL AND dl.alg_gebouw_key IS NULL)"
               + "  OR dl.alg_gebouw_key IN (SELECT alg_gebouw_key FROM alg_gebouw WHERE alg_locatie_key = " + locatie_key+"))";

       if (gebouw_key)
           sql+= " AND (dl.alg_gebouw_key = " + gebouw_key
               + "  OR (dl.alg_gebouw_key IS NULL AND dl.alg_locatie_key IS NULL)"
               + "  OR dl.alg_locatie_key IN (SELECT alg_locatie_key FROM alg_gebouw WHERE alg_gebouw_key = " + gebouw_key + "))";

       if (dienst_key)
           sql+= " AND dl.prs_dienst_key = "+dienst_key;

        if (isIntern)
           sql+= " AND b.prs_bedrijf_intern IS NOT NULL";
        else
           sql+= " AND b.prs_bedrijf_intern IS NULL";

        if (isLeverancier || isUitvoerende || isContractant || isHuurder)
        {
            sql += " AND (";
            if (isLeverancier)
               sql+= " b.prs_bedrijf_leverancier IS NOT NULL";
            else
               sql+= "(1=0) ";  // false OF
            if (isUitvoerende)
               sql+= " OR b.prs_bedrijf_uitvoerende IS NOT NULL";
            if (isContractant)
               sql+= " OR b.prs_bedrijf_contract IS NOT NULL";
            if (isHuurder)
               sql+= " OR b.prs_bedrijf_huurder IS NOT NULL";
            sql += ")";
        }

        if (tooningids)
        {
          sql += " AND b.prs_bedrijf_ingids = 1";
        }

        if (reltype_key)
        {
          sql += " AND b.prs_relatietype_key = " + reltype_key;
        }

        sql += getKenmerkSql("PRS", "b.prs_bedrijf_key");

        sql += " ORDER BY b.prs_bedrijf_naam_upper";
        if (showexploded)
          sql+= ", "+lcl.xsql('prs_dienst_omschrijving', 'd.prs_dienst_key')+", alg_locatie_omschrijving, alg_gebouw_omschrijving";

      /**********************************
       * Callback functies ResultsetTable
       *********************************/
       function fnRol (oRs)
       {
            var res = "";
            if (oRs("prs_bedrijf_leverancier").value == 1)
                res += L("lcl_prs_companies_leverancier").substring(0,1);
            if (oRs("prs_bedrijf_uitvoerende").value == 1)
                res += L("lcl_prs_companies_uitvoerende").substring(0,1);
            if (oRs("prs_bedrijf_contract").value == 1)
                res += L("lcl_prs_companies_contract").substring(0,1);
            if (oRs("prs_bedrijf_huurder").value == 1)
                res += L("lcl_prs_companies_huurder").substring(0,1);
            return res;
       }

      var addurl = "appl/prs/prs_bedrijf.asp?x=x";
      addurl += buildTransitParam(["intern"], params);

      var buttons = []
      if (authparams.PRSwritelevel < 9)
            buttons.push({ icon: "plus.png", title: L("lcl_add"), action: "FcltMgr.openDetail('" + addurl + "', '" + L("lcl_add") + "')" });

      var rst = new ResultsetTable({ keyColumn: "prs_bedrijf_key",
                                     sql: sql,
                                     ID: "bedrijftable",
                                     flexModule: "PRS",
                                     flexId: "prs_bedrijf_key",
                                     filterParams: params,
                                     outputmode: outputmode,
                                     title: (intern?L("lcl_prs_companies_title_int"):L("lcl_prs_companies_title")),
                                     showAll: showall,
                                     buttons: buttons
                                    });

    rst.addColumn(new Column({caption: L("lcl_prs_companies_name"), content: "prs_bedrijf_naam" }));
    
    if (!isIntern)
      rst.addColumn(new Column({caption: L("lcl_prs_companies_leverancier_nr"),   content: "prs_leverancier_nr"}));
    rst.addColumn(new Column({caption: L("lcl_prs_companies_bezoek_adres"), content: "prs_bedrijf_bezoek_adres" }));
    rst.addColumn(new Column({caption: L("lcl_prs_companies_bezoek_plaats"), content: "prs_bedrijf_bezoek_plaats" }));

    // Als ik een dienst opgeef, laat ik die niet zien, maar toon ik de plaatsen
    // waar die dienst wordt geleverd

    if (showexploded) {
        if (dienst_key) {
           if (!locatie_key)
                rst.addColumn(new Column({caption: L("lcl_location"), content: "alg_locatie_omschrijving" }));
           if (!gebouw_key)
                rst.addColumn(new Column({caption: L("lcl_building"), content: "alg_gebouw_omschrijving" }));
        } else {
           rst.addColumn(new Column({caption: L("lcl_prs_companies_dienst"), content: "prs_dienst_omschrijving" }));
           if (locatie_key && !gebouw_key) {
               rst.addColumn(new Column({caption: L("lcl_building"), content: "alg_gebouw_omschrijving" }));
           }
        }
    }
    
    rst.addColumn(new Column({caption: L("lcl_prs_companies_telefoon"),         content: "prs_bedrijf_telefoon"}));

	if (outputmode != 0) // voor printer of naar Excel
	{
      rst.addColumn(new Column({caption: L("lcl_prs_companies_fax"),              content: "prs_bedrijf_fax"}));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_email"),            content: "prs_bedrijf_email"}));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_post_adres"),       content: "prs_bedrijf_post_adres" }));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_post_postcode"),    content: "prs_bedrijf_post_postcode" }));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_post_plaats"),      content: "prs_bedrijf_post_plaats" }));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_post_land"),        content: "prs_bedrijf_post_land" }));
  }
  
  rst.addColumn(new Column({caption: L("lcl_prs_companies_contact_person"), content: "prs_bedrijf_contact_persoon" }));        
  
	if (outputmode != 0) // voor printer of naar Excel
	{  
      rst.addColumn(new Column({caption: L("lcl_prs_companies_contact_telefoon"), content: "prs_bedrijf_contact_telefoon"}));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_contact_fax"),      content: "prs_bedrijf_contact_fax"}));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_overeenkomst_nr"),  content: "prs_overeenkomst_nr"}));
	}
	
  rst.addColumn(new Column({caption: L("lcl_prs_companies_rol"), content: fnRol }));
  if (!isIntern && (user.checkAutorisation("WEB_PRSSYS", true) || user.checkAutorisation("WEB_PRSMGT", true)))
      rst.addColumn(new Column({caption: L("lcl_prs_bedrijfadres_title"), content: "cnttech" }));	

      rst.addAction({image: "../Pictures/spot1.jpg",  action: "prsEdit", caption: L("lcl_edit"), isDefault: true } );

      var cnt = rst.processResultset();
%>
    </body>
  </html>
<%
}
%>
