355 lines
13 KiB
C++
355 lines
13 KiB
C++
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: model_mld_opdr.inc
|
|
|
|
Description: Model voor mld_opdr
|
|
|
|
Context:
|
|
|
|
Notes:
|
|
*/
|
|
%>
|
|
<!-- #include file="../api2/model_fin_factuur.inc" -->
|
|
<%
|
|
|
|
function model_mld_opdr()
|
|
{
|
|
this.records_name = "orders";
|
|
this.record_name = "order";
|
|
this.table = "mld_opdr";
|
|
this.primary = "mld_opdr_key";
|
|
this.autfunction = "WEB_BGTORD";
|
|
this.record_title = L("lcl_fin_mld_opdr");
|
|
this.records_title = L("lcl_fin_opdrachten");
|
|
|
|
this.fields = {
|
|
"id": {
|
|
"dbs": "mld_opdr_key",
|
|
"label": L("lcl_key"),
|
|
"typ": "key",
|
|
"hidden_fld": true,
|
|
"required": true,
|
|
"filter": "exact",
|
|
"seq": "mld_s_mld_opdr_key"
|
|
},
|
|
"budgetdiscipline": {
|
|
"dbs": "bgt_project.ins_discipline_key",
|
|
"label": L("bgt_discipline_omschrijving"),
|
|
"typ": "key",
|
|
"required": true,
|
|
"foreign": bgt_budgetdiscipline_foreign(),
|
|
"showtransit": true
|
|
},
|
|
"budgetproject": {
|
|
"dbs": "bgt_project.bgt_project_key",
|
|
"label": L("bgt_project_omschrijving"),
|
|
"typ": "key",
|
|
"required": true,
|
|
"foreign": bgt_budgetproject_foreign(),
|
|
"showtransit": true
|
|
},
|
|
"budgetcostcategory": {
|
|
"dbs": "bgt_kostenrubriek.bgt_kostenrubriek_key",
|
|
"label": L("bgt_kostenrubriek_oms"),
|
|
"typ": "key",
|
|
"required": true,
|
|
"foreign": bgt_budgetcostcategory_foreign(),
|
|
"showtransit": true
|
|
},
|
|
"costtypegroup": {
|
|
"dbs": "prs_kostensoortgrp.prs_kostensoortgrp_key",
|
|
"label": L("prs_kostensoortgrp_key"),
|
|
"typ": "key",
|
|
"required": true,
|
|
"foreign": bgt_costtypegroup_foreign(),
|
|
"showtransit": true
|
|
},
|
|
"costtype": {
|
|
"dbs": "prs_kostensoort_key",
|
|
"label": L("prs_kostensoort_key"),
|
|
"typ": "key",
|
|
"required": true,
|
|
"foreign": bgt_costtype_foreign(),
|
|
"showtransit": true
|
|
},
|
|
"company": {
|
|
"dbs": "mld_uitvoerende_keys",
|
|
"label": L("lcl_ord_company"),
|
|
"typ": "key",
|
|
"foreign": bgt_company_foreign()
|
|
},
|
|
"reference": {
|
|
"dbs": "mld_opdr_id",
|
|
"label": L("lcl_opdr_id"),
|
|
"typ": "varchar"
|
|
},
|
|
"ordernr_sort": {
|
|
"dbs": "mld_opdr_ordernr_int",
|
|
"label": L("bgt_opdr_ordernr"),
|
|
"sql": "fac.safe_to_number(mld_opdr_ordernr)",
|
|
"typ": "number",
|
|
"readonly": true
|
|
},
|
|
"ordernr": {
|
|
"dbs": "mld_opdr_ordernr",
|
|
"label": L("bgt_opdr_ordernr"),
|
|
"typ": "varchar",
|
|
"hidden_fld": true
|
|
},
|
|
"sequence": {
|
|
"dbs": "mld_opdr_bedrijfopdr_volgnr",
|
|
"label": L("lcl_ins_volgnr"),
|
|
"typ": "number",
|
|
"defaultvalue": 0
|
|
},
|
|
"account": {
|
|
"dbs": "prs_kostenplaats_key",
|
|
"label": L("bgt_budget_account"),
|
|
"typ": "key",
|
|
"foreign": bgt_account_foreign()
|
|
},
|
|
"description": {
|
|
"dbs": "mld_opdr_omschrijving",
|
|
"label": L("lcl_descr"),
|
|
"typ": "varchar"
|
|
},
|
|
"startdate": {
|
|
"dbs": "mld_opdr_datumbegin",
|
|
"label": L("bgt_contractdatum"),
|
|
"typ": "date"
|
|
},
|
|
"amount": {
|
|
"dbs": "mld_opdr_kosten",
|
|
"label": L("bgt_gecontracteerd"),
|
|
"typ": "float",
|
|
"iscurrency": true,
|
|
"total": true
|
|
},
|
|
"vat": {
|
|
"dbs": "mld_opdr_kosten_btw",
|
|
"label": L("lcl_mld_opdr_btw"),
|
|
"typ": "float",
|
|
"iscurrency": true,
|
|
"total": true
|
|
},
|
|
"amountincl": {
|
|
"dbs": "mld_opdr_kosten_incl",
|
|
"sql": "mld_opdr_kosten + mld_opdr_kosten_btw",
|
|
"label": L("lcl_fin_total_sum"),
|
|
"typ": "float",
|
|
"readonly": true,
|
|
"sqlshow": true,
|
|
"iscurrency": true,
|
|
"total": true,
|
|
"defaultvalue": "0",
|
|
"clone": false
|
|
},
|
|
"invoiced": {
|
|
"dbs": "mld_opdr_gefactureerd",
|
|
"sql": "(BGT.getGefactureerd(mld_opdr.mld_opdr_key, 0, NULL, NULL))",
|
|
"label": L("bgt_facturen"),
|
|
"typ": "float",
|
|
"readonly": true,
|
|
"sqlshow": true,
|
|
"iscurrency": true,
|
|
"total": true
|
|
},
|
|
"tobeinvoiced": {
|
|
"dbs": "mld_opdr_tefactureren",
|
|
"sql": "(BGT.getTefactureren(mld_opdr.mld_opdr_key, 0, NULL, NULL))",
|
|
"label": L("bgt_facturentogo"),
|
|
"typ": "float",
|
|
"readonly": true,
|
|
"sqlshow": true,
|
|
"iscurrency": true,
|
|
"total": true
|
|
},
|
|
"status": {
|
|
"dbs": "mld_statusopdr_key",
|
|
"label": L("lcl_mld_opdr_status"),
|
|
"typ": "key",
|
|
"foreign": bgt_orderstatus_foreign(),
|
|
"defaultvalue": 5
|
|
},
|
|
"owner": {
|
|
"dbs": "prs_perslid_key",
|
|
"label": L("lcl_obj_owner"),
|
|
"typ": "key",
|
|
"hidden_fld": true,
|
|
"foreign": "PRS_PERSLID"
|
|
},
|
|
"issueordertype": {
|
|
"dbs": "mld_typeopdr_key",
|
|
"label": L("mld_typeopdr_typeopdr_key"),
|
|
"typ": "key",
|
|
"defaultvalue": "5",
|
|
"hidden_fld": true
|
|
},
|
|
"module": {
|
|
"dbs": "mld_opdr_module",
|
|
"label": "module",
|
|
"typ": "varchar",
|
|
"defaultvalue": "MLD",
|
|
"hidden_fld": true
|
|
},
|
|
"additional": {
|
|
"dbs": "mld_opdr_meerwerk",
|
|
"label": L("lcl_mld_opdr_meerwerk"),
|
|
"typ": "check0",
|
|
"defaultvalue": 0,
|
|
"filter": "exact"
|
|
}
|
|
};
|
|
|
|
|
|
this.hook_pre_edit = function (obj, fld)
|
|
{
|
|
var btw_data = {};
|
|
if (obj.id > -1 || obj.ordernr_sort)
|
|
{
|
|
fld.ordernr.hidden_fld = false;
|
|
fld.ordernr.readonly = true;
|
|
}
|
|
|
|
if (obj.id > -1)
|
|
{
|
|
var sql = "SELECT s.prs_kostensoort_btw"
|
|
+ " , f.fin_btwtabelwaarde_perc"
|
|
+ " FROM mld_opdr o"
|
|
+ " , prs_kostensoort s"
|
|
+ " , fin_btwtabelwaarde f"
|
|
+ " WHERE s.fin_btwtabelwaarde_key = f.fin_btwtabelwaarde_key"
|
|
+ " AND o.prs_kostensoort_key = s.prs_kostensoort_key"
|
|
+ " AND o.mld_opdr_key = " + obj.id;
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.eof)
|
|
{
|
|
btw_data.btw_inc = oRs("prs_kostensoort_btw").Value;
|
|
btw_data.btw_val = oRs("fin_btwtabelwaarde_perc").Value;
|
|
}
|
|
oRs.Close();
|
|
}
|
|
|
|
%>
|
|
<script type="text/javascript">
|
|
var btw_data = <%=JSON.stringify(btw_data)%>;
|
|
<% if (obj.budgetdiscipline) { %> var budgetdiscipline = "<%=obj.budgetdiscipline.id%>"; <% } %>
|
|
<% if (obj.budgetproject) { %> var budgetproject = "<%=obj.budgetproject.id%>"; <% } %>
|
|
<% if (obj.budgetcostcategory) { %> var budgetcostcategory = "<%=obj.budgetcostcategory.id%>"; <% } %>
|
|
<% if (obj.costtypegroup) { %> var costtypegroup = "<%=obj.costtypegroup.id%>"; <% } %>
|
|
<% if (obj.costtype) { %> var costtype = "<%=obj.costtype.id%>"; <% } %>
|
|
</script>
|
|
<%
|
|
}
|
|
|
|
this.hook_pre_post = function(params, obj)
|
|
{
|
|
var parent_key = getQParamInt("id", -1);
|
|
if (!obj.sequence && obj.sequence!=0)
|
|
abort_with_warning("Vul een volgnummer voor het contract in.");
|
|
|
|
if (parent_key > -1) // Bij kopie van opdracht geen nieuw nummer genereren.
|
|
{
|
|
// Vul het contractnummer van het oorspronkelijke contract in.
|
|
var sql = "SELECT o.mld_opdr_ordernr"
|
|
+ " FROM mld_opdr o"
|
|
+ " WHERE o.mld_opdr_key = " + parent_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
obj.ordernr = oRs("mld_opdr_ordernr").Value;
|
|
oRs.Close();
|
|
// Kopie contract. Volgnummer moet uniek zijn binnen dit contractnummer.
|
|
checkUniekContractnummer(-1, obj.budgetproject.id, obj.ordernr, obj.sequence);
|
|
}
|
|
else
|
|
{
|
|
// Genereer een uniek volgnummer binnen het project voor een nieuwe opdracht.
|
|
var prj_key = (obj.budgetproject ? obj.budgetproject : project_key);
|
|
var sql = "SELECT COALESCE(MAX(TO_NUMBER(o.mld_opdr_ordernr)), 0) + 1 new_ordernr"
|
|
+ " FROM bgt_project p"
|
|
+ " , bgt_kostenrubriek r"
|
|
+ " , prs_kostensoortgrp g"
|
|
+ " , prs_kostensoort s"
|
|
+ " , mld_opdr o"
|
|
+ " WHERE p.bgt_project_key = r.bgt_project_key"
|
|
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
|
|
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
|
|
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
|
|
+ " AND p.bgt_project_key = " + prj_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
obj.ordernr = oRs("new_ordernr").Value;
|
|
oRs.Close();
|
|
// Nieuw contract, dus volgnummer is altijd uniek hierbinnen.
|
|
}
|
|
}
|
|
|
|
this.hook_pre_put = function(params, obj, key)
|
|
{
|
|
// Is de combinatie projectnummer/volgnummer nog steeds uniek?
|
|
var sql = "SELECT p.bgt_project_key"
|
|
+ " , o.mld_opdr_ordernr"
|
|
+ " FROM bgt_project p"
|
|
+ " , bgt_kostenrubriek r"
|
|
+ " , prs_kostensoortgrp g"
|
|
+ " , prs_kostensoort s"
|
|
+ " , mld_opdr o"
|
|
+ " WHERE p.bgt_project_key = r.bgt_project_key"
|
|
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
|
|
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
|
|
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
|
|
+ " AND o.mld_opdr_key = " + key;
|
|
var oRs = Oracle.Execute(sql);
|
|
var v_ordernr = oRs("mld_opdr_ordernr").Value;
|
|
var v_project_key = oRs("bgt_project_key").Value;
|
|
oRs.Close();
|
|
checkUniekContractnummer(key, v_project_key, v_ordernr, obj.sequence);
|
|
}
|
|
|
|
var gparams = {
|
|
GET: {
|
|
tables: [
|
|
"prs_kostensoort",
|
|
"prs_kostensoortgrp",
|
|
"bgt_kostenrubriek",
|
|
"bgt_project"
|
|
],
|
|
wheres: [
|
|
"mld_opdr.prs_kostensoort_key = prs_kostensoort.prs_kostensoort_key",
|
|
"prs_kostensoort.prs_kostensoortgrp_key = prs_kostensoortgrp.prs_kostensoortgrp_key",
|
|
"prs_kostensoortgrp.bgt_kostenrubriek_key = bgt_kostenrubriek.bgt_kostenrubriek_key",
|
|
"bgt_kostenrubriek.bgt_project_key = bgt_project.bgt_project_key"
|
|
]
|
|
}
|
|
};
|
|
|
|
function checkUniekContractnummer(p_contract_key, p_project_key, p_contractnr, p_volgnr)
|
|
{
|
|
var sql = "SELECT count(*) aantal"
|
|
+ " FROM bgt_project p"
|
|
+ " , bgt_kostenrubriek r"
|
|
+ " , prs_kostensoortgrp g"
|
|
+ " , prs_kostensoort s"
|
|
+ " , mld_opdr o"
|
|
+ " WHERE p.bgt_project_key = r.bgt_project_key"
|
|
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
|
|
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
|
|
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
|
|
+ " AND p.bgt_project_key = " + p_project_key
|
|
+ " AND o.mld_opdr_ordernr = " + safe.quoted_sql(p_contractnr)
|
|
+ " AND o.mld_opdr_bedrijfopdr_volgnr = " + p_volgnr
|
|
+ (p_contract_key != -1 ? " AND o.mld_opdr_key <> " + p_contract_key : "");
|
|
var oRs = Oracle.Execute(sql);
|
|
var uniek_contractnr = (oRs("aantal").Value == 0);
|
|
oRs.Close();
|
|
if (!uniek_contractnr)
|
|
abort_with_warning("Contractnummer {0}.{1} bestaat al in dit project.".format(p_contractnr, p_volgnr));
|
|
}
|
|
|
|
|
|
this.REST_GET = generic_REST_GET(this, gparams);
|
|
this.REST_POST = generic_REST_POST(this);
|
|
this.REST_PUT = generic_REST_PUT(this);
|
|
this.REST_DELETE = generic_REST_DELETE(this);
|
|
}
|
|
%> |