const sql = require('mssql'); const MSSQL_CONFIG = require('./config').MSSQL_CONFIG const DRY_RUN = require('./config').DRY_RUN class JtlSql { async getOrderOnLiefBest(liefBestNr) { try { const auftrag = await this.getBezugsAuftragsNrOnLiefBestNr(liefBestNr) if (!auftrag) return null await sql.connect(MSSQL_CONFIG); const request = new sql.Request(); request.input('cBestellNr', sql.VarChar, auftrag.cBezugsAuftragsNummer); const query = `SELECT * FROM tBestellung WHERE cBestellNr = @cBestellNr`; const result = await request.query(query); return result.recordset[0] } catch (error) { console.error('Error fetching BezugsAuftragsNummer:', error); return null; } } async getBezugsAuftragsNrOnLiefBestNr(liefBestNr) { try { await sql.connect(MSSQL_CONFIG); const request = new sql.Request(); request.input('liefBestNr', sql.VarChar, liefBestNr); const query = `SELECT cBezugsAuftragsNummer FROM tLieferantenBestellung WHERE cEigeneBestellnummer = @liefBestNr`; const result = await request.query(query); return result.recordset[0] } catch (error) { console.error('Error fetching BezugsAuftragsNummer:', error); return null; } } async getLieferscheinOnAuftragsnummer(auftragsNummer) { try { await sql.connect(MSSQL_CONFIG); const request = new sql.Request(); request.input('auftragsNummer', sql.VarChar, auftragsNummer+'%'); const query = ` SELECT TOP 1 * FROM tLieferschein WHERE cLieferscheinNr LIKE @auftragsNummer `; const result = await request.query(query); return result.recordset[0]|| null; } catch (error) { console.error('Error fetching Lieferschein:', error); return null; } } async getVersandPaketeOnLieferscheinId(kLieferschein) { try { await sql.connect(MSSQL_CONFIG); const request = new sql.Request(); request.input('kLieferschein', sql.Int, kLieferschein); const query = ` SELECT * FROM tVersand WHERE kLieferschein = @kLieferschein `; const result = await request.query(query); return result.recordset } catch (error) { console.error('Error fetching Versand:', error); return null; } } async saveVersandPaket(paket) { if ('kVersand' in paket) { return await this.updateVersandPaket(paket) } else { return await this.insertVersandPaket(paket) } } async insertVersandPaket(paket) { try { await sql.connect(MSSQL_CONFIG); const request = new sql.Request(); request.input('kLieferschein', sql.Int, paket.kLieferschein); request.input('kBenutzer', sql.Int, paket.kBenutzer); request.input('kLogistik', sql.Int, paket.kLogistik); request.input('kVersandArt', sql.Int, paket.kVersandArt); request.input('cIdentCode', sql.VarChar, paket.cIdentCode.toString()); request.input('cEnclosedReturnIdentCode', sql.VarChar, paket.cEnclosedReturnIdentCode.toString()); request.input('dVersendet', sql.DateTime, paket.dVersendet); request.input('nStatus', sql.TinyInt, paket.nStatus); const query = ` INSERT INTO tVersand (kLieferschein, kBenutzer, kLogistik, nStatus, kVersandArt, cIdentCode, cEnclosedReturnIdentCode, dVersendet) VALUES (@kLieferschein, @kBenutzer, @kLogistik, @nStatus, @kVersandArt, @cIdentCode, @cEnclosedReturnIdentCode, @dVersendet) `; let fullQuery = DRY_RUN ? `BEGIN TRANSACTION;\n${query}\nROLLBACK TRANSACTION;` : query; const result = await request.query(fullQuery); return result.rowsAffected[0] } catch (error) { throw error } } async updateVersandPaket(paket) { try { await sql.connect(MSSQL_CONFIG); const request = new sql.Request(); request.input('kVersand', sql.Int, paket.kVersand); request.input('kLieferschein', sql.Int, paket.kLieferschein); request.input('cIdentCode', sql.VarChar, paket.cIdentCode ? paket.cIdentCode.toString() : null); request.input('cEnclosedReturnIdentCode', sql.VarChar, paket.cEnclosedReturnIdentCode ? paket.cEnclosedReturnIdentCode.toString() : null); request.input('dVersendet', sql.DateTime, paket.dVersendet); request.input('nStatus', sql.TinyInt, paket.nStatus); const query = ` UPDATE tVersand SET kLieferschein = @kLieferschein, nStatus = @nStatus, cIdentCode = @cIdentCode, cEnclosedReturnIdentCode = @cEnclosedReturnIdentCode, dVersendet = @dVersendet WHERE kVersand = @kVersand `; let fullQuery = DRY_RUN ? `BEGIN TRANSACTION;\n${query}\nROLLBACK TRANSACTION;` : query; const result = await request.query(fullQuery); return result.rowsAffected[0] } catch (error) { throw error } } async getAdresse(kAdresse) { try { await sql.connect(MSSQL_CONFIG); const request = new sql.Request(); request.input('kAdresse', sql.Int, kAdresse); const query = `SELECT * FROM tAdresse WHERE kAdresse = @kAdresse`; const result = await request.query(query); return result.recordset[0] } catch (error) { throw error } } } module.exports = JtlSql