PageRenderTime 46ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/core/promogest/modules/Pagamenti/data/app/testata_documento_app.sql

http://promogest.googlecode.com/
SQL | 603 lines | 565 code | 16 blank | 22 comment | 0 complexity | 5a98d832bef02e181661794f854b00e3 MD5 | raw file
Possible License(s): GPL-2.0
  1. --
  2. -- Copyright (C) 2005 by Promotux Informatica - http://www.promotux.it/
  3. -- Author: Alessandro Scano <alessandro@promotux.it>
  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. testata_documento - Stored procedure applicativa
  20. */
  21. DROP FUNCTION promogest.testatadocumentoset("varchar", int8, int8, int4, int4, "varchar", "varchar", date, "timestamp", "varchar", text, "varchar", "varchar", "varchar", "timestamp", "timestamp", "varchar", int4, "varchar", "varchar", int8, int8, int8, int8, int8, int8, int8, int8, "varchar", "numeric", bool);
  22. DROP FUNCTION promogest.TestataDocumentoSet(varchar, bigint, bigint, integer, integer, varchar, varchar, date, timestamp, varchar, text, varchar, varchar, varchar, timestamp, timestamp, varchar, integer, varchar, varchar, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, varchar, boolean, decimal(16,4), decimal(16,4), bigint, bigint, decimal(16,4), boolean);
  23. CREATE OR REPLACE FUNCTION promogest.TestataDocumentoSet(varchar, bigint, bigint, integer, integer, varchar, varchar, date, timestamp, varchar, text, varchar, varchar, varchar, timestamp, timestamp, varchar, integer, varchar, varchar, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, varchar, boolean, decimal(16,4), decimal(16,4), bigint, bigint, decimal(16,4), boolean) RETURNS promogest.resultid AS E'
  24. DECLARE
  25. -- Parametri contesto
  26. _schema ALIAS FOR $1;
  27. _idutente ALIAS FOR $2;
  28. -- Parametri tabella
  29. _id ALIAS FOR $3;
  30. _numero ALIAS FOR $4;
  31. _parte ALIAS FOR $5;
  32. _registro_numerazione ALIAS FOR $6;
  33. _operazione ALIAS FOR $7;
  34. _data_documento ALIAS FOR $8;
  35. _data_inserimento ALIAS FOR $9;
  36. _protocollo ALIAS FOR $10;
  37. _note_interne ALIAS FOR $11;
  38. _note_pie_pagina ALIAS FOR $12;
  39. _causale_trasporto ALIAS FOR $13;
  40. _aspetto_esteriore_beni ALIAS FOR $14;
  41. _inizio_trasporto ALIAS FOR $15;
  42. _fine_trasporto ALIAS FOR $16;
  43. _incaricato_trasporto ALIAS FOR $17;
  44. _totale_colli ALIAS FOR $18;
  45. _totale_peso ALIAS FOR $19;
  46. _applicazione_sconti ALIAS FOR $20;
  47. _id_cliente ALIAS FOR $21;
  48. _id_fornitore ALIAS FOR $22;
  49. _id_destinazione_merce ALIAS FOR $23;
  50. _id_pagamento ALIAS FOR $24;
  51. _id_banca ALIAS FOR $25;
  52. _id_aliquota_iva_esenzione ALIAS FOR $26;
  53. _id_vettore ALIAS FOR $27;
  54. _id_agente ALIAS FOR $28;
  55. _porto ALIAS FOR $29;
  56. _documento_saldato ALIAS FOR $30;
  57. _totale_pagato ALIAS FOR $31;
  58. _totale_sospeso ALIAS FOR $32;
  59. _id_primo_riferimento ALIAS FOR $33;
  60. _id_secondo_riferimento ALIAS FOR $34;
  61. _costo_da_ripartire ALIAS FOR $35;
  62. _ripartire_importo ALIAS FOR $36;
  63. _number integer;
  64. _registro varchar(100);
  65. schema_prec varchar(2000);
  66. sql_command varchar(2000);
  67. _ret promogest.resultid;
  68. _rec record;
  69. BEGIN
  70. -- Memorizza schema precedente
  71. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS(\'t\'),\',\');
  72. -- Imposta schema corrente
  73. sql_command:= \'SET SEARCH_PATH TO \' || _schema;
  74. EXECUTE sql_command;
  75. -- Se siamo in inserimento ottengo il registro ed il prossimo numero
  76. IF _id IS NULL THEN
  77. SELECT numero, registro INTO _number, _registro FROM promogest.NumeroRegistroGet(_operazione, _data_documento);
  78. ELSE
  79. _number:=_numero;
  80. END IF;
  81. SELECT INTO _ret * FROM promogest.TestataDocumentoInsUpd(_schema, _idutente, _id, _number, _parte, _registro, _operazione, _data_documento, _data_inserimento, _protocollo, _note_interne, _note_pie_pagina, _causale_trasporto, _aspetto_esteriore_beni, _inizio_trasporto, _fine_trasporto, _incaricato_trasporto, _totale_colli, _totale_peso, _applicazione_sconti, _id_cliente, _id_fornitore, _id_destinazione_merce, _id_pagamento, _id_banca, _id_aliquota_iva_esenzione, _id_vettore, _id_agente, _porto, _documento_saldato, _totale_pagato, _totale_sospeso, _id_primo_riferimento, _id_secondo_riferimento, _costo_da_ripartire, _ripartire_importo);
  82. -- Imposta schema precedente
  83. sql_command:= \'SET SEARCH_PATH TO \' || schema_prec;
  84. EXECUTE sql_command;
  85. RETURN _ret;
  86. END;
  87. ' LANGUAGE plpgsql;
  88. DROP FUNCTION promogest.TestataDocumentoDel(varchar, bigint, bigint) CASCADE;
  89. CREATE OR REPLACE FUNCTION promogest.TestataDocumentoDel(varchar, bigint, bigint) RETURNS promogest.resultid AS E'
  90. DECLARE
  91. -- Parametri contesto
  92. _schema ALIAS FOR $1;
  93. _idutente ALIAS FOR $2;
  94. -- Parametri tabella
  95. _id ALIAS FOR $3;
  96. schema_prec varchar(2000);
  97. sql_command varchar(2000);
  98. _ret promogest.resultid;
  99. _rec record;
  100. BEGIN
  101. -- Memorizza schema precedente
  102. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS(\'t\'),\',\');
  103. -- Imposta schema corrente
  104. sql_command:= \'SET SEARCH_PATH TO \' || _schema;
  105. EXECUTE sql_command;
  106. SELECT INTO _ret * FROM promogest.ObjectDel(_schema, _idutente, \'informazioni_fatturazione_documento\', _id, \'id_fattura\');
  107. SELECT INTO _ret * FROM promogest.RigheDocumentoDel(_schema, _idutente, _id);
  108. SELECT INTO _ret * FROM promogest.ObjectDel(_schema, _idutente, \'informazioni_contabili_documento\', _id, \'id_documento\');
  109. SELECT INTO _ret * FROM promogest.ObjectDel(_schema, _idutente, \'testata_documento_scadenza\', _id, \'id_testata_documento\');
  110. SELECT INTO _ret * FROM promogest.ObjectDel(_schema, _idutente, \'testata_documento\', _id, \'id\');
  111. -- Imposta schema precedente
  112. sql_command:= \'SET SEARCH_PATH TO \' || schema_prec;
  113. EXECUTE sql_command;
  114. RETURN _ret;
  115. END;
  116. ' LANGUAGE plpgsql;
  117. DROP FUNCTION promogest.TestataDocumentoGet(varchar, bigint, bigint) CASCADE;
  118. DROP FUNCTION promogest.testatadocumentosel("varchar", int8, "varchar", int4, int4, int4, int4, date, date, "varchar", "varchar", int8, int8, int8, int8, int8, int8, int8);
  119. DROP FUNCTION promogest.TestataDocumentoSel(varchar, bigint, varchar, integer, integer, integer, integer, date, date, varchar, varchar, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint) CASCADE;
  120. DROP FUNCTION promogest.testatadocumentoselcount("varchar", int8, "varchar", int4, int4, int4, int4, date, date, "varchar", "varchar", int8, int8, int8, int8, int8, int8, int8);
  121. DROP FUNCTION promogest.TestataDocumentoSelCount(varchar, bigint, varchar, integer, integer, integer, integer, date, date, varchar, varchar, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint) CASCADE;
  122. DROP TYPE promogest.testata_documento_type CASCADE;
  123. DROP TYPE promogest.testata_documento_sel_type CASCADE;
  124. DROP TYPE promogest.testata_documento_sel_count_type CASCADE;
  125. CREATE TYPE promogest.testata_documento_type AS (
  126. id bigint
  127. ,numero integer
  128. ,parte integer
  129. ,registro_numerazione varchar
  130. ,operazione varchar
  131. ,data_documento date
  132. ,data_inserimento timestamp
  133. ,protocollo varchar
  134. ,note_interne text
  135. ,note_pie_pagina varchar
  136. ,causale_trasporto varchar
  137. ,aspetto_esteriore_beni varchar
  138. ,inizio_trasporto timestamp
  139. ,fine_trasporto timestamp
  140. ,incaricato_trasporto varchar
  141. ,totale_colli integer
  142. ,totale_peso varchar
  143. ,applicazione_sconti varchar
  144. ,id_cliente bigint
  145. ,id_fornitore bigint
  146. ,id_destinazione_merce bigint
  147. ,id_pagamento bigint
  148. ,id_banca bigint
  149. ,id_aliquota_iva_esenzione bigint
  150. ,id_vettore bigint
  151. ,id_agente bigint
  152. ,porto varchar
  153. ,documento_saldato boolean
  154. ,totale_pagato decimal(16,4)
  155. ,totale_sospeso decimal(16,4)
  156. ,id_primo_riferimento bigint
  157. ,id_secondo_riferimento bigint
  158. ,costo_da_ripartire decimal(16,4)
  159. ,ripartire_importo boolean
  160. );
  161. CREATE TYPE promogest.testata_documento_sel_type AS (
  162. id bigint
  163. ,numero integer
  164. ,parte integer
  165. ,registro_numerazione varchar
  166. ,operazione varchar
  167. ,data_documento date
  168. ,data_inserimento timestamp
  169. ,protocollo varchar
  170. ,note_interne text
  171. ,note_pie_pagina varchar
  172. ,causale_trasporto varchar
  173. ,aspetto_esteriore_beni varchar
  174. ,inizio_trasporto timestamp
  175. ,fine_trasporto timestamp
  176. ,incaricato_trasporto varchar
  177. ,totale_colli integer
  178. ,totale_peso varchar
  179. ,applicazione_sconti varchar
  180. ,id_cliente bigint
  181. ,id_fornitore bigint
  182. ,id_destinazione_merce bigint
  183. ,id_pagamento bigint
  184. ,id_banca bigint
  185. ,id_aliquota_iva_esenzione bigint
  186. ,id_vettore bigint
  187. ,id_agente bigint
  188. ,porto varchar
  189. ,documento_saldato boolean
  190. ,totale_pagato decimal(16,4)
  191. ,totale_sospeso decimal(16,4)
  192. ,id_primo_riferimento bigint
  193. ,id_secondo_riferimento bigint
  194. ,costo_da_ripartire decimal(16,4)
  195. ,ripartire_importo boolean
  196. ,ragione_sociale_cliente varchar
  197. ,cognome_cliente varchar
  198. ,nome_cliente varchar
  199. ,indirizzo_cliente varchar
  200. ,localita_cliente varchar
  201. ,cap_cliente char
  202. ,provincia_cliente varchar
  203. ,codice_fiscale_cliente varchar
  204. ,partita_iva_cliente varchar
  205. ,ragione_sociale_fornitore varchar
  206. ,cognome_fornitore varchar
  207. ,nome_fornitore varchar
  208. ,indirizzo_fornitore varchar
  209. ,localita_fornitore varchar
  210. ,cap_fornitore char
  211. ,provincia_fornitore varchar
  212. ,codice_fiscale_fornitore varchar
  213. ,partita_iva_fornitore varchar
  214. ,destinazione_merce varchar
  215. ,indirizzo_destinazione_merce varchar
  216. ,localita_destinazione_merce varchar
  217. ,cap_destinazione_merce char
  218. ,provincia_destinazione_merce varchar
  219. ,pagamento varchar
  220. ,banca varchar
  221. ,agenzia varchar
  222. ,iban varchar
  223. ,aliquota_iva_esenzione varchar
  224. ,ragione_sociale_vettore varchar
  225. ,ragione_sociale_agente varchar
  226. );
  227. CREATE TYPE promogest.testata_documento_sel_count_type AS (
  228. count bigint
  229. );
  230. CREATE OR REPLACE FUNCTION promogest.TestataDocumentoGet(varchar, bigint, bigint) RETURNS SETOF promogest.testata_documento_type AS E'
  231. DECLARE
  232. -- Parametri contesto
  233. _schema ALIAS FOR $1;
  234. _idutente ALIAS FOR $2;
  235. -- Parametri tabella
  236. _id ALIAS FOR $3;
  237. schema_prec varchar(2000);
  238. sql_command varchar(2000);
  239. v_row record;
  240. BEGIN
  241. -- Memorizza schema precedente
  242. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS(\'t\'),\',\');
  243. -- Imposta schema corrente
  244. sql_command:= \'SET SEARCH_PATH TO \' || _schema;
  245. EXECUTE sql_command;
  246. FOR v_row IN SELECT * FROM v_testata_documento WHERE id = _id LOOP
  247. RETURN NEXT v_row;
  248. END LOOP;
  249. -- Imposta schema precedente
  250. sql_command:= \'SET SEARCH_PATH TO \' || schema_prec;
  251. EXECUTE sql_command;
  252. RETURN;
  253. END;
  254. ' LANGUAGE plpgsql;
  255. CREATE OR REPLACE FUNCTION promogest.TestataDocumentoSel(varchar, bigint, varchar, integer, integer, integer, integer, date, date, varchar, varchar, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint) RETURNS SETOF promogest.testata_documento_sel_type AS E'
  256. DECLARE
  257. -- Parametri contesto
  258. _schema ALIAS FOR $1;
  259. _idutente ALIAS FOR $2;
  260. -- Parametri procedura
  261. _orderby ALIAS FOR $3;
  262. _da_numero ALIAS FOR $4;
  263. _a_numero ALIAS FOR $5;
  264. _da_parte ALIAS FOR $6;
  265. _a_parte ALIAS FOR $7;
  266. _da_data_documento ALIAS FOR $8;
  267. _a_data_documento ALIAS FOR $9;
  268. _protocollo ALIAS FOR $10;
  269. _operazione ALIAS FOR $11;
  270. _id_magazzino ALIAS FOR $12;
  271. _id_cliente ALIAS FOR $13;
  272. _id_fornitore ALIAS FOR $14;
  273. _id_agente ALIAS FOR $15;
  274. _documento_saldato ALIAS FOR $16;
  275. _id_articolo ALIAS FOR $17;
  276. _offset ALIAS FOR $18;
  277. _count ALIAS FOR $19;
  278. schema_prec varchar(2000);
  279. sql_statement varchar(2000);
  280. sql_cond varchar(2000);
  281. limitstring varchar(500);
  282. _add varchar(500);
  283. OrderBy varchar(200);
  284. v_row record;
  285. _tablename varchar;
  286. condition varchar(10);
  287. BEGIN
  288. -- Memorizza schema precedente
  289. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS(\'t\'),\',\');
  290. -- Imposta schema corrente
  291. sql_statement:= \'SET SEARCH_PATH TO \' || _schema;
  292. EXECUTE sql_statement;
  293. sql_statement:= \'SELECT TD.* FROM v_testata_documento_completa TD \';
  294. sql_cond:=\'\';
  295. IF _orderby IS NULL THEN
  296. OrderBy = \' TD.numero \';
  297. ELSE
  298. OrderBy = _orderby;
  299. END IF;
  300. IF _da_numero IS NOT NULL THEN
  301. _add:= \' ( TD.numero >= \' || _da_numero || \') \';
  302. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  303. END IF;
  304. IF _a_numero IS NOT NULL THEN
  305. _add:= \' ( TD.numero <= \' || _a_numero || \') \';
  306. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  307. END IF;
  308. IF _da_parte IS NOT NULL THEN
  309. _add:= \' ( TD.parte >= \' || _da_parte || \') \';
  310. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  311. END IF;
  312. IF _a_parte IS NOT NULL THEN
  313. _add:= \' ( TD.parte <= \' || _a_parte || \') \';
  314. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  315. END IF;
  316. IF _da_data_documento IS NOT NULL THEN
  317. _add:= \' ( TD.data_documento >= \' || QUOTE_LITERAL(_da_data_documento) || \') \';
  318. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  319. END IF;
  320. IF _a_data_documento IS NOT NULL THEN
  321. _add:= \' ( TD.data_documento <= \' || QUOTE_LITERAL(_a_data_documento) || \') \';
  322. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  323. END IF;
  324. IF _protocollo IS NOT NULL THEN
  325. _add:= \' TD.protocollo ILIKE \'\'%\' || _protocollo || \'%\'\'\';
  326. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  327. END IF;
  328. IF _operazione IS NOT NULL THEN
  329. _add:= \' TD.operazione = \' || QUOTE_LITERAL(_operazione);
  330. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  331. END IF;
  332. IF _id_magazzino IS NOT NULL THEN
  333. _add:= \' TD.id IN (SELECT id_testata_documento FROM v_riga_documento WHERE id_magazzino = \' || _id_magazzino || \') \';
  334. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  335. END IF;
  336. IF _id_cliente IS NOT NULL THEN
  337. _add:= \' TD.id_cliente = \' || _id_cliente;
  338. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  339. ELSE
  340. SELECT INTO _tablename * FROM promogest.ClienteFilteredExists(_schema, _idutente);
  341. IF _tablename <> \'\' THEN
  342. sql_statement:= sql_statement || \' INNER JOIN \' || _tablename || \' CF ON TD.id_cliente = CF.id\';
  343. END IF;
  344. END IF;
  345. IF _id_fornitore IS NOT NULL THEN
  346. _add:= \' TD.id_fornitore = \' || _id_fornitore;
  347. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  348. ELSE
  349. SELECT INTO _tablename * FROM promogest.FornitoreFilteredExists(_schema, _idutente);
  350. IF _tablename <> \'\' THEN
  351. sql_statement:= sql_statement || \' INNER JOIN \' || _tablename || \' FF ON TD.id_fornitore = FF.id\';
  352. END IF;
  353. END IF;
  354. IF _id_agente IS NOT NULL THEN
  355. _add:= \' TD.id_agente = \' || _id_agente;
  356. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  357. END IF;
  358. IF _documento_saldato = 1 THEN
  359. condition:= \'f\';
  360. _add:= \' ( TD.documento_saldato = \' || QUOTE_LITERAL(condition) || \') \';
  361. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  362. END IF;
  363. IF _documento_saldato = 2 THEN
  364. condition:= \'t\';
  365. _add:= \' ( TD.documento_saldato = \' || QUOTE_LITERAL(condition) || \') \';
  366. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  367. END IF;
  368. if _id_articolo IS NOT NULL THEN
  369. _add:= \' TD.id in (select RD.id_testata_documento from v_riga_documento RD where RD.id in (select R.id from riga R Where id_articolo = \' || _id_articolo || \' ))\';
  370. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  371. END IF;
  372. IF _offset IS NULL THEN
  373. limitstring:= \'\';
  374. ELSE
  375. limitstring:= \' LIMIT \' || _count || \' OFFSET \' || _offset;
  376. END IF;
  377. IF sql_cond != \'\' THEN
  378. sql_statement:= sql_statement || \' WHERE \' || sql_cond || \'ORDER BY \' || OrderBy || limitstring;
  379. ELSE
  380. sql_statement:= sql_statement || \' ORDER BY \' || OrderBy || limitstring;
  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;
  391. CREATE OR REPLACE FUNCTION promogest.TestataDocumentoSelCount(varchar, bigint, varchar, integer, integer, integer, integer, date, date, varchar, varchar, bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint) RETURNS SETOF promogest.testata_documento_sel_count_type AS E'
  392. DECLARE
  393. -- Parametri contesto
  394. _schema ALIAS FOR $1;
  395. _idutente ALIAS FOR $2;
  396. -- Parametri procedura
  397. _orderby ALIAS FOR $3;
  398. _da_numero ALIAS FOR $4;
  399. _a_numero ALIAS FOR $5;
  400. _da_parte ALIAS FOR $6;
  401. _a_parte ALIAS FOR $7;
  402. _da_data_documento ALIAS FOR $8;
  403. _a_data_documento ALIAS FOR $9;
  404. _protocollo ALIAS FOR $10;
  405. _operazione ALIAS FOR $11;
  406. _id_magazzino ALIAS FOR $12;
  407. _id_cliente ALIAS FOR $13;
  408. _id_fornitore ALIAS FOR $14;
  409. _id_agente ALIAS FOR $15;
  410. _documento_saldato ALIAS FOR $16;
  411. _id_articolo ALIAS FOR $17;
  412. _offset ALIAS FOR $18;
  413. _count ALIAS FOR $19;
  414. schema_prec varchar(2000);
  415. sql_statement varchar(2000);
  416. sql_cond varchar(2000);
  417. limitstring varchar(500);
  418. _add varchar(500);
  419. OrderBy varchar(200);
  420. v_row record;
  421. _tablename varchar;
  422. condition varchar(10);
  423. BEGIN
  424. -- Memorizza schema precedente
  425. schema_prec:= ARRAY_TO_STRING(CURRENT_SCHEMAS(\'t\'),\',\');
  426. -- Imposta schema corrente
  427. sql_statement:= \'SET SEARCH_PATH TO \' || _schema;
  428. EXECUTE sql_statement;
  429. sql_statement:= \'SELECT COUNT(TD.id) FROM v_testata_documento_completa TD \';
  430. sql_cond:=\'\';
  431. IF _da_numero IS NOT NULL THEN
  432. _add:= \' ( TD.numero >= \' || _da_numero || \') \';
  433. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  434. END IF;
  435. IF _a_numero IS NOT NULL THEN
  436. _add:= \' ( TD.numero <= \' || _a_numero || \') \';
  437. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  438. END IF;
  439. IF _da_parte IS NOT NULL THEN
  440. _add:= \' ( TD.parte >= \' || _da_parte || \') \';
  441. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  442. END IF;
  443. IF _a_parte IS NOT NULL THEN
  444. _add:= \' (TD.parte <= \' || _a_parte || \') \';
  445. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  446. END IF;
  447. IF _da_data_documento IS NOT NULL THEN
  448. _add:= \' ( TD.data_documento >= \' || QUOTE_LITERAL(_da_data_documento) || \') \';
  449. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  450. END IF;
  451. IF _a_data_documento IS NOT NULL THEN
  452. _add:= \' ( TD.data_documento <= \' || QUOTE_LITERAL(_a_data_documento) || \') \';
  453. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  454. END IF;
  455. IF _protocollo IS NOT NULL THEN
  456. _add:= \' TD.protocollo ILIKE \'\'%\' || _protocollo || \'%\'\'\';
  457. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  458. END IF;
  459. IF _operazione IS NOT NULL THEN
  460. _add:= \' TD.operazione = \' || QUOTE_LITERAL(_operazione);
  461. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  462. END IF;
  463. IF _id_magazzino IS NOT NULL THEN
  464. _add:= \' TD.id IN (SELECT id_testata_documento FROM v_riga_documento WHERE id_magazzino = \' || _id_magazzino || \') \';
  465. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  466. END IF;
  467. IF _id_cliente IS NOT NULL THEN
  468. _add:= \' TD.id_cliente = \' || _id_cliente;
  469. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  470. ELSE
  471. SELECT INTO _tablename * FROM promogest.ClienteFilteredExists(_schema, _idutente);
  472. IF _tablename <> \'\' THEN
  473. sql_statement:= sql_statement || \' INNER JOIN \' || _tablename || \' CF ON TD.id_cliente = CF.id\';
  474. END IF;
  475. END IF;
  476. IF _id_fornitore IS NOT NULL THEN
  477. _add:= \' TD.id_fornitore = \' || _id_fornitore;
  478. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  479. ELSE
  480. SELECT INTO _tablename * FROM promogest.FornitoreFilteredExists(_schema, _idutente);
  481. IF _tablename <> \'\' THEN
  482. sql_statement:= sql_statement || \' INNER JOIN \' || _tablename || \' FF ON TD.id_fornitore = FF.id\';
  483. END IF;
  484. END IF;
  485. IF _id_agente IS NOT NULL THEN
  486. _add:= \' TD.id_agente = \' || _id_agente ;
  487. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  488. END IF;
  489. IF _documento_saldato = 1 THEN
  490. condition:= \'f\';
  491. _add:= \' ( TD.documento_saldato = \' || QUOTE_LITERAL(condition) || \') \';
  492. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  493. END IF;
  494. IF _documento_saldato = 2 THEN
  495. condition:= \'t\';
  496. _add:= \' ( TD.documento_saldato = \' || QUOTE_LITERAL(condition) || \') \';
  497. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  498. END IF;
  499. IF _id_articolo IS NOT NULL THEN
  500. _add:= \' TD.id in (select RD.id_testata_documento from riga_documento RD where RD.id in (select R.id from riga R Where id_articolo = \' || _id_articolo || \' ))\';
  501. sql_cond:= promogest.sqlAddCondition(sql_cond,_add);
  502. END IF;
  503. IF sql_cond != \'\' THEN
  504. sql_statement:= sql_statement || \' WHERE \' || sql_cond;
  505. END IF;
  506. FOR v_row IN EXECUTE sql_statement LOOP
  507. RETURN NEXT v_row;
  508. END LOOP;
  509. -- Imposta schema precedente
  510. sql_statement:= \'SET SEARCH_PATH TO \' || schema_prec;
  511. EXECUTE sql_statement;
  512. RETURN;
  513. END;
  514. ' LANGUAGE plpgsql;