<% /*
    $Revision$
    $Id$

    File:           model_salesinvoices.inc

    Description:    Verkoopfactuur model.
    Parameters:
    Context:

    Notes:          TODO: definitieve namen geven

*/
%>
<%
function model_fin_verkoopfactuurregels()
{
    this.records_name = "saleinvoicelines";
    this.record_name = "saleinvoiceline";
    this.table = "fin_verkoopfactuur";
    this.primary = "fin_verkoopfactuur_key";
    this.autfunction = "WEB_VERFAC";

    this.record_title = L("fin_verkoopfactuur");
    this.records_title = L("fin_verkoopfactuur_m");
    this.defaultIcon = "fa-file-lines";

//    this.record_title = L("lcl_verkoopfactuurregel"),
//    this.records_title = L("lcl_verkoopfactuurregels");


    this.fields = {
      "id": {
        "dbs": "fin_verkoopfactuur_key",
        "label": L("lcl_fin_verkoopfactuur_key"),
        "typ": "key",
        "seq": "fin_s_fin_verkoopfactuur_key"
      },
      "created": {
        "dbs": "fin_verkoopfactuur_aanmaak",
        "label": L("lcl_fin_verkoopfactuur_aanmaak"),
        "typ": "datetime",
        "readonly": true,
        hidden: true
      },
      "name": {
        "dbs": "fin_verkoopfactuur_id",
        "label": L("lcl_fin_verkoopfactuur_id"),
        "typ": "varchar"
      },
      "head": {
        "dbs": "fin_verkoopfactuurkop_key",
        "label": L("fin_verkoopfactuurkop"),
        "typ": "key"
      },
      "invoicedate": {
        "dbs": "fin_verkoopfactuur_datum",
        "label": L("lcl_fin_verkoopfactuur_datum"),
        "typ": "date"  // date?
      },
      "description": {
        "dbs": "fin_verkoopfactuur_omschr",
        "label": L("lcl_fin_verkoopfactuur_omschr"),
        "typ": "varchar"
      },
      "concerning": {
        "dbs": "fin_verkoopfactuur_xmlnode",
        "label": L("lcl_fin_verkoopfactuur_xmlnode"),
        "typ": "varchar"
      },
      "refkey": {
        "dbs": "fin_verkoopfactuur_refkey",
        "label": L("lcl_fin_verkoopfactuur_refkey"),
        "typ": "key"
      },
      "account": {
        "dbs": "prs_kostenplaats_key",
        "label": L("lcl_prs_kosten"),
        "typ": "key",
        "foreign": "prs_kostenplaats"
      },
      "accountnumber": {  // frozen
        "dbs": "prs_kostenplaats_nr",
        "label": L("lcl_prs_dept_name"),
        "typ": "varchar"
      },
      "accountname": { // frozen
        "dbs": "prs_kostenplaats_omschrijving",
        "label": L("lcl_prs_dept_desc"),
        "typ": "varchar",
        "filter": "like"
      },
      "costcentregroup": {
        "dbs": "prs_kostenplaatsgrp_oms",
        "label": L("lcl_prs_kostenpl_group"),
        "typ": "varchar"
      },
      "costtypedescription": {
        "dbs": "prs_kostensoort_oms",
        "label": L("lcl_charge_type"),
        "typ": "varchar"
      },
      "costtyperemark": {
        "dbs": "prs_kostensoort_opmerking",
        "label": L("lcl_charge_type_remark"),
        "typ": "varchar"
      },
      "costtyperefcode": {
        "dbs": "prs_kostensoort_refcode",
        "label": L("lcl_prs_kostensoort_refcode"),
        "typ": "varchar"
      },
      "company": {
        "dbs": "prs_bedrijf_key",
        "label": L("lcl_prs_companies_name"),
        "typ": "key",
        "foreign": "prs_bedrijf"
      },
      "debtor": {
        "dbs": "prs_debiteur_naam",
        "label": L("lcl_prs_debiteur_naam"),
        "typ": "varchar"
      },
      "costtypegroupdescription": {
        "dbs": "prs_kostensoortgrp_oms",
        "label": L("lcl_prs_kostensoortgrp_oms"),
        "typ": "varchar"
      },
      "amount": {
        "dbs": "fin_verkoopfactuur_bedrag",
        "label": L("lcl_fin_verkoopfactuur_bedrag"),
        "iscurrency": true,
        "typ": "float",
        "total": true
      },
      "vatamount": {
        "dbs": "fin_verkoopfactuur_btw",
        "label": L("lcl_fin_verkoopfactuur_btw"),
        "iscurrency": true,
        "typ": "float",
        "total": true
      },
      "vattablecode": {
        "dbs": "fin_btwtabelwaarde_code",
        "label": L("lcl_fin_btwtabelwaarde_code"),
        "typ": "varchar"
      },
      "vattabledescription": {
        "dbs": "fin_btwtabelwaarde_oms",
        "label": L("lcl_fin_btwtabelwaarde_oms"),
        "typ": "varchar"
      },
      "vattablepercentage": {
        "dbs": "fin_btwtabelwaarde_perc",
        "label": L("lcl_fin_btwtabelwaarde_perc"),
        "typ": "float"
      },
      "vattableshifted": {
        "dbs": "fin_btwtabelwaarde_verlegd",
        "label": L("lcl_fin_btwtabelwaarde_verlegd"),
        "typ": "number"
      },
      "month": {
        "dbs": "fin_verkoopfactuur_maand",
        "label": L("lcl_fin_verkoopfactuur_maand"),
        "typ": "varchar"
      },
      "n1": {
        "dbs": "fin_verkoopfactuur_n1",
        "label": L("lcl_fin_verkoopfactuur_n1"),
        "typ": "float",
        "iscurrency": true
      },
      "n2": {
        "dbs": "fin_verkoopfactuur_n2",
        "label": L("lcl_fin_verkoopfactuur_n2"),
        "typ": "float",
        "iscurrency": true
      },
      "n3": {
        "dbs": "fin_verkoopfactuur_n3",
        "label": L("lcl_fin_verkoopfactuur_n3"),
        "typ": "float",
        "iscurrency": true
      },
      "n4": {
        "dbs": "fin_verkoopfactuur_n4",
        "label": L("lcl_fin_verkoopfactuur_n4"),
        "typ": "float",
        "iscurrency": true
      },
      "n5": {
        "dbs": "fin_verkoopfactuur_n5",
        "label": L("lcl_fin_verkoopfactuur_n5"),
        "typ": "float",
        "iscurrency": true
      },
      "c1": {
        "dbs": "fin_verkoopfactuur_c1",
        "label": L("lcl_fin_verkoopfactuur_c1"),
        "typ": "varchar"
      },
      "c2": {
        "dbs": "fin_verkoopfactuur_c2",
        "label": L("lcl_fin_verkoopfactuur_c2"),
        "typ": "varchar"
      },
      "c3": {
        "dbs": "fin_verkoopfactuur_c3",
        "label": L("lcl_fin_verkoopfactuur_c3"),
        "typ": "varchar"
      },
      "c4": {
        "dbs": "fin_verkoopfactuur_c4",
        "label": L("lcl_fin_verkoopfactuur_c4"),
        "typ": "varchar"
      },
      "c5": {
        "dbs": "fin_verkoopfactuur_c5",
        "label": L("lcl_fin_verkoopfactuur_c5"),
        "typ": "varchar"
      },
      "c6": {
        "dbs": "fin_verkoopfactuur_c6",
        "label": L("lcl_fin_verkoopfactuur_c6"),
        "typ": "varchar"
      },
      "c7": {
        "dbs": "fin_verkoopfactuur_c7",
        "label": L("lcl_fin_verkoopfactuur_c7"),
        "typ": "varchar"
      },
      "c8": {
        "dbs": "fin_verkoopfactuur_c8",
        "label": L("lcl_fin_verkoopfactuur_c8"),
        "typ": "varchar"
      },
      "d1": {
        "dbs": "fin_verkoopfactuur_d1",
        "label": L("lcl_fin_verkoopfactuur_d1"),
        "typ": "datetime"
      },
      "d2": {
        "dbs": "fin_verkoopfactuur_d2",
        "label": L("lcl_fin_verkoopfactuur_d2"),
        "typ": "datetime"
      },
      "d3": {
        "dbs": "fin_verkoopfactuur_d3",
        "label": L("lcl_fin_verkoopfactuur_d3"),
        "typ": "datetime"
      },
      "d4": {
        "dbs": "fin_verkoopfactuur_d4",
        "label": L("lcl_fin_verkoopfactuur_d4"),
        "typ": "datetime"
      },
      "d5": {
        "dbs": "fin_verkoopfactuur_d5",
        "label": L("lcl_fin_verkoopfactuur_d5"),
        "typ": "datetime"
      }
    };
    this.list = {
      "columns": [
        "name",
        "concerning",
        "refkey",
        "invoicedate",
        "amount",
        "vatamount",
        "c1",
        "n1",
        "d1"
      ]
    };
    this.show = {};
    this.edit = {};

    // api2.generic_REST(this); als we put-post-delete ondersteunen
    this.REST_GET = generic_REST_GET(this); // Alleen de GET
}

// Dit is het model voor de factuurregels van een enkele xmlnode/refkey
model_fin_verkoopfactuur = function()
{
    this.table = "verkoopfactuur"
    this.primary = "fin_verkoopfactuur_id";
    this.autfunction = "WEB_VERFAC";
    this.record_title = L("lcl_verkoopfactuur"),
    this.records_title = L("lcl_verkoopfacturen");

    this.tablesql = "(SELECT fin_verkoopfactuur_id"
                  + "      , fin_verkoopfactuurkop_key"
                  + "      , MAX(fin_verkoopfactuur_datum) fin_verkoopfactuur_datum"
                  + "      , fin_verkoopfactuur_xmlnode"
                  + "      , fin_verkoopfactuur_refkey"
                  + "      , SUM(fin_verkoopfactuur_bedrag) fin_verkoopfactuur_bedrag"
                  + "      , SUM(fin_verkoopfactuur_btw) fin_verkoopfactuur_btw"
                  + "      , COUNT(*) aantalregels"
                  + "   FROM FIN_VERKOOPFACTUUR"
                  + "  GROUP BY fin_verkoopfactuur_id"
                  + "         , fin_verkoopfactuurkop_key"
                  + "         , fin_verkoopfactuur_xmlnode"
                  + "         , fin_verkoopfactuur_refkey) verkoopfactuur";


    this.fields = {
        "id": {
            "dbs": "fin_verkoopfactuurkop_key",
            "label": L("fin_verkoopfactuurkop"),
            "typ": "key"
        },
        "name": {
            "dbs": "fin_verkoopfactuur_id",
            "label": L("lcl_fin_verkoopfactuur_id"),
            "typ": "varchar"
        },
        "invoicedate": {
            "dbs": "fin_verkoopfactuur_datum",
            "label": L("lcl_fin_verkoopfactuur_datum"),
            "typ": "date"  // date?
        },
        "concerning": {
            "dbs": "fin_verkoopfactuur_xmlnode",
            "label": L("lcl_fin_verkoopfactuur_xmlnode"),
            "typ": "varchar",
            "LOV": L("lcl_fin_verkoopfactuur_xmlnodeLOV")
        },
        "refkey": {
            "dbs": "fin_verkoopfactuur_refkey",
            "label": L("lcl_fin_verkoopfactuur_refkey"),
            "typ": "key"
        },
        "amount": {
            "dbs": "fin_verkoopfactuur_bedrag",
            "label": L("lcl_fin_verkoopfactuur_bedrag"),
            "iscurrency": true,
            "typ": "float",
            "total": true
        },
        "vatamount": {
            "dbs": "fin_verkoopfactuur_btw",
            "label": L("lcl_fin_verkoopfactuur_btw"),
            "iscurrency": true,
            "typ": "float",
            "total": true
        },
        "nrlines": {
            "dbs": "aantalregels",
            "label": L("lcl_nrfinlines"),
            "typ": "number"
        }
    };

    this.includes = {
        regels: {
            model: new model_fin_verkoopfactuurregels(),
            joinfield: "head"
        }
    };
    this.list = {
        "columns": [
            "name",
            "invoicedate",
            "amount",
            "vatamount"
        ],
        default_url : "appl/fin/fin_verkoopfactuurkop.asp?mode=wrap&id="
    };
    this.search = {
        "filters": [
            "name",
            "concerning",
            "refkey"
            //"account"
        ]
    };

    api2.generic_REST(this); // Alleen de GET
}

// Dit is het model voor alle factuurregels van een fin_verkoopfactuur_id
// JGL 2020-07: wordt deze functie wel gebruikt?
fin_verkoopfactuurkop = function()
{
    this.table = "fin_verkoopfactuurkop";
    this.primary = "fin_verkoopfactuurkop_key";
    this.autfunction = "WEB_VERFAC";
    this.record_title = L("lcl_verkoopfactuur_verzamel"),
    this.records_title = L("lcl_verkoopfacturen_verzamel");


    this.fields = {
        "id": {
            "dbs": "fin_verkoopfactuurkop_key",
            "label": L("lcl_key"),
            "typ": "key"
        },
        "name": {
            "dbs": "fin_verkoopfactuurkop_id",
            "label": L("lcl_fin_verkoopfactuur_id"),
            "typ": "varchar"
        }
    };
    this.includes = {
        regels: {
            model: new model_fin_verkoopfactuurregels(),
            joinfield: "head"
        }
    };
    this.list = {
        "columns": [
            "name"
        ]
    };
    this.search = {
        "filters": [
            "name"
        ]
    };
    this.print = {
        xmlnode: "verkoopfactuur",
        key: "id"
    };

    // api2.generic_REST(this); geen edit en dergelijke
    this.REST_GET = generic_REST_GET(this); // Alleen de GET
    if (user.has("WEB_FACFAC"))
        this.REST_DELETE = generic_REST_DELETE(this); // op eigen risico
}

%>