DJIN#41674: DJIN - BES/INS: Objecten vanuit bestellingen kunnen aanmaken.

svn path=/Website/branches/v2017.3/; revision=37256
This commit is contained in:
Maykel Geerdink
2018-03-05 07:26:57 +00:00
parent 6c4db16d56
commit 4cf97c0060
4 changed files with 140 additions and 93 deletions

View File

@@ -45,94 +45,120 @@
// Deze zet de controleert de status van de bestelopdracht op basis van de status van de regels
// en doet dan ook bijpassende tracking en notificatie
},
getPresentObjectsSql:
function (pins_srtdeel_key, pbestelling_item_key, pcount)
{
var sql = "SELECT bes_bestelling_item_aantal"
+ " FROM bes_bestelling_item"
+ " WHERE bes_bestelling_item_key = " + pbestelling_item_key;
var oRsbi = Oracle.Execute(sql);
var retour = oRsbi("bes_bestelling_item_aantal").Value < 0;
// Kenmerken matchen op kenmerksoortomschrijving.
var sql = "SELECT "
+ (pcount
? " COUNT(ins_deel_key)" + (retour? " * -1" : "") + " aantal"
: " ins_deel_key"
+ " , ins_alg_ruimte_key"
+ " , ins_alg_ruimte_type")
+ " FROM ( SELECT ins_deel_key"
+ " , ins_alg_ruimte_key"
+ " , ins_alg_ruimte_type"
+ " , COUNT(ins_deel_key) nr_same_prop"
+ " FROM (SELECT k.bes_kenmerk_key"
+ " , sk.bes_srtkenmerk_omschrijving bes_srtkenmerk_omschrijving"
+ " , sk.bes_srtkenmerk_kenmerktype"
+ " , (SELECT v.bes_kenmerkbesteli_waarde"
+ " FROM bes_kenmerkbesteli v"
+ " WHERE v.bes_bestelling_item_key = " + pbestelling_item_key
+ " AND v.bes_kenmerk_key = k.bes_kenmerk_key"
+ " AND v.bes_kenmerkbesteli_verwijder IS NULL) bes_waarde"
+ " FROM bes_srtkenmerk sk"
+ " , bes_kenmerk k"
+ " , bes_kenmerkbesteli kbi"
+ " WHERE k.bes_kenmerk_verwijder IS NULL"
+ " AND kbi.bes_kenmerk_key = k.bes_kenmerk_key"
+ " AND kbi.bes_bestelling_item_key IN (" + pbestelling_item_key + ")"
+ " AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key"
+ " AND sk.bes_srtkenmerk_verwijder IS NULL"
+ " AND k.bes_kenmerk_type = 'I') bes"
+ " , ( SELECT DISTINCT d.ins_deel_key"
+ " , d.ins_alg_ruimte_key"
+ " , d.ins_alg_ruimte_type"
+ " , k.ins_kenmerk_key ins_kenmerk_key"
+ " , t.ins_srtkenmerk_omschrijving ins_srtkenmerk_omschrijving"
+ " , t.ins_srtkenmerk_kenmerktype ins_kenmerk_kenmerktype"
+ " , (SELECT v.ins_kenmerkdeel_waarde"
+ " FROM ins_kenmerkdeel v"
+ " WHERE (v.ins_deel_key = d.ins_deel_key"
+ " AND k.ins_kenmerk_bewerkniveau = 'D'"
+ " OR v.ins_deel_key IN (" + pins_srtdeel_key + ")"
+ " AND k.ins_kenmerk_bewerkniveau = 'S')"
+ " AND v.ins_kenmerk_key = k.ins_kenmerk_key"
+ " AND ins_kenmerkdeel_verwijder IS NULL) ins_waarde"
+ " FROM ins_deel d"
+ " , ins_srtkenmerk t"
+ " , ins_kenmerk k"
+ " , ins_srtdeel s"
+ " , ins_srtgroep g"
+ " WHERE s.ins_srtdeel_key = d.ins_srtdeel_key"
+ " AND k.ins_srtkenmerk_key = t.ins_srtkenmerk_key"
+ " AND g.ins_srtgroep_key = s.ins_srtgroep_key"
+ " AND k.ins_kenmerk_verwijder IS NULL"
+ " AND t.ins_srtkenmerk_verwijder IS NULL"
+ " AND s.ins_srtdeel_key IN (" + pins_srtdeel_key + ")"
+ " AND ((k.ins_srtinstallatie_key = s.ins_srtdeel_key"
+ " AND k.ins_kenmerk_niveau = 'S')"
+ " OR (k.ins_srtinstallatie_key = s.ins_srtgroep_key"
+ " AND k.ins_kenmerk_niveau = 'G')"
+ " OR (k.ins_srtinstallatie_key = g.ins_discipline_key"
+ " AND k.ins_kenmerk_niveau = 'D'))"
+ (retour
? " AND d.ins_alg_ruimte_key_org IS NOT NULL AND d.ins_alg_ruimte_type_org IS NOT NULL" // Alleen objecten die in gebruik zijn.
: " AND d.ins_alg_ruimte_key_org IS NULL AND d.ins_alg_ruimte_type_org IS NULL") // Alleen vrije objecten.
+ " ORDER BY k.ins_kenmerk_key"
+ " , UPPER(t.ins_srtkenmerk_omschrijving)) ins"
+ " WHERE bes.bes_srtkenmerk_omschrijving = ins.ins_srtkenmerk_omschrijving"
+ " AND bes.bes_waarde = ins.ins_waarde"
+ " GROUP BY ins_deel_key"
+ " , ins_alg_ruimte_key"
+ " , ins_alg_ruimte_type)"
+ " WHERE nr_same_prop = (SELECT COUNT(*)"
+ " FROM bes_kenmerkbesteli"
+ " WHERE bes_bestelling_item_key = " + pbestelling_item_key + ")"
+ " ORDER BY ins_deel_key"
+ (retour
? " DESC"
: "");
matchObjectSql:
function (pins_srtdeel_key, pbestelling_item_key, params)
{ // Matcht bestelde artikelen op objecten die dezelfde kenmerken (srtkenmerk_omschrijving) hebben.
var sql = "SELECT DISTINCT ins.ins_deel_key"
+ " , ins_alg_ruimte_key"
+ " , ins_alg_ruimte_type"
+ " , bes.bes_waarde"
+ " , ins.ins_waarde"
+ " FROM (SELECT sd.ins_srtdeel_key"
+ " , sk.bes_srtkenmerk_omschrijving"
+ " , kbi.bes_kenmerkbesteli_waarde bes_waarde"
+ " FROM bes_bestelling_item bi"
+ " , bes_srtdeel sd"
+ " , bes_srtkenmerk sk"
+ " , bes_kenmerk k"
+ " , bes_kenmerkbesteli kbi"
+ " WHERE bi.bes_bestelling_item_key = kbi.bes_bestelling_item_key(+)"
+ " AND bi.bes_srtdeel_key = sd.bes_srtdeel_key"
+ " AND kbi.bes_kenmerk_key = k.bes_kenmerk_key(+)"
+ " AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key(+)"
+ " AND bi.bes_bestelling_item_key IN (" + pbestelling_item_key + ")"
+ " AND kbi.bes_kenmerkbesteli_verwijder(+) IS NULL"
+ " AND k.bes_kenmerk_verwijder(+) IS NULL"
+ " AND k.bes_kenmerk_type(+) = 'I'"
+ " AND sk.bes_srtkenmerk_verwijder(+) IS NULL) bes"
+ " , (SELECT DISTINCT d.ins_deel_key"
+ " , s.ins_srtdeel_key"
+ " , d.ins_alg_ruimte_key"
+ " , d.ins_alg_ruimte_type"
+ " , t.ins_srtkenmerk_omschrijving ins_srtkenmerk_omschrijving"
+ " , (SELECT v.ins_kenmerkdeel_waarde"
+ " FROM ins_kenmerkdeel v"
+ " WHERE (v.ins_deel_key = d.ins_deel_key"
+ " AND k.ins_kenmerk_bewerkniveau = 'D'"
+ " OR v.ins_deel_key IN (" + pins_srtdeel_key + ")"
+ " AND k.ins_kenmerk_bewerkniveau = 'S')"
+ " AND v.ins_kenmerk_key = k.ins_kenmerk_key"
+ " AND ins_kenmerkdeel_verwijder IS NULL) ins_waarde"
+ " FROM ins_deel d"
+ " , ins_srtkenmerk t"
+ " , ins_kenmerk k"
+ " , ins_srtdeel s"
+ " , ins_srtgroep g"
+ " WHERE s.ins_srtdeel_key = d.ins_srtdeel_key"
+ " AND k.ins_srtkenmerk_key = t.ins_srtkenmerk_key"
+ " AND g.ins_srtgroep_key = s.ins_srtgroep_key"
+ " AND k.ins_kenmerk_verwijder IS NULL"
+ " AND t.ins_srtkenmerk_verwijder IS NULL"
+ " AND s.ins_srtdeel_key IN (" + pins_srtdeel_key + ")"
+ " AND ((k.ins_srtinstallatie_key = s.ins_srtdeel_key"
+ " AND k.ins_kenmerk_niveau = 'S')"
+ " OR (k.ins_srtinstallatie_key = s.ins_srtgroep_key"
+ " AND k.ins_kenmerk_niveau = 'G')"
+ " OR (k.ins_srtinstallatie_key = g.ins_discipline_key"
+ " AND k.ins_kenmerk_niveau = 'D'))"
+ (params.retour
? " AND d.ins_alg_ruimte_key_org IS NOT NULL AND d.ins_alg_ruimte_type_org IS NOT NULL" // Alleen objecten die in gebruik zijn.
+ " AND d.bes_bestelopdr_key = " + params.bestelopdr_key
: " AND d.ins_alg_ruimte_key_org IS NULL AND d.ins_alg_ruimte_type_org IS NULL") // Alleen vrije objecten.
+ " ) ins"
+ " WHERE bes.ins_srtdeel_key = ins.ins_srtdeel_key"
+ " AND bes.bes_srtkenmerk_omschrijving = ins.ins_srtkenmerk_omschrijving"
+ " ORDER BY ins_deel_key"
return sql;
},
getMatchObjectsSql:
function (pins_srtdeel_key, pbestelling_item_key, params)
{ // Matcht bestelde artikelen op objecten.
// Geeft een query terug met alle objecten die behoren onder de objectsoort die is gekoppeld aan het bestelde artikel.
// Als er bij het bestelde artikel kenmerkwaarden zijn ingevuld van kenmerken die gelijk zijn aan kenmerken van het object (dezelfde srtkenmerk_omschrijving)
// dan moeten deze waarden ook overeenkomen.
// Zijn er ingevulde artikel kenmerken die overeen moeten komen met gelijke kenmerken bij het object? Waarden zijn nog niet van belang.
var sql_match = "SELECT COUNT(DISTINCT ins_deel_key) aantal"
+ " FROM (" + bes.matchObjectSql(pins_srtdeel_key, pbestelling_item_key, params) + ")";
var oRs_match = Oracle.Execute(sql_match);
var domatch = oRs_match("aantal").Value > 0;
oRs_match.Close()
if (domatch)
{
var sql_freeobj = "SELECT "
+ (params.getcount
? " COUNT(DISTINCT ins_deel_key) aantal"
: " DISTINCT ins_deel_key"
+ " , ins_alg_ruimte_key"
+ " , ins_alg_ruimte_type")
+ " FROM (" + bes.matchObjectSql(pins_srtdeel_key, pbestelling_item_key, params) + ")"
+ " WHERE bes_waarde = ins_waarde";
}
else
{ // Alle objecten van de objectsoort die gekoppeld is aan het bestelde artikel zijn ok.
var sql_freeobj = "SELECT "
+ (params.getcount
? " COUNT(DISTINCT d.ins_deel_key) aantal"
: " DISTINCT d.ins_deel_key"
+ " , d.ins_alg_ruimte_key"
+ " , d.ins_alg_ruimte_type")
+ " FROM ins_deel d"
+ " , ins_srtdeel s"
+ " WHERE s.ins_srtdeel_key = d.ins_srtdeel_key"
+ " AND s.ins_srtdeel_key IN (" + pins_srtdeel_key + ")"
+ (params.retour
? " AND d.ins_alg_ruimte_key_org IS NOT NULL AND d.ins_alg_ruimte_type_org IS NOT NULL" // Alleen objecten die in gebruik zijn.
+ " AND d.bes_bestelopdr_key = " + params.bestelopdr_key
: " AND d.ins_alg_ruimte_key_org IS NULL AND d.ins_alg_ruimte_type_org IS NULL"); // Alleen vrije objecten.
}
return sql_freeobj;
},
createattachdisconnectObjects:
function (popdr_key, pbestelopdr_item_key, paantalontv)
{ // Aanmaken (Create), koppelen (Attach) of loskoppelen (Disconnect) van objecten aan of van de bestelopdracht (per bestelopdrachtregel).
@@ -142,6 +168,7 @@
sql = "SELECT bi.bes_bestelling_item_key"
+ " , bdp.bes_disc_params_ins_mode"
+ " , s.ins_srtdeel_key"
+ " , bes.prs_perslid_key_voor"
+ " , BITAND(sd.ins_srtdeel_binding, 8) afd_binding"
+ " , BITAND(sd.ins_srtdeel_binding, 16) prs_binding"
+ " , CASE"
@@ -149,6 +176,7 @@
+ " THEN 1"
+ " ELSE 0"
+ " END isRetour"
+ " , bes.bes_bestelling_retourvan_key"
+ " FROM bes_bestelopdr b"
+ " , bes_bestelopdr_item boi"
+ " , bes_bestelling_item bi"
@@ -178,13 +206,28 @@
var bestelling_item_key = oRsb("bes_bestelling_item_key").Value;
var ins_mode = oRsb("bes_disc_params_ins_mode").Value;
var ins_srtdeel_key = oRsb("ins_srtdeel_key").Value || -1;
var prs_perslid_key_voor = oRsb("prs_perslid_key_voor").Value;
var afd_binding = oRsb("afd_binding").Value == 8;
var prs_binding = oRsb("prs_binding").Value == 16;
var isRetour = oRsb("isRetour").Value == 1;
var bes_bestelling_retourvan_key = oRsb("bes_bestelling_retourvan_key").Value;
if (!isRetour && ins_mode > 0 && ins_srtdeel_key < 0)
abort_with_warning(L("lcl_bes_notlinkedto_obj_type"));
var freeobj_params = {retour: isRetour};
if (isRetour)
{
sql_r = "SELECT boi.bes_bestelopdr_key"
+ " FROM bes_bestelling_item bi"
+ " , bes_bestelopdr_item boi"
+ " WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key"
+ " AND bi.bes_bestelling_key = " + bes_bestelling_retourvan_key;
oRs_r = Oracle.Execute(sql_r);
freeobj_params.bestelopdr_key = oRs_r("bes_bestelopdr_key").Value;
oRs_r.Close();
}
// De scope is vooralsnog alleen de functionaliteit waarbij de objecten al bestaan in FACILITOR (ins_deel records) (DJIN#41674).
//if (ins_mode == 1 && paantalontv > 0)
//{ // Aanmaken objecten.
@@ -192,12 +235,16 @@
//}
// Koppelen van objecten.
var sql_freeobj = bes.getPresentObjectsSql(ins_srtdeel_key, bestelling_item_key);
var sql_freeobj = bes.getMatchObjectsSql(ins_srtdeel_key, bestelling_item_key, freeobj_params);
sql = "SELECT ins_deel_key"
+ " , ins_alg_ruimte_key"
+ " , ins_alg_ruimte_type"
+ " FROM (" + sql_freeobj + ")"
+ " WHERE ROWNUM <= (" + Math.abs(paantalontv) + ")";
+ " WHERE ROWNUM <= (" + Math.abs(paantalontv) + ")"
+ " ORDER BY ins_deel_key"
+ (isRetour
? " DESC"
: "");
var oRsi = Oracle.Execute(sql);
while (!oRsi.eof)
{
@@ -209,7 +256,7 @@
sql = "UPDATE ins_deel"
+ " SET ins_alg_ruimte_key_org = " + oRsi("ins_alg_ruimte_key").Value
+ " , ins_alg_ruimte_type_org = '" + oRsi("ins_alg_ruimte_type").Value + "'"
+ " , ins_alg_ruimte_key = " + (prs_binding? user_key : user.prs_afdeling_key())
+ " , ins_alg_ruimte_key = " + (prs_binding? prs_perslid_key_voor : new Perslid(prs_perslid_key_voor).prs_afdeling_key())
+ " , ins_alg_ruimte_type = " + (prs_binding? "'P'" : "'A'")
+ " , bes_bestelopdr_key = " + popdr_key
+ " WHERE ins_deel_key = " + ins_deel_key;

View File

@@ -76,7 +76,8 @@ function doSubmit()
if (window.document.getElementById("k" + i + "val")) {
var kval = window.document.getElementById("k" + i + "val")
if (kval.value != "")
var tp = window.document.getElementById('k' + i + 't').value;
if ((tp && tp != 'R' && tp != 'S' && kval.value != "") || (tp && (tp == 'R' || tp == 'S') && kval.value != -1))
{
var kkey = window.document.getElementById('k' + i + 'key').value;
objReturn[0][objReturn[0].length] = kkey;
@@ -90,7 +91,6 @@ function doSubmit()
lbl = lbl.substring(0, lbl.length - 1)
objReturn[2][objReturn[2].length] = lbl;
var tp = window.document.getElementById('k' + i + 't').value;
if (kval.type == 'checkbox') {
objReturn[3][objReturn[3].length] = (kval.checked?1:0);
}

View File

@@ -488,8 +488,8 @@ function bes_voorraad_list (pautfunction, params)
+ " OR bk.bes_srtinstallatie_key = sd.bes_srtdeel_key AND bk.bes_kenmerk_niveau LIKE 'S')"
+ " AND bk.bes_kenmerk_type = 'I'"
+ " AND bk.bes_srtkenmerk_key = sk.bes_srtkenmerk_key"
+ " AND bk.bes_kenmerk_verwijder = NULL"
+ " AND sk.bes_srtkenmerk_verwijder = NULL"
+ " AND bk.bes_kenmerk_verwijder IS NULL"
+ " AND sk.bes_srtkenmerk_verwijder IS NULL"
+ " AND sd.bes_srtdeel_key = l.bes_srtdeel_key) aantalkenmerken"
+ " , l.eenheid_extern"
+ " , l.eenheid_intern"

View File

@@ -244,7 +244,7 @@ user.auth_required_or_abort(this_bestelopdr.canDeliver);
var ins_srtdeel_key = oRs("ins_srtdeel_key").Value || -1;
if (!isRetour && ins_mode > 0 && ins_srtdeel_key > 0)
{
var sql_instock = bes.getPresentObjectsSql(ins_srtdeel_key, bi_key, true);
var sql_instock = bes.getMatchObjectsSql(ins_srtdeel_key, bi_key, {getcount: true, retour: isRetour}); // isRetour is false.
var oRsI = Oracle.Execute(sql_instock);
instock = oRsI("aantal").Value;
oRsI.Close();