BEGIN TRANSACTION;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- mögliche POS Aufträge ausschließen
DECLARE @nPlattformPOS AS INT = 9;
-- Großaufträge ab x Artikeln unterschlagen
DECLARE @nArtikelGroßauftrag AS INT = 130;
-- Heute versendete Lieferscheine ermitteln
DECLARE @TotalLieferscheine DEC;
SELECT @TotalLieferscheine = COUNT(*) FROM Versand.lvLieferschein AS lvLieferschein
WHERE Format(lvLieferschein.dErstellt, 'dd-MM-yyyy') = Format(getdate(), 'dd-MM-yyyy') AND (lvLieferschein.nAnzahlPakete <= lvLieferschein.nAnzahlVersendetePakete) AND (lvLieferschein.nPlattformTyp <> @nPlattformPOS);
-- PRINT @TotalLieferscheine;
-- Heute versendete Positionen ermitteln
DECLARE @TotalPositionen DEC;
SELECT @TotalPositionen = SUM(PosZählen)
FROM (
SELECT count(lvLieferschein.kLieferschein) AS PosZählen
FROM Versand.lvLieferschein AS lvLieferschein
LEFT JOIN tLieferscheinPos ON tLieferscheinPos.kLieferschein = lvLieferschein.kLieferschein
WHERE Format(lvLieferschein.dErstellt, 'dd-MM-yyyy') = Format(getdate(), 'dd-MM-yyyy')
AND (lvLieferschein.nAnzahlPakete <= lvLieferschein.nAnzahlVersendetePakete)
AND (lvLieferschein.nPlattformTyp <> @nPlattformPOS)
GROUP BY lvLieferschein.kLieferschein
) AS AnzahlPos;
-- PRINT @TotalPositionen;
-- Heute versendete Artikel ermitteln
DECLARE @TotalArtikel DEC;
SELECT @TotalArtikel = SUM(ArtikelAnzahlListe) FROM (
SELECT SUM(tLieferscheinPos.fAnzahl) AS ArtikelAnzahlListe
FROM Versand.lvLieferschein AS lvLieferschein
LEFT JOIN tLieferscheinPos ON tLieferscheinPos.kLieferschein = lvLieferschein.kLieferschein
WHERE Format(lvLieferschein.dErstellt, 'dd-MM-yyyy') = Format(getdate(), 'dd-MM-yyyy')
AND (lvLieferschein.nAnzahlPakete <= lvLieferschein.nAnzahlVersendetePakete)
AND (lvLieferschein.nPlattformTyp <> '9')
GROUP BY tLieferscheinPos.kLieferschein) AS ArtikelAnzahlListe
WHERE ArtikelAnzahlListe < @nArtikelGroßauftrag;
-- PRINT @TotalArtikel;
-- Berechnung des gewichteten Versandwerts
DECLARE @NormalisiertVersandt DEC(10,0);
SET @NormalisiertVersandt = (@TotalArtikel / @TotalPositionen) * @TotalLieferscheine;
-- PRINT @NormalisiertVersandt;
--
-- NOCH ZU VERPACKENDE
DECLARE @warenlager AS INT = 0;
-- Noch zu packende Aufträge ermitteln
BEGIN TRANSACTION;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
DECLARE @TotalAufträgeToDo DEC;
SELECT @TotalAufträgeToDo = AufträgeZählen
FROM (
SELECT COUNT(*) AS AufträgeZählen FROM Versand.lvAuftrag AS lvAuftrag
WHERE (lvAuftrag.nIstBezahlt = 1)
AND (lvAuftrag.kRueckhalteGrund = 0)
AND (lvAuftrag.nAuftragStatus = 0)
AND (lvAuftrag.nPickstatus IS NULL OR lvAuftrag.nPickstatus = 0)
AND (lvAuftrag.nVersandstatusEigen = 2)
AND (lvAuftrag.kWarenlager = @Warenlager))
AS AnzahlAufträgeToDo;
-- PRINT @TotalAufträgeToDo;
COMMIT TRANSACTION;
-- Noch zu packende Positionen ermitteln
DECLARE @TotalPositionenToDo DEC;
SELECT @TotalPositionenToDo = SUM(PosZählen)
FROM (
SELECT count(lvAuftrag.kBestellung) AS PosZählen
FROM Versand.lvAuftrag AS lvAuftrag
LEFT JOIN tBestellpos ON tBestellpos.tBestellung_kBestellung = lvAuftrag.kBestellung
WHERE (lvAuftrag.nIstBezahlt = 1)
AND (lvAuftrag.kRueckhalteGrund = 0)
AND (lvAuftrag.nAuftragStatus = 0)
AND (lvAuftrag.nPickstatus IS NULL OR lvAuftrag.nPickstatus = 0)
AND (lvAuftrag.nVersandstatusEigen = 2)
AND (lvAuftrag.kWarenlager = @Warenlager)
/*AND tBestellpos.tArtikel_kArtikel != '0'*/
GROUP BY lvAuftrag.kBestellung
) AS AnzahlPosToDo;
-- PRINT @TotalPositionenToDo;
-- Noch zu packende Artikel ermitteln
DECLARE @TotalArtikelToDo DEC;
SELECT @TotalArtikelToDo = SUM(ArtikelAnzahlListe) FROM (
SELECT SUM(tBestellpos.nAnzahl) AS ArtikelAnzahlListe
FROM Versand.lvAuftrag AS lvAuftrag
LEFT JOIN tBestellpos ON tBestellpos.tBestellung_kBestellung = lvAuftrag.kBestellung
WHERE (lvAuftrag.nIstBezahlt = 1)
AND (lvAuftrag.kRueckhalteGrund = 0)
AND (lvAuftrag.nAuftragStatus = 0)
AND (lvAuftrag.nPickstatus IS NULL OR lvAuftrag.nPickstatus = 0)
AND (lvAuftrag.nVersandstatusEigen = 2)
AND (lvAuftrag.kWarenlager = @Warenlager)
/*AND tBestellpos.tArtikel_kArtikel != '0'*/
GROUP BY tBestellpos.tBestellung_kBestellung) AS ArtikelAnzahlListe
WHERE ArtikelAnzahlListe < @nArtikelGroßauftrag;
-- PRINT @TotalArtikelToDo;
--Berechnung des gewichteten ToDo Werts
DECLARE @NormalisiertToDo DEC(10,0);
SET @NormalisiertToDo = (@TotalArtikelToDo / @TotalPositionenToDo) * @TotalAufträgeToDo;
-- PRINT @NormalisiertToDo;
--
-- Minuten seit dem ersten Lieferschein heute ermitteln
DECLARE @MinutenSeitErstemLieferschein INT;
SELECT @MinutenSeitErstemLieferschein = DATEDIFF(MINUTE, MIN(dErstellt), GETDATE()) FROM Versand.lvLieferschein AS lvLieferschein
WHERE Format(lvLieferschein.dErstellt, 'dd-MM-yyyy') = Format(getdate(), 'dd-MM-yyyy')
AND (lvLieferschein.nAnzahlPakete <= lvLieferschein.nAnzahlVersendetePakete)
/*AND (lvLieferschein.nPlattformTyp <> @nPlattformPOS)*/;
-- PRINT @MinutenSeitErstemLieferschein;
-- Minuten bis zur Abholung ermitteln
DECLARE @MinutenBisZurAbholung INT;
DECLARE @abholungdate DATETIME = CONVERT(DATETIME, FORMAT(GETDATE(), 'yyyy-MM-dd') + ' ' + '12:55:00', 120);
SET @MinutenBisZurAbholung = DATEDIFF(MINUTE, GETDATE(), @abholungdate);
-- PRINT @MinutenBisZurAbholung;
-- Berechnung der Voraussage
DECLARE @ToDoScore DEC(10,2);
SET @ToDoScore = @NormalisiertToDo / @MinutenBisZurAbholung;
DECLARE @VersandtScore DEC(10,2);
SET @VersandtScore = @NormalisiertVersandt / @MinutenSeitErstemLieferschein;
DECLARE @VoraussageScore DEC(10,2);
SET @VoraussageScore = @VersandtScore - @ToDoScore;
SELECT
CASE
WHEN DATEDIFF(MINUTE, GETDATE(), @abholungdate) < 0 OR DATEPART(WEEKDAY, GETDATE()) IN (6, 7) THEN '0'
ELSE @VoraussageScore
END;
COMMIT TRANSACTION;