<% /*
    $Revision$
    $Id$

    File:           model_fin_factuurregel.inc

    Description:    Model voor fin_factuurregel

    Context:

    Notes:
*/
%>
<%

function model_fin_factuurregel()
{
    this.records_name = "invoicerows";
    this.record_name = "invoicerow";
    this.table = "fin_factuurregel";
    this.primary = "fin_factuurregel_key";
    this.autfunction = "WEB_BGTUSE";  // "WEB_EXTFIN"
    this.record_title = L("lcl_verkoopfactuurregel");
    this.records_title = L("fin_invoicerows");


    this.fields = {
        "id": {
            "dbs": "fin_factuurregel_key",
            "label": L("lcl_key"),
            "typ": "key",
            "hidden_fld": true,
            "required": true,
            "seq": "fin_s_fin_factuurregel_key"
        },
        "invoice": {
            "dbs": "fin_factuur_key",
            "label": L("lcl_fin_invoice_number"),
            "typ": "key",
            "foreign": {
                "tbl": "(SELECT fin_factuur_key"
                     + "      , fin_factuur_nr ||' '|| fin_factuur_opmerking oms"
                     + "   FROM fin_factuur"
                     + ")",
                "key": "fin_factuur_key",
                "desc": "oms"
            }
        },
        "sequence": {
            "dbs": "fin_factuurregel_nr",
            "label": L("lcl_ins_volgnr"),
            "typ": "number"
        },
        "reference": {
            "dbs": "fin_factuurregel_referentie",
            "label": L("lcl_fin_referentie"),
            "typ": "varchar"
        },
        "description": {
            "dbs": "fin_factuurregel_omschrijving",
            "label": L("lcl_fin_remark"),
            "typ": "varchar"
        },
        "vatvalue": {
            "dbs": "fin_btwtabelwaarde_key",
            "label": L("lcl_fin_btwtarief"),
            "typ": "key",
            "foreign": {
                "tbl": "fin_btwtabelwaarde",
                "key": "fin_btwtabelwaarde_key",
                "desc": "fin_btwtabelwaarde_oms"
            }
        },
        "amount": {
            "dbs": "fin_factuurregel_totaal",
            "label": L("lcl_fin_CO_sum"),
            "typ": "float",
            "iscurrency": true,
            "total": true
        },
        "vat": {
            "dbs": "fin_factuurregel_btw",
            "label": L("lcl_fin_btwsum"),
            "typ": "float",
            "iscurrency": true,
            "total": true
        }
    };

    this.list = {
        "columns": [
            "sequence",
            "reference",
            "description",
            "vatvalue",
            "amount",
            "vat"
        ]
    };

    this.edit = {
        "modal": true
    };

    this.hook_pre_edit = function(obj, fld)
    {
        fld.vat.readonly = true;
    }

    function get_btw_bedrag(btw_key, bedrag_excl)
    {
        var sql = "SELECT fin_btwtabelwaarde_perc"
                + "     , fin_btwtabelwaarde_verlegd"
                + " FROM fin_btwtabelwaarde"
                + " WHERE fin_btwtabelwaarde_key = " + btw_key;
        oRs = Oracle.Execute(sql);
        // Er moet een waarde zijn.
        var btw_perc = oRs("fin_btwtabelwaarde_perc").value;
        var verlegd = oRs("fin_btwtabelwaarde_verlegd").value;
        oRs.Close();
        var btw_bedrag = bedrag_excl * btw_perc / 100;
        return btw_bedrag;
    }

    this.hook_pre_post = function(params, obj)
    {
        // Wordt alleen gebruikt bij toevoegen.
        obj.vat = get_btw_bedrag(obj.vatvalue, obj.amount);
    }

    this.hook_pre_put = function(params, obj, key)
    {
        // Wordt alleen gebruikt bij wijzigen.
        obj.vat = get_btw_bedrag(obj.vatvalue, obj.amount);

        // Redundante info fan fin_factuur bijwerken.
        var sql = "UPDATE fin_factuur ff"
                + "   SET ff.fin_factuur_totaal = (SELECT SUM(fin_factuurregel_totaal)"
                                                + "  FROM fin_factuurregel fr"
                                                + " WHERE fr.fin_factuur_key = ff.fin_factuur_key"
                                                + "   AND fr.fin_factuurregel_key <> " + key
                                                + ") + " + obj.amount
                + "     , ff.fin_factuur_totaal_btw = (SELECT SUM(fin_factuurregel_btw)"
                                                    + "  FROM fin_factuurregel fr"
                                                    + " WHERE fr.fin_factuur_key = ff.fin_factuur_key"
                                                    + "   AND fr.fin_factuurregel_key <> " + key
                                                    + ") + " + obj.vat
                + " WHERE ff.fin_factuur_key = (SELECT fin_factuur_key"
                                             + "  FROM fin_factuurregel"
                                             + " WHERE fin_factuurregel_key = " + key
                                             + ")";
        Oracle.Execute(sql);
    }

    this.REST_GET    = generic_REST_GET(this);
    this.REST_POST   = generic_REST_POST(this);
    this.REST_PUT    = generic_REST_PUT(this);
    this.REST_DELETE = generic_REST_DELETE(this);
}
%>