391 lines
15 KiB
C++
391 lines
15 KiB
C++
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: model_fin_factuur.inc
|
|
|
|
Description: Model voor fin_factuur
|
|
|
|
Context:
|
|
|
|
Notes:
|
|
*/
|
|
%>
|
|
<!-- #include file="../bgt/bgt_tools.inc" -->
|
|
<%
|
|
|
|
function model_fin_factuur()
|
|
{
|
|
this.records_name = "invoices";
|
|
this.record_name = "invoice";
|
|
this.table = "fin_factuur";
|
|
this.primary = "fin_factuur_key";
|
|
this.autfunction = "WEB_BGTORD";
|
|
this.record_title = L("fin_invoice");
|
|
this.records_title = L("lcl_fin_invoices");
|
|
|
|
this.fields = {
|
|
"id": {
|
|
"dbs": "fin_factuur_key",
|
|
"label": L("lcl_key"),
|
|
"typ": "key",
|
|
"hidden_fld": true,
|
|
"required": true,
|
|
"filter": "exact",
|
|
"seq": "fin_s_fin_factuur_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",
|
|
"foreign": bgt_budgetproject_foreign(),
|
|
"showtransit": true
|
|
},
|
|
"costtype": {
|
|
"dbs": "prs_kostensoort_key",
|
|
"label": L("prs_kostensoort_key"),
|
|
"typ": "key",
|
|
"foreign": bgt_costtype_foreign(),
|
|
"required": false
|
|
},
|
|
"company": {
|
|
"dbs": "mld_opdr.mld_uitvoerende_keys",
|
|
"label": L("lcl_ord_company"),
|
|
"typ": "key",
|
|
"foreign": bgt_company_foreign(),
|
|
"showtransit": true
|
|
},
|
|
"order": {
|
|
"dbs": "mld_opdr_key",
|
|
"label": L("lcl_fin_mld_opdr"),
|
|
"typ": "key",
|
|
"required": true,
|
|
"foreign": bgt_order_foreign(),
|
|
"showtransit": true,
|
|
"clone": false
|
|
},
|
|
"additional": {
|
|
"dbs": "mld_opdr.mld_opdr_meerwerk",
|
|
"label": L("lcl_mld_opdr_meerwerk"),
|
|
"typ": "check0",
|
|
"defaultvalue": 0,
|
|
"filter": "exact",
|
|
"multiedit": true
|
|
},
|
|
"ordernr_sort": {
|
|
"dbs": "mld_opdr_ordernr_int",
|
|
"label": L("bgt_opdr_ordernr"),
|
|
"sql": "fac.safe_to_number(mld_opdr.mld_opdr_ordernr)",
|
|
"typ": "number",
|
|
"readonly": true
|
|
},
|
|
"ordernr": {
|
|
"dbs": "mld_opdr.mld_opdr_ordernr",
|
|
"label": L("bgt_opdr_ordernr"),
|
|
"typ": "varchar",
|
|
"hidden_fld": true
|
|
},
|
|
"account": {
|
|
"dbs": "mld_opdr.prs_kostenplaats_key",
|
|
"label": L("bgt_budget_account"),
|
|
"typ": "key",
|
|
"foreign": bgt_account_foreign(),
|
|
"readonly": true
|
|
},
|
|
"invoice": {
|
|
"dbs": "fin_factuur_nr",
|
|
"label": L("lcl_fin_invoice_number"),
|
|
"typ": "varchar",
|
|
"required": true
|
|
},
|
|
"remark": {
|
|
"dbs": "fin_factuur_opmerking",
|
|
"label": L("bgt_factuur_omschrijving"),
|
|
"typ": "varchar"
|
|
},
|
|
"date": {
|
|
"dbs": "fin_factuur_datum",
|
|
"label": L("lcl_fin_findate"),
|
|
"typ": "date",
|
|
"required": true,
|
|
"defaultvalue": new Date()
|
|
},
|
|
"advice": {
|
|
"dbs": "fin_factuur_advies",
|
|
"label": L("lcl_fin_adviesdatum"),
|
|
"typ": "date",
|
|
"defaultvalue": new Date(),
|
|
"multiedit": true
|
|
},
|
|
"isprinted": {
|
|
"dbs": "fin_factuur_bron",
|
|
"label": "Geprint",
|
|
"typ": "check0",
|
|
"multiedit": true
|
|
},
|
|
"month": {
|
|
"dbs": "fin_factuur_boekmaand",
|
|
"label": L("lcl_fin_boekmaand"),
|
|
"typ": "varchar"
|
|
},
|
|
"status": {
|
|
"dbs": "fin_factuur_statuses_key",
|
|
"label": L("lcl_fin_fin_status"),
|
|
"typ": "key",
|
|
"foreign": bgt_invoicestatus_foreign(),
|
|
"defaultvalue": "6",
|
|
"clone": false, // Krijgt nu de default waarde.
|
|
"multiedit": true
|
|
},
|
|
"total": {
|
|
"dbs": "fin_factuur_totaal",
|
|
"label": L("lcl_fin_CO_sum"),
|
|
"typ": "float",
|
|
"iscurrency": true,
|
|
"total": true
|
|
},
|
|
"totalvat": {
|
|
"dbs": "fin_factuur_totaal_btw",
|
|
"label": L("lcl_fin_btwsum"),
|
|
"typ": "float",
|
|
"defaultvalue": 0,
|
|
"iscurrency": true,
|
|
"total": true,
|
|
"clone": false
|
|
},
|
|
"totalincl": {
|
|
"dbs": "fin_factuur_totaal_incl",
|
|
"sql": "fin_factuur_totaal + fin_factuur_totaal_btw",
|
|
"label": L("lcl_fin_total_sum"),
|
|
"typ": "float",
|
|
"readonly": true,
|
|
"sqlshow": true,
|
|
"iscurrency": true,
|
|
"total": true,
|
|
"defaultvalue": "0",
|
|
"clone": false
|
|
}
|
|
};
|
|
|
|
|
|
this.list = {
|
|
"columns": [
|
|
"invoice",
|
|
"date",
|
|
"remark",
|
|
"total",
|
|
"totalvat",
|
|
"totalincl"
|
|
]
|
|
};
|
|
|
|
this.hook_pre_edit = function(obj, fld)
|
|
{
|
|
var btw_data = {};
|
|
if (obj.id > -1)
|
|
{
|
|
var sql = "SELECT s.prs_kostensoort_btw"
|
|
+ " , f.fin_btwtabelwaarde_perc"
|
|
+ " FROM fin_factuur f"
|
|
+ " , prs_kostensoort s"
|
|
+ " , fin_btwtabelwaarde f"
|
|
+ " WHERE s.fin_btwtabelwaarde_key = f.fin_btwtabelwaarde_key"
|
|
+ " AND f.prs_kostensoort_key = s.prs_kostensoort_key"
|
|
+ " AND f.fin_factuur_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)%>;
|
|
</script>
|
|
<%
|
|
|
|
if (!obj.id && obj.invoice)
|
|
{
|
|
// Bij klonen: id=(bestaat niet), invoice=niet leeg. Dan een (volgende) volgnummer erachter zetten.
|
|
var invoice = obj.invoice;
|
|
var cur_inv = (invoice.indexOf("/") > -1 ? invoice.substring(0,invoice.indexOf("/")-1) : invoice);
|
|
var cur_seq = (invoice.indexOf("/") > -1 ? invoice.substring(invoice.indexOf("/")+1) : 0);
|
|
cur_seq = parseInt(cur_seq ? cur_seq : 0);
|
|
|
|
var sql = "SELECT MAX(CASE WHEN INSTR(f.fin_factuur_nr, '/') > 0"
|
|
+ " THEN TO_NUMBER(SUBSTR(f.fin_factuur_nr, INSTR(f.fin_factuur_nr, '/')+1))"
|
|
+ " ELSE 0"
|
|
+ " END) max_seq"
|
|
+ " FROM bgt_kostenrubriek r"
|
|
+ " , prs_kostensoortgrp g"
|
|
+ " , prs_kostensoort s"
|
|
+ " , mld_opdr o"
|
|
+ " , fin_factuur f"
|
|
+ " WHERE 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 = f.mld_opdr_key"
|
|
+ " AND r.bgt_project_key = " + obj.budgetproject.id
|
|
+ " AND f.fin_factuur_nr LIKE " + safe.quoted_sql(cur_inv + "%");
|
|
var oRs = Oracle.Execute(sql);
|
|
cur_seq = oRs("max_seq").Value;
|
|
oRs.Close();
|
|
|
|
var new_inv = cur_inv + "/" + (cur_seq + 1);
|
|
obj.invoice = new_inv;
|
|
}
|
|
else
|
|
{
|
|
var mld_opdr_key = getQParamInt("opdrachtcommon", -1);
|
|
if (obj.id == -1 && mld_opdr_key > -1)
|
|
{ // Nieuwe factuur bij bekende opdracht.
|
|
var sql = "SELECT p.ins_discipline_key"
|
|
+ " , p.bgt_project_key"
|
|
+ " , o.mld_uitvoerende_keys"
|
|
+ " , s.prs_kostensoort_key"
|
|
+ " , s.prs_kostensoort_oms"
|
|
+ " FROM mld_opdr o"
|
|
+ " , prs_kostensoort s"
|
|
+ " , prs_kostensoortgrp g"
|
|
+ " , bgt_kostenrubriek r"
|
|
+ " , bgt_project p"
|
|
+ " 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 = " + mld_opdr_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
var v_order = mld_opdr_key;
|
|
var v_discipline = oRs("ins_discipline_key").Value;
|
|
var v_project = oRs("bgt_project_key").Value;
|
|
var v_soort = oRs("prs_kostensoort_key").Value;
|
|
var v_srtoms = oRs("prs_kostensoort_oms").Value;
|
|
var v_company = oRs("mld_uitvoerende_keys").Value;
|
|
oRs.Close();
|
|
// Er is geen QParam voor costtype gezet, dus deze zelf vullen.
|
|
obj.costtype = {id: v_soort, name: v_srtoms};
|
|
}
|
|
else
|
|
{
|
|
var v_order = null;
|
|
var v_discipline = (obj.budgetdiscipline ? obj.budgetdiscipline.id : null);
|
|
var v_project = (obj.budgetproject ? obj.budgetproject.id : null);
|
|
var v_soort = (obj.costtype ? obj.costtype.id : null);
|
|
var v_company = (obj.company ? obj.company.id : null);
|
|
}
|
|
%>
|
|
<script type="text/javascript">
|
|
var cur_mode = "<%=mode%>"; // = "edit"
|
|
<% if (v_order) { %> var mldopdracht = "<%=v_order%>"; <% } %>
|
|
<% if (v_discipline) { %> var budgetdiscipline = "<%=v_discipline%>"; <% } %>
|
|
<% if (v_project) { %> var budgetproject = "<%=v_project%>"; <% } %>
|
|
<% if (v_soort) { %> var costtype = "<%=v_soort%>"; <% } %>
|
|
<% if (v_company) { %> var company = "<%=v_company%>"; <% } %>
|
|
</script>
|
|
<%
|
|
}
|
|
// De opdracht moet wel gewijzigd kunnen worden bij het klonen.
|
|
if (!obj.id)
|
|
fld.order.readonly = false;
|
|
}
|
|
|
|
this.hook_pre_post = function(params, obj)
|
|
{
|
|
// Bij toevoegen van een factuur moet prs_kostensoort_key nog gevuld worden.
|
|
// Gebruik daarvoor die van mld_opdr.
|
|
setKostensoort(obj);
|
|
// Is het factuurnummer/volgnummer uniek binnen het project?
|
|
checkUniekFactuurnummer(-1, obj.budgetproject, obj.invoice);
|
|
}
|
|
|
|
this.hook_pre_put = function(params, obj, key)
|
|
{
|
|
// Bij wijzigen van factuur moet prs_kostensoort_key nog gevuld worden.
|
|
// Gebruik daarvoor die van mld_opdr.
|
|
setKostensoort(obj);
|
|
// Is de combinatie factuurnummer/volgnummer nog steeds uniek?
|
|
checkUniekFactuurnummer(key, obj.budgetproject, obj.invoice);
|
|
}
|
|
|
|
function setKostensoort(obj)
|
|
{
|
|
var sql = "SELECT o.prs_kostensoort_key"
|
|
+ " FROM mld_opdr o"
|
|
+ " WHERE mld_opdr_key = " + obj.order;
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.eof)
|
|
obj.costtype = (!oRs.eof ? oRs("prs_kostensoort_key").Value : NULL);
|
|
oRs.Close();
|
|
}
|
|
|
|
function checkUniekFactuurnummer(p_factuur_key, p_project_key, p_factuurnr)
|
|
{
|
|
var sql = "SELECT count(*) aantal"
|
|
+ " FROM bgt_kostenrubriek r"
|
|
+ " , prs_kostensoortgrp g"
|
|
+ " , prs_kostensoort s"
|
|
+ " , mld_opdr o"
|
|
+ " , fin_factuur f"
|
|
+ " WHERE 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 = f.mld_opdr_key"
|
|
+ " AND r.bgt_project_key = " + p_project_key
|
|
+ " AND f.fin_factuur_nr = " + safe.quoted_sql(p_factuurnr)
|
|
+ (p_factuur_key != -1 ? " AND f.fin_factuur_key <> " + p_factuur_key : "");
|
|
var oRs = Oracle.Execute(sql);
|
|
var uniek_factuurnr = (oRs("aantal").Value == 0);
|
|
oRs.Close();
|
|
if (!uniek_factuurnr)
|
|
abort_with_warning("Factuurnummer {0} bestaat al in dit project.".format(p_factuurnr));
|
|
}
|
|
|
|
|
|
var mld_opdr_key = getQParamInt("opdrachtcommon", -1);
|
|
var ischild = (getQParam("columns", "")=="" ? true : false);
|
|
var xmodel = getQParam("model", "");
|
|
if (mode == "list" && (xmodel == this.record_name || (ischild && mld_opdr_key == -1) || (!ischild && mld_opdr_key > -1)))
|
|
{
|
|
this.REST_GET = generic_REST_GET(this);
|
|
}
|
|
else
|
|
{
|
|
var gparams = {
|
|
GET: {
|
|
tables: [
|
|
"prs_kostensoort",
|
|
"prs_kostensoortgrp",
|
|
"bgt_kostenrubriek",
|
|
"bgt_project",
|
|
"mld_opdr"
|
|
],
|
|
wheres: [
|
|
"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",
|
|
"mld_opdr.prs_kostensoort_key = prs_kostensoort.prs_kostensoort_key",
|
|
"mld_opdr.mld_opdr_key = fin_factuur.mld_opdr_key"
|
|
]
|
|
}
|
|
};
|
|
if (mld_opdr_key > -1)
|
|
gparams.GET.wheres.push("mld_opdr.mld_opdr_key = {0}".format(mld_opdr_key));
|
|
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);
|
|
}
|
|
%> |