#pragma once #include "../db/pool.hpp" #include "../config.hpp" namespace delivery { inline int resolve_outgoing_warehouse(OdbcPool::Connection* c) { int configured = config::get_int("JTL_KWARENLAGER", 0); if (configured > 0) return configured; ResultSet rs; if (!get_pool().execute(c, "SELECT TOP 1 kWarenLager FROM dbo.tWarenLager " "WHERE nFulfillment = 0 AND ISNULL(nAktiv, 1) = 1 " "ORDER BY nAuslieferungsPrio, kWarenLager", rs) || rs.empty() || rs[0].empty()) { throw std::runtime_error("No local warehouse (dbo.tWarenLager.nFulfillment = 0) found; set JTL_KWARENLAGER explicitly."); } return std::stoi(rs[0][0].str); } inline int resolve_warehouse_place(OdbcPool::Connection* c, int kWarenLager) { int configured = config::get_int("JTL_KWARENLAGERPLATZ", 0); if (configured > 0) return configured; std::vector ps = {{ParamType::Int, "", kWarenLager}}; ResultSet rs; if (!get_pool().execute(c, "SELECT TOP 1 kWarenLagerPlatz FROM dbo.tWarenLagerPlatz " "WHERE kWarenLager = ? AND ISNULL(nGesperrt, 0) = 0 " "ORDER BY nPrio, kWarenLagerPlatz", ps, rs) || rs.empty() || rs[0].empty()) { throw std::runtime_error("No warehouse place found for kWarenLager=" + std::to_string(kWarenLager) + "; set JTL_KWARENLAGERPLATZ explicitly."); } return std::stoi(rs[0][0].str); } } // namespace delivery