 DELIMITER $$

/* ************************************************************************************************************************************************************************
	MOBILNE
	Edycja pozycji, Wstawianie, etc
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `C_HT_M_Proc`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `C_HT_M_Proc`(
	IN _MODE VARCHAR(250),
	IN _IN_MODE VARCHAR(250),
	IN _FROM VARCHAR(250),
	IN _IdnOper VARCHAR(38),	--	IdnOper/IdnNg
	IN _GUID VARCHAR(38),		--	GUID pozycji ALBO!!! IdnNg realizowanego zamowienia w INIT _GUID wedruje do @.OPZM.INPUT_Key
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_C VARCHAR(255),
	IN _Param_D VARCHAR(255),
	IN _Param_E VARCHAR(255),
	IN _Params TEXT
)
/******************************************************************************************************************************************************
	MOBILNE Procedury ogólne np. realizacja zam. realizacja wstępna i przeniesienie do E, etc.
	oczywiście korzysta z proc. C_HT_OPZM() czyli z M
******************************************************************************************************************************************************/
SC_HT_M_Proc: BEGIN 
	DECLARE _Limit INTEGER;
	DECLARE _WyjazdGUID, _IdnNg, _KontrGUID VARCHAR(38);
	DECLARE _SQLText TEXT;
	DECLARE _IdnTowr, _ModeParam, _ZM_Key VARCHAR(38);
	DECLARE _Ilosc, _CenaNet DOUBLE(16,4);
	DECLARE _rodzaj_przeliczenia INTEGER;
set @_Params.2 = 'hej';					
set @_Params.22 = _Params;					
CALL _sys_app_logtxt('LOG.Session.Add', @SYSTEM.Client.Session.GUID, 'CMD', '', '', 'PHP', '', '', 
	CONCAT_WS('/', 
		_MODE,
		_IN_MODE,
	_IN_MODE,
	_FROM,
	_IdnOper,
	_GUID,
	_Param_A,
	_Param_B,
	_Param_C,
	_Param_D,
	_Param_E,
	_Params
	)
);				
		IF _MODE LIKE 'MOB.MENU%' THEN
			IF _MODE IN ('MOB.MENU->Realizacja.Zam', 'MOB.MENU->Realizacja.Zlec') THEN
			-- bylo IF _MODE LIKE 'WEB.MOB.SELECT.ZAM.Do.Zrealizowania%' THEN
			--	W _Param_A szukana fraza IDNa lub 'DD', lub 'OO'
				SET @_Scan_IDN = IF(_Param_A LIKE '#%', SUBSTR(_Param_A, 2, 255), _Param_A);
				SET @.min.TerminRealizacji = 
					IF(@session.globals.Owner IN ('MAXFORM'), 
						(CURRENT_DATE() - INTERVAL 50 WEEK),
						(CURRENT_DATE() - INTERVAL 1 WEEK)
					)
				;
				SELECT
					n.GUID,
					n.Nrzamw,
					DATE(n.TerminRealizacji) AS TerminRealizacji,
					n.Rodzaj,
					CONCAT_WS(' ',
						n.`kontrsymbol`,
						-- k.Nazwa,
						CONCAT('(poz.do realiz. ', n.ilepoz - n.ilepozzreal, IF(n.ilepozzreal = 0, ')', CONCAT(' z ', n.ilepoz, ')'))),
						null -- n.Brutto
						
					) AS Descr_Short,
					CONCAT_WS('\n',
						CONCAT(od.Nazwa, ' z ', n.DataWystaw),
						CONCAT('nr: ', NULLIF(n.Nrzamw, '')),
						CONCAT('Realizacja dnia: ', n.TerminRealizacji),
						CONCAT('(poz.do realiz. ', n.ilepoz - n.ilepozzreal, IF(n.ilepozzreal = 0, ')', CONCAT(' z ', n.ilepoz, ')'))),
						CONCAT('Brutto: ', n.Brutto),
						CONCAT('Mag. (', IFNULL(m1.Opis, ''), ' -> ', IFNULL(m2.Opis, ''), ')'),
						CONCAT('Kontr.: ', NULLIF(n.kontrSymbol, '')),
						k.Nazwa,
						''
					) 
					AS Descr_Long,
				--	Rodzaj_Realizacji	
					CASE
						WHEN n.Rodzaj IN (27, 52) THEN '10'	--	WZ ka dla OO
						WHEN n.Rodzaj IN (28, 74) THEN '12'	--	PZ ka dla DD
						WHEN n.Rodzaj IN (73) AND _Param_A = 'ZLEC.RW' THEN '11'		--	RW ka dla DD
						WHEN n.Rodzaj IN (73) AND _Param_A = 'ZLEC.PW' THEN '13'	--	PW ka dla DD
						WHEN n.Rodzaj IN (73) THEN '11,13'		--	RW ka dla DD
						ELSE 10
					END 
					AS Rodzaj_Realizacji,
					CURRENT_DATE() AS Data_Realizacji
				FROM `zmng` n
				LEFT JOIN `kontrah` k ON k.GUID = n.KontrGUID
				INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
				LEFT JOIN `Magazyny` m1 ON m1.IdnMagazynu = n.IdnMagazyn
				LEFT JOIN `Magazyny` m2 ON m2.IdnMagazynu = n.MagazynWys
				WHERE
					IF(_Param_A LIKE '#%',
						n.IDN = @_Scan_IDN,
						(
						-- n.TerminRealizacji > (CURRENT_DATE() - INTERVAL 1 WEEK)
						n.TerminRealizacji > @.min.TerminRealizacji
						AND n.ilepoz > n.ilepozzreal
						AND n.Deleted = 0
						-- AND NOT n.Zrealizowane
						AND
							IF(_MODE = 'MOB.MENU->Realizacja.Zlec',
								n.Rodzaj IN (73), 
								IF(_Param_A = 'OO', 
									n.Rodzaj IN (27, 52), 
									IF(_Param_A = 'DD',
										n.Rodzaj IN (28, 74), 
										IF(_Param_A = 'OF',
											n.Rodzaj IN (87), 
											FALSE
										)
									)		
								)
							)
						)
					)
				ORDER BY n.Nrzamw
				;	
			
			END IF;
			
			IF _MODE LIKE 'MOB.MENU->%->Rodzaje' THEN
			/*************************************************************************************************************************************************
				RODZAJE
				MOB.MENU->Magazynowe->Rodzaje			
				MOB.MENU->Realizacja.Zam->Rodzaje		podajesz GUID zamówienia
				MOB.MENU->Realizacja.Zlec->Rodzaje		podajesz GUID zlecenia
				
				CALL C_HT_M_Proc('MOB.MENU->Magazynowe->Rodzaje', '', 'OP', '', '', '', '', '', '', '', @Params);
				CALL C_HT_M_Proc('MOB.MENU->Realizacja.Zlec->Rodzaje', '', 'OP', '', '', '', '', '', '', '', @Params);
				CALL C_HT_M_Proc('MOB.MENU->Realizacja.Zam->Rodzaje', '', 'OP', '', '', '', '', '', '', '', @Params);
				1 dokument IdnOper
				
				_GUID gdy np realizujemy zamowienie, zlecenie
				
			*************************************************************************************************************************************************/
			
			--	Dodaj uprawnienia !!!!!!!!
			--	W _Param_A szukana fraza czyli 'MAG' lub OpTyp Magazynowe, inne
				IF _MODE IN ('MOB.MENU->Magazynowe->Rodzaje') THEN
					CALL C_HT_M_Proc('WEB.MOB.SELECT.Rodzaje.OP.Do.Wystawienia', '', 'OP', '', '', 'MAG', '', '', '', '', @Params);
				END IF;
				
				IF _MODE IN ('MOB.MENU->Realizacja.Zlec->Rodzaje', 'MOB.MENU->Realizacja.Zam->Rodzaje') THEN
					CALL C_HT_M_Proc('WEB.MOB.SELECT.Rodzaje.OP.Do.Wystawienia', '', 'OP', '', _GUID, 'Realizacja.Zlec', '', '', '', '', @Params);
				END IF;
				-- SET @.Wybor.Rodzaju.Mode.Realizacja := (_MODE IN ('MOB.MENU->Realizacja.Zlec->Rodzaje', 'MOB.MENU->Realizacja.Zam->Rodzaje'));
				SET @.Wybor.Rodzaju.Mode.Realizacja.Zam := (_MODE IN ('MOB.MENU->Realizacja.Zam->Rodzaje'));
				SET @.Wybor.Rodzaju.Mode.Realizacja.Zlec := (_MODE IN ('MOB.MENU->Realizacja.Zlec->Rodzaje'));
				SELECT
					od.Rodzaj, ot.Typ AS PodRodzaj,
				-- _VarInt(@_Param_A),@_Param_A IN (0, 1, 2, 7),
					ot.Nazwa AS Descr_Short,
					ot.Opis AS Descr_Long,
					od.MA_Magzyny,
					od.MA_Kontrahenta,
					od.MagTyp,
					od.TwTyp,
					od.DefaultTymczasowa,
					IF(@.Wybor.Rodzaju.Mode.Realizacja.Zam AND (@session.globals.Owner != 'TRALALA'), 
						FALSE,
						(@OP.Is.Mag.1 := od.MagTyp IN (2, 1, 3))
					) AS Is_Mag_1,
					IF(@.Wybor.Rodzaju.Mode.Realizacja.Zam AND (@session.globals.Owner != 'TRALALA'), 
						FALSE,
						(@OP.Is.Mag.2 := od.MagTyp IN (0, 1, 3))
					) AS Is_Mag_2,
					IF(@.Wybor.Rodzaju.Mode.Realizacja.Zam AND (@session.globals.Owner != 'TRALALA'), 
						FALSE,
						(@OP.Is.Mag.3 := (od.TwTyp IN (3) AND od.MagTyp = 2))
					) AS Is_Mag_3,
					IF(@.Wybor.Rodzaju.Mode.Realizacja.Zam AND (@session.globals.Owner != 'TRALALA'), 
						FALSE,
						od.MA_Kontrahenta
					) AS Is_Kontrah,
					(@OP.Label.Mag.1 := 
						IF(@OP.Is.Mag.1,
							IF(od.TwTyp < 3,
								'z magazynu ...',
								'realizuj z magazynu ...'
							),
							''
						)
					) AS Label_Mag_1,

					(@OP.Label.Mag.2 := 
						IF(@OP.Is.Mag.2,
							IF(od.TwTyp < 3,
								'na magazyn ...',
								'na magazyn ...'
							),
							''
						)
					) AS Label_Mag_2,
					
					(@OP.Label.Mag.3 := 
						IF(@OP.Is.Mag.3,
							IF(od.TwTyp < 3,
								'',
								'magazyn wysyłkowy ...'
							),
							''
						)
					) AS Label_Mag_3,
						-- 'z magazynu ...'
					"#909152" AS Color_BG, "#ffffff" AS Color_FG,
					od.Rodzaj IN (10, 11, 12, 13) AS czyZleceniaKosztowe
				-- FROM `operdoc_typy` ot
				-- INNER JOIN `operdoc` od ON od.Rodzaj = ot.Rodzaj
				FROM `t_rodzaje_operacji_we` t 
				INNER JOIN `operdoc` od ON od.Rodzaj = t.Rodzaj
				INNER JOIN `operdoc_typy` ot ON ot.Rodzaj = od.Rodzaj AND NOT ot.Disabled
				WHERE
					TRUE
					AND NOT ot.disabled
					AND NOT ot.param1='mDoc_Disabled' AND ot.Is_instancje=0
					AND od.valid
					AND
						IF(@.Wybor.Rodzaju.Mode.Realizacja.Zam,
							TRUE, -- to jest nie dokonczone - zrobic porzadek z tym balaganem
						IF('MAG' = 'MAG', 
							od.grupa IN (2, 7),  --  AND od.Rodzaj IN (9, 10, 11, 12, 13),
							IF('MAG' IN (0, 1, 2, 7), 
								od.grupa = 2,
								FALSE
							)
						)
						)
				;
			
			END IF;
			
			IF _MODE LIKE 'MOB.MENU->Zlec.kosztowe' THEN
			/*************************************************************************************************************************************************
				Zad. 58536 dla Marine
				CALL C_HT_M_Proc('MOB.MENU->Zlec.kosztowe', '', 'OP', '', '', '', '', '', '', '', @Params);
			*************************************************************************************************************************************************/
				SELECT 
					z.GUID, 
					z.nr_zlecenia, 
					z.opis
					/*
					, z.konto_zlecenia, z.stawka_godz, z.konto_przeciw,
					z.konto_zus_zlecenia, z.konto_zus_przeciw, z.analityka, z.typ, z.kontrakt,
					z.kontrguid, z.wzordekrRW, z.wzordekrPW, z.wzordekrZW, z.alocaltime,
					z.KontraktGUID, kr.nr_zlecenia AS nr_kontraktu, z.data_zamkniecia,
					k.Nazwa AS Kontrahent_Nazwa, z.rodzaj, z.rodzaj_kosztu, z.case_GUID, z.info1,
					z.info2, z.info3, z.nieaktywne 
					*/
					FROM
					zlec z 
					LEFT JOIN kontrah k ON k.GUID = z.KontrGUID 
					LEFT JOIN zlec kr ON kr.GUID = z.KontraktGUID 
					WHERE
						z.Rodzaj <> 1 
						AND z.deleted=0   
						AND (IFNULL(z.data_zamkniecia, '2999-01-01') > NOW() ) 
						AND z.nieaktywne = 0  /* Data_PrepareSQLBeforeFilter  Data_PrepareSQLAfterFilter  User jmam /  /  wersja z dnia  2023-12-07 08.52.54 /  / cdsZlec */
                        AND (@session.globals.Owner IN ('MARINE','CRIST'))	/* tylko dla marine na razie (8 I 2024)		DB 03.10.2025 Dodałem Crist */
					;
			END IF;

			IF _MODE LIKE 'MOB.MENU->%->Magazyn._' THEN
			/*************************************************************************************************************************************************
				Magazyny
				-------------------------
				Mag I
				-------------------------
				Call z  modem 

				MODE Wywołania 
				MOB.MENU->Magazynowe->Rodzaje->Magazyn.1			podajesz w params wybrany poprzednio Rodzaj i Podrodzaj
				MOB.MENU->Realizacja.Zam->Rodzaje->Magazyn.1		podajesz w params wybrany poprzednio Rodzaj i Podrodzaj
				MOB.MENU->Realizacja.Zlec->Rodzaje->Magazyn.1		podajesz w params wybrany poprzednio Rodzaj i Podrodzaj
				Zestaw ograniczony jest wg uprawnień i ustawień klienta, kontekstu zlecenia produkcyjnego etc.
				Gdy liczba magazynów = 0  to Err ola Boga!!!
				Gdy = 1 to zapamiętujesz ten rekord (IDN magazynu i nazwe parametru)
				Gdy > 1 to pokazujesz liste wyboru a po wyborze zapamiętujesz ten rekord (IDN magazynu i nazwe parametru)

				-------------------------
				Mag II
				-------------------------
				analogicznie jak Mag I
				MOB.MENU->Magazynowe->Rodzaje->Magazyn.1->Magazyn.2
				ale może być
				MOB.MENU->Magazynowe->Rodzaje->Magazyn.2
				itp

				-------------------------
				Mag III
				-------------------------
				analogicznie jak Mag I i II
				MOB.MENU->Magazynowe->Rodzaje->Magazyn.1->Magazyn.2->Magazyn.3
				ale może być
				MOB.MENU->Magazynowe->Rodzaje->Magazyn.1->Magazyn.3
				itp
				
				dla rodzaju w _Param_A ...
				
				CALL C_HT_M_Proc('MOB.MENU->Magazynowe->Rodzaje->Magazyn.1', '', 'OP', '', '', '', '', '', '', @Params);
				CALL C_HT_M_Proc('MOB.MENU->Realizacja.Zam->Rodzaje->Magazyn.1', '', 'OP', '', 'GUID zam', '', '', '', '', @Params);
				CALL C_HT_M_Proc('MOB.MENU->Magazynowe->Rodzaje->Magazyn.1', '', 'OP', '', '', '', '', '', '', @Params);
				_Param_A - rodzaj
				_Param_B - podrodzaj
				_Param_C - magazyn 1 (dla 2) dla 1 i 3 nieistotny
				_GUID gdy np realizujemy zamowienie, zlecenie
				
			*************************************************************************************************************************************************/
			
				DROP TEMPORARY TABLE IF EXISTS `t_select_magazyny`;
				CREATE TEMPORARY TABLE `t_select_magazyny` (
				  `Magazyn` INT(11) NOT NULL DEFAULT 0,
				  PRIMARY KEY (`Magazyn`)
				)
				;
				
				SET
					@.Wybor.Magazynu = 	--	1, 2, 3 ?
						IF(_MODE LIKE 'MOB.MENU->%->Magazyn.1', 
							1,
							IF(_MODE LIKE 'MOB.MENU->%->Magazyn.2', 
								2,
								3
							)
						)
				;
				SET @.Zezwalaj.na.Magazyny = 
					EXISTS(
						SELECT 
							od.Rodzaj
						FROM `operdoc` od
						WHERE
							od.Rodzaj = _Param_A
							AND
								CASE @.Wybor.Magazynu
								WHEN 1 THEN od.MagTyp IN (2, 1, 3)
								WHEN 2 THEN od.MagTyp IN (0, 1, 3)
								WHEN 3 THEN (od.TwTyp IN (3) AND od.MagTyp = 2)
								END
					)
				;
								
								
								
				IF @.Zezwalaj.na.Magazyny THEN
					-- IF _MODE = 'WEB.MOB.SELECT.Magazyny.For.Realizacja.Zlec' THEN
					IF _MODE LIKE '%MOB.MENU->Realizacja.Zam%' THEN
					--	dla realizacji Zlecenia (GUID)...
						IF (@session.globals.Owner != 'TRALALA') THEN
							SET @.Wstaw.Domyslne.Magazyny = FALSE;
						ELSE
							SET @.Wstaw.Domyslne.Magazyny = TRUE;
						END IF;
					/*	TESTY
						INSERT IGNORE INTO `t_select_magazyny`
						SELECT 
							m.IdnMagazynu
						FROM `zmng` n, `Magazyny` m, `operdoc` od
						WHERE
							n.GUID = _GUID
							AND m.IdnMagazynu = n.MagazynWys
							AND od.Rodzaj = _Param_A
							AND od.`MA_Magzyny`
							AND 
								CASE @.Wybor.Magazynu
								WHEN 1 THEN od.MagTyp IN (2, 1, 3)
								WHEN 2 THEN od.MagTyp IN (0, 1, 3)
								WHEN 3 THEN (od.TwTyp IN (3) AND od.MagTyp = 2)
								END
							AND	
								IF(@.Wybor.Magazynu = 2, m.IdnMagazynu <> IFNULL(NULLIF(_Param_C, ''), 0), TRUE)
							--	AND uprawnienia !!!!
							--	AND pozabilansowy ???!!!
							and false
						GROUP BY m.IdnMagazynu
						;
						
					--	TEST
						IF @.Wybor.Magazynu IN (1) THEN
							INSERT IGNORE INTO `t_select_magazyny`
							SELECT 
								m.IdnMagazynu
							FROM `Magazyny` m
							where
								true
							limit 1
							;
						elseIF @.Wybor.Magazynu IN (2) THEN
							INSERT IGNORE INTO `t_select_magazyny`
							SELECT 
								m.IdnMagazynu
							FROM `Magazyny` m
							where
								true
							limit 0
							;
						elseIF @.Wybor.Magazynu = 3 THEN
							INSERT IGNORE INTO `t_select_magazyny`
							SELECT 
								m.IdnMagazynu
							FROM `Magazyny` m
							where
								true
							limit 2
							;
						END IF;
						SET @.Wstaw.Domyslne.Magazyny = NOT (ROW_COUNT() > 0);
						SET @.Wstaw.Domyslne.Magazyny =false;
					*/
					--	jmam !!!!!!!!!!!!!!!!!!!	
					ELSEIF _MODE LIKE '%MOB.MENU->Realizacja.Zlec%' THEN

					--	dla realizacji Zlecenia (GUID)...
						INSERT IGNORE INTO `t_select_magazyny`
						SELECT 
							m.IdnMagazynu
						FROM `zmng` n, `zmpo` p, `Magazyny` m, `operdoc` od
						WHERE
							n.GUID = _GUID
							AND p.IdnNg = n.`GUID`
							-- and p.Ilosc > p.Zrealizowano
							AND m.IdnMagazynu = p.MagazynWys
							AND od.Rodzaj = _Param_A
							AND od.`MA_Magzyny`
							AND od.magtyp = p.magtyp
							AND 
								CASE @.Wybor.Magazynu
								WHEN 1 THEN od.MagTyp IN (2, 1, 3)
								WHEN 2 THEN od.MagTyp IN (0, 1, 3)
								WHEN 3 THEN (od.TwTyp IN (3) AND od.MagTyp = 2)
								END
							AND	
								IF(@.Wybor.Magazynu = 2, m.IdnMagazynu <> _Param_C, TRUE)
							--	AND uprawnienia !!!!
							--	AND pozabilansowy ???!!!
							
						GROUP BY m.IdnMagazynu
						;
						
						SET @.Wstaw.Domyslne.Magazyny = NOT (ROW_COUNT() > 0);
						
					ELSE
						SET @.Wstaw.Domyslne.Magazyny = TRUE;
					END IF;
					
					
					IF @.Wstaw.Domyslne.Magazyny THEN
						INSERT IGNORE INTO `t_select_magazyny`
						SELECT
							m.IdnMagazynu
						FROM `Magazyny` m
						INNER JOIN `operdoc` od ON od.Rodzaj = _Param_A		--	Rodzaj
						WHERE
							TRUE
							--	AND uprawnienia !!!!
							--	AND pozabilansowy ???!!!
							AND 
								CASE @.Wybor.Magazynu
								WHEN 1 THEN od.MagTyp IN (2, 1, 3)
								WHEN 2 THEN od.MagTyp IN (0, 1, 3)
								WHEN 3 THEN (od.TwTyp IN (3) AND od.MagTyp = 2)
								END
							AND	
								IF(@.Wybor.Magazynu = 2, m.IdnMagazynu <> _Param_C, TRUE)
						;
					END IF;
				
				END IF;





					/*

						truncate `t_select_magazyny`;
						INSERT IGNORE INTO `t_select_magazyny`
						SELECT 
							m.IdnMagazynu
						FROM `zmng` n, `zmpo` p, `Magazyny` m, `operdoc` od
						WHERE
							n.GUID = _GUID
							AND p.IdnNg = n.`GUID`
							-- and p.Ilosc > p.Zrealizowano
							AND m.IdnMagazynu = p.MagazynWys
							AND od.Rodzaj = _Param_A
							AND od.`MA_Magzyny`
							AND od.magtyp = p.magtyp
							AND 
								CASE @.Wybor.Magazynu
								WHEN 1 THEN od.MagTyp IN (2, 1, 3)
								WHEN 2 THEN od.MagTyp IN (0, 1, 3)
								WHEN 3 THEN (od.TwTyp IN (3) AND od.MagTyp = 2)
								END
							AND	
								IF(@.Wybor.Magazynu = 2, m.IdnMagazynu <> _Param_C, TRUE)
							--	AND uprawnienia !!!!
							--	AND pozabilansowy ???!!!
							
						GROUP BY m.IdnMagazynu
						;
						
						SET @.Wstaw.Domyslne.Magazyny = NOT (ROW_COUNT() > 0);

					*/




				SELECT 
					t.Magazyn, m.Opis AS Nazwa, m.Symbol
					-- , m.*
				FROM `t_select_magazyny` t, `Magazyny` m
				WHERE
					m.IdnMagazynu = t.Magazyn
							--	AND uprawnienia !!!!
							--	AND pozabilansowy ???!!!
				;
			END IF;
			
			
			LEAVE SC_HT_M_Proc;
		END IF;
		
		
	
						IF _MODE LIKE 'WEB.MOB.SELECT.Rodzaje.OP.Do.Wystawienia%' THEN
							DROP TEMPORARY TABLE IF EXISTS `t_rodzaje_operacji_we`;
							CREATE TEMPORARY TABLE `t_rodzaje_operacji_we` (
							  `Rodzaj` INT(11) NOT NULL DEFAULT '0',
							  PRIMARY KEY Rodzaj(Rodzaj)
							)
							;	
							IF _Param_A = 'MAG' THEN
								INSERT IGNORE INTO `t_rodzaje_operacji_we`
								SELECT
									od.Rodzaj
								FROM `operdoc` od
								WHERE
									TRUE
									AND
										IF(_Param_A = 'MAG', 
											od.grupa = 2 AND od.Rodzaj IN (9, 10, 11, 12, 13) 
                                                AND IF(@session.globals.Owner = 'CRIST', od.Rodzaj NOT IN (13), TRUE),
											IF(_Param_A IN (0, 1, 2, 7), 
												od.grupa = _Param_A,
												FALSE
											)
										)
								;
							END IF;
							
							IF _Param_A IN ('Realizacja.Zlec', 'Realizacja.Zam') and @session.globals.Owner <>'WEGA' THEN
								SET @.zam.Rodzaj = NULL, @.realiz.Rodzaj2 = NULL, @.realiz.Rodzaj_Kontrah = NULL;
								SELECT
									n.Rodzaj, n.Rodzaj2, IFNULL(k.Rodzaj2, n.Rodzaj2) AS Rodzaj_Kontrah
								INTO
									@.zam.Rodzaj, @.realiz.Rodzaj2, @.realiz.Rodzaj_Kontrah
								FROM `zmng` n 
								LEFT JOIN `kontrah` k ON k.GUID = n.KontrGUID
								WHERE
									n.GUID = _GUID
								;
								IF @.zam.Rodzaj = 73 THEN
								--	zlecenie produkcyjne
									INSERT IGNORE INTO `t_rodzaje_operacji_we`
									VALUES
									(11),(13)
									;
								ELSEIF FALSE THEN --	UWAGA!!!!! tutaj jakis warunek
									INSERT IGNORE INTO `t_rodzaje_operacji_we`
									SET Rodzaj = @.realiz.Rodzaj2
									;
								ELSE 
									INSERT IGNORE INTO `t_rodzaje_operacji_we`
									VALUES
									(@.realiz.Rodzaj2),(@.realiz.Rodzaj_Kontrah)
									;
									INSERT IGNORE INTO `t_rodzaje_operacji_we`
									SET Rodzaj = 
										IF(@.zam.Rodzaj IN (27, 52),
											10,
											IF(@.zam.Rodzaj IN (28, 7),
												12,
												-1
											)
										)
									;
								END IF;
								-- SELECT @.realiz.Rodzaj, @.realiz.Rodzaj2, @.realiz.Rodzaj_Kontrah;
							END IF;
							
							
							IF _Param_A IN ('Realizacja.Zlec')  and @session.globals.Owner ='WEGA'  THEN 
							
								SET @.zam.Rodzaj = NULL, @.realiz.Rodzaj2 = NULL, @.realiz.Rodzaj_Kontrah = NULL;
								SELECT
									n.Rodzaj,n.Rodzaj2, IFNULL(k.Rodzaj2, n.Rodzaj2) AS Rodzaj_Kontrah
								INTO
									@.zam.Rodzaj, @.realiz.Rodzaj2, @.realiz.Rodzaj_Kontrah
								FROM `zmng` n 
								LEFT JOIN `kontrah` k ON k.GUID = n.KontrGUID
								WHERE
									n.GUID = _GUID 
								;
								
								IF @.zam.Rodzaj IN (73) THEN 
						
									INSERT IGNORE INTO `t_rodzaje_operacji_we`
									VALUES
									(11),(13)
									;
								END IF;		
							
								
								INSERT IGNORE INTO `t_rodzaje_operacji_we`
									SET Rodzaj = 
										IF(@.zam.Rodzaj IN (27, 52),
											10,
											IF(@.zam.Rodzaj IN (28, 7),
												12,
												-1
											)
										)
									;
							END IF;
							
						END IF;
						
						
	
						IF _MODE LIKE 'WEB.MOB.SELECT.Rodzaje.OP.Do.WystawieniaXXXXXXXXXXXXXXXX WON WON %' THEN
						--	Dodaj uprawnienia !!!!!!!!
						--	W _Param_A szukana fraza czyli 'MAG' lub OpTyp Magazynowe, inne
							IF _Param_A = 'MAG' THEN
								SELECT
									od.Rodzaj,
								-- _VarInt(@_Param_A),@_Param_A IN (0, 1, 2, 7),
									od.Nazwa AS Descr_Short,
									od.Opis AS Descr_Long,
									"#909152" AS Color_BG, "#ffffff" AS Color_FG
								FROM `operdoc` od
								WHERE
									TRUE
									AND
										IF(_Param_A = 'MAG', 
											od.grupa = 2 AND od.Rodzaj IN (9, 10, 11, 12, 13),
											IF(@_Param_A IN (0, 1, 2, 7), 
												od.grupa = _Param_A,
												FALSE
											)
										)
								;
							END IF;
							
							IF _Param_A = 'Realizacja.ZLEC' THEN
							--	w _GUID zlecenie
								SELECT
									-- n.Rodzaj,
									od.Rodzaj,
								-- _VarInt(@_Param_A),@_Param_A IN (0, 1, 2, 7),
									od.Nazwa AS Descr_Short,
									od.Opis AS Descr_Long,
									"#909152" AS Color_BG, "#ffffff" AS Color_FG
								FROM `zmng` n, `operdoc` od
								WHERE
									n.GUID = _GUID
									AND
									IF(n.Rodzaj IN (27, 52),
										od.Rodzaj = 10,
									IF(n.Rodzaj IN (28, 7),
										od.Rodzaj = 12,
									IF(n.Rodzaj IN (73),
										od.Rodzaj IN (11, 13),
										FALSE
									)
									)
									)
								;
								
							END IF;
						END IF;
						
						IF _MODE LIKE 'WEB.MOB.SELECT.ZAM.Do.Zrealizowania%' THEN
							SET @.min.TerminRealizacji = 
								IF(@session.globals.Owner IN ('MAXFORM'), 
									(CURRENT_DATE() - INTERVAL 50 WEEK),
									(CURRENT_DATE() - INTERVAL 1 WEEK)
								)
							;
						--	W _Param_A szukana fraza IDNa lub 'DD', lub 'OO'
							SET @_Scan_IDN = IF(_Param_A LIKE '#%', SUBSTR(_Param_A, 2, 255), _Param_A);
							SELECT
								n.GUID,
								n.Nrzamw,
								DATE(n.TerminRealizacji) AS TerminRealizacji,
								n.Rodzaj,
								CONCAT_WS(' ',
									n.`kontrsymbol`,
									-- k.Nazwa,
									CONCAT('(poz.do realiz. ', n.ilepoz - n.ilepozzreal, IF(n.ilepozzreal = 0, ')', CONCAT(' z ', n.ilepoz, ')'))),
									null -- n.Brutto
									
								) AS Descr_Short,
								CONCAT_WS('\n',
									CONCAT(od.Nazwa, ' z ', n.DataWystaw),
									CONCAT('nr: ', NULLIF(n.Nrzamw, '')),
									CONCAT('Realizacja dnia: ', n.TerminRealizacji),
									CONCAT('(poz.do realiz. ', n.ilepoz - n.ilepozzreal, IF(n.ilepozzreal = 0, ')', CONCAT(' z ', n.ilepoz, ')'))),
									CONCAT('Brutto: ', n.Brutto),
									CONCAT('Mag. (', IFNULL(m1.Opis, ''), ' -> ', IFNULL(m2.Opis, ''), ')'),
									CONCAT('Kontr.: ', NULLIF(n.kontrSymbol, '')),
									k.Nazwa,
									''
								) 
								AS Descr_Long,
							--	Rodzaj_Realizacji	
								CASE
									WHEN n.Rodzaj IN (27, 52) THEN '10'	--	WZ ka dla OO
									WHEN n.Rodzaj IN (28, 74) THEN '12'	--	PZ ka dla DD
									WHEN n.Rodzaj IN (73) AND _Param_A = 'ZLEC.RW' THEN '11'		--	RW ka dla DD
									WHEN n.Rodzaj IN (73) AND _Param_A = 'ZLEC.PW' THEN '13'	--	PW ka dla DD
									WHEN n.Rodzaj IN (73) THEN '11,13'		--	RW ka dla DD
									ELSE 10
								END 
								AS Rodzaj_Realizacji,
								CURRENT_DATE() AS Data_Realizacji
							FROM `zmng` n
							LEFT JOIN `kontrah` k ON k.GUID = n.KontrGUID
							INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
							LEFT JOIN `Magazyny` m1 ON m1.IdnMagazynu = n.IdnMagazyn
							LEFT JOIN `Magazyny` m2 ON m2.IdnMagazynu = n.MagazynWys
							WHERE
								IF(_Param_A LIKE '#%',
									n.IDN = @_Scan_IDN,
									(
									--	n.TerminRealizacji > (CURRENT_DATE() - INTERVAL 1 WEEK)
									n.TerminRealizacji > @.min.TerminRealizacji
									AND n.ilepoz > n.ilepozzreal
									AND n.Deleted = 0
									-- AND NOT n.Zrealizowane
									AND
										IF(_Param_A = 'OO', 
											n.Rodzaj IN (27, 52), 
											IF(_Param_A = 'DD',
												n.Rodzaj IN (28, 74), 
												IF(_Param_A = 'OF',
													n.Rodzaj IN (87), 
													IF(_Param_A IN ('ZLEC.RW', 'ZLEC.PW'),
														n.Rodzaj IN (73), 
														FALSE
													)
												)
											)		
										)
									)
								)
							;	
						END IF;

						IF _MODE LIKE 'WEB.MOB.SELECT.Magazyny.For%' THEN
						--	Zwracam liste magazynów z odp. uprawnieniami dla...
						--	rodzaju i lub kontekstu np. zlecenia produkcyjnego (GUID)
							DROP TEMPORARY TABLE IF EXISTS `t_select_magazyny`;
							CREATE TEMPORARY TABLE `t_select_magazyny` (
							  `Magazyn` INT(11) NOT NULL DEFAULT 0,
							  `Nazwa` VARCHAR(50) DEFAULT NULL,
							  PRIMARY KEY (`Magazyn`)
							)
							;
						--	dla rodzaju w _Param_A ...
							SET @_in_Rodzaj = _Param_A;
							IF _MODE = 'WEB.MOB.SELECT.Magazyny.For.Rodzaj' THEN
								INSERT IGNORE INTO `t_select_magazyny`
								SELECT
									m.IdnMagazynu AS Magazyn, m.Opis AS Nazwa 
								FROM `Magazyny` m
								WHERE
									TRUE
									--	uprawnienia !!!!
								;
								(
								SELECT 
									'->' AS Kierunek, 
									-- m.IdnMagazynu AS Magazyn, m.Opis AS Nazwa 
									m.Magazyn, m.Nazwa 
									,od.magtyp 
								-- FROM `Magazyny` m, `operdoc` od
								FROM `t_select_magazyny` m, `operdoc` od
								WHERE
									od.Rodzaj = _Param_A
									AND od.`MA_Magzyny`
									AND od.magtyp IN (1, 2)
								)
								UNION
								(
								SELECT 
									'<-' AS Kierunek, 
									-- m.IdnMagazynu AS Magazyn, m.Opis AS Nazwa 
									m.Magazyn, m.Nazwa 
									,od.magtyp 
								-- FROM `Magazyny` m, `operdoc` od
								FROM `t_select_magazyny` m, `operdoc` od
								WHERE
									od.Rodzaj = _Param_A
									AND od.`MA_Magzyny`
									AND od.magtyp IN (1, 0)
								)
								;
							END IF;
						--	dla realizacji Zlecenia (GUID)...
							IF _MODE = 'WEB.MOB.SELECT.Magazyny.For.Realizacja.Zlec' THEN
								INSERT IGNORE INTO `t_select_magazyny`
								SELECT 
									m.IdnMagazynu AS Magazyn, m.Opis AS Nazwa
									-- ,od.magtyp 
								FROM `zmng` n, `zmpo` p, `Magazyny` m, `operdoc` od
								WHERE
									n.GUID = _GUID
									AND p.IdnNg = n.`GUID`
									-- and p.Ilosc > p.Zrealizowano
									AND m.IdnMagazynu = p.MagazynWys
									AND od.Rodzaj = _Param_A
									AND od.`MA_Magzyny`
									AND od.magtyp = p.magtyp
								GROUP BY m.IdnMagazynu
								;
								IF ROW_COUNT() <= 0 THEN
									INSERT IGNORE INTO `t_select_magazyny`
									SELECT
										m.IdnMagazynu AS Magazyn, m.Opis AS Nazwa 
									FROM `Magazyny` m
									WHERE
										TRUE
										--	uprawnienia !!!!
									;
								END IF;
								
								SELECT 
									IF(od.magtyp IN (1, 2), '->', '<-') AS Kierunek, 
									-- m.IdnMagazynu AS Magazyn, m.Opis AS Nazwa 
									m.Magazyn, m.Nazwa 
									,od.magtyp 
								-- FROM `Magazyny` m, `operdoc` od
								FROM `t_select_magazyny` m, `operdoc` od
								WHERE
									od.Rodzaj = _Param_A
									AND od.`MA_Magzyny`
								;

							END IF;
						END IF;
						
						IF _MODE LIKE ('WEB.MOB.SCAN.Towar%') THEN
							SET
								@_Scan_IDN = IF(_Param_A LIKE '#%', SUBSTR(_Param_A, 2, 255), _Param_A),
								@_IdnTowr = '',
								@_Params = '',
								@.s.IdnTowr = NULL,
								@.s.towrsymb = NULL,
								@.s.towrnazwa = NULL,
                                @.s.TowarIdn = NULL
							;
										CALL _sys_app_logtxt('LOG.Session.Add', @SYSTEM.Client.Session.GUID, 'CMD', '', '', 'PHP', '', '', 
											CONCAT_WS(' / ',
												'Scan towaru ...',
												CONCAT_WS('', '_Param_A = "', _Param_A, '"'), 
												CONCAT_WS('', '_Scan_IDN = "', @_Scan_IDN, '"'), 
												CONCAT_WS('', 'IdnTowr = ', @_IdnTowr)
											)
										);			
									-- if @_Scan_IDN = '1' THEN SET @_Scan_IDN = '5813'; END IF;
							-- CALL C_Scan_Pack_KodPartii('SCANER.SCAN.Scan', @_Scan_IDN, @_IdnTowr, '', '', '', '', @_Params);	--	 na razie w _Params dajemy "" bo nie wszedze mamy nalepki a gdy <> "" to szukam takze Towaru
							CALL C_Scan_Pack_KodPartii('SCANER.SCAN.NEW', @_Scan_IDN, @_IdnTowr, '', '', '', '', @_Params);
										CALL _sys_app_logtxt('LOG.Session.Add', @SYSTEM.Client.Session.GUID, 'CMD', '', '', 'PHP', '', '', 
											CONCAT_WS(' / ',
												'Scan towaru ...',
												CONCAT_WS('', '_Param_A = "', _Param_A, '"'), 
												CONCAT_WS('', '_Scan_IDN = "', @_Scan_IDN, '"'), 
												CONCAT_WS('', 'IdnTowr = ', @.s.IdnTowr),
												CONCAT_WS('', 'towrsymb = ', @.s.towrsymb),
												CONCAT_WS('', 'towrnazwa = ', @.s.towrnazwa) 
											)
										);			
							IF @.s.IS_OK THEN
								SET
									@.M.GUID_dostawy = @.s.GUID_dostawy
								;
							ELSE
							--	O jej
								SET
									@.M.MSG := @.s.MSG,
									@.M.ERR := TRUE,
									@.M.GUID_dostawy = NULL
								;
								LEAVE SC_HT_M_Proc;
							END IF;
						
						END IF;
						
						/*
						ALIASY stare wywolanuia
						*/
						IF _MODE LIKE ('WEB.MOB.NEW%') THEN
						--	To ALIAS!!!!
							CALL C_HT_M_Proc('WEB.MOB.DOC.N.NEW', _IN_MODE, _FROM, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, (@._Params := _Params));
							LEAVE SC_HT_M_Proc;
						END IF;
					
						IF _MODE LIKE ('WEB.MOB.EDIT%') THEN
						--	To ALIAS!!!!
							CALL C_HT_M_Proc('WEB.MOB.DOC.N.EDIT', _IN_MODE, _FROM, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, (@._Params := _Params));
							LEAVE SC_HT_M_Proc;
						END IF;
						

	IF _MODE LIKE ('WEB.MOB.DOC.%') THEN
		IF _MODE LIKE ('WEB.MOB.DOC.SELECT%') THEN
		/*************************************************************************************************************************************************
		========================
			SELECTy
		========================
			CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT', '', 'OP', '', '', '', '', '', '', '', @Params);
			CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT', '', 'ZM', '', '', '', '', '', '', '', @Params);
			1 dokument IdnOper
			CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT.1.N', '->', 'OP', 'IdnOper', '', '', '', '', '', '', @Params);
			wszystkie pozycje dok. IdnOper
			CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT.1.N.n.P', '->', 'OP', 'IdnOper', 'GUID konieczny', '', '', '', '', '', @Params);
			1 pozycja dok. IdnOper
			CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT.1.N.1.P', '->', 'OP', 'IdnOper', 'GUID konieczny', '', '', '', '', '', @Params);
		*************************************************************************************************************************************************/
			IF _MODE IN ('WEB.MOB.DOC.SELECT.INW') THEN
				CALL C_Scan_Pack('WWW.Inwent.SELECT.Lista', '', '', '2014-03-10', '2016-06-20', '', '', '');	
				CALL C_Scan_Pack('WWW.Inwent.SELECT.Lista', 'DoZatw', '', '2014-03-10', '2016-06-20', '', '', '');	
				CALL C_Scan_Pack('WWW.Inwent.SELECT.Lista', 'Archiwum', '', '2014-03-10', '2016-06-20', '', '', '');	
				
			END IF;
			
			IF _MODE IN ('WEB.MOB.DOC.SELECT', 'WEB.MOB.DOC.SELECT.LAST') THEN
				-- SELECT 'ostatnie' as x;
				IF _FROM = 'OP' THEN
					DROP TEMPORARY TABLE IF EXISTS `t_select_opng`;
					SET @.SQL.TEXT =
					"
					CREATE TEMPORARY TABLE `t_select_opng`
					SELECT
						#Is_Lock# AS Is_Lock,
						n.IDN, n.GUID, 
						n.Rodzaj, n.Rodzaj_Typ,
						n.Tymczasowa,
						n.KontrGUID, n.KontrSymbol, n.KontrNazwa, n.ZMagazynu, n.DoMagazynu, n.AreaGUID, 
						n.katcol0, n.katcol1, n.katcol2, n.katcol3, n.katcol4, 
						n.ExtFlags,
						IF(IFNULL(n.IlePoz, 0) = 0 OR TRUE,	--	zawsze bierzmy z podzapytania
							(SELECT COUNT(*) FROM `#xxpo#` p WHERE p.IdnOper = n.GUID),
							n.IlePoz
						) AS IlePoz,
						n.Brutto,
						n.Create_AT,
						n.CreatorGUID,
						n.NrDokMag,
						n.NrDokFin,
						n.NrWewn, n.Datawystaw
						
					FROM `#xxng#` n 
					#LOCK JOIN#
					WHERE
						TRUE
						AND n.deleted=0
						AND n.zaksiegowana=0
						AND n.Datawystaw > (CURRENT_DATE() - INTERVAL 1 WEEK)
						AND n.Create_AT > (CURRENT_DATE() - INTERVAL 1 WEEK)
						AND #CREATE_AT#
						AND IFNULL(n.CreatorGUID, '') <> ''
						AND #CreatorGUID WHERE#
						AND #LOCK WHERE#
					;
					"
					;
				ELSE
					DROP TEMPORARY TABLE IF EXISTS `t_select_zmng`;
					SET @.SQL.TEXT =
					"
					CREATE TEMPORARY TABLE `t_select_zmng`
					SELECT
						#Is_Lock# AS Is_Lock,
						n.IDN, n.GUID, 
						n.Rodzaj, n.Rodzaj_Typ,
						n.Tymczasowa,
						n.KontrGUID, n.KontrSymbol, k.Nazwa AS KontrNazwa, n.IdnMagazyn, n.MagazynWys, n.AreaGUID,
						n.katcol0, n.katcol1, n.katcol2, n.katcol3, n.katcol4, 
						n.ExtFlags,
						IF(IFNULL(n.IlePoz, 0) = 0 OR TRUE,	--	zawsze bierzmy z podzapytania
							(SELECT COUNT(*) FROM `#xxpo#` p WHERE p.IdnNg = n.GUID),
							n.IlePoz
						) AS IlePoz,
						n.Brutto,
						n.Create_AT,
						n.CreatorGUID,
						n.nrzamw, n.nrzamwkontr, n.Datawystaw
						
					FROM `#xxng#` n 
					LEFT JOIN `kontrah` k ON k.GUID = n.KontrGUID
					#LOCK JOIN#
					WHERE
						TRUE
						AND n.Datawystaw > (CURRENT_DATE() - INTERVAL 1 WEEK)
						AND n.Create_AT > (CURRENT_DATE() - INTERVAL 1 WEEK)
						AND #CREATE_AT#
						AND IFNULL(n.CreatorGUID, '') <> ''
						AND #CreatorGUID WHERE#
						AND #LOCK WHERE#
					;
					"
					;
				END IF;	
					
				IF _MODE = 'WEB.MOB.DOC.SELECT' THEN
				--	select z swiata M
					SET @.SQL.TEXT = REPLACE(@.SQL.TEXT, '#CREATE_AT#', 'TRUE');
					SET @.SQL.TEXT = REPLACE(@.SQL.TEXT, '#LOCK JOIN#', '');
					SET @.SQL.TEXT = REPLACE(@.SQL.TEXT, '#Is_Lock#', 'FALSE');
					SET @.SQL.TEXT = REPLACE(@.SQL.TEXT, '#LOCK WHERE#', 'TRUE');
				ELSE
				--	swiat realny R
					SET @.SQL.TEXT = REPLACE(@.SQL.TEXT, '#CREATE_AT#', '(n.Datawystaw >= CURRENT_DATE() - INTERVAL 1 DAY AND n.Create_AT > (CURRENT_TIME() - INTERVAL 8 HOUR))');
					SET @.SQL.TEXT = REPLACE(@.SQL.TEXT, '#LOCK JOIN#', 
						'LEFT JOIN `_sys_locks` lck ON lck.Rec_ID = n.GUID AND lck.Rec_TableName = ''#M_xxng#'' LEFT JOIN `_sys_db_logons` ss ON ss.GUID = lck.LockSession');
					SET @.SQL.TEXT = REPLACE(@.SQL.TEXT, '#Is_Lock#', 'IFNULL((ss.log_USER_GUID <> @session.INFO.User_GUID), FALSE)');
					SET @.SQL.TEXT = REPLACE(@.SQL.TEXT, '#LOCK WHERE#', 'NOT EXISTS(SELECT m.GUID FROM `#M_xxng#` m WHERE m.GUID = n.GUID)');
				END IF;
				
				SET @.SQL.TEXT = REPLACE(@.SQL.TEXT, '#CreatorGUID WHERE#', 'n.CreatorGUID = @session.INFO.User_GUID');
				CALL _ExecuteCmd_xxNgPo('', _FROM, IF(_MODE = 'WEB.MOB.DOC.SELECT', 'M', 'R'), 'xxx', '', '', '', '', '', @.SQL.TEXT);
					-- SELECT @.SQL.TEXT;
					-- SELECT FROM `t_select_opng` n 
				IF _FROM = 'OP' THEN
					SELECT
						n.Is_Lock,
						n.IDN, n.GUID, 
						n.Rodzaj, n.Rodzaj_Typ,
						n.Tymczasowa,
						n.KontrGUID, n.KontrSymbol, n.KontrNazwa, n.ZMagazynu, n.DoMagazynu, n.AreaGUID, 
						n.katcol0, n.katcol1, n.katcol2, n.katcol3, n.katcol4, 
						n.ExtFlags,
						n.IlePoz,
						n.Brutto,
						n.Create_AT,
						n.CreatorGUID,
						CONCAT_WS('\n',
							CONCAT(od.Nazwa, ':'),
							IF(od.Grupa = 2,
								NULLIF(n.Nrdokmag, ''),
								NULLIF(n.Nrdokfin, '')
							),
							n.Datawystaw,
							NULLIF(LEFT(CONCAT_WS(' - ', NULLIF(n.kontrSymbol, ''), NULLIF(n.kontrnazwa, '')), 20), '')
						) 
						AS Descr_Short,
						CONCAT_WS('\n',
							CONCAT(od.Nazwa, ''),
							CONCAT('nr mag: ', NULLIF(n.NrDokMag, '')),
							CONCAT('nr fin: ', NULLIF(n.NrDokFin, '')),
							-- CONCAT('nr mag: ', NULLIF(n.NrWewn, '')),
							CONCAT('Mag. (', IFNULL(m1.Opis, ''), ' -> ', IFNULL(m2.Opis, ''), ')'),
							CONCAT('Kontr.: ', NULLIF(n.kontrSymbol, '')),
							n.kontrnazwa,
							CONCAT('(wyst.: ', n.Create_at, ')'),
							''
						) 
						AS Descr_Long,
						-- było (_ExtFlags('GET.Text', n.ExtFlags, '(ZM->MAG:SCAN)', '', '') = '(ZM->MAG:SCAN)') AS Is_ZM_to_MAG_Scan
						-- (n.ExtFlags LIKE '%<Realizacja.ZM>%'  AND n.ExtFlags LIKE '%<SCAN.PACK>%') AS Is_ZM_to_MAG_Scan
						(n.ExtFlags LIKE '%<SCAN.PACK>%') AS Is_ZM_to_MAG_Scan
						
					FROM `t_select_opng` n 
					INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
					LEFT JOIN `Magazyny` m1 ON m1.IdnMagazynu = n.ZMagazynu
					LEFT JOIN `Magazyny` m2 ON m2.IdnMagazynu = n.DoMagazynu
					WHERE
						TRUE
					;
				ELSE
					SELECT
						n.Is_Lock,
						n.*
					FROM `t_select_zmng` n
					WHERE
						TRUE
					;
				END IF;
				LEAVE SC_HT_M_Proc;
			END IF;
			
			IF _MODE LIKE 'WEB.MOB.DOC.SELECT.1.N' THEN
				IF _FROM = 'OP' THEN
					SELECT
						n.IDN, n.GUID, 
						n.Rodzaj, n.Rodzaj_Typ,
						n.Tymczasowa,
						n.KontrGUID, n.KontrSymbol, n.KontrNazwa, n.ZMagazynu, n.DoMagazynu, n.AreaGUID, 
						n.katcol0, n.katcol1, n.katcol2, n.katcol3, n.katcol4, 
						n.ExtFlags,
						n.IlePoz,
						n.Brutto,
						n.Create_AT,
						n.CreatorGUID,
						CONCAT_WS(' ',
							CONCAT(od.Nazwa, ':'),
							IF(od.Grupa = 2,
								NULLIF(n.Nrdokmag, ''),
								NULLIF(n.Nrdokfin, '')
							),
							n.kontrSymbol,
							n.kontrnazwa,
							''
						) 
						AS Descr_Short,
						CONCAT_WS('\n',
							CONCAT(od.Nazwa, ''),
							CONCAT('nr mag: ', NULLIF(n.NrDokMag, '')),
							CONCAT('nr fin: ', NULLIF(n.NrDokFin, '')),
							-- CONCAT('nr mag: ', NULLIF(n.NrWewn, '')),
							CONCAT('Mag. (', IFNULL(m1.Opis, ''), ' -> ', IFNULL(m2.Opis, ''), ')'),
							CONCAT('Kontr.: ', NULLIF(n.kontrSymbol, '')),
							n.kontrnazwa,
							CONCAT('(wyst.: ', n.Create_at, ')'),
							''
						) 
						AS Descr_Long
						
					FROM `opng_m` n
					INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
					LEFT JOIN `Magazyny` m1 ON m1.IdnMagazynu = n.ZMagazynu
					LEFT JOIN `Magazyny` m2 ON m2.IdnMagazynu = n.DoMagazynu
					WHERE
						n.GUID = _IdnOper
					;
				ELSE
					SELECT
						n.IDN, n.GUID, 
						n.Rodzaj, n.Rodzaj_Typ,
						n.Tymczasowa,
						n.KontrGUID, n.KontrSymbol, k.Nazwa AS KontrNazwa, n.IdnMagazyn, n.MagazynWys, n.AreaGUID, 
						n.katcol0, n.katcol1, n.katcol2, n.katcol3, n.katcol4, 
						n.ExtFlags,
						n.IlePoz,
						n.Brutto,
						n.Create_AT
					FROM `zmng_m` n
					LEFT JOIN `kontrah` k ON k.GUID = n.KontrGUID
					WHERE
						n.GUID = _IdnOper
					;
				END IF;
			END IF;
			
			IF _MODE LIKE 'WEB.MOB.DOC.SELECT.1.N.%.P' THEN
			--	SPR czy to nie inwentaryzacja !!!!!!!!!!!!!!	
			set @mrowie = '1';
				IF _FROM = 'OP' THEN
				
			set @mrowie = '1.1';
					SELECT
						p.IDN, p.GUID, p.IdnTowr, p.Ilosc, p.Spakowano, p.IloscDo, 
						IFNULL(p.GUIDZM <> '', FALSE) AS Is_Poz_do_ZM,
						p.TowrSymb, p.TowrNazwa, p.towrnazwa2, p.kat0, p.ExtFlags, p.WartNet,
						(@.Typ_poz :=
						-- IF(@.Is_ZM_to_MAG_Scan := IFNULL((_ExtFlags('GET.Text', n.ExtFlags, '(ZM->MAG:SCAN)', '', '') = '(ZM->MAG:SCAN)'), FALSE),
						IF(@.Is_ZM_to_MAG_Scan := IFNULL((n.ExtFlags LIKE '%<SCAN.PACK>%'), FALSE),
							'ZM->MAG',
							IF(n.Rodzaj = 39,
								IF(n.Rodzaj_typ = 0,
									'INW.Pelna',	--	Pełna od sciany do sciany
									'INW.Lista'		--	Z listą
								),
								''
							)
						)	
						) AS Typ_poz,
						_VarInt(@.Status_Poz := 
						-- IF(@.Is_ZM_to_MAG_Scan := IFNULL((_ExtFlags('GET.Text', n.ExtFlags, '(ZM->MAG:SCAN)', '', '') = '(ZM->MAG:SCAN)'), FALSE),
						IF(@.Is_ZM_to_MAG_Scan,
						--	gdy Is_ZM_to_MAG_Scan = TRUE
							IF((IFNULL(p.GUIDZM, '') = ''),
								100,	--	owszem ralizujemy zam. ale ta pozycja jest dodana poza zam. (zwykla) zatem uznajemy ja za 100
								IF(p.Ilosc >= p.IloscDo,
									100,
									IF(p.Ilosc = 0,
										0,
										50
									)
								)
							),
							IF(@.Typ_poz LIKE 'INW%',
								IF(p.Rodzaj_typ = 0,
								--	Pełna od sciany do sciany
									50,		--	jesli w ogole widoczna jest pozycja (w pełnej) to oznacza ze jest w trakcie czyli 50 
								--	Lista inwent.
									IF(p.exported = 0, 
										IF(p.Spakowano = 0, 
											0, 
											50
										), 
										100
									) --	dla listy jest 50 lub 100
								),
								0
							)
						)
						) AS Status_Poz,
						_VarStr(
						IF(@.Is_ZM_to_MAG_Scan,
						--	gdy Is_ZM_to_MAG_Scan = TRUE
							_VarStr(LPAD(@.Status_Poz*1, 3, '.')),
							_VarStr(LPAD(@.Status_Poz*1, 3, '.'))
						)
						) AS Status_Poz_Str,
						/* było
						IF(@.Is_ZM_to_MAG_Scan AND (IFNULL(p.GUIDZM, '') != ''),
							CONCAT(
								_DisplayFmt_PL(p.Ilosc, 2, TRUE, ' '), 
								' / ', 
								_DisplayFmt_PL(p.IloscDo, 2, TRUE, ' '), 
								' ', 
								IFNULL(j.Nazwa, '')
							),
							CONCAT(
								IF(@.Typ_poz LIKE 'INW%',								
									_DisplayFmt_PL(p.Spakowano, 2, TRUE, ' '), 
									_DisplayFmt_PL(p.Ilosc, 2, TRUE, ' ')
								),
								' ', 
								IFNULL(j.Nazwa, '')
							)
						) AS Ilosc_str,
						*/
						CONCAT_WS(' ',	
							IF(@.Is_ZM_to_MAG_Scan AND (IFNULL(p.GUIDZM, '') != ''),
								CONCAT_WS(' / ',
									_DisplayFmt_PL(p.Ilosc, 2, TRUE, ' '), 
									_DisplayFmt_PL(p.IloscDo, 2, TRUE, ' ') 
								),
								IF(@.Typ_poz LIKE 'INW%',								
									_DisplayFmt_PL(p.Spakowano, 2, TRUE, ' '), 
									_DisplayFmt_PL(p.Ilosc, 2, TRUE, ' ')
								)
							),
							_VarStr(j.Nazwa)
						) AS Ilosc_str,
						
						p.exported,
						t.lokalizacja1,
						tp.Ilosc AS Ilosc_w_Mag,
						IF(IFNULL(tp.Ilosc = 0, TRUE), 'brak w mag.', CONCAT_WS(' ', 'w mag.:', _DisplayFmt_PL(tp.Ilosc, 2, TRUE, ' '))) AS Ilosc_w_Mag_Str, 
						IFNULL(j.Nazwa, '') AS JednostkaStr,
						_VarStr(p.LocalTime) AS `LocalTime`
						
					FROM `oppo_m` p
					LEFT JOIN `opng_m` n ON n.GUID = _IdnOper
					LEFT JOIN `operdoc` od ON od.rodzaj = n.Rodzaj
					LEFT JOIN `TowrNg` t ON t.GUID = p.IdnTowr
					-- LEFT JOIN `TowrPo` tp ON tp.IdnTowr = p.IdnTowr AND tp.Magazyn = GREATEST(p.ZMagazynu, p.DoMagazynu)
					LEFT JOIN `TowrPo` tp ON tp.IdnTowr = p.IdnTowr AND tp.Magazyn =_Get_Mag('pRZ', 'OP', n.Rodzaj, od.MagTyp, n.Zmagazynu, n.Domagazynu, p.Zmagazynu, p.Domagazynu, '', '', '')
					LEFT JOIN `Jednostki` j ON j.Idn = IFNULL(p.jednostka, t.jednostka)

					WHERE
						p.IdnOper = _IdnOper
						AND 
						IF(_MODE = 'WEB.MOB.DOC.SELECT.1.N.1.P', 
							p.GUID = _GUID, 
							IF(_MODE = 'WEB.MOB.DOC.SELECT.1.N.Towr.P', 
								p.IdnTowr = _Param_A, 
								IF(_MODE = 'WEB.MOB.DOC.SELECT.1.N.DoRealizacji < 100.P', 
									p.Ilosc < p.IloscDo, 
									IF(_MODE = 'WEB.MOB.DOC.SELECT.1.N.DoRealizacji > 0.P', 
										p.Ilosc > 0, 
										IF(_MODE = 'WEB.MOB.DOC.SELECT.1.N.INW.P', 
											IF(p.Rodzaj_typ = 0,
											--	Pełna od sciany do sciany
												p.transza_zamow = 0 AND p.exported <> 0, --  p.Spakowano > 0,
												p.transza_zamow = 0
											),
											TRUE
										)
									)
								)	
							)
						)

					-- było a z powodu AXIS ... ORDER BY p.IDN
					ORDER BY p.LocalTime
					;
			set @mrowie = '1.2';
				ELSE
					SELECT
						p.IDN, p.GUID, p.IdnTowr, p.Ilosc, p.Spakowano, p.Zlecono, p.TowrSymb, p.TowrNazwa, p.towrnazwa2, p.kat0, p.ExtFlags,
						_VarInt(@.Status_Poz := 
							0	
						) AS Status_Poz,
						_VarStr(
						(
							'0'	
						)
						) AS Status_Poz_Str,
						CONCAT_WS(' ',	
							_DisplayFmt_PL(p.Ilosc, 2, TRUE, ' '),
							_VarStr(j.Nazwa)
						) AS Ilosc_str,
						tp.Ilosc AS Ilosc_w_Mag,
						IF(IFNULL(tp.Ilosc = 0, TRUE), 'brak w mag.', CONCAT_WS(' ', 'w mag.:', _DisplayFmt_PL(tp.Ilosc, 2, TRUE, ' '))) AS Ilosc_w_Mag_Str, 
						IFNULL(j.Nazwa, '') AS JednostkaStr,
						_VarStr(p.LocalTime) AS `LocalTime`
					FROM `zmpo_m` p
					LEFT JOIN `TowrNg` t ON t.GUID = p.IdnTowr
					LEFT JOIN `TowrPo` tp ON tp.IdnTowr = p.IdnTowr AND tp.Magazyn = p.MagazynWys
					LEFT JOIN `Jednostki` j ON j.Idn = IFNULL(p.jednostka, t.jednostka)
					WHERE
						p.IdnNg = _IdnOper
						AND 
						IF(_MODE = 'WEB.MOB.DOC.SELECT.1.N.1.P', 
							p.GUID = _GUID, 
							TRUE
						)
					ORDER BY p.IDN
					-- na razie - potem byc moze ORDER BY p.LocalTime
					;
				END IF;
				
			END IF;
			
		END IF;
		
	/*************************************************************************************************************************************************
		Nowe/Edycja/Reedycja dokumentów np. zamówień  
		CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT.P', '->', 'OP', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '', '', @Params);
		CALL C_HT_M_Proc('WEB.MOB.DOC.INIT.NEW', '', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '', '', @Params);
	*************************************************************************************************************************************************/
		IF _MODE LIKE ('WEB.MOB.DOC.N.%')THEN
		/*************************************************************************************************************************************************
		========================
			NAGLOWEK dokumentu
		========================
			Wstawianie
				CALL C_HT_M_Proc('WEB.MOB.DOC.N.NEW', '', 'ZM', 'IdnOper', 'GUID or pusty', '', '', '', '', '', @Params);
				CALL C_HT_M_Proc('WEB.MOB.DOC.N.NEW', '', 'OP', 'IdnOper', 'GUID or pusty', '', '', '', '', '', @Params);
				@Params sa dane ale...mozna wprost podac
				CALL C_HT_M_Proc('WEB.MOB.DOC.N.NEW', '', 'OP', 'IdnOper', '', '', '', '', '', '', @Params);
			Edycja
				CALL C_HT_M_Proc('WEB.MOB.DOC.N.EDIT', '', 'OP', 'IdnOper', '', '', '', '', '', '', @Params);
				mozna w params lub w wprost
			Usuwanie
				CALL C_HT_M_Proc('WEB.MOB.DOC.N.DELETE', '', 'OP', 'IdnOper', 'GUID konieczny', '', '', '', '', '', @Params);
			ZAPIS całości
			CALL C_HT_M_Proc('WEB.MOB.DOC.N.APPLY', '', 'OP', 'IdnOper', '', '', '', '', '', '', @Params);
			ANULUJ całość
			CALL C_HT_M_Proc('WEB.MOB.DOC.N.CANCEL', '', 'OP', 'IdnOper', '', '', '', '', '', '', @Params);
		*************************************************************************************************************************************************/
		
			SET 
				@.M.MSG := 'OK',
				@.M.ERR := FALSE,
				@.M.ERR_TYPE := '',
				@.WEB.MOB.DOC.NP.WHAT = 
				CASE
					WHEN _MODE LIKE ('WEB.MOB.DOC.N.INS%') OR _MODE LIKE ('WEB.MOB.DOC.N.NEW%') THEN 'INS'
					WHEN _MODE LIKE ('WEB.MOB.DOC.N.DEL%') OR _MODE LIKE ('WEB.MOB.DOC.N.DELETE%') THEN 'DEL'
					WHEN _MODE LIKE ('WEB.MOB.DOC.N.EDIT%') THEN 'EDIT'
					WHEN _MODE LIKE ('WEB.MOB.DOC.N.SELECT%') THEN 'SELECT'
					WHEN _MODE LIKE ('WEB.MOB.DOC.N.APPLY%') THEN 'APPLY'
					WHEN _MODE LIKE ('WEB.MOB.DOC.N.CANCEL%') THEN 'CANCEL'
					WHEN _MODE LIKE ('WEB.MOB.DOC.N.POST%') THEN 'POST'
				END
			;
		
			
			-- IF _MODE LIKE ('WEB.MOB.DOC.N.NEW%') THEN
			IF @.WEB.MOB.DOC.NP.WHAT = 'INS' THEN
		--	Najpierw gdy nowy to sprawdz _IdnOper
				SET
					_IdnOper = (@N.GUID := IFNULL(NULLIF(_IdnOper, ''), _Get_GUID_xxx('M.n.GUID', _FROM, '', '', '', '', '')))
				;
				/*	było ... teraz nowe blokady czyli CALL _lcks(..)
				SET @.m.LOCK.OK = _sys_locks_do('LOCK', _IdnOper, IF(_FROM = 'OP', 'opng_m', 'zmng_m'), 'EDYCJA', @SYSTEM.Client.Session.GUID, '', '', '');
				*/
				/*	jmam 22 III 2024 afera AXIS!!!
				CALL _lcks('LOCK', @.m.LOCK.OK, '', _IdnOper, 'EDIT', IF(_FROM = 'OP', 'opng_m', 'zmng_m'), 3600*8, '', 0, '<MSG>');
				*/
					SET @.m.LOCK.OK = TRUE;
				IF @.m.LOCK.OK THEN
				--	Gdy jest OK ... nie jest zablokowany
				
					IF _IN_MODE LIKE 'Realizacja.ZM.%' THEN
						CALL _ZM_Update_Realizacja('UPDATE.for.zmng', _GUID, '', '');
					END IF;
								IF IFNULL(@SYSTEM.Client.Session.GUID, '') != '' THEN
									IF IFNULL(@SYSTEM.Client.Session.log_USER_GUID, '') = '' THEN
										CALL _sys_app_logtxt('LOG.Session.Add', @SYSTEM.Client.Session.GUID, 'CMD', '', '', 'PHP', '', '', 'Sesja OK - Ale nie USER!!! TEST TS + jmam ... ');			
									ELSE
										CALL _sys_app_logtxt('LOG.Session.Add', @SYSTEM.Client.Session.GUID, 'CMD', '', '', 'PHP', '', '', 
											CONCAT_WS(' / ',
												'Sesja OK !!! ... ',
												CONCAT_WS(':', 'SID = ', @SYSTEM.Client.Session.GUID), 
												CONCAT_WS(':', 'UID = ', @SYSTEM.Client.Session.log_USER_GUID),
												CONCAT_WS(':', 'Creator = ', @.DEST.CreatorGUID) 
											)
										);			
									END IF;	
								ELSE
									CALL _sys_app_logtxt('LOG.Session.Add', 'CON:20240117.093232:345510', 'CMD', '', '', 'PHP', '', '', 'BRAK SESJI!!! TEST TS + jmam ... ');
								END IF;	
                    SET @._Params := _Params;
					CALL C_HT_OPZM('INIT.NEW', _IN_MODE, _FROM, 'M', _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, (@._Params := _Params));
					CALL C_HT_OPZM('START', '', _FROM, 'M', _IdnOper, '', '', '', '' ,'', '');
					IF _IN_MODE LIKE 'Realizacja.ZM.%' THEN
					--	Realizujemy skanerem/urz.mobilnym zamowienie - w ilosci musimy mieć wstepnie ZERo a mamy ilosc do realizacji zatem
					--	musimy Ilosc wyzerować a ilosc do realizacji w celach kontrolnych dać do iloscdo
						UPDATE `oppo_m` p
						SET
							p.IloscDo = p.Ilosc,
							p.Ilosc = 0
						WHERE
							p.IdnOper = _IdnOper
						;
						UPDATE `opng_m` n
						SET
							-- było n.ExtFlags = _ExtFlags('ADD.Text', n.ExtFlags, '(ZM->MAG:SCAN)', '', '')
							n.ExtFlags = _ExtFlags('ADD', _ExtFlags('ADD.Text', @ef, '(ZM->MAG:SCAN)', '', ''), 'SCAN.PACK', '', '')
						WHERE
							n.GUID = _IdnOper
						;
					END IF;
                    IF @session.globals.Owner IN ('MARINE') THEN
                    --  Uwagi przekazujemy
                        SET @.DEST.Uwagi = NULLIF(_Params2('_FetchParams', '', @._Params, 'Uwagi', ''), '');
                        UPDATE `opng_m` n
                        SET
                            n.Uwagi = @.DEST.Uwagi
                        WHERE
                            n.GUID = _IdnOper
                        ;
                    END IF;
                    
				ELSE
				--	rekord jest zablokowany
					/*	było ... teraz nowe czyli CALL _lcks(..)
					SET @.M.MSG := 'Zablokowany rekord', @.M.ERR := TRUE;
					*/
					SET @.M.MSG := @.LCK.Result.Msg, @.M.ERR := TRUE;
				END IF;
				SET _IN_MODE = CONCAT_WS('.', 
					_IN_MODE, 
					'SELECT'
				);
			END IF;
			
			IF @.WEB.MOB.DOC.NP.WHAT IN ('EDIT') THEN
				/*
				dawne
				IF @.WEB.MOB.DOC.NP.WHAT = 'EDIT' THEN
					IF _FROM = 'OP' THEN
						CALL C_HT_M_Proc('Set.Tymczasowa', '1', 'OP', _IdnOper, '', '', '', '', '', '', '');	-- zatymczasowienie
					END IF;
				END IF;
				*/
				/*	było ... teraz nowe blokady czyli CALL _lcks(..)
				SET @.m.LOCK.OK = _sys_locks_do('LOCK', _IdnOper, IF(_FROM = 'OP', 'opng_m', 'zmng_m'), 'EDYCJA', @SYSTEM.Client.Session.GUID, '', '', '');
				*/
				/*	jmam 22 III 2024 afera AXIS!!!
				CALL _lcks('LOCK', @.m.LOCK.OK, '', _IdnOper, 'EDIT', IF(_FROM = 'OP', 'opng_m', 'zmng_m'), 3600*8, '', 0, '<MSG>');
				*/
					SET @.m.LOCK.OK = TRUE;
				IF @.m.LOCK.OK THEN
				--	Gdy jest OK ... nie jest zablokowany
				--	do @.m.rec.Exists daj inf. czy rekord istnieje w M	
					SET @.SQL.TEXT = "SET @.m.rec.Exists = EXISTS(SELECT n.GUID FROM `#xxng#` n WHERE n.GUID = #_IdnOper#);";
					CALL _ExecuteCmd_xxNgPo('', _FROM, 'M', _IdnOper, '', '', '', '', '', @.SQL.TEXT);
					
					IF NOT @.m.rec.Exists THEN
						CALL C_HT_OPZM('INIT.EDIT', _IN_MODE, _FROM, 'M', _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, (@._Params := _Params));
						CALL C_HT_OPZM('START', '', _FROM, 'M', _IdnOper, '', '', '', '' ,'', '');
					END IF;
					
					IF _IN_MODE LIKE '%INWENTARYZACJA%' THEN
					--	wchodzimy w inwentaryzacje	
						SET @X = '';
					END IF;
					
				ELSE
				--	rekord jest zablokowany
					/*	było ... teraz nowe czyli CALL _lcks(..)
					SET 
						@.M.ERR := 1,
						@.M.MSG := 'Zablokowany rekord'
					;
					*/
					SET @.M.MSG := @.LCK.Result.Msg, @.M.ERR := TRUE;
				END IF;
				
				SET 
					_IN_MODE = CONCAT_WS('.', 
						_IN_MODE, 
						'SELECT'
				);
			END IF;
			
			IF @.WEB.MOB.DOC.NP.WHAT IN ('POST') THEN
				SET _IN_MODE = CONCAT_WS('.', 
					_IN_MODE, 
					@.WEB.MOB.DOC.NP.WHAT,
					'POST'
				);
				set @_IN_MODE = _IN_MODE;
			END IF;

		--	UWAGA APPLY 
			IF @.WEB.MOB.DOC.NP.WHAT IN ('APPLY') THEN
				SET _IN_MODE = CONCAT_WS('.', 
					_IN_MODE, 
					@.WEB.MOB.DOC.NP.WHAT,
					'Ceny',
					'SAVE',
					'POST',
					'APPLY',
					'SELECT'
				);
				set @_IN_MODE = _IN_MODE;
			END IF;

		--	UWAGA CANCEL 
			IF @.WEB.MOB.DOC.NP.WHAT IN ('CANCEL') THEN
				SET _IN_MODE = CONCAT_WS('.', 
					_IN_MODE, 
					@.WEB.MOB.DOC.NP.WHAT,
					'SELECT',
					'CLEAR',
					'SELECT'
				);
			--	m.innyi Zdejmij blokade	
				set @_IN_MODE = _IN_MODE;
			END IF;


			IF (_IN_MODE LIKE '%Ceny%') AND @.WEB.MOB.DOC.NP.WHAT NOT IN ('DEL', 'CANCEL') THEN 
			set @xxxxx = '1';
				CALL C_HT_OPZM('PO<-POZYCJE_CENYRABAT', _IN_MODE, _FROM, 'M', _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _Params);
			END IF;
			
			IF (_IN_MODE LIKE '%POST%' OR _IN_MODE LIKE '%CALC%')  THEN
				CALL C_HT_OPZM('PO.POST', _IN_MODE, _FROM, 'M', _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _Params);
				CALL C_HT_OPZM('NG.POST', _IN_MODE, _FROM, 'M', _IdnOper, '', '', '', '' ,'', '');
			END IF;
		
			IF (_IN_MODE LIKE '%APPLY%') THEN
			-- bylo IF @.WEB.MOB.DOC.NP.WHAT = 'APPLY' THEN
			--	Pobierz małpy - potrzebuję 1 rzeczy ...	
				CALL C_HT_xxNgPo_DO('CHECK.NgPO.INF', _FROM, 'M', _IdnOper, '', '', '', '', '', '');
				-- SET @.n.IS.Realizacja.ZM = FALSE;	-- inicjalnie
				
				IF _FROM = 'OP' THEN
					UPDATE `opng_m` n
					SET
						n.ExtFlags = (@.n.ExtFlags := 	-- WAŻNE!!!! w tej fladze są informacje!!!
							_ExtFlags('Del.Text', n.ExtFlags, '(ZM->MAG:SCAN)', '', ''))
					WHERE
						n.GUID = _IdnOper
					;
					/*
					SET 
						@.n.IS.Realizacja.ZM = 
							(@.n.ExtFlags LIKE '<Realizacja.ZM>') 
							OR _IN_MODE LIKE '%Realizacja.ZM.%'
					;
					*/
					SET 
						@.n.IS.Realizacja.ZM = 
							(IFNULL(@.NgPO.INF.ExtFlags, '') LIKE '<Realizacja.ZM>') 
							OR _IN_MODE LIKE '%Realizacja.ZM.%'
					;
					IF @.n.IS.Realizacja.ZM THEN
					--	Gdy realizacja zam. to przed zapisem wyczyść zerowe pozycje rozchodowki (WZ)
						DELETE p FROM `oppo_m` p 
						WHERE
							p.IdnOper = _IdnOper
							AND p.Ilosc = 0  AND p.rodzaj NOT IN (39,67,68)
						;
					END IF;
				END IF;
				SET 
					-- @.OPZM.APPLY.ver  = (@.OPZM.APPLY.ver := 0),
					@.OPZM.APPLY.ver  = (@.OPZM.APPLY.ver := 
						IF(@session.globals.OPER.DELTA.Ver >= '2022', 2022, 0)
					),
					@.OPZM.APPLY.Params = CONCAT_WS('&', CONCAT('APPLY.ver=', @.OPZM.APPLY.ver)),
					@.OPZM.AutoNum.Before.Apply = 1
				;
				
				CALL C_HT_OPZM('APPLY', '', _FROM, 'M', _IdnOper, '', '', '', '' ,'', @.OPZM.APPLY.Params);
				SET @.OPZM.AutoNum.Before.Apply = NULL;
				SET 
					@.M.ERR_TYPE = 
						IF((@.M.ERR := (IFNULL(@.OPZM.APPLY.Result, 'OK') <> 'OK')),
							@.OPZM.APPLY.Result,
							''
						)
				;
				IF @.M.ERR THEN
				--	APPLY ERROR
				--	TO DO tylko dla WEGI testowo trza zrobić porzadnie - na razie testy!!!
					IF @session.globals.Owner IN ('WEGA','AXIS') THEN
						SELECT 
							tm.Msg,
							IF(tm.Msg_body LIKE 'Alert deficytu magazynowego%',
								CONCAT_WS('', 
									-- 'Alert deficytu magazynowego',
									-- SUBSTR(tm.Msg_body, LOCATE('<br>[...]', tm.Msg_body) + 9, 255)
									'Deficyt magazynowy<br>',
									SUBSTR(tm.Msg_body, LOCATE('</b><br>Dot.', tm.Msg_body) + 8, 255)
								),
								tm.Msg_body
							)
							-- ,tm.* 
							INTO 
							@.sm.Msg, @.sm.Msg2
						FROM `t_OPZM_Delta_msg` tm
						;
					ELSE
						CALL C_HT_OPZM_Proc('Sys_Msg.GET.Msg.and.Delete', 'BeforeApply', _FROM, 'M', _IdnOper, '', '', '', '', '' , '');
					END IF;
					SET @.M.MSG = @.sm.Msg;
				ELSE
				--	APPLY OK
					IF _FROM = 'OP' AND @.n.IS.Realizacja.ZM THEN
						CALL _ZM_Update_Realizacja('UPDATE.for.opng', _IdnOper, '', '');
					END IF;
				END IF;
		-- SET @.M.ERR = TRUE, @.M.MSG = 'Niestety nie zapiszę tego!\nPozdrawiam serdecznie.';
				-- dawniej CALL C_HT_M_Proc('Set.Tymczasowa', '0', _FROM, _IdnOper, '', '', '', '', '', '&Clear_Star_Numbers=1&');	-- odtymczasowienie
			END IF;
			
			IF (_IN_MODE LIKE '%CLEAR%') THEN
				IF (_IN_MODE LIKE '%APPLY%') THEN
				--	Gdy jest to CLEAR przy APPLY to sprawdzaj @.M.ERR czyli czy APPLY sie powiódł!!!
					IF NOT @.M.ERR THEN
					--	nie ma Erru, apply był OK zatem mozna usuwać
						CALL C_HT_OPZM('CLEAR', '', _FROM, 'M', _IdnOper, '', '', '', '' ,'', '');
					END IF;
				ELSE
				--	dla CANCEL zawsze ale dla APPLY gdy dodamy w _IN_MODE
					CALL C_HT_OPZM('CLEAR', '', _FROM, 'M', _IdnOper, '', '', '', '' ,'', '');
				END IF;
			--	Zdejmij blokade	
			
			SET @mDoc_Calc_ver_na_zero = (SELECT `Value` FROM _db_globals WHERE `key`='mDoc_Calc_ver_na_zero');
			
			IF @mDoc_Calc_ver_na_zero=1 THEN
				IF _FROM = 'OP' THEN
					UPDATE oppo SET calc_ver=0 WHERE idnoper=_IdnOper AND rodzaj NOT IN (39,67,68);		
					UPDATE opng SET calc_ver=0 WHERE guid=_IdnOper AND rodzaj NOT IN (39,67,68);
				ELSE
					UPDATE zmpo SET calc_ver=0 WHERE idnoper=_IdnOper;		
					UPDATE zmng SET calc_ver=0 WHERE guid=_IdnOper;
				END IF;
			END IF;
			
			/*	było ... teraz nowe blokady czyli CALL _lcks(..)
				DO _sys_locks_do('UNLOCK', _IdnOper, IF(_FROM = 'OP', 'opng_m', 'zmng_m'), 'EDYCJA', @SYSTEM.Client.Session.GUID, '', '', '');
			*/	
			/*	jmam 22 III 2024 afera AXIS!!!
				CALL _lcks('FREE', @.m.LOCK.OK, '', _IdnOper, 'EDIT', IF(_FROM = 'OP', 'opng_m', 'zmng_m'), '', '', '', '');
			*/	
					SET @.m.LOCK.OK = TRUE;
			END IF;

			IF( _IN_MODE LIKE '%SELECT%') THEN

				IF @.WEB.MOB.DOC.NP.WHAT IN ('APPLY', 'CANCEL','EDIT','INS') THEN
					/*	jmam 22 III 2024 afera AXIS!!!	SET @.M.ERR */
					/*	jmam 16 X 2024 - dlaczego ten FALSE??? Komentuje bo inaczej nie ma inf. o ERR	*/
					-- SET @.M.ERR = FALSE;
					IF @.M.ERR AND @.M.MSG = 'Zablokowany rekord' THEN
						SET 
							@.M.MSG := IFNULL(
								(
								SELECT 
									v.LockSessionStateInf 
								FROM `v_sys_locks` v 
								WHERE 
									v.Rec_ID = _IdnOper 
									AND 
									v.Rec_TableName = IF(_FROM = 'OP', 'opng_m', 'zmng_m')
								),
								'Zablokowany rekord'
							)
						;
					END IF;
					SELECT 
						@.M.MSG AS MSG, 
						@.M.ERR AS ERR, 
						_IdnOper AS Last_Id,
						_VarStr(@.M.ERR_TYPE) AS ERR_TYPE
					;
				ELSE
					CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT.1.N', '', _FROM, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, _Params);
				END IF;
			END IF;

		
		END IF;
		
		
		/*
			Wstawianie 
			w _GUID GUID pozycji
			w _Param_D	""/"UNDO"/"DELETE"
		*/
		IF _MODE LIKE ('WEB.MOB.DOC.P.%')THEN
		/*************************************************************************************************************************************************
		========================
			POZYCJE dokumentu
		========================
			Wstawianie
				CALL C_HT_M_Proc('WEB.MOB.DOC.P.INS', '', 'ZM', 'IdnOper', 'GUID or pusty', '', '', '', '', '', '', @Params);
				CALL C_HT_M_Proc('WEB.MOB.DOC.P.INS', '', 'OP', 'IdnOper', 'GUID or pusty', '', '', '', '', '', @Params);
				@Params sa dane ale...mozna wprost podac
				CALL C_HT_M_Proc('WEB.MOB.DOC.P.INS', '', 'OP', 'IdnOper', 'GUID or pusty', 'IdnTowr', 'Ilosc', '', '', '', @Params);
			Edycja
				CALL C_HT_M_Proc('WEB.MOB.DOC.P.EDIT', '', 'OP', 'IdnOper', 'GUID konieczny', 'IdnTowr', 'Ilosc', '', '', '', @Params);
				CALL C_HT_M_Proc('WEB.MOB.DOC.P.EDIT', 'INW.POZ.Close', 'OP', 'IdnOper', 'GUID konieczny', 'IdnTowr', 'Ilosc', '', '', '', @Params);
				mozna w params lub w wprost
			Usuwanie
				CALL C_HT_M_Proc('WEB.MOB.DOC.P.DELETE', '', 'OP', 'IdnOper', 'GUID konieczny', '', '', '', '', '', @Params);
			Skanowanie ze zwrotem pozycji
				CALL C_HT_M_Proc('WEB.MOB.DOC.P.SCAN', '', 'OP', 'IdnOper', '', 'IdnTowr', '', '', '', '', @Params);
				CALL C_HT_M_Proc('WEB.MOB.DOC.P.ADD_TOWR_AD_HOC', '', 'OP', 'IdnOper', '', 'IdnTowr', '', '', '', '', ');
		*************************************************************************************************************************************************/
set @_Params.3 = _Params;					
			SET 
				@.M.MSG := 'OK',
				@.M.ERR := FALSE,
				@.M.ERR_TYPE := '',
				@.WEB.MOB.DOC.NP.WHAT = 
				CASE
					WHEN _MODE LIKE ('WEB.MOB.DOC.P.INS%') OR _MODE LIKE ('WEB.MOB.DOC.P.NEW%') THEN 'INS'
					WHEN _MODE LIKE ('WEB.MOB.DOC.P.DEL%') OR _MODE LIKE ('WEB.MOB.DOC.P.DELETE%') THEN 'DEL'
					WHEN _MODE LIKE ('WEB.MOB.DOC.P.EDIT%') THEN 'EDIT'
					WHEN _MODE LIKE ('WEB.MOB.DOC.P.SCAN%') THEN 'SCAN'
					WHEN _MODE LIKE ('WEB.MOB.DOC.P.ADD_TOWR_AD_HOC%') THEN 'ADD_TOWR_AD_HOC'
					WHEN _MODE LIKE ('WEB.MOB.DOC.P.CHECK.IdnTowr%') THEN 'CHECK.IdnTowr'
				END,
				@.WEB.MOB.DOC.IS.INW = (_FROM = 'OP') AND ((_IN_MODE LIKE '%INWENTARYZACJA%') OR (_IN_MODE LIKE '%INW%'))
			;
			IF @.WEB.MOB.DOC.NP.WHAT IN ('INS', 'EDIT', 'SCAN', 'CHECK.IdnTowr') THEN
				/*
				--	Uwaga nie wszystko sie miesci w parametrach A B C D
					_Param_A 		IdnTowr
					_Param_B 		Ilosc
					_Param_C 		Jedn_Idx
					_Param_D 		GUID_dostawy
					_Param_E 		Komentarz
				*/
				SET 
					_IdnTowr = IFNULL(NULLIF(_Param_A, ''), _Params2('_FetchParams', '&', _Params, 'IdnTowr', '')), 
					_Ilosc = IFNULL(NULLIF(_Param_B, ''), _Params2('_FetchParams', '&', _Params, 'Ilosc', '')), 
					@.M.Jedn_Idx = _Param_C,
					@.M.GUID_dostawy = IFNULL(NULLIF(_Param_D, ''), _Params2('_FetchParams', '&', _Params, 'GUID_dostawy', '')), 
					@.M.NrSeryjny = IFNULL(NULLIF(_Param_D, ''), _Params2('_FetchParams', '&', _Params, 'NrSeryjny', '')), 
					@.M.Komentarz = _Param_E,	
					@_new_GUID = ''
				;
				IF FALSE AND IFNULL(_Params, '') <> '' THEN
					/*
					--	Uwaga nie wszystko sie miesci w parametrach A B C D
						_Param_A 		IdnTowr
						_Param_B 		Ilosc
						_Param_C 		Jedn_Idx
						_Param_D 		GUID_dostawy
						_Param_E 		Komentarz
					*/
					SET
						@.M.Komentarz = _Param_E	--	wstawiamy
					;
				END IF;
				
			END IF;
			
			IF @.WEB.MOB.DOC.NP.WHAT = 'SCAN' THEN
				CALL C_HT_M_Proc('WEB.MOB.SCAN.Towar', '', _FROM, _IdnOper, _GUID, _IdnTowr, _Ilosc, '', '', '', @Params);
				IF @.s.IS_OK THEN
					SET
						_IdnTowr = @.s.IdnTowr
						-- w @.M.GUID_dostawy mam warosc
					;
				ELSE
				--	O jej
					SET
						@.M.Ile_Poz = 0, @.M.oppo_GUID = '', @.M.Ilosc = 0
						-- w @.M.GUID_dostawy mam NULL
					;
				END IF;
				SELECT 
					@.M.MSG AS MSG, @.M.ERR AS ERR, 
					_IdnTowr AS IdnTowr, 
					(@.s.towrsymb := '') AS towrsymb, (@.s.towrnazwa := '') AS towrnazwa, 
					@.M.Ile_Poz := 0 AS Ile_Poz, 
					'' AS oppo_GUID, 
					0 AS Ilosc,
					0 AS Is_ZM_to_MAG_Scan,
					@.M.GUID_dostawy AS GUID_dostawy,
					0 AS Ilosc_Fakt,
                    @.s.TowarIdn AS TowarIdn
				; 
				LEAVE SC_HT_M_Proc;
			END IF;

			IF @.WEB.MOB.DOC.NP.WHAT = 'CHECK.IdnTowr' THEN
				-- CALL C_HT_M_Proc('WEB.MOB.SCAN.Towar', '', _FROM, _IdnOper, _GUID, _IdnTowr, _Ilosc, '', '', '', @Params);
				IF NULLIF(_IdnTowr, '') IS NOT NULL THEN
				set @Radek = 'xxx';
					SELECT 
						COUNT(p.GUID) AS Ile_Poz, 
						IFNULL(p.GUID, '') AS oppo_GUID, 
						SUM(p.Ilosc) AS Ilosc,
						IF(IFNULL((_ExtFlags('GET.Text', n.ExtFlags, '(ZM->MAG:SCAN)', '', '') = '(ZM->MAG:SCAN)'), FALSE),
							'ZM->MAG',
							IF(n.Rodzaj = 39,
								IF(n.Rodzaj_typ = 0,
									'INW.Pelna',	--	Pełna od sciany do sciany
									'INW.Lista'		--	Z lista
								),
								''
							)
						) AS Typ_poz,
						
						IFNULL((_ExtFlags('GET.Text', n.ExtFlags, '(ZM->MAG:SCAN)', '', '') = '(ZM->MAG:SCAN)'), FALSE) AS Is_ZM_to_MAG_Scan,
						t.Symbol AS towrsymbm,
						t.Nazwa AS towrnazwa,
						IF(@.M.Jedn_Idx != 0 AND t.opakowanie_zbiorcze_d != 0,
							t.opakowanie_zbiorcze_d * _Ilosc,
							_Ilosc
						) AS Ilosc_Fakt,
						IFNULL(j.Nazwa, '') AS jednostkaStr,
						p.transza_zamow,
						p.Zmagazynu,
						p.Domagazynu,
						n.Zmagazynu,
						n.Domagazynu,
                        t.Idn AS TowarIdn
					INTO
						@.M.Ile_Poz, @.M.oppo_GUID, @.M.Ilosc, 
						@.M.Typ_poz,
						@.M.Is_ZM_to_MAG_Scan,
						@.s.towrsymb,
						@.s.towrnazwa,
						@.M.Ilosc_Fakt,
						@.M.jednostkaStr,
						@.M.transza_zamow,
						@.M.p.Zmagazynu,
						@.M.p.Domagazynu,
						@.M.n.Zmagazynu,
						@.M.n.Domagazynu,
                        @.M.TowarIdn
						/*
						IF(@.M.Jedn_Idx != 0 AND TRUE,
							5 * _Ilosc,
							_Ilosc
						) AS Ilosc_Fakt
						*/
						
					FROM `TowrNg` t
					LEFT JOIN `opng_m` n ON n.GUID = _IdnOper
					LEFT JOIN `oppo_m` p ON p.IdnOper = n.GUID AND p.IdnTowr = t.GUID
					LEFT JOIN `Jednostki` j ON j.idn = IFNULL(p.Jednostka, t.Jednostka)

					WHERE 
						t.GUID = _IdnTowr
						/*	muszę to zakomentować bo inaczej zawsze mi wytnie  a czasem potrzebuje info że nie ma na liscie!!!
						AND IF(n.Rodzaj = 39, p.transza_zamow = 0, TRUE)
						*/
						-- AND IF(_IN_MODE LIKE '%Realizacja.ZM%', IFNULL(p.GUIDZM, '') <> '', TRUE)
					;
					
					IF @.M.Typ_poz = 'ZM->MAG' THEN
					--	IF @.M.Is_ZM_to_MAG_Scan THEN
						IF @.M.Ile_Poz = 0 THEN
						--	Ponewaz realizujemy zam. a skanujemy towar nie bedacy na liscie to trzeba zapystać o to czy chceesz dodawac taki towar
							SET @.M.MSG = 'Towaru tego nie ma na liście do realizacji!\nCzy chcesz go dodać do dokumentu?';
						END IF;
					ELSEIF @.M.Typ_poz = 'INW.Lista' THEN
						IF @.M.Ile_Poz = 0 THEN
						--	Ponewaz realizujemy zam. a skanujemy towar nie bedacy na liscie to trzeba zapystać o to czy chceesz dodawac taki towar
							SET @.M.MSG = 'Towaru tego nie ma na liście inwentaryzacji i\nnie będzie uwzględniony!';
						END IF;
					ELSEIF @.M.Typ_poz = 'INW.Pelna' THEN
						SET @.M.Ile_Poz = 1;	--	zawsze wstawiaj tu 1 bo inaczej telefon nie przejdzie do wstawiania (taki wymog) a w inw. pełnej zawsze dodajemy to co zeskanowalismy
						
					END IF;
				ELSE
				set @Radek = 'uuuu';
				--	O jej
					SET
						@.M.Ile_Poz = 0, @.M.oppo_GUID = '', @.M.Ilosc = 0, @.s.towrsymb = '', @.s.towrnazwa = '', @.M.Ilosc_Fakt = 0, @.M.jednostkaStr = '', @.M.TowarIdn = 0
					;
				END IF;
				IF TRUE THEN
					SET 
						@.M.p.Zmagazynu = IFNULL(NULLIF(@.M.p.Zmagazynu, 0), @.M.n.Zmagazynu),
						@.M.p.Domagazynu = IFNULL(NULLIF(@.M.p.Domagazynu, 0), @.M.n.Domagazynu)
					;
					SET @.M.p.Mag := GREATEST(@.M.p.Zmagazynu, @.M.p.Domagazynu), @.M.p.Mag.Ilosc = 0;
					SET @.M.p.Mag := IF(@.M.p.Zmagazynu > 0, @.M.p.Zmagazynu, @.M.p.Domagazynu);
					SELECT tp.Ilosc INTO @.M.p.Mag.Ilosc_w_Mag FROM `TowrPo` tp WHERE tp.IdnTowr = _IdnTowr AND magazyn = @.M.p.Mag;
					SET @.M.p.Mag.Ilosc_w_Mag = IFNULL(@.M.p.Mag.Ilosc_w_Mag, 0);
					SET @.M.p.Mag.Ilosc_w_Mag_Str = 
						IF(IFNULL(@.M.p.Mag.Ilosc_w_Mag = 0, TRUE), 'brak w mag.', CONCAT_WS(' ', 'w mag.:', _DisplayFmt_PL(@.M.p.Mag.Ilosc_w_Mag, 2, TRUE, ' ')));
				END IF;
				SELECT 
					@.M.MSG AS MSG, @.M.ERR AS ERR, 
					_IdnTowr AS IdnTowr, 
					@.s.towrsymb AS towrsymb, @.s.towrnazwa AS towrnazwa, 
					@.M.Ile_Poz AS Ile_Poz, 
					IFNULL(@.M.oppo_GUID, '') AS oppo_GUID, 
					IFNULL(@.M.Ilosc, 0) AS Ilosc,
					@.M.Is_ZM_to_MAG_Scan AS Is_ZM_to_MAG_Scan,
					@.M.GUID_dostawy AS GUID_dostawy,
					@.M.Ilosc_Fakt AS Ilosc_Fakt,
					@.M.jednostkaStr AS jednostkaStr,
					@.M.Typ_poz AS Typ_poz,
					@.M.p.Mag.Ilosc_w_Mag AS Ilosc_w_Mag,
					@.M.p.Mag.Ilosc_w_Mag_Str AS Ilosc_w_Mag_Str,
                    @.M.TowarIdn AS TowarIdn
				; 
				LEAVE SC_HT_M_Proc;
			END IF;
			
		--	FAZA I - operacje na pozycjach INT/EDIT/DELETE
			IF @.WEB.MOB.DOC.NP.WHAT = 'INS' THEN
			--	Gdy IDNTowr zawiera pierwsza literkę # to jest to scan!!!!
				IF _IdnTowr LIKE '#%' THEN
					CALL C_HT_M_Proc('WEB.MOB.SCAN.Towar', '', _FROM, _IdnOper, _GUID, _IdnTowr, _Ilosc, '', '', '', @Params);
					-- CALL C_Scan_Pack_KodPartii('SCANER.SCAN.Scan', @_Scan_IDN, @_IdnTowr, '', '', '', '', _Param_E);	--	 na razie w _Param_E dajemy "" bo nie wszedze mamy nalepki a gdy <> "" to szukam takze Towaru
					IF @.s.IS_OK THEN
						SET
							_IdnTowr = @.s.IdnTowr
						;
					ELSE
					--	O jej
						SELECT @.M.MSG AS MSG, @.M.ERR AS ERR; 
						LEAVE SC_HT_M_Proc;
					END IF;
				END IF;
				SET
					@.M.Allow.TowrDuplicate = FALSE
				;
				IF _FROM = 'OP' AND @.WEB.MOB.DOC.IS.INW THEN
				--	insert dot. inwentaryzacji zatem wstaw GUIDa i ponize j juz bedzie obowiazywal	
					SET 
						_GUID = _Get_GUID_xxx('INW.p.GUID', _IdnOper, _IdnTowr, @.M.GUID_dostawy, @.M.NrSeryjny := '', '', '') -- skad @.M.NrSeryjny
					;
				END IF;

				SET 
					_GUID = 
						(@P.GUID := 
						IFNULL(
							NULLIF(_GUID, ''), 
							IF(@.M.Allow.TowrDuplicate, 
								_Get_GUID_xxx('M.p.GUID', _FROM, '', '', '', '', ''), 
								_Get_GUID_xxx('M.p.GUID<-IdnOper,IdnTowr,Tekst,Seria', _IdnOper, _IdnTowr, @.M.GUID_dostawy, '', '', @.M.Komentarz)
							)	--	_Param_C tekst/ uwagi, etc,  _Param_D jest GUIDdostawy, nr seryjny, rcNg etc
						)
						),
					@_new_GUID = ''
				;
set @_Params.1 = _Params;					
				SET
					@.M.CenaNet = (@.M.CenaNet := NULLIF(_Params2('_FetchParams', '&', _Params, 'CenaNet', ''), '')),
					@.M.CenaBrt = (@.M.CenaBrt := NULLIF(_Params2('_FetchParams', '&', _Params, 'CenaBrt', ''), '')),
					@.M.p.ExtFlags := _ExtFlags('ADD.Text', '(TowrNg->PO)(NG->PO)', IF((@.M.CenaNet IS NULL) AND (@.M.CenaBrt IS NULL), '(<-Ceny)', ''), '', ''),
					_IN_MODE = _ExtFlags('ADD.Text', _IN_MODE, IF((@.M.CenaNet IS NULL) AND (@.M.CenaBrt IS NULL), 'Ceny', ''), '', '')
				;
				SET
					_Params = _ExtFlags('ADD.Text', _Params, IF((@.M.CenaNet IS NULL) AND (@.M.CenaBrt IS NULL), 'Tylko_nowe_i_Wymuszone', ''), '', '')
					-- zamiast SET _Params = CONCAT_WS(',', _Params, 'Tylko_nowe_i_Wymuszone');
				;
				
				
				IF _FROM = 'OP' THEN
				/*** NA chwile ***/
					-- UPDATE `opng` set Uwagi = CONCAT_WS(', ', @SYSTEM.Client.Session.GUID, @session.INFO.User_GUID) WHERE GUID = _IdnOper;
				/*** NA chwile ***/
					IF NOT @.WEB.MOB.DOC.IS.INW THEN
					--	gdy nie jest to inwentaryzacja
						INSERT IGNORE INTO `oppo_m` 
						(GUID, IdnOper, IdnTowr, TowrSymb, TowrNazwa, Ilosc)
						SELECT
							@P.GUID,
							_IdnOper,
							t.GUID AS IdnTowrt,
							t.Symbol AS TowrSymb, 
							t.Nazwa AS TowrNazwa,
							-- IFNULL(_Ilosc, 0) AS Ilosc
							0 AS Ilosc
						FROM `TowrNg` t
						WHERE
							t.GUID = _IdnTowr
						-- ON DUPLICATE KEY UPDATE
						-- 	IdnTowr = _IdnTowr,
						--	Ilosc = Ilosc + IFNULL(_Ilosc, 0)
						;
					--	Nowy 1 update	
						UPDATE `oppo_m` p
						SET
							p.IdnTowr = _IdnTowr,	-- po co??? hmmm!!!
							p.Ilosc = (@.p.Ilosc := (p.Ilosc + IFNULL(_Ilosc, 0))),
							p.spakowano = IFNULL(@.p.Ilosc, p.spakowano),
							p.ExtFlags = @.M.p.ExtFlags,
							p.Cenanet = IFNULL(@.M.CenaNet, DEFAULT(p.Cenanet))
							,
							p.rodzaj_przeliczenia = IF(@.M.CenaBrt IS NOT NULL, 5, p.rodzaj_przeliczenia),		--	_BN_CB_WN z ceny brutto->netto	
							p.CenaBrt = IF(@.M.CenaBrt IS NOT NULL, IFNULL(@.M.CenaBrt, p.CenaBrt), p.CenaBrt)
						WHERE
							p.GUID = _GUID
						;
					/*	było ...zamiast tego ... jest teraz UPDATE zbiorczy powyżej 
						UPDATE `oppo_m` p
						SET
							p.IdnTowr = _IdnTowr,
							p.spakowano = IFNULL(p.Ilosc, p.spakowano),
							-- p.Ilosc = IFNULL(_Ilosc, p.Ilosc),
							-- bylo p.ExtFlags = _ExtFlags('ADD.Text', p.ExtFlags, '(TowrNg->PO)(NG->PO)(<-Ceny)', '', ''),
							p.ExtFlags = @.M.p.ExtFlags,
							p.Cenanet = IFNULL(@.M.CenaNet, DEFAULT(p.Cenanet))
						WHERE
							p.GUID = _GUID
						;
						UPDATE `oppo_m` p 
						SET
							p.rodzaj_przeliczenia = 5,		--	_BN_CB_WN z ceny brutto->netto	
							p.CenaBrt = IFNULL(@.M.CenaBrt, p.CenaBrt)
						WHERE
							p.GUID = _GUID
							AND @.M.CenaBrt IS NOT NULL
						;
					*/	
					--	Po testach z RG i DB musze to doać bo nie ma jed. zmagazynu/etc	
						SET _IN_MODE = CONCAT_WS('.', 
							_IN_MODE, 
							'POST'
						);
					ELSE
					--	insert dot. inwentaryzacji zatem wstaw GUIDa i ponize j juz bedzie obowiazywal	
					--	1. Sprawdzam czy moge wstawiac - dla inwent. z lista nie dodajemy niczego
						SET @.M.INW.Insert.Enabled = 
							(
							SELECT 
								IF(p.GUID IS NOT NULL,
									TRUE,
									n.Rodzaj_typ = 0	--	inw. pełna
								) AS Insert_Enabled
							FROM `opng_m` n 
							LEFT JOIN `oppo_m` p ON p.IdnOper = n.GUID AND p.IdnTowr = _IdnTowr AND p.transza_zamow = 0
							WHERE
								n.GUID = _IdnOper
							LIMIT 1
							)
						;
						IF @.M.INW.Insert.Enabled THEN
							INSERT IGNORE INTO `oppo_m`
							(GUID, IdnOper, IdnTowr, TowrSymb, TowrNazwa, Ilosc, Spakowano, GUID_dostawy, exported, transza_zamow, ExtFlags)
							SELECT
								@P.GUID,
								_IdnOper,
								t.GUID AS IdnTowrt,
								t.Symbol AS TowrSymb, 
								t.Nazwa AS TowrNazwa,
								0 AS Ilosc,
								-- _Ilosc AS Spakowano,
								0 AS Spakowano,
								@.M.GUID_dostawy,
								IF(n.Rodzaj_typ = 0, 1, 0) AS exported,
								0 AS transza_zamow,
								_ExtFlags('ADD.Text', '', '(TowrNg->PO)(NG->PO)', '', '') AS ExtFlags
							FROM `TowrNg` t 
							INNER JOIN `opng_m` n ON n.GUID = _IdnOper
							WHERE
								t.GUID = _IdnTowr
						/*	ON DUPLICATE KEY UPDATE
								IdnTowr = _IdnTowr,
								Spakowano = Spakowano + _Ilosc,
								GUID_dostawy = @.M.GUID_dostawy,
								exported = 
									IF(n.Rodzaj_typ <> 0,
										exported,	--	inw. z listą
										1	--	bo tutaj czyli w trybie pełnym bez listy czyli od ściany do ściany zawsze zatwierdzamy
									),
								iloscbylo = IFNULL(iloscbylo, 0),
								iloscjest = IFNULL(iloscjest, 0),
								transza_zamow = 0
						*/
							;
						--	1 update aby uniknąć ON duplicate KEY
							UPDATE `oppo_m` p
							INNER JOIN `opng_m` n ON n.GUID = _IdnOper
							SET
								p.IdnTowr = _IdnTowr,	-- po co??? hmmm!!!
								p.Spakowano = p.Spakowano + _Ilosc,
								p.GUID_dostawy = @.M.GUID_dostawy,
								p.exported = 
									IF(n.Rodzaj_typ <> 0,
										p.exported,	--	inw. z listą
										1	--	bo tutaj czyli w trybie pełnym bez listy czyli od ściany do ściany zawsze zatwierdzamy
									),
								p.iloscbylo = IFNULL(p.iloscbylo, 0),
								p.iloscjest = IFNULL(p.iloscjest, 0),
								p.transza_zamow = 0
							WHERE
								p.GUID = _GUID
							;
							SET _IN_MODE = CONCAT_WS('.', 
								_IN_MODE, 
								'POST'
							);
						END IF;
						/*
						UPDATE `oppo_m` p
						SET
							p.Spakowano = 
								p.Spakowano + _Ilosc,
							p.GUID_dostawy = @.M.GUID_dostawy,
							p.exported = 
								IF(p.Rodzaj_typ <> 0,
									p.exported,	--	inw. z listą
									1	--	bo tutaj czyli w trybie pełnym bez listy czyli od ściany do ściany zawsze zatwierdzamy
								),
							p.iloscbylo = IFNULL(p.iloscbylo, 0),
							p.iloscjest = IFNULL(p.iloscjest, 0),
							p.ExtFlags = _ExtFlags('ADD.Text', p.ExtFlags, '(TowrNg->PO)(NG->PO)(<-Ceny)', '', '')
						WHERE
							p.GUID = @P.GUID
						;
						*/
					END IF;
				ELSE
					INSERT IGNORE INTO `zmpo_m` 
					(GUID, IdnNg, IdnTowr, TowrSymb, TowrNazwa, Ilosc)
					SELECT
						@P.GUID,
						_IdnOper,
						t.GUID AS IdnTowr,
						t.Symbol AS TowrSymb, 
						t.Nazwa AS TowrNazwa,
						-- IFNULL(_Ilosc, 0) AS Ilosc
						0 AS Ilosc
					FROM `TowrNg` t
					WHERE
						t.GUID = _IdnTowr
					-- ON DUPLICATE KEY UPDATE
					-- 	IdnTowr = _IdnTowr,
					-- 	Ilosc = Ilosc + IFNULL(_Ilosc, 0)
					;
				--	Nowy 1 update	
					UPDATE `zmpo_m` p
					SET
						p.IdnTowr = _IdnTowr,	-- po co??? hmmm!!!
						p.Ilosc = (@.p.Ilosc := (p.Ilosc + IFNULL(_Ilosc, 0))),
						p.spakowano = IFNULL(@.p.Ilosc, p.spakowano),
						p.ExtFlags = @.M.p.ExtFlags,
						p.Cenanet = IFNULL(@.M.CenaNet, DEFAULT(p.Cenanet))
						,
						p.rodzaj_przeliczenia = IF(@.M.CenaBrt IS NOT NULL, 5, p.rodzaj_przeliczenia),		--	_BN_CB_WN z ceny brutto->netto	
						p.CenaBrt = IF(@.M.CenaBrt IS NOT NULL, IFNULL(@.M.CenaBrt, p.CenaBrt), p.CenaBrt)
					WHERE
						p.GUID = _GUID
					;
				/*	było ...zamiast tego ... jest teraz UPDATE zbiorczy powyżej 
					
					UPDATE `zmpo_m` p
					SET
						p.IdnTowr = _IdnTowr,
						p.spakowano = IFNULL(p.Ilosc, p.spakowano),
						-- p.Ilosc = IFNULL(_Ilosc, p.Ilosc),
						-- bylo p.ExtFlags = _ExtFlags('ADD.Text', p.ExtFlags, '(TowrNg->PO)(NG->PO)(<-Ceny)', '', '')
						p.ExtFlags = @.M.p.ExtFlags,
						p.Cenanet = IFNULL(@.M.CenaNet, DEFAULT(p.Cenanet))
					WHERE
						p.GUID = _GUID
					;
					UPDATE `zmpo_m` p 
					SET
						p.rodzaj_przeliczenia = 5,		--	_BN_CB_WN z ceny brutto->netto	
						p.CenaBrt = IFNULL(@.M.CenaBrt, p.CenaBrt)
					WHERE
						p.GUID = _GUID
						AND @.M.CenaBrt IS NOT NULL
					;
				*/	
				END IF;
			END IF;
				
			IF @.WEB.MOB.DOC.NP.WHAT = 'EDIT' THEN
				IF _FROM = 'OP' THEN
					IF _IN_MODE LIKE '%INW%' THEN
					/*******************************************************************************************************************************
						Inwentaryzacja ...
					*******************************************************************************************************************************/
						IF _IN_MODE LIKE '%INW.POZ.%' THEN
						/*******************************************************************************************************************************
							konczenie/wznowienie pozycji inw. z lista
							konczenie pozycji inw. z lista
							CALL C_HT_M_Proc('WEB.MOB.DOC.P.EDIT', 'INW.POZ.Close,select', 'OP', 'IdnOper', 'GUID konieczny', '', '', '', '', '', @Params);
							wznowienie pozycji inw. z lista
							CALL C_HT_M_Proc('WEB.MOB.DOC.P.EDIT', 'INW.POZ.Open,select', 'OP', 'IdnOper', 'GUID konieczny', '', '', '', '', '', @Params);						
						*******************************************************************************************************************************/

							UPDATE `oppo_m` p
							SET
								-- p.IdnTowr = _IdnTowr,
								p.Exported = 
									IF(p.Rodzaj_typ <> 0,
									--	inw. z listą
										IF(_IN_MODE LIKE '%INW.POZ.Close%', 1, 0),
										1	--	bo tutaj czyli w trybie pełnym bez listy czyli od ściany do ściany zawsze zatwierdzamy
									)
								
							WHERE
								p.GUID = _GUID
								AND p.transza_zamow = 0
							;
						ELSEIF _IN_MODE LIKE '%INW.Reset.%' THEN
						/*******************************************************************************************************************************
							zerowanie skanowania dla
							konkretnej pozycji
							CALL C_HT_M_Proc('WEB.MOB.DOC.P.EDIT', 'INW.Reset.GUID,select', 'OP', 'IdnOper', 'GUID konieczny', '', '', '', '', '', @Params);
							towaru
							CALL C_HT_M_Proc('WEB.MOB.DOC.P.EDIT', 'INW.Reset.Towar,select', 'OP', 'IdnOper', 'GUID NIE konieczny', 'TOWAR', '', '', '', '', @Params);
							towaru i nr seryjnego
							CALL C_HT_M_Proc('WEB.MOB.DOC.P.EDIT', 'INW.Reset.NrSeryjny,select', 'OP', 'IdnOper', 'GUID NIE konieczny', 'TOWAR', '', '', 'NrSeryjny', '', @Params);
							towaru i nr seryjnego
							CALL C_HT_M_Proc('WEB.MOB.DOC.P.EDIT', 'INW.Reset.GUID_dostawy,select', 'OP', 'IdnOper', 'GUID NIE konieczny', 'TOWAR', '', '', 'GUID_dostawy', '', @Params);
						*******************************************************************************************************************************/
							UPDATE `oppo_m` p
							SET
								p.Spakowano = 0,
								p.Exported = 0
							WHERE
								p.IdnOper = _IdnOper
								AND p.transza_zamow = 0
								AND
								IF(_IN_MODE LIKE '%INW.Reset.Towar%',
									p.IdnTowr = _IdnTowr,
									IF(_IN_MODE LIKE '%INW.Reset.NrSeryjny%',
										p.IdnTowr = _IdnTowr AND p.NrSeryjny = @.M.NrSeryjny,
										IF(_IN_MODE LIKE '%INW.Reset.GUID_dostawy%',
											p.IdnTowr = _IdnTowr AND p.GUID_dostawy = @.M.GUID_dostawy,
											IF(_IN_MODE LIKE '%INW.Reset.GUID%',
												p.GUID = _GUID,
												FALSE
											)
										)
									)
								)	
							;
						ELSE
						/*******************************************************************************************************************************
						--	zwykle poprawianie pozycji 
							CALL C_HT_M_Proc('WEB.MOB.DOC.P.EDIT', 'INW,select', 'OP', 'IdnOper', 'GUID konieczny', '', 'Ilosc', '', '', '', @Params);						
						*******************************************************************************************************************************/
							UPDATE `oppo_m` p
							SET
								-- p.IdnTowr = _IdnTowr,
								p.spakowano = IFNULL(_Ilosc, p.spakowano),
								p.ExtFlags = _ExtFlags('ADD.Text', p.ExtFlags, '(TowrNg->PO)(NG->PO)(<-Ceny)', '', '')
							WHERE
								p.GUID = _GUID
								AND p.transza_zamow = 0
							;
						END IF;
					ELSE
					/*******************************************************************************************************************************
						ZWYKLY DOkument
					*******************************************************************************************************************************/
						UPDATE `oppo_m` p
						SET
							-- p.IdnTowr = _IdnTowr,
							p.spakowano = IFNULL(_Ilosc, p.spakowano),
							p.Ilosc = IFNULL(_Ilosc, p.Ilosc),
							p.ExtFlags = _ExtFlags('ADD.Text', p.ExtFlags, '(TowrNg->PO)(NG->PO)(<-Ceny)', '', '')
						WHERE
							p.GUID = _GUID
						;
					END IF;
				ELSE
					UPDATE `zmpo_m` p
					SET
						-- p.IdnTowr = _IdnTowr,
						p.spakowano = IFNULL(_Ilosc, p.spakowano),
						p.Ilosc = IFNULL(_Ilosc, p.Ilosc),
						p.ExtFlags = _ExtFlags('ADD.Text', p.ExtFlags, '(TowrNg->PO)(NG->PO)(<-Ceny)', '', '')
					WHERE
						p.GUID = _GUID
					;
				END IF;
			END IF;
				
			IF @.WEB.MOB.DOC.NP.WHAT = 'DEL' THEN
			-- IF _MODE LIKE ('WEB.MOB.DOC.P.DEL%') OR _MODE LIKE ('WEB.MOB.DOC.P.DELETE%') THEN
				IF _FROM = 'OP' THEN
					DELETE p FROM `oppo_m` p
					WHERE
						p.IdnOper = _IdnOper
						AND
						p.GUID = _GUID
					;
				ELSE
					DELETE p FROM `zmpo_m` p
					WHERE
						p.IdnNg = _IdnOper
						AND
						p.GUID = _GUID
					;
				END IF;
			END IF;
		--	FAZA II - ewentualne czynnosci post, clear, etc, 
			
			IF @.WEB.MOB.DOC.NP.WHAT = 'ADD_TOWR_AD_HOC' THEN
				SET 
					_IdnTowr = IFNULL(NULLIF(_Param_A, ''), _Params2('_FetchParams', '&', _Params, 'IdnTowr', '')) 
					-- SET @._Param_A.2 = _Param_A, @._Param_B = _Param_B, @._Param_C = _Param_C, @._Param_D = _Param_D;
				;
				set @._IdnTowr = _IdnTowr;
				CALL C_HT_Inwentaryzacja_Tools('Inwentaryzacja.REC.New.2.0.Insert.to.oppo_m', '', _IdnOper, _IdnTowr, 0, '', '', '', ''); 
			END IF;
			
set @.M._IN_MODE = _IN_MODE;			
			IF _IN_MODE LIKE '%Ceny%' AND @.WEB.MOB.DOC.NP.WHAT NOT IN ('DEL') THEN 
				-- SET _Params = CONCAT_WS(',', _Params, 'Tylko_nowe_i_Wymuszone');
				CALL C_HT_OPZM('PO<-POZYCJE_CENYRABAT', _IN_MODE, _FROM, 'M', _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Params);
			END IF;
			
			IF (_IN_MODE LIKE '%POST%' OR _IN_MODE LIKE '%CALC%' OR _IN_MODE LIKE '%APPLY%') AND @.WEB.MOB.DOC.NP.WHAT NOT IN ('DEL') THEN
				CALL C_HT_OPZM('PO.POST', _IN_MODE, _FROM, 'M', _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Params);
			END IF;
			
			SET @.X.1 = '1';

			IF _IN_MODE LIKE '%SELECT%' THEN
				SET @.X.1 = '2';
				IF (@.WEB.MOB.DOC.NP.WHAT = 'SCAN') AND (_IN_MODE LIKE '%RealizacjaZM%')  THEN
				--	zwroc 1 lub liste pozycji z danego towaru zwroconego po scanowaniu
					CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT.1.N.Towr.P', '', _FROM, _IdnOper, _GUID, _IdnTowr, _Param_B, _Param_C, _Param_D, _Param_E, _Params);
				ELSEIF
				(@.WEB.MOB.DOC.NP.WHAT = 'ADD_TOWR_AD_HOC')
				THEN
				SET @.X.1 = '3';
					CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT.1.N.Towr.P', '', _FROM, _IdnOper, _GUID, _IdnTowr, _Param_B, _Param_C, _Param_D, _Param_E, _Params);
				ELSEIF 
				(_IN_MODE LIKE '%INW.Reset.Towar%') OR
				(_IN_MODE LIKE '%INW.Reset.NrSeryjny%') OR
				(_IN_MODE LIKE '%INW.Reset.GUID_dostawy%') 
				THEN
					CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT.1.N.Towr.P', '', _FROM, _IdnOper, _GUID, _IdnTowr, _Param_B, _Param_C, _Param_D, _Param_E, _Params);
				ELSE
					CALL C_HT_M_Proc('WEB.MOB.DOC.SELECT.1.N.1.P', '', _FROM, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, _Params);
				END IF;
			END IF;
			
			

		END IF;
		/*
		po co to tu ?
		IF _IN_MODE LIKE '%Clear%' THEN
			CALL C_HT_OPZM('Clear', '', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
		END IF;
		*/

	
	END IF;

	IF _MODE LIKE ('WEB.MOB.Towar.%') THEN
	/*************************************************************************************************************************************************
		CALL C_HT_M_Proc('WEB.MOB.Towar.SELECT.Info', '', 'OP', '', '', 'IdnTowr', '', '', '', '', @Params);
		CALL C_HT_M_Proc('WEB.MOB.Towar.SELECT.TowrPo', '', 'OP', '', '', 'IdnTowr', '', '', '', '', @Params);
	*************************************************************************************************************************************************/
		SET 
			_IdnTowr = IFNULL(NULLIF(_Param_A, ''), _Params2('_FetchParams', '&', _Params, 'IdnTowr', ''))
		;
		IF _MODE = 'WEB.MOB.Towar.SELECT.Info' THEN
			SELECT
					t.Symbol, 
					t.Nazwa,
					CONCAT_WS(' ',
						t.Symbol, 
						'-',
						t.Nazwa,
						null
					) AS Descr_Short,
					CONCAT_WS('\n',
						t.Symbol, 
						t.Nazwa,
						NULLIF(t.Opis, ''),
						null
					) 
					AS Descr_Long,
					(@.CenaNet :=
					(
					SELECT c.cena FROM `cennik` c WHERE c.IdnTowr = t.GUID AND klasa = 1 LIMIT 1
					)) AS CenaNet,
					-- (1+ ev.value) * @.CenaNet AS CenaBrt,
					_Rnd2(@.CenaNet + _Rnd2(@.CenaNet*(ev.`value`))) AS CenaBrt,
					t.lokalizacja1,
					t.lokalizacja2,
                    t.Idn AS TowarIdn
			FROM `TowrNg` t
			LEFT JOIN v_erp_vat ev ON ev.id = t.Vat 
			WHERE
				t.GUID = _IdnTowr
			;
		END IF;
		IF _MODE = 'WEB.MOB.Towar.SELECT.TowrPo' THEN
			SELECT
				CONCAT(_VarStr(IdnMagazynu), ' - ', m.`Opis`) AS MagazynStr, 
				tp.Ilosc,
				t.lokalizacja1, t.lokalizacja2,
                t.Idn AS TowarIdn
			FROM `TowrNg` t, `TowrPo` tp, `Magazyny` m 
			WHERE
				t.GUID = _IdnTowr
				AND tp.IdnTowr = t.GUID
				AND m.IdnMagazynu = tp.`magazyn`
				AND tp.ILosc > 0
			;
		END IF;
		
	END IF;
	
END$$


DELIMITER ;

/*
====================================================================================================================================================================================
	NOTATNIK
====================================================================================================================================================================================

Obszary inicjacji nowego dokumentu (nowej operacji)
-------------------------
MENU
-------------------------
obszar wyboru powiedzmy ogólnie kontekstu np. Magazynowe, Obsługa przujęcia towaru, Realizacja zamówienia etc.
Teraz mamy
- Magazynowe 				/	Menu.MAG'
...
- Realizacja zamówień		/	Menu.REALIZ.ZM
- Realizacja zleceeń		/	Menu.REALIZ.ZLEC
...

UWAGA Tego obszaru (przynajmniej teraz) nie obsługuję callem !!!!

-------------------------
Dokumenty kontekstu 
-------------------------
(dla realizacji zamówień i zleceń) 
MOB.MENU->Realizacja.Zam
MOB.MENU->Realizacja.Zlec

- dla operacji samoistnych ten call nie zwraca niczego i może nie byc wołany
MOB.MENU->Magazynowe

-------------------------
Operacje
-------------------------
Jeśli wchodzimy to z menu to oznacza że mamy tworzenie operacji samoistnych
a jeśli z kontekstowych to wołamy calla z GUIDem np. zamówienia/zleenia 
Ale w obu przypadkach zwracam serię 0/1/n rtekrdów z rodzajem i podrodzajem operacji 
Gdy liczba operacji = 0  to Err ola Boga!!!
Gdy = 1 to zapamiętujesz ten rekord bo zawiera święte informacje dla dalszych ekraników
Gdy > 1 to pokazujesz liste wyboru a po wyborze zapamiętujesz ten rekord bo zawiera święte informacje dla dalszych ekraników

W każdym rekordzie may
Rodzaj, Podrodzaj,
Opis operacji
Czy ma Kontrahenta
Czy ma magazyny
Datę inicjalna dokumentu
Czy ma byc tymczasowa
3 sekcje opisów (labelek) dla wyboru magazynu 
np. 'wybierz mag. rozchodowy' AS `Lavel_Mag_1`, 'wybierz mag. przychodu' AS `Lavel_Mag_2`, 'wybierz mag. wysyłkowy' AS `Lavel_Mag_3`

Dla samoistnych magazynowych lista zawiera poprostu operacje magazynowe do których ma uprawnienia uzytkownik.
Dla realizacji będzie to indywidualna lista a dla realizacji zleceń bedzie to wybór miedzy RW i PW
MODE Wywołania 
MOB.MENU->Magazynowe->Rodzaje			
MOB.MENU->Realizacja.Zam->Rodzaje		podajesz GUID zamówienia
MOB.MENU->Realizacja.Zlec->Rodzaje		podajesz GUID zlecenia

-------------------------
Mag I
-------------------------
Call z  modem 

MODE Wywołania 
MOB.MENU->Magazynowe->Rodzaje->Magazyn.1			podajesz w params wybrany poprzednio Rodzaj i Podrodzaj
MOB.MENU->Realizacja.Zam->Rodzaje->Magazyn.1		podajesz w params wybrany poprzednio Rodzaj i Podrodzaj
MOB.MENU->Realizacja.Zlec->Rodzaje->Magazyn.1		podajesz w params wybrany poprzednio Rodzaj i Podrodzaj

Zestaw ograniczony jest wg uprawnień i ustawień klienta, kontekstu zlecenia produkcyjnego etc.
Gdy liczba magazynów = 0  to Err ola Boga!!!
Gdy = 1 to zapamiętujesz ten rekord (IDN magazynu i nazwe parametru)
Gdy > 1 to pokazujesz liste wyboru a po wyborze zapamiętujesz ten rekord (IDN magazynu i nazwe parametru)

-------------------------
Mag II
-------------------------
analogicznie jak Mag I
MOB.MENU->Magazynowe->Rodzaje->Magazyn.1->Magazyn.2
ale może być
MOB.MENU->Magazynowe->Rodzaje->Magazyn.2
itp

-------------------------
Mag III
-------------------------
analogicznie jak Mag I i II
MOB.MENU->Magazynowe->Rodzaje->Magazyn.1->Magazyn.2->Magazyn.3
ale może być
MOB.MENU->Magazynowe->Rodzaje->Magazyn.1->Magazyn.3
itp

-------------------------
Kontrahent
-------------------------
Gdy - Czy ma Kontrahenta jest TRUE to pokazujesz paneli z szukanie kontrahenta

MOB.MENU->Magazynowe->Rodzaje->Magazyn.1->Magazyn.2->Kontrahent		podajesz w params wybrany poprzednio Rodzaj, Magazyn etc		

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/


/*
$Log: C_HT_M.sql,v $
Revision 1.21  2025/10/06 07:10:41  jmam
stan na 6 X 2025

*/
