<%@ LANGUAGE="JavaScript" %>
<% /*
     $Revision$
     $Id$
*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="fin_flexkenmerk.inc" -->
<!-- #include file="fin.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->

<%
FCLTHeader.Requires({ plugins: ["suggest", "jQuery"],
                      js: ["date.js", "../fin/fin_show_factuur.js", "../fin/fin.js", "../fin/fin_list.js"]
                    });

var fin_key = getQParamInt("fin_key");

var this_fin = fin.func_enabled_factuur(fin_key); // Wat heb ik zoal aan rechten
var fin_factuur = this_fin.factuur_info;
var ref_info = this_fin.referentieinfo;

var hasFOBOread = this_fin.canFORead || this_fin.canBORead;
user.auth_required_or_abort(this_fin.canReadAny);

var sql = "SELECT SUM(COALESCE(i.bes_bestelopdr_item_aantal,     0)) besteld"
        + "     , SUM(COALESCE(i.bes_bestelopdr_item_aantalontv, 0)) geleverd"
        + "     , MAX(o.bes_bestelopdr_status)  status"
        + "  FROM fin_factuur f"
        + "     , bes_bestelopdr o"
        + "     , bes_bestelopdr_item i"
        + " WHERE f.bes_bestelopdr_key = i.bes_bestelopdr_key"
        + "   AND f.bes_bestelopdr_key = o.bes_bestelopdr_key"
        + "   AND f.fin_factuur_key = " + fin_key;
var oRs = Oracle.Execute(sql);
var bes_info = { status: oRs("status").Value
               , besteld: oRs("besteld").Value
               , geleverd: oRs("geleverd").Value
               };
oRs.Close();
bes_info.attention = (bes_info.status == 4 || bes_info.geleverd == 0 || bes_info.besteld > bes_info.geleverd);

// Haal de referentie gegevens op
var subjectMail = L("lcl_fin_invoice") + " " + fin_key;
var urlMail = "../shared/queuemail.asp?pcode=FINMAI&defemail_key=-1&key=" + fin_key
            + "&subject=" + Server.URLencode(subjectMail)
            + "&mailfrom=" + (hasFOBOread? 1 : 0)
            + "&pmodule=FIN"
            + "&pniveau=F";
%>

<html>
  <head>
<%
    FCLTHeader.Generate();
%>
    <script type="text/javascript">

      var fin_key = <%=fin_key%>;
      $(function()
      {
        $("div.divrstable table thead").addClass("float-alone"); // force float without fcltheader
        FcltMgr.setTitle(L("lcl_fin_invoice") + " <%=fin_key%>", { hot: false });
      });

      function fin_mail()
      {
        var subject = "<%=safe.jsstring(subjectMail)%>";
        var url = "<%=safe.jsstring(protectQS.create(urlMail))%>";
        FcltMgr.openModalDetail(url, L("lcl_fin_noti_fin_email"), { callback: finMailCallback });
      }
    </script>
  </head>

  <body class="showmode">
  <% SUBFRAME_START(); %>
<%
    var refoms
    var refurl = "";
    var reftitle = "";
    if (ref_info.ref_type == "O")
    {
      refoms = L("lcl_shared_order");
      refurl = "appl/mld/mld_opdr.asp?urole=fo&opdr_key=" + fin_factuur.mldopdr_key;
      reftitle = (fin_factuur.mld_prefix != null? fin_factuur.mld_prefix : "") + fin_factuur.mld_key + "/" + fin_factuur.opdr_volgnr;
    }
    else if (ref_info.ref_type == "B")
    {
      refoms = L("lcl_bes_bestelling");
      refurl = "appl/bes/bes_opdr.asp?urole=fo&ordernr=" + fin_factuur.besopdr_key;
      reftitle = S("bes_bestelling_prefix") + fin_factuur.bes_key + (fin_factuur.bes_volgnr? "/" + fin_factuur.bes_volgnr : "");
    }
    else if (ref_info.ref_type == "C")
    {
      refoms = L("lcl_contract");
      refurl = "appl/cnt/cnt_contract.asp?cnt_key=" + fin_factuur.cnt_key;
      reftitle = "C" + fin_factuur.cnt_nr +(fin_factuur.cnt_versie ? "." + fin_factuur.cnt_versie : "");
    }
    var referentiegegevens = fin.analysereferentie(reftitle);

    var buttons = [];
    if (fin_factuur.fin_verwijder == null) // Anders mag je niets meer
    {
      if (this_fin.canChange)
        buttons.push({title: L("lcl_change"),  icon: "fa-fclt-edit", action:"fin_change("+fin_factuur.fin_status_key+")" });

      if (this_fin.canAccept || this_fin.canGoedkeur)
      {
        if (this_fin.canAccept)
          buttons.push({title: L("lcl_approve"),  icon: "fa-check",  action: "fin_approve()"});
        else
          buttons.push({title: L("lcl_goedkeur"),  icon: "fa-check",  action: "fin_goedkeuren()"});
        if (this_fin.canReject)
          buttons.push({title: L("lcl_reject"),  icon: "fa-times",  action: "fin_reject()"}); // Afwijzen bij het Fiatteren(F) of Goedkeuren(G).
      }
      if (this_fin.canUnapprove)
        buttons.push({title: L("lcl_unapprove"),  icon: "fa-bullhorn",  action:"fin_unapprove()"});
      if (this_fin.canUnReject)
        buttons.push({title: L("lcl_unreject"),  icon: "fa-bullhorn",  action:"fin_unreject()"});
      if (this_fin.canDelete)
        buttons.push({title: L("lcl_delete"),  icon: "fa-trash-alt",  action:"fin_delete()"});

      if (this_fin.canCopy)
          buttons.push({title: L("lcl_fin_copy"),  icon: "fa-copy", action:"fin_copy()" });
      buttons.push({ icon: "fa-print", title: L("lcl_print"),          action: 'fin_print()' });
      buttons.push({ icon: "fa-envelope", title: L("lcl_noti_fin_email"), action: 'fin_mail()' });
    }

    IFRAMER_HEADER(L("lcl_fin_frame_algemeen"), buttons);
      if (fin_factuur.fin_verwijder != null)
      {
        SIMPLE_BLOCK_START(); %>
        <div class="fatal"><%=L("lcl_fin_is_deleted")%></div>
        <% SIMPLE_BLOCK_END();
      }

        BLOCK_START("finInfo", L("lcl_fin_info"), { icon: "fa-file-invoice" });
          ROFIELDTR("fld", L("lcl_fin_referentie"), ref_info.referentie, {suppressEmpty: true}); // Referentie
          ROFIELDTR("flddate", L("lcl_fin_findate"), toDateString(fin_factuur.fin_date)); // Factuur datum
          ROFIELDTR("fld", L("lcl_fin_invoice_nr_extern"), fin_factuur.fin_nr != null? fin_factuur.fin_nr : ""); // Extern factuur nummer
          ROFIELDTR("fld", L("lcl_fin_location_scope"), fin_factuur.cnt_contract_plaats_key > 0? fin_factuur.cnt_plaats_omschrijving : "", {suppressEmpty: true}); // contract_plaats
          ROFIELDTR("fldshort", L("lcl_fin_divide_period"), fin_factuur.fin_boekm != null? fin_factuur.fin_boekm : ""); // Verdeelperiode
          ROFIELDTR("fld", "<nobr>" + L("lcl_fin_debtor_nr") + "</nobr>", fin_factuur.fin_debiteur, {suppressEmpty: true}); // Eigen debiteurnummer
          if (S("fin_factuur_verlegdmode") & 1 == 1)
              ROFIELDTR("fldshort", L("lcl_fin_gbedrag"), fin_factuur.fin_gbedrag, {datatype: "currency", prefix: true, suffix: true});
          ROFIELDTR("fld", L("lcl_shared_charge_type"), fin_factuur.fin_costsrt); // Kostensoort
          ROFIELDTR("fld", L("lcl_fin_goedkeurder"), fin_factuur.fin_perslid_goedkeur, {suppressEmpty: true}); // Goedkeurder.
          //ROFIELDTR("fld", L("lcl_shared_created_by"), fin_factuur.fin_perslid_user); // Aangemaakt door
          ROFIELDTR("fld", L("lcl_fin_fin_status"), fin_factuur.fin_status_oms  ); // Factuurstatus

          if (this_fin.canWriteFlags) {
            var finKey = fin_factuur.fin_key;
            var flagKey = fin_factuur.flag || 0;
            var ttl = L("lcl_fin_flag" + flagKey || 0 );
            var icon = I("fa-fclt-flag" + (flagKey == 0 ? "0" : ""));
            //Markering (Bolletjes)
            var displ = "<td class='label'>"
                      +   "<label >Markering</label>"
                      +   "</td>"
                      +   "<td>"
                      +     "<div class='clickParent fin-flag-icon' onclick='toggleFlag(event, " + finKey + ");'title='" + safe.htmlattr(ttl) + "'>"
                      +       "<span id='finflag" + finKey + "' flagkey='" + flagKey + "' class='finflag" + flagKey + "'>" + icon + "</span>"
                      +       "<span style='display:none'>" + (flagKey||999) + "</span>"
                      +       "<span id='lbl-finflag" + finKey + "' class='fld'>" + safe.htmlattr(ttl) + "</span>"
                      +     "</div>"
                      + "</td>";
            Response.Write(displ);
          } else if (fin_factuur.flag > 0) { // Flag
              ROFIELDTR("fld", L("lcl_fin_flags"), L("lcl_fin_flag" + fin_factuur.flag), { icon: "fa-fclt-flag", iconclass: "finflag" + fin_factuur.flag });
          }

          ROFIELDTR("fld", L("lcl_fin_invoice_source"), fin_factuur.fin_bron_oms);
          ROTEXTAREATR("fldtxt", L("lcl_fin_remark"), (fin_key != -1? fin_factuur.fin_opm : ""), {suppressEmpty: true});
          if (fin_factuur.fin_status_key == 1)
            ROTEXTAREATR("fldtxt", L("lcl_fin_remark_reject"), fin_factuur.fin_opm_afw);
        BLOCK_END();

        BLOCK_START("finRefInfo", L("lcl_fin_referentie_info"), {icon: "fa-paperclip"});
          // Details was alleen te zien als (FINBOF_write && status == 2)
          var params = { infoPointer: { Url: refurl,
                                        Title: reftitle
                                      }
                       };
          ROFIELDTR("fld", refoms, reftitle, params); // Melding
          if (ref_info.ref_type == "O")
          {
            ROFIELDTR("fld", L("lcl_mld_typeopdr"), ref_info.typeopdr_omschr); // Opdrachttype melding.
            ROFIELDTR("fld", L("lcl_opdr_id"), ref_info.opdr_id, {suppressEmpty: true}); // Referentienr.
          }
          params = {};
          if (this_fin.canReqRelDetails)
          {
            if (ref_info.lev_uit_type == "B")
              prslink = "appl/prs/prs_bedrijf.asp?bedrijf_key=" + ref_info.lev_uit_key;
            else if (ref_info.lev_uit_type == "A")
              prslink = "appl/prs/prs_afdeling.asp?key=" + ref_info.lev_uit_key;
            else
              prslink = "appl/prs/prs_perslid.asp?prs_key=" + ref_info.lev_uit_key;
            params = { suppressEmpty: true,
                       infoPointer: { Url: prslink,
                                      Title: ref_info.lev_uit
                                    }
                     };
          }
          switch (ref_info.lev_uit_type)
          {
              case "A": { var label_levuit = L("lcl_department"); break; }
              case "P": { var label_levuit = L("lcl_name"); break; }
              case "B":
              default:  { var label_levuit = L("lcl_company"); break; }
          }
          ROFIELDTR("fld", label_levuit, (ref_info.lev_uit? ref_info.lev_uit : ""), params); // Leverancier/Uitvoerder
          ROFIELDTR("fld", L("lcl_prs_companies_leverancier_nr"), (ref_info.lev_uit_nr? ref_info.lev_uit_nr : ""), {suppressEmpty: true}); // Leveranciernr.
          ROFIELDTR("fld", L("lcl_prs_relatietype"), (ref_info.reltype_oms? ref_info.reltype_oms : ""), {suppressEmpty: true}); // Relatietype leverancier.
          ROTEXTAREATR("fldtxt", L("lcl_prs_company_remark"), (ref_info.lev_opm? ref_info.lev_opm : ""), {suppressEmpty: true}); // Opmerking leverancier.

          // Return waarde fin.getnomatchreasoncontract():
          // 00 (0): No match
          // 01 (1): Termijn kosten matchen
          // 10 (2): Totaal kosten matchen
          // 11 (3): Termijn kosten en totaal kosten matchen
          var matchresult = 3; // Standaard geen class nomatch
          if (ref_info.ref_type == "C" && fin_factuur.fin_status_key == 2)
          {
            matchresult = fin.getnomatchreasoncontract(ref_info, fin_factuur.totaalgefactureerd, fin_factuur.fin_totaal);
          }
          // TODO: hier graag vermelden of het incl of excl BTW is
          var totkosten = (ref_info.totbedrag? ref_info.totbedrag : "");
          var showkosten = ref_info && (ref_info.totbedrag || ref_info.levkosten || ref_info.korting);
          if (ref_info.ref_type=="B")
          {   // levkosten en korting bestaan alleen voor ref_type=B
              totkosten += ref_info.levkosten - ref_info.korting;
          }
          ROFIELDTR("fldtotkosten" + ((matchresult & 2) != 2? " nomatch" : ""), L("lcl_fin_CO_sum"), (showkosten ? totkosten : ""),
                                             {suppressEmpty: true, datatype: "currency", prefix: true, suffix: true}); // Contract/Opdrachtbedrag

          if (ref_info.ref_type == "C")
          {
            ROFIELDTR("fldtermkosten" + ((matchresult & 1) != 1? " nomatch" : ""),
                      L("lcl_cnt_period_sum") + (ref_info.factuurschema? " " + L("lcl_fin_divide_period").toLowerCase() : ""),
                      ref_info.termbedrag,
                      {suppressEmpty: true, datatype: "currency", prefix: true, suffix: true}); // Contracttermijnbedrag
          }
          ROFIELDTR("fld" + (bes_info.attention?" finattention":""), L("lcl_status"), (ref_info.status? ref_info.status : ""),{suppressEmpty: true}); // Status
          ROFIELDTR("fld", L("lcl_shared_account"), ( ref_info.kostenplaats_naam ), { id: "kostenplaats_naam", suppressEmpty: true}); // kostenplaats nr+omschr

          ROFIELDTR("flddate", L("lcl_fin_start_date"), (ref_info.startdatum? ref_info.startdatum : ""), { id: "startdate", suppressEmpty: true });
          ROFIELDTR("flddate", L("lcl_fin_end_date"), (ref_info.einddatum? ref_info.einddatum : ""), { id: "enddate", suppressEmpty: true });
          ROFIELDTR("fldfinsom", L("lcl_fin_invoiced"), (ref_info.gefactureerd? S("currency_pref") + safe.curr(ref_info.gefactureerd) + S("currency_suff") : ""), {datatype: "currency", suppressEmpty:true}); // Reeds gefactureerd (ex.BTW)

          ROFIELDTR("fldfinsom", L("lcl_fin_invoiced_year").format(fin_factuur.fin_boekm_jaar), (ref_info.gefactureerd_jaar? S("currency_pref") + safe.curr(ref_info.gefactureerd_jaar) + S("currency_suff") : ""), {suppressEmpty:true}); // Reeds gefactureerd (ex.BTW) over 2009

          if (ref_info.ref_type == "C" && ref_info.factuurschema)
          {
            // Betaling via het facturatieschema (verdeelperioden).
            ROFIELDTR("fldfinsom",
                      L("lcl_fin_invoiced") + " " + L("lcl_fin_divide_period").toLowerCase(),
                      (ref_info.gefactureerd_verdeelperiode || ref_info.gefactureerd_verdeelperiode == 0? S("currency_pref") + safe.curr(ref_info.gefactureerd_verdeelperiode) + S("currency_suff") : ""),
                      {datatype: "currency", suppressEmpty:true}); // Reeds gefactureerd in de verdeelperiode (ex.BTW)
          }

          // Opdracht omschrijving. Alleen als ref_type is "M" (melding opdrachten)
          if (ref_info.show_omschr)
          {
            ROTEXTAREATR("fldtxt", L("lcl_descr"), ref_info.opdr_omschr, {suppressEmpty: true});
          }

          // Locatie gegevens. Alleen als ref_type is "C" (contracten)
          var loc_geg_string = [];
          if (ref_info.loc_geg && ref_info.loc_geg.length > 0)
          {
            for (i = 0; i < ref_info.loc_geg.length; i++)
            {
              loc_geg_string.push(ref_info.loc_geg[i].loc_desc);
            }
          } %>
          <tr id="tr_loc_omschr" <%=(ref_info.loc_geg && ref_info.loc_geg.length > 0)? "" : 'style="display: none"'%>>
            <td class="label"><label><%=L("lcl_location")%></label></td>
            <td><div class="fldtxt" id="loc_omschr"><%=safe.html(loc_geg_string.join(",\n"))%></div></td>
          </tr>
  <%
        BLOCK_END();

        if (ref_info.aantalfacturen && ref_info.aantalfacturen > 1)
        {
          BLOCK_START("finInvPartInfo", L("lcl_fin_deelfactuurgeg"), {icon: "fa-abacus"});
          // Aantal facturen met dezelfde factuurnummer
          ROFIELDTR("fldshort", L("lcl_fin_aantal_facturen"), (ref_info.aantalfacturen? ref_info.aantalfacturen : "0")); // Aantal facturen met dezelfde factuurnummer
          // Totaal bedrag van het aantal facturen met dezelfde factuurnummer
          ROFIELDTR("fldshort", L("lcl_fin_totaal_bedrag"), ref_info.totaalbedrag, {datatype: "currency", prefix: true, suffix: true}); // Totaal bedrag van het aantal facturen met dezelfde factuurnummer
          // Totaal bedrag inclusief BTW van het aantal facturen met dezelfde factuurnummer
          ROFIELDTR("fldshort", L("lcl_fin_totaal_bedrag_btw"), (ref_info.totaalbedrag ? (ref_info.totaalbedrag + ref_info.totaalbtwbedrag) : "0"),
                                                                                    {datatype: "currency", prefix: true, suffix: true}); // Totaal bedrag inclusief BTW van het aantal facturen met dezelfde factuurnummer
          BLOCK_END();
        }

            generateFlexKenmerkCode ({ fin_key: fin_key, // Factuurnummer
                                       reado  : true,
                                       kenmerk_niveau: "F"
                                     });

        BLOCK_START("finItems", L("lcl_fin_invoicerows"), {icon: "fa-file-alt", wide: true});
            fin.showReadableFINregels(fin_factuur); // de factuur regels
        BLOCK_END();
%>
<% SUBFRAME_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
