search
This commit is contained in:
4
src/db/mssql/categories.js
Normal file
4
src/db/mssql/categories.js
Normal file
@@ -0,0 +1,4 @@
|
||||
export const LOAD_KAT_MAP = `
|
||||
SELECT kKategorie, kOberKategorie
|
||||
FROM dbo.tkategorie
|
||||
`;
|
||||
248
src/db/mssql/getArticle.js
Normal file
248
src/db/mssql/getArticle.js
Normal file
@@ -0,0 +1,248 @@
|
||||
export const FIND_ARTICLE = `
|
||||
SELECT TOP 1
|
||||
tArtikelBeschreibung.cBeschreibung,
|
||||
tArtikelBeschreibung.cKurzBeschreibung,
|
||||
b.kVersandklasse,
|
||||
(SELECT cName FROM dbo.tVersandklasse WHERE tVersandklasse.kVersandklasse = b.kVersandklasse) AS tVersandklassecName,
|
||||
nIstVater,
|
||||
kStueckliste,
|
||||
kVaterArtikel,
|
||||
b.kEigenschaftKombi,
|
||||
b.kArtikel,
|
||||
fUVP,
|
||||
fGewicht,
|
||||
tHersteller.cName AS cHersteller,
|
||||
cBarcode,
|
||||
fBestand,
|
||||
b.cArtNr,
|
||||
b.cAktiv,
|
||||
tArtikelBeschreibung.cName,
|
||||
b.fVKNEtto,
|
||||
b.kSteuerklasse,
|
||||
nVPE,
|
||||
kMassEinheit,
|
||||
fMassMenge,
|
||||
kGrundPreisEinheit,
|
||||
cAnmerkung,
|
||||
tEigenschaftSprache.kEigenschaft,
|
||||
tEigenschaftSprache.cName AS cEigenschaftName,
|
||||
tEigenschaftWertSprache.kEigenschaftWert,
|
||||
tEigenschaftWertSprache.cName AS cEigenschaftWertName,
|
||||
(
|
||||
SELECT c.cArtNr
|
||||
FROM tArtikel c
|
||||
WHERE c.kArtikel = (
|
||||
SELECT tArtikel_kArtikel
|
||||
FROM tliefartikel
|
||||
WHERE cLiefArtNr = b.cArtNr AND tlieferant_klieferant = 96
|
||||
)
|
||||
) AS cLiefArtNr96
|
||||
FROM tArtikelBeschreibung
|
||||
INNER JOIN tArtikel b ON b.kArtikel = tArtikelBeschreibung.kArtikel
|
||||
LEFT JOIN dbo.vLagerbestandProLager ON (
|
||||
dbo.vLagerbestandProLager.kArtikel = b.kArtikel
|
||||
AND vLagerbestandProLager.kWarenlager = 1
|
||||
)
|
||||
LEFT JOIN tGebinde ON b.kArtikel = tGebinde.kArtikel
|
||||
LEFT JOIN tHersteller ON b.kHersteller = tHersteller.kHersteller
|
||||
LEFT JOIN tEigenschaftKombiWert ON b.kEigenschaftKombi = tEigenschaftKombiWert.kEigenschaftKombi
|
||||
LEFT JOIN tEigenschaftSprache ON (
|
||||
tEigenschaftKombiWert.kEigenschaft = tEigenschaftSprache.kEigenschaft
|
||||
AND tEigenschaftSprache.kSprache = 1
|
||||
)
|
||||
LEFT JOIN tEigenschaftWertSprache ON (
|
||||
tEigenschaftWertSprache.kEigenschaftWert = tEigenschaftKombiWert.kEigenschaftWert
|
||||
AND tEigenschaftWertSprache.kSprache = 1
|
||||
)
|
||||
WHERE b.cArtNr = @target OR tGebinde.cEAN = @target OR b.cBarcode = @target
|
||||
`;
|
||||
|
||||
export const CHILDREN_BY_VATER = `
|
||||
SELECT
|
||||
tArtikel.cArtNr,
|
||||
tArtikelBeschreibung.cName,
|
||||
tArtikel.kEigenschaftKombi,
|
||||
tEigenschaftSprache.kEigenschaft,
|
||||
tEigenschaftSprache.cName AS cEigenschaftName,
|
||||
tEigenschaftWertSprache.kEigenschaftWert,
|
||||
tEigenschaftWertSprache.cName AS cEigenschaftWertName
|
||||
FROM tArtikelBeschreibung
|
||||
INNER JOIN tArtikel ON tArtikel.kArtikel = tArtikelBeschreibung.kArtikel
|
||||
LEFT JOIN tEigenschaftKombiWert ON tArtikel.kEigenschaftKombi = tEigenschaftKombiWert.kEigenschaftKombi
|
||||
LEFT JOIN tEigenschaftSprache ON (
|
||||
tEigenschaftKombiWert.kEigenschaft = tEigenschaftSprache.kEigenschaft
|
||||
AND tEigenschaftSprache.kSprache = 1
|
||||
)
|
||||
LEFT JOIN tEigenschaftWertSprache ON (
|
||||
tEigenschaftWertSprache.kEigenschaftWert = tEigenschaftKombiWert.kEigenschaftWert
|
||||
AND tEigenschaftWertSprache.kSprache = 1
|
||||
)
|
||||
WHERE tArtikel.kVaterArtikel = @kArtikel
|
||||
`;
|
||||
|
||||
export const VATER_BY_ID = `
|
||||
SELECT tArtikel.cArtNr
|
||||
FROM tArtikelBeschreibung
|
||||
INNER JOIN tArtikel ON tArtikel.kArtikel = tArtikelBeschreibung.kArtikel
|
||||
WHERE tArtikel.kArtikel = @kArtikel
|
||||
`;
|
||||
|
||||
export const STUECKLISTE = `
|
||||
SELECT
|
||||
tArtikelBeschreibung.cName,
|
||||
tArtikel.cArtNr,
|
||||
tStueckliste.fAnzahl,
|
||||
tArtikel.fVKNEtto,
|
||||
tArtikel.kSteuerklasse,
|
||||
vLagerbestandProLager.fBestand
|
||||
FROM dbo.tStueckliste
|
||||
INNER JOIN dbo.tArtikelBeschreibung ON tArtikelBeschreibung.kArtikel = tStueckliste.kArtikel
|
||||
LEFT JOIN dbo.vLagerbestandProLager ON (
|
||||
vLagerbestandProLager.kArtikel = tStueckliste.kArtikel
|
||||
AND vLagerbestandProLager.kWarenlager = 1
|
||||
)
|
||||
INNER JOIN dbo.tArtikel ON tArtikel.kArtikel = tStueckliste.kArtikel
|
||||
WHERE tStueckliste.kStueckliste = @kStueckliste
|
||||
ORDER BY tStueckliste.nSort
|
||||
`;
|
||||
|
||||
export const ANDERE_LAGER = `
|
||||
SELECT SUM(fBestand) AS fSumme
|
||||
FROM dbo.vLagerbestandProLager
|
||||
WHERE dbo.vLagerbestandProLager.kArtikel = @kArtikel
|
||||
AND vLagerbestandProLager.kWarenlager != 1
|
||||
GROUP BY dbo.vLagerbestandProLager.kArtikel
|
||||
`;
|
||||
|
||||
export const EANS = `
|
||||
SELECT cEAN
|
||||
FROM tGebinde
|
||||
WHERE kArtikel = @kArtikel
|
||||
`;
|
||||
|
||||
export function categoriesQuery(katSkipClause, katLists) {
|
||||
return `
|
||||
SELECT kKategorie
|
||||
FROM dbo.tkategorieartikel
|
||||
WHERE kArtikel = @kArtikel
|
||||
AND ${katSkipClause}kKategorie NOT IN (
|
||||
SELECT kKategorie
|
||||
FROM tKategorie
|
||||
WHERE kOberKategorie = ${katLists}
|
||||
)
|
||||
`;
|
||||
}
|
||||
|
||||
export const SUPPLIERS = `
|
||||
SELECT
|
||||
tlieferant.kLieferant,
|
||||
cFirma,
|
||||
tliefartikel.cLiefArtNr,
|
||||
nStandard,
|
||||
fLagerbestand,
|
||||
cVPEEinheit,
|
||||
nVPEMenge,
|
||||
fMwSt,
|
||||
fEKNetto,
|
||||
tShopKorb.nMenge,
|
||||
tlieferant.cEmail,
|
||||
tlieferant.cAnmerkung
|
||||
FROM tliefartikel
|
||||
INNER JOIN tlieferant ON tlieferant.kLieferant = tliefartikel.tLieferant_kLieferant
|
||||
LEFT JOIN tShopKorb ON (
|
||||
tShopKorb.kLieferant = tlieferant.kLieferant
|
||||
AND tliefartikel.cLiefArtNr = tShopKorb.cLiefArtNr
|
||||
)
|
||||
WHERE tArtikel_kArtikel = @kArtikel
|
||||
ORDER BY nStandard DESC, tlieferant.kLieferant
|
||||
`;
|
||||
|
||||
export const INCOMING_ORDERS = `
|
||||
SELECT
|
||||
tLieferantenBestellung.kLieferant,
|
||||
tLieferantenBestellungPos.kLieferantenBestellungPos,
|
||||
tLieferantenBestellungPos.kLieferantenBestellung,
|
||||
cEigeneBestellnummer,
|
||||
tLieferantenBestellungPos.kLieferantenBestellung + 1 AS kLieferantenBestellung2,
|
||||
cFirma,
|
||||
tLieferantenBestellungPos.dLieferdatum,
|
||||
cFremdbelegnummer,
|
||||
cInternerKommentar,
|
||||
fAnzahlOffen
|
||||
FROM tLieferantenBestellung
|
||||
INNER JOIN tlieferant ON tlieferant.kLieferant = tLieferantenBestellung.kLieferant
|
||||
INNER JOIN tLieferantenBestellungPos ON (
|
||||
tLieferantenBestellungPos.kLieferantenBestellung = tLieferantenBestellung.kLieferantenBestellung
|
||||
)
|
||||
WHERE fAnzahlOffen > 0 AND kArtikel = @kArtikel
|
||||
ORDER BY tLieferantenBestellungPos.kLieferantenBestellung
|
||||
`;
|
||||
|
||||
export const OPEN_INCIDENTS = `
|
||||
SELECT cType, cNote, kIncident, cEmployeeIssuer, cEmployeeMap
|
||||
FROM dbo.tIncident
|
||||
WHERE kRef1 = @kArtikel
|
||||
AND cState = 'new'
|
||||
AND cType IN ('order_count', 'order_label', 'order_free')
|
||||
`;
|
||||
|
||||
export const MERKMALE = `
|
||||
SELECT
|
||||
tArtikelMerkmal.kMerkmal,
|
||||
tArtikelMerkmal.kMerkmalWert,
|
||||
tMerkmalSprache.cName,
|
||||
tMerkmalWertSprache.cWert
|
||||
FROM dbo.tArtikelMerkmal
|
||||
INNER JOIN dbo.tMerkmalSprache ON tMerkmalSprache.kMerkmal = tArtikelMerkmal.kMerkmal
|
||||
INNER JOIN dbo.tMerkmalWertSprache ON tMerkmalWertSprache.kMerkmalWert = tArtikelMerkmal.kMerkmalWert
|
||||
WHERE tArtikelMerkmal.kArtikel = @kArtikel
|
||||
ORDER BY tArtikelMerkmal.kMerkmal
|
||||
`;
|
||||
|
||||
export const ATTRIBUTES = `
|
||||
SELECT
|
||||
tArtikelAttribut.kAttribut,
|
||||
tArtikelAttributSprache.cWertVarchar,
|
||||
tArtikelAttributSprache.nWertInt,
|
||||
tArtikelAttributSprache.fWertDecimal
|
||||
FROM dbo.tArtikelAttribut
|
||||
INNER JOIN dbo.tArtikelAttributSprache ON (
|
||||
tArtikelAttributSprache.kArtikelAttribut = tArtikelAttribut.kArtikelAttribut
|
||||
AND kSprache = 0
|
||||
)
|
||||
WHERE kShop = 0 AND tArtikelAttribut.kArtikel = @kArtikel
|
||||
`;
|
||||
|
||||
export const STAFFEL = `
|
||||
SELECT nAnzahlAb, fNEttoPreis
|
||||
FROM tPreis
|
||||
INNER JOIN tPreisDetail ON tPreisDetail.kPreis = tPreis.kPreis
|
||||
WHERE kArtikel = @kArtikel AND kKundenGruppe = 2 AND kShop = 0
|
||||
`;
|
||||
|
||||
export const EXTRA_LAGER = `
|
||||
SELECT nMenge
|
||||
FROM tExtraLager
|
||||
WHERE kArtikel = @kArtikel AND nLager = @nLager
|
||||
`;
|
||||
|
||||
export const SHOP_SUM = `
|
||||
SELECT SUM(kShop) AS kShop
|
||||
FROM tArtikelShop
|
||||
WHERE kArtikel = @kArtikel
|
||||
`;
|
||||
|
||||
export const HERSTELLER_GPSR = `
|
||||
SELECT
|
||||
tHersteller.cBeschreibung AS cHerstellerGPSR,
|
||||
b.bVorschauBild AS herstellerBild
|
||||
FROM tArtikel
|
||||
INNER JOIN tHersteller ON tArtikel.kHersteller = tHersteller.kHersteller
|
||||
LEFT JOIN tHerstellerBildPlattform hbp ON (
|
||||
hbp.kHersteller = tHersteller.kHersteller
|
||||
AND hbp.kPlattform = 1
|
||||
AND hbp.kShop = 0
|
||||
)
|
||||
LEFT JOIN tBild b ON b.kBild = hbp.kBild
|
||||
WHERE tArtikel.kArtikel = @kArtikel
|
||||
`;
|
||||
37
src/db/mssql/searchArticles.js
Normal file
37
src/db/mssql/searchArticles.js
Normal file
@@ -0,0 +1,37 @@
|
||||
export const SELECT_COLUMNS = `
|
||||
(SELECT STRING_AGG(tk1.kKategorie, ',')
|
||||
FROM dbo.tkategorieartikel AS tk1
|
||||
WHERE tk1.kArtikel = tArtikel.kArtikel
|
||||
GROUP BY tk1.kArtikel) AS katList,
|
||||
MIN(fVerfuegbar) AS fVerfuegbar,
|
||||
tArtikel.kArtikel,
|
||||
MIN(fBestand) AS fBestand,
|
||||
MIN(tArtikel.cArtNr) AS cArtNr,
|
||||
MIN(tArtikelBeschreibung.cName) AS cName,
|
||||
MIN(tArtikel.fVKNEtto) AS fVKNEtto,
|
||||
MIN(tArtikel.kSteuerklasse) AS kSteuerklasse
|
||||
`;
|
||||
|
||||
export const FROM_JOINS = `
|
||||
FROM tArtikelBeschreibung
|
||||
INNER JOIN tArtikel ON tArtikel.kArtikel = tArtikelBeschreibung.kArtikel
|
||||
LEFT JOIN tLiefArtikel ON tArtikel.kArtikel = tLiefArtikel.tArtikel_kArtikel
|
||||
LEFT JOIN tGebinde ON tArtikel.kArtikel = tGebinde.kArtikel
|
||||
LEFT JOIN dbo.tlagerbestand ON dbo.tlagerbestand.kArtikel = tArtikel.kArtikel
|
||||
LEFT JOIN dbo.vLagerbestandProLager ON (
|
||||
dbo.vLagerbestandProLager.kArtikel = tArtikel.kArtikel
|
||||
AND vLagerbestandProLager.kWarenlager = 1
|
||||
)
|
||||
`;
|
||||
|
||||
export const GROUP_ORDER = `
|
||||
GROUP BY tArtikel.kArtikel
|
||||
ORDER BY MIN(tArtikelBeschreibung.cName)
|
||||
`;
|
||||
|
||||
export const CATEGORY_JOIN = `
|
||||
INNER JOIN dbo.tkategorieartikel ON (
|
||||
tkategorieartikel.kArtikel = tArtikel.kArtikel
|
||||
AND ({categoryFilter})
|
||||
)
|
||||
`;
|
||||
64
src/db/mssqlClient.js
Normal file
64
src/db/mssqlClient.js
Normal file
@@ -0,0 +1,64 @@
|
||||
import sql from 'mssql';
|
||||
import env from '../config/env.js';
|
||||
|
||||
let pool;
|
||||
let connecting;
|
||||
|
||||
function getMssqlConfig() {
|
||||
const { server, database, user, password, port, encrypt, trustServerCertificate } = env.mssql;
|
||||
|
||||
if (!server || !database || !user || !password) {
|
||||
throw new Error('MSSQL is not configured (MSSQL_SERVER, MSSQL_DATABASE, MSSQL_USER, MSSQL_PASSWORD required)');
|
||||
}
|
||||
|
||||
return {
|
||||
server,
|
||||
database,
|
||||
user,
|
||||
password,
|
||||
port,
|
||||
pool: {
|
||||
max: 10,
|
||||
min: 0,
|
||||
idleTimeoutMillis: 30_000,
|
||||
},
|
||||
options: {
|
||||
encrypt,
|
||||
trustServerCertificate,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export async function getPool() {
|
||||
if (pool) {
|
||||
return pool;
|
||||
}
|
||||
|
||||
if (!connecting) {
|
||||
connecting = new sql.ConnectionPool(getMssqlConfig())
|
||||
.connect()
|
||||
.then((connectedPool) => {
|
||||
pool = connectedPool;
|
||||
return pool;
|
||||
})
|
||||
.finally(() => {
|
||||
connecting = undefined;
|
||||
});
|
||||
}
|
||||
|
||||
return connecting;
|
||||
}
|
||||
|
||||
export async function ensureConnection() {
|
||||
const activePool = await getPool();
|
||||
await activePool.request().query('SELECT 1 AS ok');
|
||||
}
|
||||
|
||||
export async function closePool() {
|
||||
if (pool) {
|
||||
await pool.close();
|
||||
pool = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export { sql };
|
||||
Reference in New Issue
Block a user