FSN#39055 BCS/2000 functionaliteit in FACILITOR - customization

svn path=/Website/trunk/; revision=36744
This commit is contained in:
Erik Groener
2018-01-26 10:04:07 +00:00
parent 03dd1959c3
commit 8c829570df
4 changed files with 113 additions and 25 deletions

View File

@@ -100,6 +100,12 @@ function model_fin_factuur()
"foreign": bgt_account_foreign(),
"readonly": true
},
"_staticinvoice": {
"dbs": "",
"label": L("bgt_factuurnr_vast"),
"typ": "varchar",
"foreign": bgt_invoice_foreign()
},
"invoice": {
"dbs": "fin_factuur_nr",
"label": L("lcl_fin_invoice_number"),
@@ -215,35 +221,44 @@ function model_fin_factuur()
</script>
<%
var vast_facnr = isVastFactuurnummer(obj.invoice);
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);
if (!vast_facnr)
{
// Bij klonen: id=(bestaat niet), invoice=niet leeg. Dan een (volgende) volgnummer erachter zetten.
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 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;
var new_inv = cur_inv + "/" + (cur_seq==0 ? 2 : cur_seq + 1);
obj.invoice = new_inv;
}
else
{
// Bij klonen van een factuur met een vast factuurnr blijft deze ongewijzigd.
obj.invoice = invoice;
}
}
else
{
@@ -307,6 +322,31 @@ function model_fin_factuur()
setKostensoort(obj);
// Is het factuurnummer/volgnummer uniek binnen het project?
checkUniekFactuurnummer(-1, obj.budgetproject, obj.invoice);
// Bij een kopiefactuur van een origineel (factuurnummer zonder volgnummer)
// moet het originele factuurnummer de toevoeging "/1" krijgen.
// De vaste factuurnummers echter niet.
var vast_factnr = isVastFactuurnummer(obj.invoice);
var is_clone = (getQParamInt("scf_clone", 0) == 1);
if (is_clone && !vast_factnr)
{
// Haal het originele factuurnummer op.
var org_fin_key = getQParamInt("id");
var sql = "SELECT fin_factuur_nr"
+ " FROM fin_factuur"
+ " WHERE fin_factuur_key = " + org_fin_key;
var oRs = Oracle.Execute(sql);
var fact_nr_org = oRs("fin_factuur_nr").Value;
oRs.Close();
if (fact_nr_org.indexOf("/") == -1)
{
// Het originele factuurnummer heeft nog geen volgnummer.
// Deze dus alsnog toevoegen.
var sql = "UPDATE fin_factuur"
+ " SET fin_factuur_nr = " + safe.quoted_sql(fact_nr_org + "/1")
+ " WHERE fin_factuur_key = " + org_fin_key;
Oracle.Execute(sql);
}
}
}
this.hook_pre_put = function(params, obj, key)
@@ -329,6 +369,21 @@ function model_fin_factuur()
oRs.Close();
}
function isVastFactuurnummer(factnr)
{
// is de huidige factuurnummer iets uit de usrtab, dan deze gewoon laten staan.
var sql = "SELECT count(*) aantal"
+ " FROM fac_usrdata d"
+ " , fac_usrtab t"
+ " WHERE t.fac_usrtab_key = d.fac_usrtab_key"
+ " AND t.fac_usrtab_naam = " + safe.quoted_sql(S("bgt_usrtab_vaste_factuurnummer"))
+ " AND d.fac_usrdata_code = " + safe.quoted_sql(factnr);
var oRs = Oracle.Execute(sql);
var vast_factnr = (oRs("aantal").Value == 1);
oRs.Close();
return vast_factnr;
}
function checkUniekFactuurnummer(p_factuur_key, p_project_key, p_factuurnr)
{
var sql = "SELECT count(*) aantal"
@@ -343,6 +398,13 @@ function model_fin_factuur()
+ " 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)
+ " AND f.fin_factuur_nr NOT IN"
+ " (SELECT d.fac_usrdata_code"
+ " FROM fac_usrdata d"
+ " , fac_usrtab t"
+ " WHERE t.fac_usrtab_key = d.fac_usrtab_key"
+ " AND t.fac_usrtab_naam = " + safe.quoted_sql(S("bgt_usrtab_vaste_factuurnummer"))
+ " )"
+ (p_factuur_key != -1 ? " AND f.fin_factuur_key <> " + p_factuur_key : "");
var oRs = Oracle.Execute(sql);
var uniek_factuurnr = (oRs("aantal").Value == 0);

View File

@@ -178,4 +178,21 @@ function bgt_order_foreign()
};
}
function bgt_invoice_foreign()
{
return {
"tbl": "(SELECT DISTINCT"
+ " d.fac_usrdata_volgnr"
+ " , d.fac_usrdata_code"
+ " FROM fac_usrdata d"
+ " , fac_usrtab t"
+ " WHERE t.fac_usrtab_key = d.fac_usrtab_key"
+ " AND t.fac_usrtab_naam = " + safe.quoted_sql(S("bgt_usrtab_vaste_factuurnummer"))
+ " ORDER BY d.fac_usrdata_volgnr"
+ ")",
"key": "fac_usrdata_volgnr",
"desc": "fac_usrdata_code"
};
}
%>

View File

@@ -12,6 +12,7 @@ function init_factuur()
$("#order").change( change_opdracht );
$("#total").change( change_totaal );
$("#totalvat").change( change_btw );
$("#_staticinvoice").change( change_vastnummer );
// budgetdiscipline en budgetproject kunnen ook als gekozen filter worden meegegeven
// en worden dan als readonly velden getoond.
@@ -42,7 +43,7 @@ function init_factuur()
$.getJSON( "../bgt/get_bgt_info_ajax.asp",
{ req_info: "initsearch",
niveau: init_niveau,
parent_key: -1,
parent_key: (init_niveau == "B" ? v_budgetproject : -1),
init_key: init_key
},
re_init_soort);
@@ -145,6 +146,13 @@ function change_btw()
$("#totalvat").closest("tr").next("tr").find("span").text(num2currEditable(incl));
}
function change_vastnummer()
{
var vastindex = $("#_staticinvoice").val();
var vastnummer = $("#_staticinvoice option:selected").text();
$("#invoice").val(vastnummer);
}
function fill_rubriekselector(niveau, parent_key, child_key, init_key)
{
var sel_mode = (typeof cur_mode == "undefined" ? "list" : cur_mode);

View File

@@ -122,6 +122,7 @@ switch (req_info)
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
+ " AND o.mld_uitvoerende_keys = b.prs_bedrijf_key"
+ (parent_key != -1 ? " AND p.bgt_project_key = " + parent_key : "") // Een bedrijf kan in meerdere disciplines/projecten gebruikt worden!
+ (init_key != -1 ? " AND b.prs_bedrijf_key = " + init_key : "");
break;
}