PageRenderTime 26ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/core/promogest/modules/SchedaLavorazione/data/app/associazione_articolo_app.sql

http://promogest.googlecode.com/
SQL | 467 lines | 345 code | 75 blank | 47 comment | 60 complexity | df6f9a12162127212f73a8188928377d MD5 | raw file
Possible License(s): GPL-2.0
  1. --
  2. -- Copyright (C) 2005 by Promotux Informatica - http://www.promotux.it/
  3. -- Author: Dr astico (Marco Pinna) <zoccolodignu@gmail.com>
  4. --
  5. -- This program is free software; you can redistribute it and/or
  6. -- modify it under the terms of the GNU General Public License
  7. -- as published by the Free Software Foundation; either version 2
  8. -- of the License, or (at your option) any later version.
  9. --
  10. -- This program is distributed in the hope that it will be useful,
  11. -- but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. -- GNU General Public License for more details.
  14. --
  15. -- You should have received a copy of the GNU General Public License
  16. -- along with this program; if not, write to the Free Software
  17. -- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18. /*
  19. associazione articolo - Stored procedure applicativa
  20. */
  21. DROP TYPE promogest.associazione_articoli_sel_type CASCADE;
  22. DROP TYPE promogest.associazione_articoli_sel_count_type CASCADE;
  23. CREATE TYPE promogest.associazione_articoli_sel_type AS (
  24. id bigint
  25. ,id_associato bigint
  26. ,id_articolo bigint
  27. ,posizione integer
  28. ,codice varchar
  29. ,denominazione varchar
  30. ,id_aliquota_iva bigint
  31. ,id_famiglia_articolo bigint
  32. ,id_categoria_articolo bigint
  33. ,id_unita_base bigint
  34. ,produttore varchar
  35. ,unita_dimensioni varchar
  36. ,lunghezza real
  37. ,larghezza real
  38. ,altezza real
  39. ,unita_volume varchar
  40. ,volume real
  41. ,unita_peso varchar
  42. ,peso_lordo real
  43. ,id_imballaggio bigint
  44. ,peso_imballaggio numeric
  45. ,stampa_etichetta boolean
  46. ,codice_etichetta varchar
  47. ,descrizione_etichetta varchar
  48. ,stampa_listino boolean
  49. ,descrizione_listino varchar
  50. ,aggiornamento_listino_auto boolean
  51. ,timestamp_variazione timestamp
  52. ,note text
  53. ,cancellato boolean
  54. ,sospeso boolean
  55. ,id_stato_articolo bigint
  56. ,denominazione_breve_aliquota_iva varchar
  57. ,denominazione_aliquota_iva varchar
  58. ,percentuale_aliquota_iva decimal
  59. ,denominazione_breve_famiglia varchar
  60. ,denominazione_famiglia varchar
  61. ,denominazione_breve_categoria varchar
  62. ,denominazione_categoria varchar
  63. ,denominazione_breve_unita_base varchar
  64. ,denominazione_unita_base varchar
  65. ,imballaggio varchar
  66. ,stato_articolo varchar
  67. ,codice_a_barre varchar
  68. ,codice_articolo_fornitore varchar
  69. );
  70. CREATE TYPE promogest.associazione_articoli_sel_count_type AS (
  71. count bigint
  72. );
  73. DROP FUNCTION promogest.AssociazioneArticoloSet(varchar, bigint, bigint, bigint, bigint, integer) CASCADE;
  74. CREATE OR REPLACE FUNCTION promogest.AssociazioneArticoloSet(varchar,bigint, bigint, bigint, bigint,integer) RETURNS promogest.resultid AS
  75. $$
  76. DECLARE
  77. -- Parametri contesto
  78. _schema ALIAS FOR $1;
  79. _idutente ALIAS FOR $2;
  80. -- Parametri tabella
  81. _id ALIAS FOR $3;
  82. _id_padre ALIAS FOR $4;
  83. _id_figlio ALIAS FOR $5;
  84. _posizione ALIAS FOR $6;
  85. schema_prec varchar(2000);
  86. sql_command varchar(2000);
  87. _ret promogest.resultid;
  88. _rec record;
  89. BEGIN
  90. -- Memorizza schema precedente
  91. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS('t'),',');
  92. -- Imposta schema corrente
  93. sql_command:= 'SET SEARCH_PATH TO ' || _schema;
  94. EXECUTE sql_command;
  95. SELECT INTO _ret * FROM promogest.AssociazioneArticoloInsUpd(_schema, _idutente, _id, _id_padre, _id_figlio, _posizione);
  96. -- reimposta lo schema precedente
  97. sql_command:= 'SET SEARCH_PATH TO ' || schema_prec;
  98. EXECUTE sql_command;
  99. RETURN _ret;
  100. END;
  101. $$ LANGUAGE plpgsql;
  102. DROP FUNCTION promogest.AssociazioneArticoloGet(varchar, bigint, bigint) CASCADE;
  103. CREATE OR REPLACE FUNCTION promogest.AssociazioneArticoloGet(varchar, bigint, bigint) RETURNS SETOF promogest.associazione_articoli_sel_type AS
  104. $$
  105. DECLARE
  106. -- Parametri contesto
  107. _schema ALIAS FOR $1;
  108. _idutente ALIAS FOR $2;
  109. -- Parametri tabella
  110. _id ALIAS FOR $3;
  111. schema_prec varchar(2000);
  112. sql_command varchar(2000);
  113. v_row record;
  114. BEGIN
  115. -- Memorizza schema precedente
  116. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS('t'),',');
  117. -- Imposta schema corrente
  118. sql_command:= 'SET SEARCH_PATH TO ' || _schema;
  119. EXECUTE sql_command;
  120. FOR v_row IN SELECT * FROM v_nodo_associazione_articoli AA WHERE AA.id = _id LOOP
  121. RETURN NEXT v_row;
  122. END LOOP;
  123. -- Imposta schema precedente
  124. sql_command:= 'SET SEARCH_PATH TO ' || schema_prec;
  125. EXECUTE sql_command;
  126. RETURN;
  127. END;
  128. $$ LANGUAGE plpgsql;
  129. DROP FUNCTION promogest.AssociazioneArticoloDel(varchar, bigint, bigint) CASCADE;
  130. CREATE OR REPLACE FUNCTION promogest.AssociazioneArticoloDel(varchar, bigint, bigint) RETURNS promogest.resultid AS
  131. $$
  132. DECLARE
  133. -- Parametri contesto
  134. _schema ALIAS FOR $1;
  135. _idutente ALIAS FOR $2;
  136. -- Parametri tabella
  137. _id ALIAS FOR $3;
  138. schema_prec varchar(2000);
  139. sql_command varchar(2000);
  140. _ret promogest.resultid;
  141. _rec record;
  142. BEGIN
  143. -- Memorizza schema precedente
  144. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS('t'),',');
  145. -- Imposta schema corrente
  146. sql_command:= 'SET SEARCH_PATH TO ' || _schema;
  147. EXECUTE sql_command;
  148. SELECT INTO _ret * FROM promogest.ObjectDel(_schema, _idutente, 'associazioni_articoli', _id, 'id');
  149. -- Imposta schema precedente
  150. sql_command:= 'SET SEARCH_PATH TO ' || schema_prec;
  151. EXECUTE sql_command;
  152. RETURN _ret;
  153. END;
  154. $$ LANGUAGE plpgsql;
  155. DROP FUNCTION promogest.AssociazioneArticoloSel(varchar, bigint, boolean, bigint, varchar, varchar, varchar, varchar, varchar, varchar, bigint, bigint, bigint, boolean, bigint, bigint) CASCADE;
  156. CREATE OR REPLACE FUNCTION promogest.AssociazioneArticoloSel(varchar, bigint, boolean, bigint, varchar, varchar, varchar, varchar, varchar, varchar, bigint, bigint, bigint, boolean, bigint, bigint) RETURNS SETOF promogest.associazione_articoli_sel_type AS
  157. $$
  158. DECLARE
  159. -- Parametri contesto
  160. _schema ALIAS FOR $1;
  161. _idutente ALIAS FOR $2;
  162. -- Parametri procedura
  163. _nodo ALIAS FOR $3;
  164. _id_associato ALIAS FOR $4;
  165. _orderby ALIAS FOR $5;
  166. _denominazione ALIAS FOR $6;
  167. _codice ALIAS FOR $7;
  168. _codice_a_barre ALIAS FOR $8;
  169. _codice_articolo_fornitore ALIAS FOR $9;
  170. _produttore ALIAS FOR $10;
  171. _id_famiglia ALIAS FOR $11;
  172. _id_categoria ALIAS FOR $12;
  173. _id_stato ALIAS FOR $13;
  174. _cancellato ALIAS FOR $14;
  175. _offset ALIAS FOR $15;
  176. _count ALIAS FOR $16;
  177. schema_prec varchar(2000);
  178. sql_statement varchar(2000);
  179. sql_cond varchar(2000);
  180. limitstring varchar(500);
  181. _add varchar(500);
  182. OrderBy varchar(200);
  183. v_row record;
  184. _tablename varchar;
  185. BEGIN
  186. -- Memorizza schema precedente
  187. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS('t'),',');
  188. -- Imposta schema corrente
  189. sql_statement:= 'SET SEARCH_PATH TO ' || _schema;
  190. EXECUTE sql_statement;
  191. IF _nodo IS NOT NULL THEN
  192. IF _nodo = 't' THEN
  193. sql_statement:= 'SELECT * FROM v_nodo_associazione_articoli ';
  194. ELSE
  195. sql_statement:= 'SELECT * FROM v_elemento_associazione_articoli ';
  196. END IF;
  197. ELSE
  198. sql_statement:= 'SELECT * FROM v_elemento_associazione_articoli ';
  199. END IF;
  200. sql_cond:='';
  201. IF _orderby IS NULL THEN
  202. OrderBy = 'denominazione ';
  203. ELSE
  204. OrderBy = _orderby;
  205. END IF;
  206. IF _id_associato IS NOT NULL THEN
  207. _add:= 'id_associato = ' || _id_associato ;
  208. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  209. END IF;
  210. IF _denominazione IS NOT NULL THEN
  211. _add:= 'denominazione ILIKE \'' || _denominazione || '\' ';
  212. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  213. END IF;
  214. IF _produttore IS NOT NULL THEN
  215. _add:= 'produttore ILIKE \'' || _produttore || '\' ';
  216. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  217. END IF;
  218. IF _codice IS NOT NULL THEN
  219. _add:= 'codice ILIKE \'' || _codice || '\' ';
  220. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  221. END IF;
  222. IF _codice_a_barre IS NOT NULL THEN
  223. _add:= 'id IN (SELECT id_articolo FROM codice_a_barre_articolo WHERE codice ILIKE \'' || _codice_a_barre || '\')';
  224. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  225. END IF;
  226. IF _codice_articolo_fornitore IS NOT NULL THEN
  227. _add:= 'id IN (SELECT id_articolo FROM fornitura WHERE codice_articolo_fornitore ILIKE \'' || _codice_articolo_fornitore || '\')';
  228. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  229. END IF;
  230. IF _id_famiglia IS NOT NULL THEN
  231. _add:= 'id_famiglia_articolo =' || _id_famiglia;
  232. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  233. END IF;
  234. IF _id_categoria IS NOT NULL THEN
  235. _add:= 'id_categoria_articolo =' || _id_categoria;
  236. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  237. END IF;
  238. IF _id_stato IS NOT NULL THEN
  239. _add:= 'id_stato_articolo = ' || _id_stato;
  240. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  241. END IF;
  242. IF _cancellato IS NOT NULL THEN
  243. IF _cancellato = True THEN
  244. _add:= 'cancellato = \'t\' ';
  245. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  246. ELSE
  247. _add:= 'cancellato = \'f\' ';
  248. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  249. END IF;
  250. END IF;
  251. IF _offset IS NULL AND _count IS NULL THEN
  252. limitstring:= '';
  253. ELSIF _offset IS NULL THEN
  254. limitstring:= ' limit ' || _count;
  255. ELSIF _count IS NULL THEN
  256. limitstring:= ' offset ' || _offset;
  257. ELSE
  258. limitstring:= ' LIMIT ' || _count || ' OFFSET ' || _offset;
  259. END IF;
  260. IF sql_cond != '' THEN
  261. sql_statement:= sql_statement || ' WHERE ' || sql_cond || ' ORDER BY ' || OrderBy || limitstring;
  262. ELSE
  263. sql_statement:= sql_statement || ' ORDER BY ' || OrderBy || limitstring;
  264. END IF;
  265. FOR v_row IN EXECUTE sql_statement LOOP
  266. RETURN NEXT v_row;
  267. END LOOP;
  268. -- Imposta schema precedente
  269. sql_statement:= 'SET SEARCH_PATH TO ' || schema_prec;
  270. EXECUTE sql_statement;
  271. RETURN;
  272. END;
  273. $$ LANGUAGE plpgsql;
  274. DROP FUNCTION promogest.AssociazioneArticoloSelCount(varchar, bigint, boolean, bigint, varchar, varchar, varchar, varchar, varchar, bigint, bigint, bigint, boolean) CASCADE;
  275. CREATE OR REPLACE FUNCTION promogest.AssociazioneArticoloSelCount(varchar, bigint, boolean, bigint, varchar, varchar, varchar, varchar, varchar, varchar, bigint, bigint, bigint, boolean, bigint, bigint) RETURNS SETOF promogest.associazione_articoli_sel_count_type AS
  276. $$
  277. DECLARE
  278. -- Parametri contesto
  279. _schema ALIAS FOR $1;
  280. _idutente ALIAS FOR $2;
  281. -- Parametri procedura
  282. _nodo ALIAS FOR $3;
  283. _id_associato ALIAS FOR $4;
  284. _orderby ALIAS FOR $5;
  285. _denominazione ALIAS FOR $6;
  286. _codice ALIAS FOR $7;
  287. _codice_a_barre ALIAS FOR $8;
  288. _codice_articolo_fornitore ALIAS FOR $9;
  289. _produttore ALIAS FOR $10;
  290. _id_famiglia ALIAS FOR $11;
  291. _id_categoria ALIAS FOR $12;
  292. _id_stato ALIAS FOR $13;
  293. _cancellato ALIAS FOR $14;
  294. _offset ALIAS FOR $15;
  295. _count ALIAS FOR $16;
  296. schema_prec varchar(2000);
  297. sql_statement varchar(2000);
  298. sql_cond varchar(2000);
  299. limitstring varchar(500);
  300. _add varchar(500);
  301. OrderBy varchar(200);
  302. v_row record;
  303. _tablename varchar;
  304. BEGIN
  305. -- Memorizza schema precedente
  306. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS('t'),',');
  307. -- Imposta schema corrente
  308. sql_statement:= 'SET SEARCH_PATH TO ' || _schema;
  309. EXECUTE sql_statement;
  310. sql_cond:='';
  311. IF _nodo IS NOT NULL THEN
  312. IF _nodo = 't' THEN
  313. sql_statement:= 'SELECT COUNT(id) FROM v_nodo_associazione_articoli ';
  314. ELSE
  315. sql_statement:= 'SELECT COUNT(id) FROM v_elemento_associazione_articoli ';
  316. END IF;
  317. ELSE
  318. sql_statement:= 'SELECT * FROM v_nodo_associazione_articoli ';
  319. END IF;
  320. IF _orderby IS NULL THEN
  321. OrderBy = 'denominazione ';
  322. ELSE
  323. OrderBy = _orderby;
  324. END IF;
  325. IF _id_associato IS NOT NULL THEN
  326. _add:= 'id_associato = ' || _id_associato ;
  327. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  328. END IF;
  329. IF _denominazione IS NOT NULL THEN
  330. _add:= 'denominazione ILIKE \'' || _denominazione || '\' ';
  331. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  332. END IF;
  333. IF _produttore IS NOT NULL THEN
  334. _add:= 'produttore ILIKE \'' || _produttore || '\' ';
  335. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  336. END IF;
  337. IF _codice IS NOT NULL THEN
  338. _add:= 'codice ILIKE \'' || _codice || '\' ';
  339. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  340. END IF;
  341. IF _codice_a_barre IS NOT NULL THEN
  342. _add:= 'id IN (SELECT id_articolo FROM codice_a_barre_articolo WHERE codice ILIKE \'' || _codice_a_barre || '\')';
  343. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  344. END IF;
  345. IF _codice_articolo_fornitore IS NOT NULL THEN
  346. _add:= 'id IN (SELECT id_articolo FROM fornitura WHERE codice_articolo_fornitore ILIKE \'' || _codice_articolo_fornitore || '\')';
  347. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  348. END IF;
  349. IF _id_famiglia IS NOT NULL THEN
  350. _add:= 'id_famiglia_articolo =' || _id_famiglia;
  351. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  352. END IF;
  353. IF _id_categoria IS NOT NULL THEN
  354. _add:= 'id_categoria_articolo =' || _id_categoria;
  355. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  356. END IF;
  357. IF _id_stato IS NOT NULL THEN
  358. _add:= 'id_stato_articolo = ' || _id_stato;
  359. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  360. END IF;
  361. IF _cancellato IS NOT NULL THEN
  362. IF _cancellato = True THEN
  363. _add:= 'cancellato = \'t\' ';
  364. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  365. ELSE
  366. _add:= 'cancellato = \'f\' ';
  367. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  368. END IF;
  369. END IF;
  370. IF _offset IS NULL AND _count IS NULL THEN
  371. limitstring:= '';
  372. ELSIF _offset IS NULL THEN
  373. limitstring:= ' limit ' || _count;
  374. ELSIF _count IS NULL THEN
  375. limitstring:= ' offset ' || _offset;
  376. ELSE
  377. limitstring:= ' LIMIT ' || _count || ' OFFSET ' || _offset;
  378. END IF;
  379. IF sql_cond != '' THEN
  380. sql_statement:= sql_statement || ' WHERE ' || sql_cond;
  381. END IF;
  382. FOR v_row IN EXECUTE sql_statement LOOP
  383. RETURN NEXT v_row;
  384. END LOOP;
  385. -- Imposta schema precedente
  386. sql_statement:= 'SET SEARCH_PATH TO ' || schema_prec;
  387. EXECUTE sql_statement;
  388. RETURN;
  389. END;
  390. $$ LANGUAGE plpgsql;