<% /*
    $Revision$
    $Id$

    File:           model_prs_kostenplaatsgrp.inc

    Description:    Model voor prs_kostenplaatsgrp

    Context:

    Notes:
*/
%>
<!-- #include file="../api2/model_prs_kostensoort.inc" -->
<!-- #include file="../api2/model_prs_kostencombinatie.inc" -->
<%

function model_prs_kostenplaatsgrp()
{
    this.records_name = "costcentregroups";
    this.record_name = "costcentregroup";
    this.table = "prs_kostenplaatsgrp";
    this.primary = "prs_kostenplaatsgrp_key";
    this.autfunction = "WEB_FINMSU";
    this.record_title = L("lcl_prs_kostenpl_group");
    this.records_title = L("lcl_kpn_groep_frame");

    this.fields = {
        "id": {
            "dbs": "prs_kostenplaatsgrp_key",
            "label": L("lcl_key"),
            "typ": "key",
            "hidden_fld": true,
            "required": true,
            "seq": "prs_s_prs_kostenplaatsgrp_key"
        },
        "name": {
            "dbs": "prs_kostenplaatsgrp_oms",
            "label": L("lcl_prs_descr"),
            "typ": "varchar",
            "translate": true,
            "required": true,
            "filter": "like"
        },
        "code": {
            "dbs": "prs_kostenplaatsgrp_nr",
            "label": L("lcl_prs_number"),
            "typ": "varchar",
            "translate": true,
            "filter": "like"
        },
        "kpgfinlimit1": {
            "dbs": "prs_kostenplaatsgrp_fin_limit1",
            "label": L("lcl_prs_kpg_fin_limit1"),
            "typ": "number"
        },
        "kpgfinlimit2": {
            "dbs": "prs_kostenplaatsgrp_fin_limit2",
            "label": L("lcl_prs_kpg_fin_limit2"),
            "typ": "number"
        },
        "person": {
            "dbs": "prs_perslid_key",
            "label": L("prs_kpg_fiat1"),
            "typ": "key",
            "foreign" : "prs_perslid"
        },
        "personfiat2": {
            "dbs": "prs_kostenplaatsgrp_fiat2_key",
            "label": L("prs_kpg_fiat2"),
            "typ": "key",
            "foreign" : "prs_perslid"
        },
        "personfiat3": {
            "dbs": "prs_kostenplaatsgrp_fiat3_key",
            "label": L("prs_kpg_fiat3"),
            "typ": "key",
            "foreign" : "prs_perslid"
        },
        "grouplimit": {
            "dbs": "prs_kostenplaatsgrp_limiet",
            "label": L("lcl_prs_limiet"),
            "typ": "number"
        },
        "limitperiod": {
            "dbs": "prs_kostenplaatsgrp_limperiode",
            "label": L("lcl_prs_limietperiode"),
            "typ": "number",
            "LOV":  "0;" + L("lcl_prs_none") +
                   ";1;" + L("lcl_prs_month") +
                   ";2;" + L("lcl_prs_year")
        },
        "kpcount": {
          "dbs": "nn_leden",
          "sql": "(SELECT COUNT(*) "
                + "  FROM prs_kostenplaats"
                + " WHERE prs_kostenplaats.prs_kostenplaatsgrp_key = prs_kostenplaatsgrp.prs_kostenplaatsgrp_key"
                + "   AND prs_kostenplaats_verwijder IS NULL)",
          "label": L("lcl_menu_fin_kostenplaatsen"),
          "readonly": true,
          "typ": "number"
        }
    };

        this.includes = {
            "costcombinations": {
                "model": new model_prs_kostencombinatie(),
                "joinfield": "group",
                "enable_update": true,
                "multiadd": "costtype"
            }
        };

if (0) {
        sql = "SELECT SUM(k.prs_kostenplaats_limiet) gebruikt_budget"
            + "  FROM prs_kostenplaatsgrp kpg"
            + "     , prs_kostenplaats k"
            + " WHERE kpg.prs_kostenplaatsgrp_key = k.prs_kostenplaatsgrp_key"
            + "   AND kpg.prs_kostenplaatsgrp_key = " + kpngroep_key;
        oRs = Oracle.Execute(sql);
        var gebruikt_budget = oRs("gebruikt_budget").Value;
        oRs.close();
        if (kpngrp_limiet - gebruikt_budget > 0)
        {
          BLOCK_START("kpnGrp", L("lcl_prs_budgettering"), { "icon": "fa-money-check-dollar-pen" });
          ROFIELDTR("fldfreebudget" + (gebruikt_budget > kpngrp_limiet? " hot" : ""), L("lcl_prs_afwijking_budget") + "&nbsp;" + L("lcl_valutasign"), (kpngrp_limiet - gebruikt_budget), {suppressEmpty: true, datatype: "currency"});
          BLOCK_END();
        }
}

    function exceeds_budgetkps(kpg_key, bedrag)
    {
        sql = "SELECT SUM(k.prs_kostenplaats_limiet) totaal_kp_budget"
            + "  FROM prs_kostenplaatsgrp kpg"
            + "     , prs_kostenplaats k"
            + " WHERE kpg.prs_kostenplaatsgrp_key = k.prs_kostenplaatsgrp_key"
            + "   AND kpg.prs_kostenplaatsgrp_key = " + kpg_key;
        oRs = Oracle.Execute(sql);
        var totaal_kp_budget = oRs("totaal_kp_budget").Value || 0;
        oRs.Close();

        return bedrag < totaal_kp_budget;
    }


    var gparams = {};
    if (S("bgt_enabled"))
    {
        this.fields["budgetdiscipline"] = {
            "dbs": "prs_kpdisc.ins_discipline_key",
            "label": L("bgt_discipline_omschrijving"),
            "typ": "key",
            "foreign": bgt_budgetdiscipline_foreign(),
            "hidden_fld": true
        };

        var get_tbl = "(SELECT DISTINCT"
                    + "        prs_kostenplaatsgrp_key"
                    + "      , ins_discipline_key"
                    + "   FROM prs_kostenplaats) prs_kpdisc";
        gparams = {
            GET: {
                tables: [get_tbl],
                wheres: ["prs_kostenplaatsgrp.prs_kostenplaatsgrp_key = prs_kpdisc.prs_kostenplaatsgrp_key(+)"]
            }
        };
    }

    this.REST_GET    = generic_REST_GET(this, gparams);
    this.REST_POST   = generic_REST_POST(this);
    this.REST_PUT    = function (params, jsondata, the_key)
                        {
                            if (exceeds_budgetkps(the_key, jsondata.grouplimit))
                            { // Is de som van de kostenplaatslimieten(budgetten) lager dan de limiet(budget) van hun kostenplaatsgroep.
                              abort_with_warning(L("lcl_prs_exceed_limitkpg"));
                            }
                            return generic_REST_PUT(this)(params, jsondata, the_key);
                        }
    this.REST_DELETE = generic_REST_DELETE(this);
}
%>