Files
karczma-aplikacja-stoliki/docs/ai.txt
2026-05-25 14:02:42 +02:00

3546 lines
172 KiB
Plaintext

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 '<request>
<DeviceID typ="Int"/>
<SessionID typ="Varchar"/>
</request>' as template
RETURN;
END
IF @cGetResponseTemplate = 1 and @cGetRequestTemplate = 0
BEGIN
SELECT
'<response>
<SessionID typ="Varchar"/>
<ExecutionStatus typ="Int"/>
<Bills typ="lista">
<Bill typ="klasa">
<ID typ="VarChar"/>
<Description typ="VarChar"/>
<Remark typ="VarChar"/>
<PointOfSale typ="VarChar"/>
<User typ="VarChar"/>
<Date typ="DateTime"/>
<OpenningType typ="Int"/>
<Articles typ="lista">
<Article typ="klasa">
<ID typ="VarChar"/>
<ArticleID typ="VarChar"/>
<Name typ="VarChar"/>
<ServingGroup typ="Int"/>
<ServingGroupName typ="VarChar"/>
<PersonNumber typ="Int"/>
<Remark typ="VarChar"/>
<QuantitySet typ="Int"/>
<QuantityToDo typ="Decimal"/>
<QuantityDone typ="Decimal"/>
<QuantityRemoved typ="Decimal"/>
<QuantityPrecision typ="Int"/>
<Date typ="DateTime"/>
<IsModified typ="TinyInt"/>
<IsNew typ="TinyInt"/>
<StatusOfPreparation typ="TinyInt"/>
<Color typ="VarChar"/>
<ShowWeight typ="Int"/>
<ConnectionID typ="VarChar"/>
<SubArticles typ="lista">
<SubArticle typ="klasa">
<ID typ="VarChar"/>
<SubArticleID typ="VarChar"/>
<Name typ="VarChar"/>
<QuantitySet typ="Int"/>
<Quantity typ="Decimal"/>
<QuantityPrecision typ="Int"/>
<IsPrimary typ="TinyInt"/>
<StatusOfPreparation typ="TinyInt"/>
<IsModified typ="TinyInt"/>
</SubArticle>
</SubArticles>
</Article>
</Articles>
</Bill>
</Bills>
</response>' 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 = '<response><SessionID>' + CAST(@SessionID AS VARCHAR(36)) + '</SessionID>' +
+ '<ExecutionStatus>' + CAST(@ExecutionStatus AS VARCHAR(36)) + '</ExecutionStatus><Bills/></response>';
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;