Idea aplikacj. W restauracji na kazdym stoliku będize naklejka z inwydidualnym kodem QR. Klient bedzie mógł zeskanować kod QR i wejść do aplikacji. Dane do bazy danych Microsoft SQL $serverName = '192.168.20.20'; $connectionOptions = [ 'Database' => 'Gastro', 'Uid' => 'sa', 'PWD' => 'karczma!@#26', 'CharacterSet' => 'UTF-8', ]; dbo.NGastroDTRachunek - Tutaj jest lista rachunków. { "schema": "dbo", "name": "NGastroDTRachunek", "full_name": "dbo.NGastroDTRachunek", "columns": [ { "name": "ID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": "(newid())", "ordinal": 1 }, { "name": "UzytkownikModyfikujacyID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 2 }, { "name": "RabatID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 3 }, { "name": "StolikID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 4 }, { "name": "KartaID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 5 }, { "name": "DotacjaID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 6 }, { "name": "RezerwacjaID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 7 }, { "name": "ZmianaUzytkownikOtwierajacyID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 8 }, { "name": "RodzajOtwarciaRachunkuID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 9 }, { "name": "PoziomCenowyID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 10 }, { "name": "UzytkownikOtwierajacyID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 11 }, { "name": "KasaID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 12 }, { "name": "ZmianaID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 13 }, { "name": "Numer", "data_type": "int", "type": "int(10,0)", "nullable": false, "default": "((0))", "ordinal": 14 }, { "name": "NumerZmiana", "data_type": "int", "type": "int(10,0)", "nullable": false, "default": "((0))", "ordinal": 15 }, { "name": "NumerReczny", "data_type": "varchar", "type": "varchar(10)", "nullable": false, "default": "('')", "ordinal": 16 }, { "name": "DataOtwarcia", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 17 }, { "name": "DataZamkniecia", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 18 }, { "name": "DataModyfikacji", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 19 }, { "name": "Opis", "data_type": "nvarchar", "type": "nvarchar(400)", "nullable": false, "default": "('')", "ordinal": 20 }, { "name": "IloscOsob", "data_type": "int", "type": "int(10,0)", "nullable": false, "default": "((0))", "ordinal": 21 }, { "name": "Status", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 22 }, { "name": "FlgRozliczony", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 23 }, { "name": "RachunekWstepnyIlosc", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 24 }, { "name": "FlgBlokadaEdycji", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 25 }, { "name": "FlgBlokadaEdycjiPoRabacie", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 26 }, { "name": "NIP", "data_type": "varchar", "type": "varchar(20)", "nullable": false, "default": "('')", "ordinal": 27 }, { "name": "FlgDotacjaUwzgledniaPozycjeNaDokumencie", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((1))", "ordinal": 28 }, { "name": "KodKreskowy", "data_type": "varchar", "type": "varchar(16)", "nullable": false, "default": "('')", "ordinal": 29 }, { "name": "FlgNumerWydrukowany", "data_type": "bit", "type": "bit", "nullable": false, "default": "((0))", "ordinal": 30 }, { "name": "FlgKolejnoscSerwowania", "data_type": "bit", "type": "bit", "nullable": false, "default": "((0))", "ordinal": 31 }, { "name": "OkresSerwowaniaNr", "data_type": "int", "type": "int(10,0)", "nullable": true, "default": null, "ordinal": 32 }, { "name": "FlgExecutionStatus", "data_type": "int", "type": "int(10,0)", "nullable": false, "default": "((0))", "ordinal": 33 }, { "name": "NumerDoOdbioruOdnawialny", "data_type": "int", "type": "int(10,0)", "nullable": false, "default": "((0))", "ordinal": 34 }, { "name": "FlgFastTrack", "data_type": "bit", "type": "bit", "nullable": false, "default": "((0))", "ordinal": 35 }, { "name": "LimitWartosciRachunku", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 36 }, { "name": "Telefon", "data_type": "varchar", "type": "varchar(15)", "nullable": false, "default": "('')", "ordinal": 37 }, { "name": "FlgRecznyTelefon", "data_type": "bit", "type": "bit", "nullable": false, "default": "((0))", "ordinal": 38 }, { "name": "_FlgTCF", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 39 }, { "name": "DS_RowVersion", "data_type": "timestamp", "type": "timestamp", "nullable": false, "default": null, "ordinal": 40 } ], "column_count": 40, "order_column": "DS_RowVersion", "order_reason": "timestamp\/rowversion" }, Kolumna StolikID w tabeli SaleTransOrder jest ID stolika, który został przypisany do zamówienia. Kolumna Ta jest kluczem obcym, który wskazuje na tabelę SaleStolik. Pozycje danego rachunku znajdują się w tabeli: dbo.NGastroDTRachunekPozycja { "schema": "dbo", "name": "NGastroDTRachunekPozycja", "full_name": "dbo.NGastroDTRachunekPozycja", "columns": [ { "name": "ID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": "(newid())", "ordinal": 1 }, { "name": "UzytkownikUsuwajacyID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 2 }, { "name": "RabatID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 3 }, { "name": "ZestawID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 4 }, { "name": "KonfiguracjaDrukowaniaZamowienID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 5 }, { "name": "UzytkownikAutoryzujacyID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 6 }, { "name": "PrzyczynaStornZwrotowID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 7 }, { "name": "PromocjaID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 8 }, { "name": "KuponID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 9 }, { "name": "DTRachunekID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 10 }, { "name": "TowarID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 11 }, { "name": "UzytkownikDodajacyID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 12 }, { "name": "StawkaVatID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 13 }, { "name": "KasaID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 14 }, { "name": "PoziomCenowyID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": false, "default": null, "ordinal": 15 }, { "name": "Ilosc", "data_type": "decimal", "type": "decimal(19,6)", "nullable": false, "default": "((0))", "ordinal": 16 }, { "name": "IloscZestawow", "data_type": "decimal", "type": "decimal(19,6)", "nullable": false, "default": "((1))", "ordinal": 17 }, { "name": "Cena", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 18 }, { "name": "DataDodania", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 19 }, { "name": "DataUsuniecia", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 20 }, { "name": "DataModyfikacjiGrupySerwowania", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 21 }, { "name": "IloscMinutOpoznienia", "data_type": "int", "type": "int(10,0)", "nullable": false, "default": "((0))", "ordinal": 22 }, { "name": "FlgWydrukowana", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 23 }, { "name": "NumerGrupySerwowania", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((1))", "ordinal": 24 }, { "name": "IloscKawalkow", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((1))", "ordinal": 25 }, { "name": "RolaWKompozycji", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 26 }, { "name": "NumerCzesci", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((1))", "ordinal": 27 }, { "name": "Notatka", "data_type": "varchar", "type": "varchar(255)", "nullable": false, "default": "('')", "ordinal": 28 }, { "name": "_p_StawkaVatGrupaSymbol", "data_type": "varchar", "type": "varchar(1)", "nullable": false, "default": "('')", "ordinal": 29 }, { "name": "_p_StawkaVatSymbol", "data_type": "varchar", "type": "varchar(10)", "nullable": false, "default": "('')", "ordinal": 30 }, { "name": "_p_StawkaVatSeparatorFiskalny", "data_type": "varchar", "type": "varchar(10)", "nullable": false, "default": "('')", "ordinal": 31 }, { "name": "_p_StawkaVatStawka", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 32 }, { "name": "_p_StawkaVatFlgZwolniona", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 33 }, { "name": "_c_Wartosc", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 34 }, { "name": "_c_DataUtworzenia", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 35 }, { "name": "CenaPodstawowa", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 36 }, { "name": "CenaPozaZestawem", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 37 }, { "name": "CenaPodstawowaPozaZestawem", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 38 }, { "name": "GrupaZestawuID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 39 }, { "name": "ZrodloRabatuID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 40 }, { "name": "FlgRodzajZrodlaRabatu", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 41 }, { "name": "IloscZrealizowana", "data_type": "decimal", "type": "decimal(19,6)", "nullable": false, "default": "((0))", "ordinal": 42 }, { "name": "StatusRealizacji", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 43 }, { "name": "DataZmianyStatusuRealizacji", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 44 }, { "name": "StatusEdycji", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 45 }, { "name": "DataWydruku", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 46 }, { "name": "NazwaDanieOtwarte", "data_type": "varchar", "type": "varchar(200)", "nullable": false, "default": "('')", "ordinal": 47 }, { "name": "FlgPozycjaNadrzedna", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 48 }, { "name": "IloscTalerzy", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((1))", "ordinal": 49 }, { "name": "DotacjaIlosc", "data_type": "decimal", "type": "decimal(19,6)", "nullable": false, "default": "((0))", "ordinal": 50 }, { "name": "DotacjaWartosc", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 51 }, { "name": "DotacjaPierwotnaWartosc", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 52 }, { "name": "KredytWartosc", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 53 }, { "name": "KredytPierwotnaWartosc", "data_type": "decimal", "type": "decimal(19,2)", "nullable": false, "default": "((0))", "ordinal": 54 }, { "name": "FlgPotwierdzona", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 55 }, { "name": "DodatekDlaDTRachunekPozycjaID", "data_type": "uniqueidentifier", "type": "uniqueidentifier", "nullable": true, "default": null, "ordinal": 56 }, { "name": "PunktyLojalnosciowe", "data_type": "int", "type": "int(10,0)", "nullable": false, "default": "((0))", "ordinal": 57 }, { "name": "FlgDowolnaCena", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 58 }, { "name": "DataWyswietleniaNaKDS", "data_type": "datetime", "type": "datetime", "nullable": true, "default": null, "ordinal": 59 }, { "name": "FlgCzyZestornowanyZRozchodem", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 60 }, { "name": "TowarKodKreskowy", "data_type": "varchar", "type": "varchar(100)", "nullable": true, "default": null, "ordinal": 61 }, { "name": "PromocjaTyp", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 62 }, { "name": "DataWykonania", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 63 }, { "name": "DataWydania", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 64 }, { "name": "DataOdebrania", "data_type": "datetime", "type": "datetime", "nullable": false, "default": "('1900-01-01')", "ordinal": 65 }, { "name": "CenaPoWydzieleniu", "data_type": "decimal", "type": "decimal(19,2)", "nullable": true, "default": "(NULL)", "ordinal": 66 }, { "name": "FlgSerwis", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 67 }, { "name": "FlgNapiwek", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 68 }, { "name": "FlgBlokadaEdycji", "data_type": "bit", "type": "bit", "nullable": false, "default": "((0))", "ordinal": 69 }, { "name": "_FlgTCF", "data_type": "tinyint", "type": "tinyint(3,0)", "nullable": false, "default": "((0))", "ordinal": 70 }, { "name": "DS_RowVersion", "data_type": "timestamp", "type": "timestamp", "nullable": false, "default": null, "ordinal": 71 } ], "column_count": 71, "order_column": "DS_RowVersion", "order_reason": "timestamp\/rowversion" }, CREATE PROCEDURE [dbo].[PV_WSKDSGetBill] @cGetRequestTemplate bit = 0, @cGetResponseTemplate bit = 0, @cRequest xml=null AS BEGIN SET NOCOUNT ON; SET DATEFORMAT ymd; -------------------------------------------------------------------------- -- kolejne kroki wykonania procedury IF @cGetRequestTemplate = 1 and @cGetResponseTemplate = 0 BEGIN SELECT ' ' as template RETURN; END IF @cGetResponseTemplate = 1 and @cGetRequestTemplate = 0 BEGIN SELECT '
' as template RETURN; END DECLARE @DeviceID UNIQUEIDENTIFIER, @SessionID UNIQUEIDENTIFIER, @KierunekWydrukuWszystkieID UNIQUEIDENTIFIER, @DeviceNumber INT, @ExecutionStatus INT, @result XML; DECLARE @SortType INT = 0, -- 0 - najstarsze na poczatku; 1 - najnowsze na poczatku @WyswietlanieEdytowanychRachunkow INT = 0, -- 0 - nie wyświetlamy rachunków w trakcie edycji; 1 - wyświetlane są rachunki już podczas ich edycji @WyswietlanieWykonanychPozycji INT = 0, -- 0 - nie wyświetlamy wykonanych pozycji; 1 - wyświetlane są pozycje już wykonane @RodzajNumeracjiNaKDS INT = 0, -- 0 - Globalny, 1 - Zmianowy, 2- DoOdbioru, 3 - GlobalnyDoOdbioru, 4 - ZmianowyDoOdbioru, 5 - DoOdbioruGlobalny = 5, 6 - DoOdbioruZmianowy @RodzajKDS INT = 0, -- 0 - KDS kuchenny; 1 - KDS wydawka @KDSWydawkaKolorPozycjiWPrzygotowaniu INT = 0, -- kolor dla pozycji w trakcie przygotowania - dla KDS wydawki @KDSWydawkaKolorPozycjiWydanych INT = 0, -- kolor dla pozycji przygotowanych - dla KDS wydawki @KDsWydawkaKolorPozycjiWezwanychDoWydania INT = 0, -- kolor dla pozycji wezwanych do wydania - dla KDS wydawki @RodzajNumerkaDoOdbioruZamowienia INT = 0, @KDSExistsIssued BIT = 1, -- verification of existing KDS Issued @WyswietlajRachunkiZOstatnichGodzin INT = 48, @DataCzasOdKtorejWyswietlacRachunki DATETIME = DATEADD(hh, -48, GETDATE()); SET @KierunekWydrukuWszystkieID = '7DA780B3-6E27-49F7-AE4A-1F8BDC792A72' SET @ExecutionStatus = 0; SET @DeviceID = NULL; SELECT @DeviceNumber = CAST(NULLIF(tab.item.value('DeviceID[1]','INT'),'0') AS INT), @SessionID = CAST(NULLIF(tab.item.value('SessionID[1]','VARCHAR(36)'),'') AS UNIQUEIDENTIFIER) FROM @cRequest.nodes('//GetBill') AS tab(item) SELECT @DeviceID = u.ID, @RodzajKDS = CAST(ISNULL(uk1.Wartosc, '0') AS INT), @KDSWydawkaKolorPozycjiWPrzygotowaniu = CAST(ISNULL(uk2.Wartosc, '0') AS INT), @KDSWydawkaKolorPozycjiWydanych = CAST(ISNULL(uk3.Wartosc, '0') AS INT), @KDsWydawkaKolorPozycjiWezwanychDoWydania = CAST(ISNULL(uk4.Wartosc, '0') AS INT) FROM NGastroUrzadzenie u INNER JOIN NGastroUrzadzenieTyp ut ON u.UrzadzenieTypID = ut.ID AND ut.Symbol = 'Android' INNER JOIN NGastroUrzadzenieKonfiguracja uk ON uk.UrzadzenieID = u.ID AND uk.Nazwa = 'Number' LEFT JOIN NGastroUrzadzenieKonfiguracja uk1 ON uk1.UrzadzenieID = u.ID AND uk1.Nazwa = 'Tryb' LEFT JOIN NGastroUrzadzenieKonfiguracja uk2 ON uk2.UrzadzenieID = u.ID AND uk2.Nazwa = 'KDSColorInProgress' LEFT JOIN NGastroUrzadzenieKonfiguracja uk3 ON uk3.UrzadzenieID = u.ID AND uk3.Nazwa = 'KDSColorDone' LEFT JOIN NGastroUrzadzenieKonfiguracja uk4 ON uk4.UrzadzenieID = u.ID AND uk4.Nazwa = 'KDSColorItemsCalled' WHERE CAST(uk.Wartosc AS INT) = @DeviceNumber AND u.FlgAktywne = 1 SET @SortType = ( SELECT TOP 1 k.TInt FROM NSysAppKonfiguracjaSzablon ks INNER JOIN NSysAppKonfiguracja k ON k.SzablonID = ks.ID INNER JOIN NSysApp a ON a.ID = ks.AppID AND a.Nr = 8 WHERE ks.Symbol = 'Local.KDS.BillSortOrder' ) SET @RodzajNumeracjiNaKDS = ( SELECT TOP 1 k.TInt FROM NSysAppKonfiguracjaSzablon ks INNER JOIN NSysAppKonfiguracja k ON k.SzablonID = ks.ID INNER JOIN NSysApp a ON a.ID = ks.AppID AND a.Nr = 8 WHERE ks.Symbol = 'Lokal.Sprzedaz.RodzajNumeracjiNaKDS' ) SET @WyswietlanieEdytowanychRachunkow = ( SELECT TOP 1 k.TInt FROM NSysAppKonfiguracjaSzablon ks INNER JOIN NSysAppKonfiguracja k ON k.SzablonID = ks.ID INNER JOIN NSysApp a ON a.ID = ks.AppID AND a.Nr = 8 WHERE ks.Symbol = 'Local.KDS.ShowBillsOnEdit' ) SET @WyswietlanieWykonanychPozycji = ( SELECT TOP 1 k.TInt FROM NSysAppKonfiguracjaSzablon ks INNER JOIN NSysAppKonfiguracja k ON k.SzablonID = ks.ID INNER JOIN NSysApp a ON a.ID = ks.AppID AND a.Nr = 8 WHERE ks.Symbol = 'Local.KDS.ShowDonePositions' ) SET @RodzajNumerkaDoOdbioruZamowienia = ( SELECT TOP 1 k.TInt FROM NSysAppKonfiguracjaSzablon ks INNER JOIN NSysAppKonfiguracja k ON k.SzablonID = ks.ID INNER JOIN NSysApp a ON a.ID = ks.AppID AND a.Nr = 8 WHERE ks.Symbol = 'Lokal.POS.RodzajNumerkaDoOdbioruZamowienia' ) SET @WyswietlajRachunkiZOstatnichGodzin = ( SELECT TOP 1 k.TInt FROM NSysAppKonfiguracjaSzablon ks INNER JOIN NSysAppKonfiguracja k ON k.SzablonID = ks.ID INNER JOIN NSysApp a ON a.ID = ks.AppID AND a.Nr = 8 WHERE ks.Symbol = 'Local.KDS.ShowOrdersFromTheLastHours' ) IF(@WyswietlajRachunkiZOstatnichGodzin > 0) SET @DataCzasOdKtorejWyswietlacRachunki = DATEADD(hh, (-1)*@WyswietlajRachunkiZOstatnichGodzin, GETDATE()); if @RodzajKDS = 0 if NOT EXISTS ( SELECT u.* FROM NGastroUrzadzenie u INNER JOIN NGastroUrzadzenieTyp ut ON u.UrzadzenieTypID = ut.ID AND ut.Symbol = 'Android' inner JOIN NGastroUrzadzenieKonfiguracja uk1 ON uk1.UrzadzenieID = u.ID AND uk1.Nazwa = 'Tryb' inner join NGastroUrzadzenieKdsWydawkaDla w on u.id = w.UrzadzenieIDWydawka and w.UrzadzenieIDKds = @DeviceID WHERE CAST(uk1.Wartosc AS INT) = 1 AND u.FlgAktywne = 1 ) AND EXISTS ( SELECT u.* FROM NGastroUrzadzenie u INNER JOIN NGastroUrzadzenieTyp ut ON u.UrzadzenieTypID = ut.ID AND ut.Symbol = 'Android' inner JOIN NGastroUrzadzenieKonfiguracja uk1 ON uk1.UrzadzenieID = u.ID AND uk1.Nazwa = 'Tryb' WHERE CAST(uk1.Wartosc AS INT) = 2 AND u.FlgAktywne = 1 ) set @KDSExistsIssued = 0 IF (OBJECT_ID('tempdb..#BillsToShow') IS NOT NULL) DROP TABLE #BillsToShow CREATE TABLE #BillsToShow (ID UNIQUEIDENTIFIER) IF (OBJECT_ID('tempdb..#LastBills') IS NOT NULL) DROP TABLE #LastBills CREATE TABLE #LastBills (ID UNIQUEIDENTIFIER) IF (OBJECT_ID('tempdb..#OpenBillTypes') IS NOT NULL) DROP TABLE #OpenBillTypes CREATE TABLE #OpenBillTypes (ID UNIQUEIDENTIFIER) IF @RodzajKDS IN (0, 3) BEGIN INSERT INTO #OpenBillTypes SELECT RodzajOtwarciaRachunkuID FROM NGastroUrzadzenieRodzajOtwarciaRachunku WHERE UrzadzenieID = @DeviceID END ELSE BEGIN INSERT INTO #OpenBillTypes SELECT RodzajOtwarciaRachunkuID FROM NGastroUrzadzenieRodzajOtwarciaRachunku u INNER JOIN NGastroUrzadzenieKdsWydawkaDla w ON u.UrzadzenieID = w.UrzadzenieIDKds WHERE w.UrzadzenieIDWydawka = @DeviceID GROUP BY RodzajOtwarciaRachunkuID END INSERT INTO #LastBills SELECT rachunek.ID FROM NGastroDTRachunek rachunek INNER JOIN NGastroUrzadzenieKasa urzadzenieKasa on urzadzenieKasa.UrzadzenieID=@DeviceID INNER JOIN #OpenBillTypes obt ON obt.ID = rachunek.RodzajOtwarciaRachunkuID WHERE rachunek.DataOtwarcia >= @DataCzasOdKtorejWyswietlacRachunki AND (rachunek.KasaID = urzadzenieKasa.KasaID) AND rachunek.Status <> 2 -- rachunek usunięty IF(@RodzajKDS = 0 AND @KDSExistsIssued = 0) BEGIN DECLARE @UrzadzenieKasa TABLE (UrzadzenieID uniqueidentifier, KasaID uniqueidentifier) INSERT INTO @UrzadzenieKasa (UrzadzenieID, KasaID) SELECT uk.UrzadzenieID, uk.KasaID FROM NGastroUrzadzenieKasa uk INNER JOIN NGastroUrzadzenie u ON u.ID = uk.UrzadzenieID INNER JOIN NGastroUrzadzenieTyp ut ON u.UrzadzenieTypID = ut.ID AND ut.Symbol = 'Android' INNER JOIN NGastroUrzadzenieKonfiguracja uk1 ON uk1.UrzadzenieID = u.ID AND uk1.Nazwa = 'Tryb' WHERE CAST(uk1.Wartosc AS INT) = 2 AND u.FlgAktywne = 1 -- nie ma wydawki, usuwamy zbumpowane rachunki ,dla których nie ma order number (i był potrzebny tylko 1 bump) DELETE #LastBills WHERE ID IN ( SELECT rach.ID FROM #LastBills rach INNER JOIN NGastroDTRachunek rr ON rr.ID = rach.ID LEFT JOIN NGastroDTRachunekPozycja p on p.DTRachunekID = rach.ID and ISNULL(p.StatusRealizacji, 6) < 3 LEFT JOIN @UrzadzenieKasa uk ON uk.KasaID = rr.KasaID WHERE p.ID IS NULL AND uk.KasaID IS NULL ) END IF(@RodzajKDS = 3) DELETE #LastBills WHERE ID IN ( SELECT rach.ID FROM #LastBills rach INNER JOIN NGastroDTRachunek rr ON rr.ID = rach.ID LEFT JOIN NGastroDTRachunekPozycja p on p.DTRachunekID = rach.ID and ISNULL(p.StatusRealizacji, 6) IN (3,4) LEFT JOIN @UrzadzenieKasa uk ON uk.KasaID = rr.KasaID WHERE p.ID IS NULL AND uk.KasaID IS NULL ) IF (OBJECT_ID('tempdb..#Pizza') IS NOT NULL) DROP TABLE #Pizza CREATE TABLE #Pizza ( BillID UNIQUEIDENTIFIER NOT NULL, ID UNIQUEIDENTIFIER NOT NULL, TowarID UNIQUEIDENTIFIER NOT NULL, NazwaZestawu VARCHAR(200) COLLATE POLISH_CS_AI NOT NULL, NazwaTowaru VARCHAR(200) COLLATE POLISH_CS_AI NOT NULL, Ilosc DECIMAL(19,6) NOT NULL, Skladnik TINYINT NOT NULL, Zamiennik TINYINT NOT NULL, PizzaBaza TINYINT NOT NULL, IloscBaza DECIMAL(19,6) NOT NULL, NumerCzesci INT, GrupaZestawuID UNIQUEIDENTIFIER NOT NULL ) IF (OBJECT_ID('tempdb..#Pozycje') IS NOT NULL) DROP TABLE #Pozycje CREATE TABLE #Pozycje ( ID UNIQUEIDENTIFIER, DTRachunekID UNIQUEIDENTIFIER, DodatekDlaDTRachunekPozycjaID UNIQUEIDENTIFIER, FlgPozycjaNadrzedna TINYINT, GrupaZestawuID UNIQUEIDENTIFIER, TowarID UNIQUEIDENTIFIER, FlgPotwierdzona TINYINT, StatusRealizacji TINYINT, UzytkownikUsuwajacyID UNIQUEIDENTIFIER , KonfiguracjaDrukowaniaZamowienID UNIQUEIDENTIFIER, DataWyswietleniaNaKDS DATETIME, DataWydruku DATETIME, DataDodania DATETIME, ZestawID UNIQUEIDENTIFIER, NumerCzesci TINYINT, NumerGrupySerwowania TINYINT, Notatka VARCHAR(255), Ilosc DECIMAL(19,6), IloscZestawow DECIMAL(19,6), IloscZrealizowana DECIMAL(19,6), IloscKawalkow TINYINT, DataUsuniecia DATETIME, DataModyfikacjiGrupySerwowania DATETIME, RolaWKompozycji TINYINT, NazwadanieOtwarte VARCHAR(200) COLLATE POLISH_CS_AI NOT NULL ) IF (OBJECT_ID('tempdb..#Bills') IS NOT NULL) DROP TABLE #Bills CREATE TABLE #Bills ( ID UNIQUEIDENTIFIER, Description NVARCHAR(150), UserDescription VARCHAR(20), Remark VARCHAR(150), PointOfSale NVARCHAR(50), Date DATETIME, OpenningType INT, FlgFastTrack TINYINT ) IF (OBJECT_ID('tempdb..#Articles') IS NOT NULL) DROP TABLE #Articles CREATE TABLE #Articles ( ID UNIQUEIDENTIFIER, BillID UNIQUEIDENTIFIER, ArticleID UNIQUEIDENTIFIER, PackageID UNIQUEIDENTIFIER, Name VARCHAR(200) COLLATE POLISH_CS_AI DEFAULT '', ServingGroup INT DEFAULT 0, ServingGroupName VARCHAR(50) COLLATE POLISH_CS_AI DEFAULT '', PersonNumber INT DEFAULT 0, Remark VARCHAR(255) COLLATE POLISH_CS_AI DEFAULT '', QuantitySet TINYINT DEFAULT 0, QuantityToDo DECIMAL(19,6) DEFAULT 0, QuantityDone DECIMAL(19,6) DEFAULT 0, QuantityRemoved DECIMAL(19,6) DEFAULT 0, QuantityPrecision INT DEFAULT 0, Date DATETIME, IsModified TINYINT DEFAULT 0, IsNew TINYINT DEFAULT 0, StatusOfPreparation TINYINT DEFAULT 0, ArticleType TINYINT DEFAULT 0, PartNumber TINYINT DEFAULT 1, Parts TINYINT DEFAULT 1, ServingGroupModificationDate DATETIME, Color INT, ShowWeight INT, ConnectionID UNIQUEIDENTIFIER ) IF (OBJECT_ID('tempdb..#Modifiers') IS NOT NULL) DROP TABLE #Modifiers CREATE TABLE #Modifiers ( ItemID UNIQUEIDENTIFIER, ZamiennikTowarID UNIQUEIDENTIFIER, TowarNazwaDlaKas VARCHAR(MAX), Ilosc DECIMAL(19,6), DeleteFlag TINYINT, Pozycja INT ) IF (OBJECT_ID('tempdb..#SubArticles') IS NOT NULL) DROP TABLE #SubArticles CREATE TABLE #SubArticles ( ID UNIQUEIDENTIFIER, ArticleID UNIQUEIDENTIFIER, SubArticleID UNIQUEIDENTIFIER, Name VARCHAR(200) COLLATE POLISH_CS_AI DEFAULT '', Quantity DECIMAL(19,6) DEFAULT 0, QuantityPrecision INT DEFAULT 0, IsPrimary TINYINT DEFAULT 0, StatusOfPreparation TINYINT DEFAULT 0, IsModified TINYINT DEFAULT 0, Numer INT, NumerCzesci INT DEFAULT 0, GrupaZestawuID UNIQUEIDENTIFIER, Pozycja INT, ZestawID UNIQUEIDENTIFIER, IsModify TINYINT DEFAULT 1, IsAddition TINYINT DEFAULT 0, Date DATETIME, Remark VARCHAR(255) COLLATE POLISH_CS_AI DEFAULT '' ) SET @SessionID = ISNULL(@SessionID, NEWID()) IF EXISTS(SELECT * FROM NGastroUrzadzenieAktywnosc ua WHERE ua.ID <> @SessionID AND ua.UrzadzenieID = @DeviceID AND DATEDIFF(second, ua.DataOstatniejAktywnosci, GETDATE()) < 3 ) BEGIN SET @ExecutionStatus = 1; --GOTO Result; END IF @DeviceID IS NULL BEGIN SET @ExecutionStatus = 2; GOTO Result; END IF EXISTS(SELECT 1 FROM NGastroUrzadzenieAktywnosc ua WHERE ua.ID = @SessionID) BEGIN UPDATE NGastroUrzadzenieAktywnosc SET DataOstatniejAktywnosci = GETDATE() WHERE ID = @SessionID END ELSE BEGIN INSERT INTO NGastroUrzadzenieAktywnosc(ID, UrzadzenieID, DataOstatniejAktywnosci) VALUES( @SessionID, @DeviceID, GETDATE()) END IF (OBJECT_ID('tempdb..#BillsTemp') IS NOT NULL) DROP TABLE #BillsTemp CREATE TABLE #BillsTemp (ID UNIQUEIDENTIFIER) IF (OBJECT_ID('tempdb..#ResultModyf') IS NOT NULL) DROP TABLE #ResultModyf CREATE TABLE #ResultModyf ( PozycjaID UNIQUEIDENTIFIER, ZamiennikTowarID UNIQUEIDENTIFIER, KonfiguracjaDrukowaniaZamowienID UNIQUEIDENTIFIER, TowarNazwaDlaKas VARCHAR(MAX), Ilosc DECIMAL(19,6), DeleteFlag TINYINT, Pozycja INT ) IF @RodzajKDS = 0 BEGIN DECLARE @TabPozRachID NGastroTableOfID INSERT INTO @TabPozRachID SELECT DISTINCT rp.DTRachunekID FROM #LastBills b INNER JOIN NGastroDTRachunekPozycja rp ON rp.DTRachunekID = b.ID INNER JOIN NGAStroTowar t ON rp.TowarID = t.ID and t.NumerPlu<99900 INNER JOIN NGAStroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) AND ukdz.UrzadzenieID = @DeviceID WHERE rp.StatusRealizacji in (1,2,99) OR (@WyswietlanieEdytowanychRachunkow = 1 AND rp.StatusRealizacji = 0) INSERT INTO #Pozycje SELECT DISTINCT * FROM ( SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,rp.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM NGAStroDTRachunekPozycja rp INNER JOIN #LastBills r on r.ID = rp.DtrachunekID INNER JOIN NGAStroTowar t ON rp.TowarID = t.ID and t.NumerPlu<99900 INNER JOIN NGAStroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) AND ukdz.UrzadzenieID = @DeviceID WHERE ( (@WyswietlanieEdytowanychRachunkow = 1 AND (RP.StatusRealizacji <> 99 OR rp.FlgPotwierdzona = 1)) OR (@WyswietlanieEdytowanychRachunkow = 0 AND rp.FlgPotwierdzona = 1 AND rp.StatusRealizacji > 0 ) ) AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) AND ( rp.StatusRealizacji=99 OR (@WyswietlanieWykonanychPozycji = 0 AND rp.StatusRealizacji < 3) OR (@WyswietlanieWykonanychPozycji = 1 AND rp.StatusRealizacji < 5 AND EXISTS(SELECT * FROM @TabPozRachID rach WHERE rach.ID = r.ID) ) OR ( @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) OR (@WyswietlanieEdytowanychRachunkow = 1 AND rp.StatusRealizacji = 0) ) AND ( @KDSExistsIssued = 0 OR (@KDSExistsIssued = 1 AND EXISTS(SELECT * FROM @TabPozRachID rach WHERE rach.ID = r.ID) ) ) UNION ALL SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,rp.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM NGAStroDTRachunekPozycja rp INNER JOIN #LastBills r on r.ID = rp.DtrachunekID INNER JOIN NGAStroTowar t ON rp.TowarID = t.ID and t.NumerPlu>99900 INNER JOIN NGAStroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) AND ukdz.UrzadzenieID = @DeviceID WHERE (rp.StatusRealizacji=99 OR (@WyswietlanieWykonanychPozycji = 0 and rp.StatusRealizacji < 3) OR (@WyswietlanieWykonanychPozycji = 1 and rp.StatusRealizacji < 5 ) OR ( @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) ) AND ( (@WyswietlanieEdytowanychRachunkow = 1 AND @RodzajKDS = 0) OR (@WyswietlanieEdytowanychRachunkow = 0 AND rp.FlgPotwierdzona = 1 AND rp.StatusRealizacji > 0 ) ) AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) AND ( @KDSExistsIssued = 0 OR(@KDSExistsIssued = 1 AND EXISTS(SELECT * FROM NGastroDTRachunekPozycja rp WHERE rp.DTRachunekID = r.ID AND rp.StatusRealizacji in (1,2,99) ) ) ) ) A INSERT INTO #Pozycje SELECT DISTINCT * FROM ( SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,p.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM NGAStroDTRachunekPozycja rp INNER JOIN NGastroDTRachunekPozycjaPowiazanie pow ON pow.DTRachunekPozycjaID = rp.ID LEFT JOIN #Pozycje p ON p.ID = pow.DTRachunekPozycjaDocelowaID WHERE pow.DTRachunekPozycjaDocelowaID IN (SELECT ID FROM #Pozycje) AND pow.DTRachunekPozycjaID NOT IN (SELECT ID FROM #Pozycje) )B ---- towary które mają wybrame modyfikatory ze zgodnym kierunkiem INSERT INTO #Pozycje SELECT DISTINCT * FROM ( SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,tm.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM #LastBills r INNER JOIN NGastroDTRachunekPozycja rp ON r.ID = rp.DtrachunekID INNER JOIN NGastroDTRachunekPozycjaModyfikacja rpm ON rp.ID = rpm.DTRachunekPozycjaID INNER JOIN NGastroTowar t ON t.ID = rpm.TowarID INNER JOIN NGastroTowar tm ON tm.ID = rpm.ModyfikatorID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON kdz.ID = ISNULL(rp.KonfiguracjaDrukowaniaZamowienID, tm.KonfiguracjaDrukowaniaZamowienID) INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) AND ukdz.UrzadzenieID = @DeviceID WHERE rpm.Ilosc > 0 AND rpm.ModyfikatorIlosc > 0 AND (rp.StatusRealizacji=99 OR (@WyswietlanieWykonanychPozycji = 0 and rp.StatusRealizacji < 3) OR (@WyswietlanieWykonanychPozycji = 1 and rp.StatusRealizacji < 5 ) OR ( @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) ) AND ( (@WyswietlanieEdytowanychRachunkow = 1 AND @RodzajKDS = 0) OR (@WyswietlanieEdytowanychRachunkow = 0 AND rp.FlgPotwierdzona = 1 AND rp.StatusRealizacji > 0 ) ) AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) AND ( @KDSExistsIssued = 0 OR(@KDSExistsIssued = 1 AND EXISTS(SELECT * FROM NGastroDTRachunekPozycja rp WHERE rp.DTRachunekID = r.ID AND rp.StatusRealizacji in (0,1,2,99) ) ) ) )modyf INSERT INTO #Pozycje SELECT DISTINCT * FROM ( SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,rp.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM NGAStroDTRachunekPozycja rp INNER JOIN #LastBills r on r.ID = rp.DtrachunekID INNER JOIN NGAStroTowar t ON rp.TowarID = t.ID and t.NumerPlu>99900 INNER JOIN NGastroDTRachunekPozycjaPowiazanie rpp ON rpp.DTRachunekPozycjaID = rp.ID INNER JOIN NGastroDTRachunekPozycja rpz ON rpz.ID = rpp.DTRachunekPozycjaDocelowaID INNER JOIN NGAStroKonfiguracjaDrukowaniaZamowien kdz ON ISNULL(rp.KonfiguracjaDrukowaniaZamowienID, rpz.KonfiguracjaDrukowaniaZamowienID) = kdz.ID INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) AND ukdz.UrzadzenieID = @DeviceID WHERE (rp.StatusRealizacji=99 OR (@WyswietlanieWykonanychPozycji = 0 and rp.StatusRealizacji < 3) OR (@WyswietlanieWykonanychPozycji = 1 and rp.StatusRealizacji < 5 ) OR ( @KDSExistsIssued = 0 and (rp.StatusRealizacji = 4 OR (rp.StatusRealizacji = 5 AND rpz.StatusRealizacji = 4 )) )) AND ( (@WyswietlanieEdytowanychRachunkow = 1 AND @RodzajKDS = 0) OR (@WyswietlanieEdytowanychRachunkow = 0 AND rp.FlgPotwierdzona = 1 AND rp.StatusRealizacji > 0 ) ) AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) AND ( @KDSExistsIssued = 0 OR(@KDSExistsIssued = 1 AND EXISTS(SELECT * FROM NGastroDTRachunekPozycja rp WHERE rp.DTRachunekID = r.ID AND rp.StatusRealizacji in (0,1,2,99) ) ) ) ) dod ----tu dokładamy bazowe skałdniki nie zamienione na nic innego INSERT INTO #ResultModyf SELECT DISTINCT rp.ID, rpm.ModyfikatorID, tm.KonfiguracjaDrukowaniaZamowienID, CASE WHEN ISNULL(tm.NazwaNaZamowieniu,'') = '' THEN tm.NazwaDlaKas ELSE tm.NazwaNaZamowieniu END AS ModyfikatorNazwaNaZamowieniu, rpm.ModyfikatorIlosc, CAST(0 AS TINYINT), skl.Pozycja FROM #LastBills r INNER JOIN NGastroDTRachunekPozycja rp ON r.ID = rp.DtrachunekID CROSS APPLY (SELECT TOP 1 ID, TowarID, Ilosc FROM NGastroBOM WHERE TowarID = rp.TowarID AND ObowiazujeOd <= GETDATE() ORDER BY ObowiazujeOd DESC ) bom INNER JOIN NGastroSkladnik skl ON bom.id = skl.BomID INNER JOIN NGastroTowar towar on towar.ID = skl.TowarID INNER JOIN NGastroDTRachunekPozycjaModyfikacja rpm ON rp.ID = rpm.DTRachunekPozycjaID AND rpm.TowarID = skl.TowarID INNER JOIN NGastroTowar t ON t.ID = rpm.TowarID INNER JOIN NGastroTowar tm ON tm.ID = rpm.ModyfikatorID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON (rp.KonfiguracjaDrukowaniaZamowienID IS NULL AND kdz.ID = tm.KonfiguracjaDrukowaniaZamowienID) OR (rp.KonfiguracjaDrukowaniaZamowienID IS NOT NULL AND kdz.ID = rp.KonfiguracjaDrukowaniaZamowienID) INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) AND ukdz.UrzadzenieID = @DeviceID WHERE tm.FlgSprzedawany = 1 AND tm.FlgAktywny = 1 AND tm.FlgDeleted = 0 AND rpm.Ilosc > 0 AND rpm.ModyfikatorIlosc > 0 AND (rp.StatusRealizacji=99 OR (@WyswietlanieWykonanychPozycji = 0 and rp.StatusRealizacji < 3) OR (@WyswietlanieWykonanychPozycji = 1 and rp.StatusRealizacji < 5 ) OR ( @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) ) AND ( (@WyswietlanieEdytowanychRachunkow = 1 AND @RodzajKDS = 0) OR rp.FlgPotwierdzona = 1 ) AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) AND ( @KDSExistsIssued = 0 OR(@KDSExistsIssued = 1 AND EXISTS(SELECT * FROM NGastroDTRachunekPozycja rp WHERE rp.DTRachunekID = r.ID AND rp.StatusRealizacji in (0,1,2,99) ) ) ) ----tu dokładamy bazowe skąłdniki nie zamienione na nic innego INSERT INTO #ResultModyf SELECT DISTINCT rp.ID, skl.TowarID, towar.KonfiguracjaDrukowaniaZamowienID, towar.NazwaDlaKas, ROUND(skl.Ilosc/bom.Ilosc,3), 0 , skl.Pozycja FROM #LastBills R INNER JOIN NGastroDTRachunekPozycja rp ON rp.DTRachunekID = r.ID LEFT JOIN NGastroTowar tz ON tz.ID = rp.ZestawID INNER JOIN NGastroTowar tow ON tow.id = rp.TowarID and tow.FlgReceptura = 1 CROSS APPLY (SELECT TOP 1 ID, TowarID, Ilosc FROM NGastroBOM WHERE TowarID = rp.TowarID AND ObowiazujeOd <= GETDATE() ORDER BY ObowiazujeOd DESC ) bom INNER JOIN NGastroSkladnik skl ON bom.id = skl.BomID INNER JOIN NGastroTowar towar on towar.ID = skl.TowarID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON (rp.KonfiguracjaDrukowaniaZamowienID IS NULL AND kdz.ID = towar.KonfiguracjaDrukowaniaZamowienID) OR (rp.KonfiguracjaDrukowaniaZamowienID IS NOT NULL AND kdz.ID = rp.KonfiguracjaDrukowaniaZamowienID) INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) AND ukdz.UrzadzenieID = @DeviceID WHERE towar.FlgSprzedawany = 1 AND towar.FlgAktywny = 1 AND towar.FlgDeleted = 0 AND (rp.StatusRealizacji=99 OR (@WyswietlanieWykonanychPozycji = 0 and rp.StatusRealizacji < 3) OR (@WyswietlanieWykonanychPozycji = 1 and rp.StatusRealizacji < 5 ) OR ( @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) ) AND ( (@WyswietlanieEdytowanychRachunkow = 1 AND @RodzajKDS = 0) OR rp.FlgPotwierdzona = 1 ) AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) AND ( @KDSExistsIssued = 0 OR(@KDSExistsIssued = 1 AND EXISTS(SELECT * FROM NGastroDTRachunekPozycja rp WHERE rp.DTRachunekID = r.ID AND rp.StatusRealizacji in (1,2,99) ) ) ) AND (tz.ID IS NULL OR (tz.ID IS NOT NULL AND tz.RodzajTowaru <> 3) OR (tz.ID IS NOT NULL AND tz.RodzajTowaru = 3 AND rp.RolaWKompozycji <> 0 ) ) UPDATE t SET t.DeleteFlag = 1 FROM #ResultModyf t INNER JOIN NGastroDTRachunekPozycjaModyfikacja modyfikacja ON t.ZamiennikTowarID = modyfikacja.TowarID AND t.PozycjaID = modyfikacja.DTRachunekPozycjaID DELETE FROM #ResultModyf WHERE DeleteFlag = 1; INSERT INTO #Pozycje SELECT DISTINCT * FROM ( SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,r.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM #ResultModyf r INNER JOIN NGastroDTRachunekPozycja rp ON rp.ID = r.PozycjaID LEFT JOIN #Pozycje p ON p.ID = r.PozycjaID WHERE p.ID IS NULL )modyf2 END ELSE BEGIN INSERT INTO #Pozycje SELECT DISTINCT * FROM ( SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,rp.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM NGAStroDTRachunekPozycja rp INNER JOIN #LastBills r on r.ID = rp.DtrachunekID INNER JOIN NGAStroTowar t ON rp.TowarID = t.ID and t.NumerPlu<99900 INNER JOIN NGAStroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) LEFT JOIN NGAStroUrzadzenieKdsWydawkaDla u ON u.UrzadzenieIDKds = ukdz.UrzadzenieID and u.UrzadzenieIDWydawka = @DeviceID WHERE @RodzajKDS in (1, 3) AND ((@RodzajKDS = 1 AND u.ID IS NOT NULL AND (rp.StatusRealizacji < 5 OR (rp.StatusRealizacji in (5,99) AND rp.UzytkownikUsuwajacyID IS NOT NULL)) AND rp.FlgPotwierdzona = 1 AND rp.StatusRealizacji > 0 ) OR (@RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.UzytkownikUsuwajacyID IS NULL AND rp.FlgPotwierdzona = 1 ) ) AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) UNION ALL SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,rp.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM NGAStroDTRachunekPozycja rp INNER JOIN #LastBills r on r.ID = rp.DtrachunekID INNER JOIN NGAStroTowar t ON rp.TowarID = t.ID and t.NumerPlu>99900 INNER JOIN NGAStroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) LEFT JOIN NGAStroUrzadzenieKdsWydawkaDla u ON u.UrzadzenieIDKds = ukdz.UrzadzenieID and u.UrzadzenieIDWydawka = @DeviceID WHERE @RodzajKDS in (1, 3) AND ( (@RodzajKDS = 1 AND u.ID IS NOT NULL AND (rp.StatusRealizacji < 5 or (rp.StatusRealizacji in (5,99) and rp.UzytkownikUsuwajacyID is not null)) AND rp.FlgPotwierdzona = 1 AND rp.StatusRealizacji > 0 ) OR (@RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.UzytkownikUsuwajacyID IS NULL AND rp.FlgPotwierdzona = 1 ) ) AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) ) A INSERT INTO #Pozycje SELECT DISTINCT * FROM ( SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,p.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM NGAStroDTRachunekPozycja rp INNER JOIN NGastroDTRachunekPozycjaPowiazanie pow ON pow.DTRachunekPozycjaID = rp.ID LEFT JOIN #Pozycje p ON p.ID = pow.DTRachunekPozycjaDocelowaID WHERE pow.DTRachunekPozycjaDocelowaID IN (SELECT ID FROM #Pozycje) AND pow.DTRachunekPozycjaID NOT IN (SELECT ID FROM #Pozycje) )B ---- towary które mają wybrane modyfikatory ze zgodnym kierunkiem INSERT INTO #Pozycje SELECT DISTINCT * FROM ( SELECT DISTINCT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,ISNULL(rp.KonfiguracjaDrukowaniaZamowienID,tm.KonfiguracjaDrukowaniaZamowienID) KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM #LastBills r INNER JOIN NGastroDTRachunekPozycja rp ON r.ID = rp.DtrachunekID INNER JOIN NGastroDTRachunekPozycjaModyfikacja rpm ON rp.ID = rpm.DTRachunekPozycjaID INNER JOIN NGastroTowar t ON t.ID = rpm.TowarID INNER JOIN NGastroTowar tm ON tm.ID = rpm.ModyfikatorID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON (rp.KonfiguracjaDrukowaniaZamowienID IS NULL AND kdz.ID = tm.KonfiguracjaDrukowaniaZamowienID) OR (rp.KonfiguracjaDrukowaniaZamowienID IS NOT NULL AND kdz.ID = rp.KonfiguracjaDrukowaniaZamowienID) INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) LEFT JOIN NGAStroUrzadzenieKdsWydawkaDla u ON u.UrzadzenieIDKds = u.UrzadzenieIDKds and u.UrzadzenieIDWydawka = @DeviceID WHERE @RodzajKDS IN (1 ,3) AND ((@RodzajKDS = 1 AND u.ID IS NOT NULL AND (rp.StatusRealizacji < 5 or (rp.StatusRealizacji in (5,99) and rp.UzytkownikUsuwajacyID is not null))) OR (@RodzajKDS = 3 AND (rp.StatusRealizacji IN (3,4) AND rp.UzytkownikUsuwajacyID IS NULL))) AND rp.FlgPotwierdzona = 1 AND rp.StatusRealizacji > 0 AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) AND rpm.Ilosc > 0 AND rpm.ModyfikatorIlosc > 0 )modyf INSERT INTO #ResultModyf SELECT DISTINCT rp.ID, rpm.ModyfikatorID, ISNULL(rp.KonfiguracjaDrukowaniaZamowienID,tm.KonfiguracjaDrukowaniaZamowienID) KonfiguracjaDrukowaniaZamowienID, CASE WHEN ISNULL(tm.NazwaNaZamowieniu,'') = '' THEN tm.NazwaDlaKas ELSE tm.NazwaNaZamowieniu END AS ModyfikatorNazwaNaZamowieniu, rpm.ModyfikatorIlosc, CAST(0 AS TINYINT), 0 FROM #LastBills r INNER JOIN NGastroDTRachunekPozycja rp ON r.ID = rp.DtrachunekID INNER JOIN NGastroDTRachunekPozycjaModyfikacja rpm ON rp.ID = rpm.DTRachunekPozycjaID INNER JOIN NGastroTowar t ON t.ID = rpm.TowarID INNER JOIN NGastroTowar tm ON tm.ID = rpm.ModyfikatorID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON (rp.KonfiguracjaDrukowaniaZamowienID IS NULL AND kdz.ID = tm.KonfiguracjaDrukowaniaZamowienID) OR (rp.KonfiguracjaDrukowaniaZamowienID IS NOT NULL AND kdz.ID = rp.KonfiguracjaDrukowaniaZamowienID) INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) LEFT JOIN NGAStroUrzadzenieKdsWydawkaDla u ON u.UrzadzenieIDKds = u.UrzadzenieIDKds and u.UrzadzenieIDWydawka = @DeviceID WHERE tm.FlgSprzedawany = 1 AND tm.FlgAktywny = 1 AND tm.FlgDeleted = 0 AND @RodzajKDS IN (1,3) AND ( (@RodzajKDS = 1 AND u.ID IS NOT NULL AND (rp.StatusRealizacji < 5 or (rp.StatusRealizacji in (5,99) and rp.UzytkownikUsuwajacyID is not null))) OR (@RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.UzytkownikUsuwajacyID is null) ) AND rp.FlgPotwierdzona = 1 AND rp.StatusRealizacji > 0 AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) AND rpm.Ilosc > 0 AND rpm.ModyfikatorIlosc > 0 ----tu dokładamy bazowe skąłdniki nie zamienione na nic innego INSERT INTO #ResultModyf SELECT rp.ID, skl.TowarID, towar.KonfiguracjaDrukowaniaZamowienID, towar.NazwaDlaKas, ROUND(skl.Ilosc/bom.Ilosc,3), 0 , skl.Pozycja FROM #LastBills R INNER JOIN NGastroDTRachunekPozycja rp ON rp.DTRachunekID = r.ID INNER JOIN NGastroTowar tow ON tow.id = rp.TowarID and tow.FlgReceptura = 1 CROSS APPLY (SELECT TOP 1 ID, TowarID, Ilosc FROM NGastroBOM WHERE TowarID = rp.TowarID AND ObowiazujeOd <= GETDATE() ORDER BY ObowiazujeOd DESC ) bom INNER JOIN NGastroSkladnik skl ON bom.id = skl.BomID INNER JOIN NGastroTowar towar on towar.ID = skl.TowarID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON kdz.ID = towar.KonfiguracjaDrukowaniaZamowienID INNER JOIN NGAStroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) LEFT JOIN NGAStroUrzadzenieKdsWydawkaDla u ON u.UrzadzenieIDKds = u.UrzadzenieIDKds and u.UrzadzenieIDWydawka = @DeviceID WHERE towar.FlgSprzedawany = 1 AND towar.FlgAktywny = 1 AND towar.FlgDeleted = 0 AND @RodzajKDS IN (1,3) AND ( (@RodzajKDS = 1 AND u.ID IS NOT NULL AND (rp.StatusRealizacji < 5 or (rp.StatusRealizacji in (5,99) and rp.UzytkownikUsuwajacyID is not null))) OR (@RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.UzytkownikUsuwajacyID is null) ) AND rp.FlgPotwierdzona = 1 AND rp.StatusRealizacji > 0 AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) UPDATE t SET t.DeleteFlag = 1 FROM #ResultModyf t INNER JOIN NGastroDTRachunekPozycjaModyfikacja modyfikacja ON t.ZamiennikTowarID = modyfikacja.TowarID AND t.PozycjaID = modyfikacja.DTRachunekPozycjaID DELETE FROM #ResultModyf WHERE DeleteFlag = 1; INSERT INTO #Pozycje SELECT DISTINCT * FROM ( SELECT rp.ID ,rp.DTRachunekID ,rp.DodatekDlaDTRachunekPozycjaID ,rp.FlgPozycjaNadrzedna ,rp.GrupaZestawuID ,rp.TowarID ,rp.FlgPotwierdzona ,rp.StatusRealizacji ,rp.UzytkownikUsuwajacyID ,r.KonfiguracjaDrukowaniaZamowienID ,rp.DataWyswietleniaNaKDS ,rp.DataWydruku ,rp._c_DataUtworzenia ,rp.ZestawID ,rp.NumerCzesci ,rp.NumerGrupySerwowania ,rp.Notatka ,rp.Ilosc ,rp.IloscZestawow ,rp.IloscZrealizowana ,rp.IloscKawalkow ,rp.DataUsuniecia ,rp.DataModyfikacjiGrupySerwowania ,rp.RolaWKompozycji ,rp.NazwadanieOtwarte FROM #ResultModyf r INNER JOIN NGastroDTRachunekPozycja rp ON rp.DTRachunekID = r.PozycjaID INNER JOIN NGastroTowar t ON t.ID = rp.TowarID LEFT JOIN #Pozycje p ON p.ID = r.PozycjaID WHERE p.ID IS NULL )modyf2 END DECLARE @date AS DATETIME = GETDATE() INSERT INTO #Bills ( ID, Description, UserDescription, Remark, PointOfSale, Date, OpenningType, FlgFastTrack ) SELECT r.ID, CAST(( CASE @RodzajNumeracjiNaKDS WHEN 0 THEN CAST(r.Numer AS VARCHAR(MAX)) WHEN 1 THEN CAST(r.NumerZmiana AS VARCHAR(MAX)) WHEN 2 THEN CASE WHEN @RodzajNumerkaDoOdbioruZamowienia = 0 THEN CAST(r.NumerZmiana AS VARCHAR(MAX)) WHEN @RodzajNumerkaDoOdbioruZamowienia = 1 THEN NumerReczny WHEN @RodzajNumerkaDoOdbioruZamowienia = 2 THEN CAST(r.NumerDoOdbioruOdnawialny AS VARCHAR(MAX)) END WHEN 3 THEN CAST(r.Numer AS VARCHAR(MAX)) + '/' + CASE WHEN @RodzajNumerkaDoOdbioruZamowienia = 0 THEN CAST(r.NumerZmiana AS VARCHAR(MAX)) WHEN @RodzajNumerkaDoOdbioruZamowienia = 1 THEN NumerReczny WHEN @RodzajNumerkaDoOdbioruZamowienia = 2 THEN CAST(r.NumerDoOdbioruOdnawialny AS VARCHAR(MAX)) END WHEN 4 THEN CAST(r.NumerZmiana AS VARCHAR(MAX)) + '/' + CASE WHEN @RodzajNumerkaDoOdbioruZamowienia = 0 THEN CAST(r.NumerZmiana AS VARCHAR(MAX)) WHEN @RodzajNumerkaDoOdbioruZamowienia = 1 THEN NumerReczny WHEN @RodzajNumerkaDoOdbioruZamowienia = 2 THEN CAST(r.NumerDoOdbioruOdnawialny AS VARCHAR(MAX)) END WHEN 5 THEN CASE WHEN @RodzajNumerkaDoOdbioruZamowienia = 0 THEN CAST(r.NumerZmiana AS VARCHAR(MAX)) WHEN @RodzajNumerkaDoOdbioruZamowienia = 1 THEN r.NumerReczny WHEN @RodzajNumerkaDoOdbioruZamowienia = 2 THEN CAST(r.NumerDoOdbioruOdnawialny AS VARCHAR(MAX)) END + '/' + CAST(r.Numer AS VARCHAR(MAX)) WHEN 6 THEN CASE WHEN @RodzajNumerkaDoOdbioruZamowienia = 0 THEN CAST(r.NumerZmiana AS VARCHAR(MAX)) WHEN @RodzajNumerkaDoOdbioruZamowienia = 1 THEN r.NumerReczny WHEN @RodzajNumerkaDoOdbioruZamowienia = 2 THEN CAST(r.NumerDoOdbioruOdnawialny AS VARCHAR(MAX)) END + '/' + CAST(r.NumerZmiana AS VARCHAR(MAX)) END ) AS VARCHAR(10)), o.Nick, LEFT(r.Opis,150), s.Nazwa, r.DataOtwarcia, CASE ror.Kod WHEN 'NS' THEN 1 -- NaStolik WHEN 'WBD' THEN 5 -- NaWynosBezDostawy WHEN 'WZD' THEN 6 -- NaWynosZDostawa WHEN 'S' THEN 7 -- Sklepowy WHEN 'ZOS' THEN 8 -- ZOpisemSlownym WHEN 'H' THEN 9 -- Hotelowy WHEN 'NKA' THEN 10 -- NaKarte ELSE -1 END as OpenningType, r.FlgFastTrack FROM (SELECT DISTINCT DTRachunekID AS ID FROM #Pozycje) b INNER JOIN NGastroDTRachunek r on b.ID = r.ID INNER JOIN NGastroUzytkownik u ON r.UzytkownikOtwierajacyID = u.ID INNER JOIN NSysOperator o ON u.OperatorID = o.ID INNER JOIN NSysOperatorLokal ol ON ol.OperatorID = o.ID INNER JOIN NGastroKasa k ON k.ID = r.KasaID INNER JOIN NSysStanowisko s ON s.ID = k.StanowiskoID LEFT JOIN NGastroRodzajOtwarciaRachunku ror on ror.ID = r.RodzajOtwarciaRachunkuID UPDATE b SET b.Date = tt.Data FROM #Bills b INNER JOIN ( SELECT CASE WHEN @SortType =0 THEN Min(CASE WHEN rp.DataWyswietleniaNaKDS IS NOT NULL AND rp.DataWyswietleniaNaKDS < rp.DataWydruku THEN rp.DataDodania ELSE rp.DataWydruku END ) ELSE MAX(CASE WHEN rp.DataWyswietleniaNaKDS IS NOT NULL AND rp.DataWyswietleniaNaKDS < rp.DataWydruku THEN rp.DataDodania ELSE rp.DataWydruku END ) END AS Data, rp.DTRachunekID FROM #Bills b INNER JOIN #Pozycje rp ON b.id = rp.DTRachunekID WHERE ( @WyswietlanieEdytowanychRachunkow = 1 OR rp.FlgPotwierdzona = 1) AND rp.StatusRealizacji NOT IN (3,4,6) AND DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 GROUP BY rp.DTRachunekID ) tt ON tt.DTRachunekID = b.ID INSERT INTO #Pizza ( BillID, ID, TowarID, NazwaZestawu, NazwaTowaru, Ilosc, Skladnik, Zamiennik, PizzaBaza, IloscBaza, NumerCzesci, GrupaZestawuID ) SELECT z.BillID, z.ZestawID, ts.ID, CASE WHEN LTRIM(RTRIM(t.NazwaNaZamowieniu)) = '' THEN t.NazwaDlaKas ELSE t.NazwaNaZamowieniu END AS NazwaZestawu, CASE WHEN LTRIM(RTRIM(ts.NazwaNaZamowieniu)) = '' THEN ts.NazwaDlaKas ELSE ts.NazwaNaZamowieniu END AS NazwaTowaru, CAST(ROUND(ts.IloscSprzedawana / b.Ilosc, 3) AS DECIMAL(19,6)), 1, 0, 1, CAST(ROUND(ts.IloscSprzedawana / b.Ilosc, 3) AS DECIMAL(19,6)), NumerCzesci, GrupaZestawuID FROM ( SELECT DISTINCT ZestawID,b.ID as BillID, NumerCzesci, GrupaZestawuID FROM #Bills b INNER JOIN #Pozycje rp ON b.ID = rp.DTRachunekID WHERE( (@RodzajKDS IN (0, 1) AND (@WyswietlanieWykonanychPozycji = 1 OR @RodzajKDS = 1 OR rp.StatusRealizacji <> 3 OR (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) ) AND ( (@RodzajKDS = 0 and rp.StatusRealizacji < 4) or (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) or (@RodzajKDS = 1 and rp.StatusRealizacji < 5) or rp.UzytkownikUsuwajacyID is not null ) AND ( DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 OR (@WyswietlanieEdytowanychRachunkow = 1 AND rp.UzytkownikUsuwajacyID IS NOT NULL AND rp.FlgPotwierdzona = 0) ) AND ( @WyswietlanieEdytowanychRachunkow = 1 OR rp.FlgPotwierdzona = 1 ) ) OR ( @RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.UzytkownikUsuwajacyID IS NULL AND DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 AND rp.FlgPotwierdzona = 1 ) ) AND rp.ZestawID IS NOT NULL ) z INNER JOIN NGastroTowar t ON z.ZestawID = t.ID AND t.RodzajTowaru = 3 CROSS APPLY (SELECT TOP 1 ID, TowarID, Ilosc FROM NGastroBOM WHERE TowarID = z.ZestawID AND ObowiazujeOd <= GETDATE() ORDER BY ObowiazujeOd DESC ) b INNER JOIN NGastroSkladnik s ON s.BomID = b.ID INNER JOIN NGastroTowar ts ON ts.ID = s.TowarID UNION ALL SELECT z.BillID, z.ZestawID, tz.ID, CASE WHEN LTRIM(RTRIM(t.NazwaNaZamowieniu)) = '' THEN t.NazwaDlaKas ELSE t.NazwaNaZamowieniu END AS NazwaZestawu, CASE WHEN LTRIM(RTRIM(tz.NazwaNaZamowieniu)) = '' THEN tz.NazwaDlaKas ELSE tz.NazwaNaZamowieniu END AS NazwaTowaru, CAST(ROUND(ts.IloscSprzedawana / b.Ilosc, 3) AS DECIMAL(19,6)), 0, 1, 1, zam.Ilosc, NumerCzesci, z.GrupaZestawuID FROM ( SELECT DISTINCT ZestawID,b.ID as BillID, NumerCzesci, GrupaZestawuID FROM #Bills b INNER JOIN #Pozycje rp ON b.ID = rp.DTRachunekID WHERE( (@RodzajKDS IN (0, 1) AND (@WyswietlanieWykonanychPozycji = 1 OR @RodzajKDS = 1 OR rp.StatusRealizacji <> 3 OR (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) ) AND ( (@RodzajKDS = 0 and rp.StatusRealizacji < 4) or (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) or (@RodzajKDS = 1 and rp.StatusRealizacji < 5) or rp.UzytkownikUsuwajacyID is not null ) AND ( DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 OR (@WyswietlanieEdytowanychRachunkow = 1 AND rp.UzytkownikUsuwajacyID IS NOT NULL AND rp.FlgPotwierdzona = 0) ) AND ( @WyswietlanieEdytowanychRachunkow = 1 OR rp.FlgPotwierdzona = 1 ) ) OR ( @RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.UzytkownikUsuwajacyID IS NULL AND DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 AND rp.FlgPotwierdzona = 1 ) ) AND rp.ZestawID IS NOT NULL ) z CROSS APPLY (SELECT TOP 1 ID, TowarID, Ilosc FROM NGastroBOM WHERE TowarID = z.ZestawID AND ObowiazujeOd <= GETDATE() ORDER BY ObowiazujeOd DESC ) b INNER JOIN NGastroTowar t ON z.ZestawID = t.ID AND t.RodzajTowaru = 3 INNER JOIN NGastroSkladnik s ON s.BomID = b.ID INNER JOIN NGastroTowar ts ON ts.ID = s.TowarID INNER JOIN NGastroZamiennik zam ON zam.SkladnikID = s.ID INNER JOIN NGastroTowar tz ON tz.ID = zam.TowarID AND tz.FlgAktywny = 1 and tz.Blokada = 0 INSERT INTO #Articles ( ID, BillID, ArticleID, PackageID, Name, ServingGroup, ServingGroupName, PersonNumber, Remark, QuantitySet, QuantityToDo, QuantityDone, QuantityRemoved, QuantityPrecision, Date, IsModified, IsNew, StatusOfPreparation, ArticleType, PartNumber, Parts, ServingGroupModificationDate, Color, ShowWeight, ConnectionID ) SELECT rp.ID, --ID rp.DTRachunekID, --BillID rp.TowarID, --ArticleID rp.GrupaZestawuID, CASE WHEN NazwaNaZamowieniu = '' THEN NazwaTowaru ELSE NazwaNaZamowieniu END + CASE WHEN t.NumerPlu>99900 THEN ': ' + rp.NazwaDanieOtwarte ELSE '' END, --Name rp.NumerGrupySerwowania, --ServingGroup ISNULL(sp.Opis, CAST(rp.NumerGrupySerwowania AS VARCHAR) ), --ServingGroupName 1, --PersonNumber rp.Notatka, --Remark CASE WHEN t.RodzajTowaru = 8 and t.FlgPodawanieWagiPoPrzygotowaniu = 1 and @RodzajKDS = 0 THEN 0 ELSE 1 END, --QuantitySet CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN 0 ELSE rp.Ilosc END, --QuantityToDo rp.IloscZrealizowana, --QuantityDone (CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN rp.Ilosc ELSE 0 END), --QuantityRemoved t.Precyzja, --QuantityPrecision rp.DataDodania, --Date 0, --IsModified CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN CASE WHEN DATEDIFF(SECOND, rp.DataUsuniecia, @date) <= 10 THEN 1 ELSE 0 END ELSE CASE rp.StatusRealizacji WHEN 0 THEN 1 ELSE CASE WHEN ISNULL(konf.TInt, 0) > 0 AND DATEADD(ss, konf.TInt ,rp.DataWyswietleniaNaKDS) > @date THEN 1 ELSE 0 END END END, --IsNew, CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN 99 ELSE CASE WHEN @WyswietlanieWykonanychPozycji = 1 AND @KDSExistsIssued = 0 AND rp.StatusRealizacji = 4 THEN 3 ELSE rp.StatusRealizacji END END, --StatusOfPreparation t.RodzajTowaru, --ArticleType rp.NumerCzesci, -- PartNumber 1, --Parts rp.DataModyfikacjiGrupySerwowania, --ServingGroupModificationDate CASE WHEN @RodzajKDS = 1 THEN CASE WHEN rp.StatusRealizacji IN (0,1,2) AND rp.UzytkownikUsuwajacyID IS NULL THEN @KdsWydawkaKolorPozycjiWPrzygotowaniu WHEN rp.StatusRealizacji IN (3) AND rp.UzytkownikUsuwajacyID IS NULL THEN @KdsWydawkaKolorPozycjiWydanych WHEN rp.StatusRealizacji IN (4) AND rp.UzytkownikUsuwajacyID IS NULL THEN @KDsWydawkaKolorPozycjiWezwanychDoWydania ELSE NULL END WHEN @RodzajKDS = 3 THEN CASE WHEN rp.StatusRealizacji IN (3) AND rp.UzytkownikUsuwajacyID IS NULL THEN @KdsWydawkaKolorPozycjiWydanych WHEN rp.StatusRealizacji IN (4) AND rp.UzytkownikUsuwajacyID IS NULL THEN @KDsWydawkaKolorPozycjiWezwanychDoWydania ELSE NULL END ELSE NULL END, --Color 1, --ShowWeight NULL FROM #Bills b INNER JOIN #Pozycje rp ON b.ID = rp.DTRachunekID INNER JOIN NGastroTowar t ON t.ID = rp.TowarID LEFT JOIN NGastroDTRachunekPozycjaPowiazanie rpp ON rpp.DTRachunekPozycjaID = rp.ID LEFT JOIN NGastroDTRachunekPozycja rpz ON rpz.ID = rpp.DTRachunekPozycjaDocelowaID AND rpz.StatusRealizacji = 4 INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON (t.NumerPlu<>99900 and ISNULL(rp.KonfiguracjaDrukowaniaZamowienID, rpz.KonfiguracjaDrukowaniaZamowienID) = kdz.ID) INNER JOIN NGastroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) and (ukdz.UrzadzenieID = @DeviceID or @rodzajKds =1 ) LEFT join NGastroUrzadzenieKdsWydawkaDla u on (u.UrzadzenieIDKds = ukdz.UrzadzenieID and u.UrzadzenieIDWydawka = @DeviceID) or @rodzajKds =0 INNER JOIN NGastroGrupaTowarowa gt ON t.GrupaTowarowaID = gt.ID LEFT JOIN NSysSlownik s ON s.SystemNr = 300 LEFT JOIN NSysSlownikPozycja sp ON sp.SlownikID = s.ID AND sp.Wartosc = CAST(rp.NumerGrupySerwowania AS VARCHAR) LEFT JOIN NSysAppKonfiguracjaSzablon konfSzab ON konfSzab.Symbol= 'Local.KDS.NewPositionBacklightTime' LEFT JOIN NSysAppKonfiguracja konf ON konf.SzablonID = konfSzab.ID WHERE ( (((@RodzajKDS = 1 and U.ID IS NOT NULL) or @RodzajKDS = 0) AND (@WyswietlanieWykonanychPozycji = 1 OR @RodzajKDS = 1 OR rp.StatusRealizacji <> 3 OR (@RodzajKDS = 0 and @KDSExistsIssued = 0 and (rp.StatusRealizacji = 4 OR (rp.StatusRealizacji = 5 AND ISNULL(rpz.StatusRealizacji,0) = 4))) ) AND ( DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 OR (@WyswietlanieEdytowanychRachunkow = 1 AND rp.UzytkownikUsuwajacyID IS NOT NULL AND rp.FlgPotwierdzona = 0) ) AND ( (@RodzajKDS = 0 and rp.StatusRealizacji < 4) or (@RodzajKDS = 0 and @KDSExistsIssued = 0 and (rp.StatusRealizacji = 4 OR (rp.StatusRealizacji = 5 AND ISNULL(rpz.StatusRealizacji,0) = 4))) or (@RodzajKDS = 1 and rp.StatusRealizacji < 5) or rp.UzytkownikUsuwajacyID is not null ) AND rp.StatusRealizacji<>6 AND ( @WyswietlanieEdytowanychRachunkow = 1 OR rp.FlgPotwierdzona = 1 ) ) OR ( @RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 AND rp.UzytkownikUsuwajacyID IS NULL ) ) AND (rp.FlgPozycjaNadrzedna = 1 OR rp.GrupaZestawuID IS NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NULL) AND rp.GrupaZestawuID IS NULL AND NOT EXISTS (SELECT * FROM NGastroDTRachunekPozycjaPowiazanie rpp WHERE rpp.DTRachunekPozycjaDocelowaID = rp.ID) UNION SELECT k.GrupaZestawuID, --ID k.DTRachunekID, --BillID k.TowarID, --ArticleID k.GrupaZestawuID, MAX(k.Name), --Name MAX(k.ServingGroup) , --ServingGroup MAX(k.ServingGroupName) , --ServingGroupName MAX(k.PersonNumber), --PersonNumber MAX(k.Remark), --Remark k.QuantitySet, --QuantitySet MAX(k.QuantityToDo), --QuantityToDo MIN(k.QuantityDone), --QuantityDone MIN(k.QuantityRemoved), --QuantityRemoved MAX(k.QuantityPrecision), --QuantityPrecision MIN(k.Date), --Date MAX(k.IsModified), --IsModified MAX(k.IsNew), MIN(k.StatusOfPreparation), --StatusOfPreparation, k.RodzajTowaru, k.NumerCzesci, 1 IloscKawalkow, MIN(k.DataModyfikacjiGrupySerwowania), CASE WHEN MIN(k.Color) > 0 THEN CASE WHEN MIN(k.Color) = 4 THEN @KDsWydawkaKolorPozycjiWezwanychDoWydania WHEN MIN(k.Color) < 3 THEN @KDSWydawkaKolorPozycjiWPrzygotowaniu ELSE @KDSWydawkaKolorPozycjiWydanych END ELSE NULL END Color, k.ShowWeight, k.ConnectionID FROM ( SELECT rp.GrupaZestawuID, --ID rp.DTRachunekID, --BillID CAST( MAX(CAST(rp.ZestawID AS VARCHAR(36))) AS UNIQUEIDENTIFIER) AS TowarID, --ArticleID CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END AS Name, --Name MAX(rp.NumerGrupySerwowania) AS ServingGroup, --ServingGroup MAX(ISNULL(sp.Opis, CAST(rp.NumerGrupySerwowania AS VARCHAR) )) ServingGroupName, --ServingGroupName 1 AS PersonNumber, --PersonNumber MAX(rp.Notatka) AS Remark, --Remark CASE WHEN t.RodzajTowaru = 8 and @RodzajKDS = 0 THEN 0 ELSE 1 END AS QuantitySet, --QuantitySet MAX(CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN 0 ELSE rp.IloscZestawow END) AS QuantityToDo, --QuantityToDo MIN(CASE WHEN rp.IloscZrealizowana < rp.Ilosc THEN 0 ELSE 1 END) AS QuantityDone, --QuantityDone MIN(CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN CASE WHEN t.RodzajTowaru = 9 THEN rp.IloscZestawow ELSE rp.ilosc END ELSE 0 END) AS QuantityRemoved, --QuantityRemoved 2 AS QuantityPrecision, --QuantityPrecision MIN(rp.DataDodania) AS Date, --Date 0 AS IsModified, --IsModified CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN CASE WHEN DATEDIFF(second, MIN(DataUsuniecia), @date) <= 10 THEN 1 ELSE 0 END ELSE CASE MIN(rp.StatusRealizacji) WHEN 0 THEN 1 ELSE CASE WHEN ISNULL(MIN(konf.TInt), 0) > 0 AND DATEADD(ss, MIN(konf.TInt) ,MIN(rp.DataWyswietleniaNaKDS)) > @date THEN 1 ELSE 0 END END END AS IsNew, --IsNew, MIN(CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN 99 ELSE rp.StatusRealizacji END) AS StatusOfPreparation, --StatusOfPreparation, t.RodzajTowaru, rp.NumerCzesci, 1 AS IloscKawalkow, MIN(rp.DataModyfikacjiGrupySerwowania) DataModyfikacjiGrupySerwowania, CASE WHEN @RodzajKDS = 1 THEN CASE WHEN rp.UzytkownikUsuwajacyID IS NULL THEN rp.StatusRealizacji ELSE -1 END ELSE -1 END AS Color, 1 AS ShowWeight, CASE WHEN t.RodzajTowaru IN (9, 10) THEN rp.GrupaZestawuID ELSE NULL END AS ConnectionID --ShowWeight FROM #Pozycje rp INNER JOIN NGastroTowar t ON t.ID = rp.ZestawID AND t.RodzajTowaru <> 3 INNER JOIN NgastroTowar t1 ON t1.ID = rp.TowarID and rp.ZestawID = t.ID AND t.RodzajTowaru <> 3 INNER JOIN NGastroGrupaTowarowa gt ON t.GrupaTowarowaID = gt.ID LEFT JOIN NSysSlownik s ON s.SystemNr = 300 LEFT JOIN NSysSlownikPozycja sp ON sp.SlownikID = s.ID AND sp.Wartosc = CAST(rp.NumerGrupySerwowania AS VARCHAR) LEFT JOIN NSysAppKonfiguracjaSzablon konfSzab ON konfSzab.Symbol= 'Local.KDS.NewPositionBacklightTime' LEFT JOIN NSysAppKonfiguracja konf ON konf.SzablonID = konfSzab.ID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGastroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) and (ukdz.UrzadzenieID = @DeviceID or @RodzajKDS =1 ) LEFT JOIN NGastroUrzadzenieKdsWydawkaDla u on (u.UrzadzenieIDKds = ukdz.UrzadzenieID and u.UrzadzenieIDWydawka = @DeviceID) or @RodzajKDS =0 WHERE( ( @RodzajKDS IN (0 ,1) AND (@WyswietlanieWykonanychPozycji = 1 or @RodzajKDS = 1 OR rp.StatusRealizacji <> 3 or (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) ) AND ((@RodzajKDS = 0 and rp.StatusRealizacji < 4) or (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) or (@RodzajKDS = 1 and rp.StatusRealizacji < 5) or rp.UzytkownikUsuwajacyID is not null ) AND rp.StatusRealizacji<>6 AND ( @WyswietlanieEdytowanychRachunkow = 1 OR rp.FlgPotwierdzona = 1 ) AND ( DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 OR (@WyswietlanieEdytowanychRachunkow = 1 AND rp.UzytkownikUsuwajacyID IS NOT NULL AND rp.FlgPotwierdzona = 0) ) ) OR ( @RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.UzytkownikUsuwajacyID IS NULL AND rp.FlgPotwierdzona = 1 AND DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 ) ) AND rp.GrupaZestawuID IS NOT NULL GROUP BY rp.GrupaZestawuID, rp.DTRachunekID, rp.UzytkownikUsuwajacyID, ( CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END ) ,t.RodzajTowaru,rp.StatusRealizacji, rp.NumerCzesci )k GROUP BY k.GrupaZestawuID, k.DTRachunekID, k.TowarID, k.QuantitySet, k.RodzajTowaru, k.NumerCzesci, k.ShowWeight, k.ConnectionID UNION ALL -- PIZZA SELECT dtrp.ID ,p.BillID ,p.ArticleID ,p.GrupaZestawuID ,p.Name ,p.ServingGroup ,p.ServingGroupName ,p.PersonNumber ,p.Remark ,p.QuantitySet ,p.QuantityToDo ,p.QuantityDone ,p.QuantityRemoved ,p.QuantityPrecision ,dtrp.DataDodania ,p.IsModified ,p.IsNew ,p.StatusOfPreparation ,p.RodzajTowaru ,p.NumerCzesci ,p.IloscKawalkow ,dtrp.DataModyfikacjiGrupySerwowania ,p.Color ,1 ,p.ConnectionID --ShowWeight FROM ( SELECT distinct rp.GrupaZestawuID, rp.ZestawID, rp.NumerCzesci, rp.DTRachunekID AS BillID, rp.ZestawID AS ArticleID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END AS Name, rp.NumerGrupySerwowania AS ServingGroup, ISNULL(sp.Opis, CAST(rp.NumerGrupySerwowania AS VARCHAR) ) AS ServingGroupName, 1 AS PersonNumber, rp.Notatka AS Remark, CASE WHEN t.RodzajTowaru = 8 and @RodzajKDS = 0 THEN 0 ELSE 1 END AS QuantitySet, CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN 0 ELSE ROUND(rp.ilosc * rp.IloscZestawow,2) END AS QuantityToDo, CASE WHEN rp.IloscZrealizowana < rp.Ilosc THEN 0 ELSE ROUND(1.0 / rp.IloscKawalkow, 2) END AS QuantityDone, CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN ROUND(1.0 / rp.IloscKawalkow, 2) ELSE 0 END AS QuantityRemoved, 2 AS QuantityPrecision, 0 AS IsModified, CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN CASE WHEN DATEDIFF(second, DataUsuniecia, @date) <= 10 THEN 1 ELSE 0 END ELSE CASE rp.StatusRealizacji WHEN 0 THEN 1 ELSE CASE WHEN ISNULL(konf.TInt, 0) > 0 AND DATEADD(ss, konf.TInt ,rp.DataWyswietleniaNaKDS) > @date THEN 1 ELSE 0 END END END AS IsNew, --IsNew, CASE WHEN rp.UzytkownikUsuwajacyID IS NOT NULL THEN 99 ELSE rp.StatusRealizacji END AS StatusOfPreparation, t.RodzajTowaru, rp.IloscKawalkow, CASE WHEN @RodzajKDS = 1 THEN CASE WHEN rp.StatusRealizacji in (0,1,2) and rp.UzytkownikUsuwajacyID is null THEN @KDSWydawkaKolorPozycjiWPrzygotowaniu when rp.StatusRealizacji in (3,4) and rp.UzytkownikUsuwajacyID is null THEN @KDSWydawkaKolorPozycjiWydanych ELSE null END ELSE null END as Color, 1 as ShowWeight, rp.GrupaZestawuID as ConnectionID FROM #Bills b INNER JOIN #Pozycje rp ON rp.DTRachunekID = b.ID and rp.RolaWKompozycji = 1 INNER JOIN NGastroTowar t ON t.ID = rp.ZestawID AND t.RodzajTowaru = 3 INNER JOIN #Pizza p ON rp.TowarID = p.TowarID AND p.ID = rp.ZestawID AND p.PizzaBaza = 1 AND p.Skladnik = 1 and p.BillID = rp.DTRachunekID INNER JOIN NGastroGrupaTowarowa gt ON t.GrupaTowarowaID = gt.ID LEFT JOIN NSysSlownik s ON s.SystemNr = 300 LEFT JOIN NSysAppKonfiguracjaSzablon konfSzab ON konfSzab.Symbol= 'Local.KDS.NewPositionBacklightTime' LEFT JOIN NSysAppKonfiguracja konf ON konf.SzablonID = konfSzab.ID LEFT JOIN NSysSlownikPozycja sp ON sp.SlownikID = s.ID AND sp.Wartosc = CAST(rp.NumerGrupySerwowania AS VARCHAR) LEFT JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGastroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) and (ukdz.UrzadzenieID = @DeviceID or @rodzajKds =1 ) LEFT JOIN NGastroUrzadzenieKdsWydawkaDla u on (u.UrzadzenieIDKds = ukdz.UrzadzenieID and u.UrzadzenieIDWydawka = @DeviceID) or @rodzajKds =0 WHERE ( (@RodzajKDS IN (0,1) AND (@WyswietlanieWykonanychPozycji = 1 or @RodzajKDS = 1 or (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) OR rp.StatusRealizacji <> 3 ) AND ( (@RodzajKDS = 0 and rp.StatusRealizacji < 4) or (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4) or (@RodzajKDS = 1 and rp.StatusRealizacji < 5) or rp.UzytkownikUsuwajacyID is not null ) AND rp.StatusRealizacji<>6 AND ( @WyswietlanieEdytowanychRachunkow = 1 OR rp.FlgPotwierdzona = 1 ) AND ( DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 OR (@WyswietlanieEdytowanychRachunkow = 1 AND rp.UzytkownikUsuwajacyID IS NOT NULL AND rp.FlgPotwierdzona = 0) ) ) OR ( @RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.UzytkownikUsuwajacyID IS NULL AND rp.FlgPotwierdzona = 1 AND DATEDIFF(ss, CASE rp.DataWydruku WHEN CAST('1900-01-01' AS DATETIME) THEN @date ELSE rp.DataWydruku END, @date) > 0 ) ) AND rp.GrupaZestawuID IS NOT NULL ) p inner join ( select cast(max(cast( ID as varchar(36))) as UNIQUEIDENTIFIER) as ID, GrupaZestawuID, ZestawID, MAX(DataModyfikacjiGrupySerwowania) as DataModyfikacjiGrupySerwowania, MAX(DataDodania) AS DataDodania from #Pozycje group by GrupaZestawuID, ZestawID ) dtrp on dtrp.GrupaZestawuID = p.GrupaZestawuID and dtrp.ZestawID = p.ZestawID DECLARE @NazwyTowarowDlaPozycji TABLE (idPoz UNIQUEIDENTIFIER , nazwa VARCHAR(100) COLLATE POLISH_CS_AI DEFAULT '',numer INT IDENTITY (1,1)) INSERT INTO @NazwyTowarowDlaPozycji(idPoz,nazwa) SELECT rp.ID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END FROM #Pozycje rp INNER JOIN NGastroTowar t ON t.ID = rp.TowarID AND t.RodzajTowaru <> 4 INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID LEFT JOIN NGastroTowar tz ON rp.ZestawID = tz.ID WHERE ( (@RodzajKDS IN (0,1) AND (@WyswietlanieWykonanychPozycji = 1 or @RodzajKDS = 1 OR rp.StatusRealizacji <> 3) AND ((@RodzajKDS = 0 and (rp.StatusRealizacji < 4 or rp.StatusRealizacji=99)) or (@RodzajKDS = 1 and (rp.StatusRealizacji < 5 or rp.StatusRealizacji=99)) or (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4)) AND ( @WyswietlanieEdytowanychRachunkow = 1 OR rp.FlgPotwierdzona = 1 ) ) OR (@RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.FlgPotwierdzona = 1 ) ) AND (rp.FlgPozycjaNadrzedna = 0 OR rp.GrupaZestawuID IS NOT NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NOT NULL) AND ISNULL(rp.RolaWKompozycji, 0) IN (0, 2) AND ISNULL(tz.RodzajTowaru, 0) <> 3 INSERT INTO #SubArticles ( ID, ArticleID, SubArticleID, Name, Quantity, QuantityPrecision, IsPrimary, StatusOfPreparation, IsModified, Numer, NumerCzesci, GrupaZestawuID, Pozycja, ZestawID, IsAddition, Date, Remark ) select CAST(MAX(CAST(zliczonezestawy.ID AS VARCHAR(36))) AS UNIQUEIDENTIFIER), zliczonezestawy.GrupaZestawuID, CAST(MAX(CAST(zliczonezestawy.TowarID AS VARCHAR(36))) AS UNIQUEIDENTIFIER), max(zliczonezestawy.nazwa), Max(zliczonezestawy.ilosc), max(zliczonezestawy.Precyzja), 1, max(zliczonezestawy.StatusRealizacji), 0, Numer, NumerCzesci, zliczonezestawy.GrupaZestawuID, 0, CAST(MAX(CAST(zliczonezestawy.ZestawID AS VARCHAR(36))) AS UNIQUEIDENTIFIER) AS ZestawID, 0, Date, '' Remark from ( select CAST(MAX(CAST(sel.ID AS VARCHAR(36))) AS UNIQUEIDENTIFIER) as id, sel.GrupaZestawuID , CAST(max(CAST(sel.TowarID AS VARCHAR(36))) AS UNIQUEIDENTIFIER) as TowarID, sel.nazwa , CASE WHEN max(sel.RodzajTowaru) = 9 THEN sum(sel.Ilosc) ELSE sum((CASE WHEN sel.UzytkownikUsuwajacyID IS NOT NULL THEN -1.0 ELSE 1.0 END * CASE sel.IloscKawalkow WHEN 1 THEN sel.Ilosc ELSE CEILING(ROUND(sel.Ilosc, 2) * sel.IloscKawalkow) END )) END as ilosc, max(sel.Precyzja) as Precyzja , max(sel.StatusRealizacji) as StatusRealizacji, min(sel.Numer) as numer, max(sel.NumerCzesci) as NumerCzesci, CAST(MAX(CAST(sel.ZestawID AS VARCHAR(36))) AS UNIQUEIDENTIFIER) AS ZestawID, MAX(sel.DataDodania) AS DATE, MAX(Notatka) as Remark from ( SELECT DISTINCT nt.Numer, t.Precyzja, tz.RodzajTowaru, nt.nazwa as nazwa, rp.* FROM #Pozycje rp INNER JOIN @NazwyTowarowDlaPozycji nt on nt.idPoz = rp.ID INNER JOIN NGastroTowar t ON t.ID = rp.TowarID AND t.RodzajTowaru <> 4 INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGastroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) and (ukdz.UrzadzenieID = @DeviceID or @rodzajKds =1 ) LEFT JOIN NGastroUrzadzenieKdsWydawkaDla u on (u.UrzadzenieIDKds = ukdz.UrzadzenieID and u.UrzadzenieIDWydawka = @DeviceID and @rodzajKds =1) or @rodzajKds =0 INNER JOIN NGastroGrupaTowarowa gt ON t.GrupaTowarowaID = gt.ID LEFT JOIN NSysSlownik s ON s.SystemNr = 300 LEFT JOIN NSysSlownikPozycja sp ON sp.SlownikID = s.ID AND sp.Wartosc = CAST(rp.NumerGrupySerwowania AS VARCHAR) LEFT JOIN NGastroTowar tz ON rp.ZestawID = tz.ID WHERE ( (@RodzajKDS IN (0,1) AND (@WyswietlanieWykonanychPozycji = 1 or @RodzajKDS = 1 OR rp.StatusRealizacji <> 3) AND ((@RodzajKDS = 0 and (rp.StatusRealizacji < 4 or rp.StatusRealizacji=99)) or (@RodzajKDS = 1 and (rp.StatusRealizacji < 5 or rp.StatusRealizacji=99)) or (@RodzajKDS = 0 and @KDSExistsIssued = 0 and rp.StatusRealizacji = 4)) AND rp.StatusRealizacji<>6 AND (@WyswietlanieEdytowanychRachunkow = 1 OR rp.FlgPotwierdzona = 1) ) OR (@RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.FlgPotwierdzona = 1 ) ) AND (rp.FlgPozycjaNadrzedna = 0 OR rp.GrupaZestawuID IS NOT NULL OR rp.DodatekDlaDTRachunekPozycjaID IS NOT NULL) AND ISNULL(rp.RolaWKompozycji, 0) IN (0, 2) AND ISNULL(tz.RodzajTowaru, 0) <> 3 ) sel group by sel.GrupaZestawuID,sel.nazwa ) zliczonezestawy group by zliczonezestawy.GrupaZestawuID,zliczonezestawy.Numer, NumerCzesci, zliczonezestawy.DATE UNION ALL SELECT distinct rp.ID, rp.ID, m.ZamiennikTowarID AS TowarID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END, m.Ilosc, t.Precyzja, 1, rp.StatusRealizacji, 0, 0, rp.NumerCzesci, rp.GrupaZestawuID, m.Pozycja + 100, -- dodajemy 100 aby składniki, których nie mona na nic zmienić znalazły sie na końcu, tak jak w posie NULL, 0, rp.DataDodania, rp.Notatka FROM #ResultModyf m INNER JOIN #Pozycje rp ON rp.ID = m.PozycjaID INNER JOIN NGastroTowar t ON t.ID = m.ZamiennikTowarID WHERE ( (@RodzajKDS IN (0,1) AND (@WyswietlanieWykonanychPozycji = 1 or @RodzajKDS = 1 OR rp.StatusRealizacji <> 3) AND ( (@RodzajKDS = 0 AND (rp.StatusRealizacji < 4 OR rp.StatusRealizacji=99)) OR (@RodzajKDS = 1 AND (rp.StatusRealizacji < 5 OR rp.StatusRealizacji=99)) OR (@RodzajKDS = 0 AND @KDSExistsIssued = 0 AND rp.StatusRealizacji = 4) ) AND rp.StatusRealizacji<>6 AND ( @WyswietlanieEdytowanychRachunkow = 1 OR rp.FlgPotwierdzona = 1 ) ) OR (@RodzajKDS = 3 AND rp.StatusRealizacji IN (3,4) AND rp.FlgPotwierdzona = 1 ) ) AND (rp.FlgPozycjaNadrzedna = 1 ) AND ISNULL(rp.RolaWKompozycji, 0) = 0 UNION ALL ---- kompozycja SELECT distinct rp.ID, a.ID, rp.TowarID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END, rp.Ilosc, t.Precyzja, 1, rp.StatusRealizacji, 0, 0, a.PartNumber, rp.GrupaZestawuID, 0, NULL, 0, a.Date, '' Notatka FROM #Articles a INNER JOIN #Pozycje rp ON a.ArticleID = rp.ZestawID AND a.PackageID = rp.GrupaZestawuID AND a.PartNumber = rp.NumerCzesci INNER JOIN NGastroTowar t ON t.ID = rp.TowarID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGastroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) and (ukdz.UrzadzenieID = @DeviceID or @rodzajKds =1 ) LEFT JOIN NGastroUrzadzenieKdsWydawkaDla u on (u.UrzadzenieIDKds = ukdz.UrzadzenieID and u.UrzadzenieIDWydawka = @DeviceID) or @rodzajKds IN (0 ,3) WHERE a.ArticleType = 3 AND rp.RolaWKompozycji = 0 UNION ALL ---- kompozycja select NewId(), a.ID , z.TowarID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END, (-1.0 * z.Ilosc), t.Precyzja, 1, a.StatusOfPreparation , 1, 0, a.PartNumber, a.ConnectionID, s.Pozycja, NULL, 0, a.Date, '' Notatka FROM #Articles a CROSS APPLY (SELECT TOP 1 ID, TowarID, Ilosc FROM NGastroBOM WHERE TowarID = a.ArticleID AND ObowiazujeOd <= GETDATE() ORDER BY ObowiazujeOd DESC ) b INNER JOIN NGastroSkladnik s ON b.ID = s.BomID INNER JOIN NGastroZamiennik z ON s.ID = z.SkladnikID AND z.FlgRodzaj = 0 INNER JOIN NGastroTowar t ON t.ID = z.TowarID AND t.FlgAktywny = 1 AND t.Blokada = 0 where a.ArticleType = 3 and z.TowarID not in ( select rp.TowarID from #Pozycje rp where a.BillId = rp.DTRachunekID and a.ArticleID = rp.ZestawID AND a.PackageID = rp.GrupaZestawuID and rp.RolaWKompozycji = 2 AND a.PartNumber = rp.NumerCzesci ) UNION ALL ---- zestaw automatyczny SELECT distinct rp.ID, a.ID, rp.TowarID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END, rp.Ilosc, t.Precyzja, 1, rp.StatusRealizacji, 1, 0, a.PartNumber, rp.GrupaZestawuID, 0, NULL, 0, a.Date, rp.Notatka FROM #Articles a INNER JOIN #Pozycje rp ON a.ArticleID = rp.ZestawID AND a.PackageID = rp.GrupaZestawuID INNER JOIN NGastroTowar t ON t.ID = rp.TowarID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGastroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) and (ukdz.UrzadzenieID = @DeviceID or @rodzajKds =1 ) INNER JOIN NGastroUrzadzenieKdsWydawkaDla u on (u.UrzadzenieIDKds = ukdz.UrzadzenieID and u.UrzadzenieIDWydawka = @DeviceID) or @rodzajKds IN (0 ,3) WHERE a.ArticleType = 10 AND t.RodzajTowaru IN (4, 9) UNION ALL ---- zestaw automatyczny SELECT distinct rp.ID, a.ID, rp.TowarID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END, rpm.ModyfikatorIlosc, t.Precyzja, 1, rp.StatusRealizacji, 1, 0, a.PartNumber, rp.GrupaZestawuID, 0, NULL, 0, a.Date, rp.Notatka FROM #Articles a INNER JOIN #Pozycje rp ON a.ArticleID = rp.ZestawID AND a.PackageID = rp.GrupaZestawuID INNER JOIN NGastroDTRachunekPozycjaModyfikacja rpm ON rpm.DTRachunekPozycjaID = rp.ID INNER JOIN NGastroTowar t ON t.ID = rpm.ModyfikatorID INNER JOIN NGastroKonfiguracjaDrukowaniaZamowien kdz ON rp.KonfiguracjaDrukowaniaZamowienID = kdz.ID INNER JOIN NGastroUrzadzenieKierunekDrukowaniaZamowien ukdz ON (ukdz.SposobDrukowaniaZamowienID = kdz.SposobDrukowaniaZamowienID OR ukdz.SposobDrukowaniaZamowienID = @KierunekWydrukuWszystkieID) and (ukdz.UrzadzenieID = @DeviceID or @rodzajKds = 1 ) INNER JOIN NGastroUrzadzenieKdsWydawkaDla u on (u.UrzadzenieIDKds = ukdz.UrzadzenieID and u.UrzadzenieIDWydawka = @DeviceID) or @RodzajKDS IN (0, 3) WHERE a.ArticleType = 10 AND t.RodzajTowaru = 1 UNION ALL ---- kompozycja select NewId(), temp1.ID, temp1.TowarID, temp1.NazwaTowaru, temp1.ilosc, temp1.Precyzja, IsPrimary, temp1.StatusOfPreparation , temp1.IsModified, temp1.Numer, temp1.NumerCzesci, temp1.GrupaZestawuID, 0, NULL, 0, temp1.date, Notatka FROM ( SELECT DISTINCT a.ID , p.TowarID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END as NazwaTowaru, CASE WHEN rp.Ilosc = 0 THEN round((-1 * p.IloscBaza)/ IloscKawalkow ,2) ELSE (rp.Ilosc - round(cast(cast((p.IloscBaza*1000)/ IloscKawalkow as int) as decimal(19,3))/1000,3)) * IloscKawalkow END as ilosc, t.Precyzja, 1 as IsPrimary, a.StatusOfPreparation , 1 as IsModified, 0 as Numer, p.NumerCzesci, rp.GrupaZestawuID, a.Date, '' Notatka FROM #Articles a INNER JOIN #Pizza p ON a.BillID = p.BillID AND p.ID = a.ArticleID INNER JOIN #Pozycje rp ON rp.DTRachunekID = p.BillID AND p.ID = rp.ZestawID AND rp.TowarID = p.TowarID AND rp.NumerCzesci = p.NumerCzesci AND rp.GrupaZestawuID = p.GrupaZestawuID AND rp.RolaWKompozycji = 2 INNER JOIN NGastroTowar t on t.ID = p.TowarID WHERE a.ArticleType = 3 AND rp.Ilosc - ROUND(CAST(CAST((p.IloscBaza*1000)/ IloscKawalkow AS INT) AS DECIMAL(19,3))/1000,3) < 0 ) temp1 UNION ALL -- opakowanie do pizzy SELECT CAST(MAX(CAST(rpz.ID AS VARCHAR(36))) AS UNIQUEIDENTIFIER) ID, a.ID, rpz.TowarID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END, Sum(rpz.Ilosc) Ilosc, t.Precyzja, 1 AS IsPrimary, rp.StatusRealizacji, 0 AS IsModified, 0, rp.NumerCzesci AS PartNumber, rp.GrupaZestawuID, 0, NULL, 1, MIN(rp.DataDodania) DataDodania, rpz.Notatka FROM #Pozycje rp INNER JOIN #Articles a ON a.PackageID = rp.GrupaZestawuID AND a.ArticleType = 3 INNER JOIN NGastroDTRachunekPozycjaPowiazanie rpp ON rpp.DTRachunekPozycjaID = rp.ID INNER JOIN NGastroDTRachunekPozycja rpz ON rpz.ID = rpp.DTRachunekPozycjaDocelowaID INNER JOIN NGastroTowar t ON t.ID = rpz.TowarID GROUP BY a.ID, rpz.TowarID, t.NazwaNaZamowieniu, t.NazwaTowaru, t.Precyzja, rp.StatusRealizacji, rp.NumerCzesci, rp.GrupaZestawuID, rpz.Notatka ------ Dodatki i opakowania UNION ALL SELECT CAST(MAX(CAST(rp.ID AS VARCHAR(36))) AS UNIQUEIDENTIFIER) ID , rp.GrupaZestawu, rp.TowarID, rp.NazwaTowaru, Sum(rp.Ilosc) Ilosc, rp.Precyzja, 1 AS IsPrimary, rp.StatusRealizacji, 0 AS IsModified, 0, rp.NumerCzesci AS PartNumber, rp.GrupaZestawuID GrupaZestawuID, 0, NULL, 1, MIN(rp.DataDodania) DataDodania, rp.Notatka COLLATE POLISH_CS_AI FROM ( SELECT DISTINCT rpz.ID ID, CASE WHEN a.ArticleType = 9 THEN a.PackageID ELSE rp.ID END GrupaZestawu, t.ID TowarID, CASE WHEN t.NazwaNaZamowieniu = '' THEN t.NazwaTowaru ELSE t.NazwaNaZamowieniu END NazwaTowaru, rpz.Ilosc, t.Precyzja, rp.StatusRealizacji, rp.NumerCzesci , rp.GrupaZestawuID GrupaZestawuID, rp.DataDodania, rpz.Notatka FROM #Pozycje rp INNER JOIN #Articles a ON (a.PackageID = rp.GrupaZestawuID OR rp.ID = a.ID) AND a.ArticleType <> 3 INNER JOIN NGastroDTRachunekPozycjaPowiazanie rpp ON rpp.DTRachunekPozycjaID = rp.ID INNER JOIN NGastroDTRachunekPozycja rpz ON rpz.ID = rpp.DTRachunekPozycjaDocelowaID INNER JOIN NGastroTowar t ON t.ID = rpz.TowarID INNER JOIN #Pozycje p ON p.ID = rpz.ID ) rp GROUP BY rp.GrupaZestawu, rp.TowarID, rp.NazwaTowaru, rp.Precyzja, rp.StatusRealizacji, rp.NumerCzesci, rp.GrupaZestawuID, rp.Notatka UPDATE a SET Remark = CAST(Remark + '; ' AS VARCHAR(255)) FROM #Articles a WHERE a.ArticleType IN (1,3,4,8,9) UPDATE a SET Remark = CAST(Remark + isnull(( SELECT s.Remark + '; ' FROM #SubArticles s WHERE s.ArticleID = a.ID AND s.IsAddition = 1 AND LEN(LTRIM(RTRIM(ISNULL(s.Remark,'')))) > 0 ORDER BY [Date] FOR XML PATH(''),TYPE ).value('(./text())[1]','VARCHAR(255)') ,'') AS VARCHAR(255)) FROM #Articles a WHERE a.ArticleType IN (1,3,4,8,9) UPDATE a SET Remark = ISNULL(( SELECT p.Notatka + '; ' FROM #Pozycje p WHERE p.GrupaZestawuID = a.PackageID AND LEN(LTRIM(RTRIM(ISNULL(p.Notatka,'')))) > 0 ORDER BY [DataDodania] FOR XML PATH(''),TYPE ).value('(./text())[1]','VARCHAR(255)') ,'') FROM #Articles a WHERE a.ArticleType = 10 UPDATE a SET Remark = REVERSE(STUFF(REVERSE((Remark)), 1, 2,'')) FROM #Articles a WHERE a.ArticleType IN (1,3,4,8,9,10) UPDATE a SET Name = '[' + CAST(Lp AS VARCHAR(2)) + '] ' + Name FROM #Articles a INNER JOIN ( SELECT ROW_NUMBER() OVER(PARTITION BY BillID ORDER BY ServingGroup, Date, ModificationDate) AS Lp, BillID, PackageID FROM ( SELECT BillID, PackageID, MAX(ServingGroup) AS ServingGroup, MAX(Date) AS Date, MAX(ServingGroupModificationDate) AS ModificationDate FROM #Articles WHERE PackageID IS NOT NULL AND ArticleType = 3 GROUP BY BillID, PackageID ) tmp ) num ON num.PackageID = a.PackageID AND num.BillID = a.BillID --Ustawienie kolejności podstaw-- UPDATE sa SET sa.Pozycja = s.Pozycja, sa.IsModify = 0 FROM #SubArticles sa CROSS APPLY (SELECT TOP 1 ID, TowarID, Ilosc FROM NGastroBOM WHERE TowarID = sa.ZestawID AND ObowiazujeOd <= GETDATE() ORDER BY ObowiazujeOd DESC ) b INNER JOIN NGastroSkladnik s ON s.BomID = b.ID LEFT JOIN NGastroZamiennik z ON z.SkladnikID = s.ID WHERE sa.SubarticleID = s.TowarID AND z.ID IS NULL --Ustawienie kolejności kroków zestawu-- UPDATE sa SET sa.Pozycja = s.Pozycja FROM #SubArticles sa CROSS APPLY (SELECT TOP 1 ID, TowarID, Ilosc FROM NGastroBOM WHERE TowarID = sa.ZestawID AND ObowiazujeOd <= GETDATE() ORDER BY ObowiazujeOd DESC ) b INNER JOIN NGastroSkladnik s ON s.BomID = b.ID INNER JOIN NgastroZamiennik z ON z.SkladnikID = s.ID AND sa.SubArticleID = z.TowarID WHERE sa.IsModify = 1 UPDATE sa SET sa.Pozycja = s.Pozycja FROM #SubArticles sa CROSS APPLY (SELECT TOP 1 ID, TowarID, Ilosc FROM NGastroBOM WHERE TowarID = sa.ZestawID AND ObowiazujeOd <= GETDATE() ORDER BY ObowiazujeOd DESC ) b INNER JOIN NGastroSkladnik s ON s.BomID = b.ID AND sa.SubArticleID = s.TowarID WHERE sa.IsModify = 1 IF @RodzajKDS = 3 BEGIN UPDATE #Articles SET StatusOfPreparation = 4 WHERE StatusOfPreparation = 3 UPDATE #SubArticles SET StatusOfPreparation = 4 WHERE StatusOfPreparation = 3 END SELECT @result = ( SELECT @ExecutionStatus AS ExecutionStatus, @SessionID AS SessionID, ( SELECT ( SELECT b.ID, b.Description, b.Remark, b.PointOfSale, b.UserDescription AS [User], b.Date, b.OpenningType, CONVERT(XML, ( SELECT ID, ArticleID, Name, ServingGroup, ServingGroupName, PersonNumber, Remark, QuantitySet, QuantityToDo, QuantityDone, QuantityRemoved, QuantityPrecision, Date, IsModified, IsNew, StatusOfPreparation, '#' + RIGHT(sys.fn_varbintohexstr(CONVERT(VARBINARY(8), Color)), 6) as Color, ShowWeight, ConnectionID, CONVERT(XML, ( SELECT s.ID, s.SubArticleID, s.Name, s.Quantity, s.QuantityPrecision, s.IsPrimary, s.StatusOfPreparation, s.IsModified FROM #SubArticles s WHERE (s.ArticleID = a.ID OR s.ArticleID = a.ConnectionID) AND ( a.PartNumber = 0 OR a.PartNumber = s.NumerCzesci AND ( a.ConnectionID = s.GrupaZestawuID OR s.GrupaZestawuID IS NULL ) ) ORDER BY IsAddition, IsModify, Pozycja, Date FOR XML PATH('SubArticle'), ROOT('SubArticles'), TYPE )) FROM #Articles a WHERE a.BillID = b.ID ORDER BY a.ServingGroup, a.Date, a.ServingGroupModificationDate FOR XML PATH('Article'), ROOT('Articles'), TYPE )) FROM #Bills b WHERE EXISTS ( SELECT * FROM #Articles WHERE BillID = b.ID ) ORDER BY CASE WHEN @RodzajKDS = 2 THEN '' ELSE b.FlgFastTrack END DESC -- @RodzajKDS = 2 (OrderNumber) ,CASE WHEN ISNULL(@SortType, 0) = 0 THEN b.Date ELSE '' END ASC ,CASE WHEN ISNULL(@SortType, 0) = 1 THEN b.Date ELSE '' END DESC FOR XML PATH('Bill'), TYPE ) FOR XML PATH('Bills'), TYPE ) FOR XML PATH(''), ROOT('response'), TYPE ) Result: IF( @ExecutionStatus > 0 ) BEGIN SET @result = '' + CAST(@SessionID AS VARCHAR(36)) + '' + + '' + CAST(@ExecutionStatus AS VARCHAR(36)) + ''; END SELECT @result AS Response -------------------------------------------------------------------------- -- zakonczenie procedury KONIEC: IF (OBJECT_ID('tempdb..#BillsToShow') IS NOT NULL) DROP TABLE #BillsToShow IF (OBJECT_ID('tempdb..#Pizza') IS NOT NULL) DROP TABLE #Pizza IF (OBJECT_ID('tempdb..#Bills') IS NOT NULL) DROP TABLE #Bills IF (OBJECT_ID('tempdb..#Articles') IS NOT NULL) DROP TABLE #Articles IF (OBJECT_ID('tempdb..#SubArticles') IS NOT NULL) DROP TABLE #SubArticles IF (OBJECT_ID('tempdb..#BillsTemp') IS NOT NULL) DROP TABLE #BillsTemp IF (OBJECT_ID('tempdb..#Pozycje') IS NOT NULL) DROP TABLE #Pozycje IF (OBJECT_ID('tempdb..#Zmiany') IS NOT NULL) DROP TABLE #Zmiany IF (OBJECT_ID('tempdb..#LastBills') IS NOT NULL) DROP TABLE #LastBills RETURN(0); BLADWYKONANIA: RETURN(99); END;