· 6 years ago · Jul 30, 2019, 02:51 PM
1-- Script complessivo
2-- Versione schema sense : 1.1.0
3-- Versione script : 1.1.0
4
5-- Lo script va lanciato per ditta
6-- Le scelte temporanee o modifiche particolari sono state prefissate dai caratteri @#@
7
8-- In testa mettiamo il comando di drop di tutte le tabelle solo se necessario deve essere tolto il commento
9-- drop sequence SENSE_SEQ_CHANGES;
10-- drop table SENSE_CHANGES_CLIFOR_ERP;
11-- drop table SENSE_CHANGES_CONTATTI_ERP;
12-- drop table SENSE_CHANGES_MOV_CONTAB_ERP;
13-- drop table SENSE_CHANGES_ORDINI_CLI_ERP;
14-- drop table SENSE_CHANGES_DDT_CLI_ERP;
15-- drop table SENSE_CHANGES_PROGETTI_ERP;
16-- drop table SENSE_CHANGES_ARTICOLI_ERP;
17-- drop table SENSE_CHANGES_DDT_FOR_ERP;
18-- drop table SENSE_CHANGES_ORDINI_FOR_ERP;
19-- drop table SENSE_CHANGES_ALL_DOCS_FDS;
20-- drop table SENSE_PAR_DOC_TYPE;
21
22-- A seguire troviamo una prima parte di oggetti comuni. Poi la creazione degli oggetti successivi sono raggruppati
23-- secondo la logica dei document Type
24
25-- Per ridurre la finestra temporale dei dati che verranno indicizzati sulle varie view bisogna andare a valorizzare
26-- in modo opportuno la tabella SENSE_PAR_DOC_TYPE dove per ciascun document type sarà possibile impostare da quale data
27-- verranno estratti i dati
28
29-- *********************************************************************************************************
30-- Create sequence utilizzato da tutte le tabelle che gestiscono i change
31create sequence SENSE_SEQ_CHANGES
32minvalue 1
33maxvalue 9999999999999999999999999999
34start with 1
35increment by 1
36cache 20;
37
38-- *********************************************************************************************************
39-- definizione tabella per parametrizzare per ciascun document type per il quale ha senso, una data dalla
40-- quale verranno presi in considerazione i dati nelle rispettive view
41
42create table SENSE_PAR_DOC_TYPE
43(
44 NOME_DOC_TYPE CHAR(40) CONSTRAINT SENSE_PAR_DOC_TYPE_N01 NOT NULL,
45 DATA_ESTRAZIONE DATE)
46 TABLESPACE data01
47/
48
49ALTER TABLE SENSE_PAR_DOC_TYPE
50ADD CONSTRAINT SENSE_PAR_DOC_TYPE_PK PRIMARY KEY (NOME_DOC_TYPE)
51USING INDEX TABLESPACE INDICI01
52/
53
54
55COMMENT ON TABLE SENSE_PAR_DOC_TYPE IS 'Parametri di configurazione per il singolo document type';
56COMMENT ON COLUMN SENSE_PAR_DOC_TYPE.NOME_DOC_TYPE IS 'Nome del document Type';
57COMMENT ON COLUMN SENSE_PAR_DOC_TYPE.DATA_ESTRAZIONE IS 'Utilizzata nelle view per decidere da quale data estrarre i documenti';
58
59
60INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
61 VALUES ('Fattura di vendita (ERP)',to_date('01011900','ddmmyyyy'));
62
63INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
64 VALUES ('Fattura di acquisto (ERP)',to_date('01011900','ddmmyyyy'));
65
66INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
67 VALUES ('Preventivo di vendita (ERP)',to_date('01011900','ddmmyyyy'));
68
69INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
70 VALUES ('Ordine di vendita (ERP)',to_date('01011900','ddmmyyyy'));
71
72INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
73 VALUES ('Documento di vendita (ERP)',to_date('01011900','ddmmyyyy'));
74
75INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
76 VALUES ('Documento di acquisto (ERP)',to_date('01011900','ddmmyyyy'));
77
78INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
79 VALUES ('Ordine di acquisto (ERP)',to_date('01011900','ddmmyyyy'));
80
81INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
82 VALUES ('Offerta di acquisto (ERP)',to_date('01011900','ddmmyyyy'));
83
84INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
85 VALUES ('Richiesta di acquisto (ERP)',to_date('01011900','ddmmyyyy'));
86
87INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
88 VALUES ('Fattura di acquisto (FDS)',to_date('01011900','ddmmyyyy'));
89
90INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
91 VALUES ('Ordine di vendita (FDS)',to_date('01011900','ddmmyyyy'));
92
93INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
94 VALUES ('Preventivo di vendita (FDS)',to_date('01011900','ddmmyyyy'));
95
96INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
97 VALUES ('Fattura di vendita (FDS)',to_date('01011900','ddmmyyyy'));
98
99INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
100 VALUES ('Ordine di acquisto (FDS)',to_date('01011900','ddmmyyyy'));
101
102INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
103 VALUES ('Offerta di acquisto (FDS)',to_date('01011900','ddmmyyyy'));
104
105INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
106 VALUES ('Richiesta di acquisto (FDS)',to_date('01011900','ddmmyyyy'));
107
108INSERT INTO SENSE_PAR_DOC_TYPE(NOME_DOC_TYPE,DATA_ESTRAZIONE)
109 VALUES ('Altri documenti (FDS)',to_date('01011900','ddmmyyyy'));
110
111
112-- *********************************************************************************************************
113-- Funzione aggiunta in mancanza della LISTAGG di Oracle che è presente solo a partire dalla versione Oracle 11
114CREATE OR REPLACE FUNCTION SENSE_SF_LISTAGG(p_cursor IN SYS_REFCURSOR,
115 p_delimiter IN VARCHAR2 DEFAULT ' ')
116 RETURN VARCHAR2
117IS
118 l_return VARCHAR2(32767);
119 l_temp VARCHAR2(32767);
120 verOracle NUMBER;
121BEGIN
122 -- Se ver Oracle > 10 genero errore perchè non deve essere richiamata questa SF ma la
123 -- LISTAGG presente in Oracle11
124 SELECT TO_NUMBER (SUBSTR (VALUE, 1, INSTR (VALUE, '.') - 1) )
125 INTO verOracle
126 FROM NLS_DATABASE_PARAMETERS
127 WHERE PARAMETER = 'NLS_RDBMS_VERSION';
128
129 IF verOracle > 10 then
130 RAISE_APPLICATION_ERROR(-20001,'Aggiornare le view del sense schema. Non devono utilizzare SENSE_SF_LIST_AGG ma la funzione di oracle LISTAGG');
131 END IF;
132 LOOP
133 FETCH p_cursor
134 INTO l_temp;
135 EXIT WHEN p_cursor%NOTFOUND;
136 l_return := l_return || p_delimiter || l_temp;
137 END LOOP;
138 RETURN LTRIM(l_return, ',');
139END;
140
141/
142
143-- *********************************************************************************************************
144-- Pkg che contiene funzioni/procedure varie
145CREATE OR REPLACE PACKAGE sense_pkg_varie IS
146
147-- -----------------------------------------------------------------------------------------
148-- Person Date Comments
149-- ------------ -------- -------------------------------------------------------------------
150-- Marina P. 08/05/17 Creazione package
151-- Alessio V. 22/05/17 Aggiunta
152
153K_CSS_TABLE_ROW CONSTANT CHAR(24) := 'sense-preview-table-row';
154K_CSS_TABLE CONSTANT CHAR(20) := 'sense-preview-table';
155K_CSS_TABLE_CELL CONSTANT CHAR(25) := 'sense-preview-table-cell';
156K_CSS_TABLE_HEADER CONSTANT CHAR(27) := 'sense-preview-table-header';
157K_CRLF CONSTANT CHAR(2) := CHR(13)||CHR(10);
158
159FUNCTION SF_TABLE_HTML(iDatiTabella IN CLOB) RETURN CLOB;
160FUNCTION SF_TABLE_CELL_HTML(iDatiCella IN CLOB, iSE_CRLF_PREFIX IN BOOLEAN default true, iSE_CRLF_SUFFIX BOOLEAN default false) RETURN CLOB;
161FUNCTION SF_TABLE_CELL_HTML(iDatiCella IN VARCHAR2, iSE_CRLF_PREFIX IN BOOLEAN default true, iSE_CRLF_SUFFIX BOOLEAN default false) RETURN CLOB;
162FUNCTION SF_TABLE_ROW_HTML(iDatiRiga IN CLOB, iSE_CRLF_PREFIX IN BOOLEAN default true) RETURN CLOB;
163FUNCTION SF_TABLE_HEADER_HTML(iTitolo IN VARCHAR2, iSE_CRLF_PREFIX IN BOOLEAN default false, iSE_CRLF_SUFFIX BOOLEAN default true) RETURN CLOB;
164
165PROCEDURE SP_APPEND_VARCHARC2_TO_CLOB(ioStr IN OUT CLOB, iStrToAppend IN VARCHAR2);
166
167END;
168
169/
170CREATE OR REPLACE PACKAGE BODY sense_pkg_varie IS
171
172 /* Funzione che riceve in ingresso i dati che devono essere contenuti in una tabella
173 Parametri: iDatiTabella: sono i dati che devono essere contenuti nella tabella html. Arrivano già formattati
174 Valore di ritorno: Un CLOB che contiene l'intero formato di rappresentazione di una tabella html
175 */
176
177FUNCTION SF_TABLE_HTML(iDatiTabella IN CLOB) RETURN CLOB
178IS
179 vTesto CLOB;
180BEGIN
181/*
182 vTesto := '<div class="table-responsive"> ' || K_CRLF ||
183 ' <table class="table ' || K_CSS_TABLE || '">' || K_CRLF ||
184 iDatiTabella || K_CRLF ||
185 '</table>' || K_CRLF ||
186 '</div>';
187*/
188
189 dbms_lob.createtemporary(vTesto, TRUE);
190 -- la prima assegnazione, quando vTesto è null, è conveniente farla direttamente e non mediante append
191 vTesto:='<div class="table-responsive"> ' || K_CRLF ||' <table class="table ' || K_CSS_TABLE || '">' || K_CRLF;
192 if not iDatiTabella is null then
193 dbms_lob.append(vTesto, iDatiTabella); -- dà errore appendendo null
194 end if;
195 dbms_lob.append(vTesto, K_CRLF || '</table>' || K_CRLF ||'</div>');
196
197 RETURN vTesto;
198END;
199 /* Funzione che riceve in ingresso i dati che devono essere contenuti nel tag cella di una tabella html
200 Parametri: iDatiCella: sono i dati che devono essere contenuti nella cella della tabella html.
201 Valore di ritorno: Un CLOB che contiene l'intero formato di rappresentazione della singola cella in html
202 */
203FUNCTION SF_TABLE_CELL_HTML(iDatiCella IN CLOB, iSE_CRLF_PREFIX IN BOOLEAN default true, iSE_CRLF_SUFFIX BOOLEAN default false) RETURN CLOB
204IS
205 vTesto CLOB;
206BEGIN
207
208 dbms_lob.createtemporary(vTesto, TRUE);
209 -- la prima assegnazione, quando vTesto è null, è conveniente farla direttamente e non mediante append
210 if iSE_CRLF_PREFIX then
211 vTesto:=K_CRLF||'<td class="' || K_CSS_TABLE_CELL || '">';
212 else
213 vTesto:='<td class="' || K_CSS_TABLE_CELL || '">';
214 end if;
215
216 if not iDatiCella is null then
217 dbms_lob.append(vTesto, iDatiCella); -- dà errore appendendo null
218 end if;
219
220 if iSE_CRLF_SUFFIX then
221 dbms_lob.append(vTesto, '</td>'||K_CRLF);
222 else
223 dbms_lob.append(vTesto, '</td>');
224 end if;
225
226 RETURN vTesto;
227END;
228FUNCTION SF_TABLE_CELL_HTML(iDatiCella IN VARCHAR2, iSE_CRLF_PREFIX IN BOOLEAN default true, iSE_CRLF_SUFFIX BOOLEAN default false) RETURN CLOB
229IS
230 vTesto varchar2(2000);
231BEGIN
232
233 if iSE_CRLF_PREFIX then
234 vTesto:=K_CRLF;
235 end if;
236
237 vTesto:=vTesto||'<td class="' || K_CSS_TABLE_CELL || '">'
238 ||iDatiCella
239 ||'</td>';
240
241 if iSE_CRLF_SUFFIX then
242 vTesto:=vTesto||K_CRLF;
243 end if;
244
245 RETURN vTesto;
246END;
247 /* Funzione che riceve in ingresso i dati che devono essere contenuti nel tag riga di una tabella html
248 Parametri: iDatiRiga: sono i dati che devono essere contenuti nella riga della tabella html. Arrivato già
249 Valore di ritorno: Un CLOB che contiene l'intero formato di rappresentazione della singola riga in html
250 */
251FUNCTION SF_TABLE_ROW_HTML(iDatiRiga IN CLOB, iSE_CRLF_PREFIX IN BOOLEAN default true) RETURN CLOB
252IS
253 vTesto CLOB;
254BEGIN
255/*
256 vTesto := '<tr class="' || K_CSS_TABLE_ROW || '">' || K_CRLF ||
257 iDatiRiga || K_CRLF ||
258 '</tr>';
259*/
260 dbms_lob.createtemporary(vTesto, TRUE);
261 -- la prima assegnazione, quando vTesto è null, è conveniente farla direttamente e non mediante append
262 if iSE_CRLF_PREFIX then
263 vTesto:=K_CRLF||'<tr class="' || K_CSS_TABLE_ROW || '">' || K_CRLF;
264 else
265 vTesto:='<tr class="' || K_CSS_TABLE_ROW || '">' || K_CRLF;
266 end if;
267
268 if not iDatiRiga is null then
269 dbms_lob.append(vTesto, iDatiRiga); -- dà errore appendendo null
270 end if;
271 dbms_lob.append(vTesto, K_CRLF || '</tr>');
272
273 RETURN vTesto;
274END;
275 /* Funzione che riceve in ingresso l'intestazione di una colonna
276 Parametri: iTitolo: il dato che deve essere visualizzato nell'intestazione della colonna
277 Valore di ritorno: Un CLOB che contiene l'intero formato di rappresentazione della singola intestazione
278 */
279
280FUNCTION SF_TABLE_HEADER_HTML(iTitolo IN VARCHAR2, iSE_CRLF_PREFIX IN BOOLEAN default false, iSE_CRLF_SUFFIX BOOLEAN default true) RETURN CLOB
281IS
282 vTesto CLOB;
283 str varchar2(2000);
284BEGIN
285 if iSE_CRLF_PREFIX then
286 str:=K_CRLF;
287 end if;
288
289 -- iTitolo è un varchar2
290 str:=str||'<th class="' || K_CSS_TABLE_HEADER || '">' || iTitolo ||'</th>';
291
292-- la prima assegnazione, quando vTesto è null, è conveniente farla direttamente e non mediante append
293 if iSE_CRLF_SUFFIX then
294 vTesto := str||K_CRLF;
295 else
296 vTesto := str;
297 end if;
298
299 RETURN vTesto;
300END;
301
302PROCEDURE SP_APPEND_VARCHARC2_TO_CLOB(ioStr IN OUT CLOB, iStrToAppend IN VARCHAR2)
303IS
304 vTesto CLOB;
305BEGIN
306
307 dbms_lob.createtemporary(vTesto, TRUE);
308 vTesto:=ioStr;
309 if not iStrToAppend is null then
310 dbms_lob.append(vTesto, iStrToAppend); -- dà errore appendendo null
311 end if;
312 ioStr:=vTesto;
313END;
314END;
315/
316
317-- *********************************************************************************************************
318-- In questa parte definiamo le view e tabelle per: clienti - fornitori - banche
319-- visto che alcune SP e tabelle sono comuni
320CREATE OR REPLACE VIEW sense_v_docs_clienti_erp (
321 ditta,
322 mastro,
323 partitario,
324 descrizione,
325 indirizzo,
326 citta,
327 provincia,
328 paese,
329 indirizzocompleto,
330 stato,
331 variazione,
332 pagamento,
333 cod_ditta,
334 motivoannullamento )
335AS
336select esd.desc_ditta ditta,
337 ac.mastro mastro,
338 ac.partitario partitario,
339 trim(ac.descrizione_1 || ' ' || ac.descrizione_2) descrizione,
340 trim(cc.indirizzo || ' ' || cc.indirizzo_2) indirizzo,
341 trim(cc.cap || ' ' || cc.citta) citta,
342 p.desc_provincia provincia,
343 es.desc_stato paese,
344 trim(trim(cc.indirizzo || ' ' || cc.indirizzo_2) || ' ' || trim(cc.cap || ' ' || cc.citta) || ' ' || cc.provincia) indirizzocompleto,
345 case
346 when ac.data_chiusura_conto is not null then
347 'Chiuso'
348 when ac.data_sosp_conto is not null then
349 'Sospeso'
350 else
351 'Valido'
352 end stato,
353
354 case
355 when nvl(cv.data_variaz, sysdate) = sysdate then
356 'Non variato'
357 else
358 'variato'
359 end variazione,
360 cp.desc_pagamento pagamento,
361 esd.cod_ditta cod_ditta,
362 CASE
363 WHEN ac.data_chiusura_conto IS NOT NULL THEN
364 to_char(ac.data_chiusura_conto,'dd/mm/yyyy') || ' ' || ac.motivo_chiusura
365 ELSE
366 CASE
367 WHEN ac.data_sosp_conto IS NOT NULL THEN
368 to_char(ac.data_sosp_conto,'dd/mm/yyyy') || ' ' || ac.motivo_chiusura
369 else
370 null
371 end
372 END motivoannullamento
373 from anagrafico_conti ac,
374 conti_clienti cc,
375 (select mastro, partitario, max(data_variaz) data_variaz
376 from conti_variati
377 group by mastro, partitario) cv,
378 provincie p,
379 elenco_stati es,
380 eur_sec_ditte esd,
381 condizioni_di_pagamento cp
382 where user = esd.cod_ditta
383 and ac.tipo_conto = 'C'
384 and ac.mastro = cv.mastro(+)
385 and ac.partitario = cv.partitario(+)
386 and ac.mastro = cc.mastro
387 and ac.partitario = cc.partitario
388 and cc.provincia = p.cod_provincia(+)
389 and cc.cod_iso = es.cod_iso(+)
390 and cc.cod_pagam = cp.cod_pagam(+)
391/
392
393CREATE OR REPLACE VIEW sense_v_docs_fornitori_erp (
394 ditta,
395 mastro,
396 partitario,
397 descrizione,
398 indirizzo,
399 citta,
400 provincia,
401 paese,
402 indirizzocompleto,
403 stato,
404 variazione,
405 pagamento,
406 cod_ditta,
407 motivoannullamento )
408AS
409select esd.desc_ditta ditta,
410 ac.mastro mastro,
411 ac.partitario partitario,
412 trim(ac.descrizione_1 || ' ' || ac.descrizione_2) descrizione,
413 trim(cf.indirizzo || ' ' || cf.indirizzo_2) indirizzo,
414 trim(cf.cap || ' ' || cf.citta) citta,
415 p.desc_provincia provincia,
416 es.desc_stato paese,
417 trim(trim(cf.indirizzo || ' ' || cf.indirizzo_2) || ' ' || trim(cf.cap || ' ' || cf.citta) || ' ' || cf.provincia) indirizzocompleto,
418 case
419 when ac.data_chiusura_conto is not null then
420 'Chiuso'
421 when ac.data_sosp_conto is not null then
422 'Sospeso'
423 else
424 'Valido'
425 end stato,
426 case
427 when nvl(cv.data_variaz, sysdate) = sysdate then
428 'Non variato'
429 else
430 'variato'
431 end variazione,
432 cp.desc_pagamento pagamento,
433 esd.cod_ditta cod_ditta,
434 CASE
435 WHEN ac.data_chiusura_conto IS NOT NULL THEN
436 to_char(ac.data_chiusura_conto,'dd/mm/yyyy') || ' ' || ac.motivo_chiusura
437 ELSE
438 CASE
439 WHEN ac.data_sosp_conto IS NOT NULL THEN
440 to_char(ac.data_sosp_conto,'dd/mm/yyyy') || ' ' || ac.motivo_chiusura
441 else
442 null
443 end
444 END motivoannullamento
445 from anagrafico_conti ac,
446 conti_fornitori cf,
447 (select mastro, partitario, max(data_variaz) data_variaz
448 from conti_variati
449 group by mastro, partitario) cv,
450 provincie p,
451 elenco_stati es,
452 eur_sec_ditte esd,
453 condizioni_di_pagamento cp
454 where user = esd.cod_ditta
455 and ac.tipo_conto = 'F'
456 and ac.mastro = cv.mastro(+)
457 and ac.partitario = cv.partitario(+)
458 and ac.mastro = cf.mastro
459 and ac.partitario = cf.partitario
460 and cf.provincia = p.cod_provincia(+)
461 and cf.cod_iso = es.cod_iso(+)
462 and cf.cod_pagam = cp.cod_pagam(+)
463/
464
465 CREATE OR REPLACE VIEW sense_v_erp_banche (
466 ditta,
467 mastro,
468 partitario,
469 descrizione,
470 ragionesociale,
471 indirizzo,
472 citta,
473 provincia,
474 paese,
475 stato,
476 variazione,
477 desc_tipo_rapporto,
478 cod_ditta,
479 iban,
480 motivoannullamento )
481AS
482select esd.desc_ditta ditta,
483 ac.mastro mastro,
484 ac.partitario partitario,
485 trim(ac.descrizione_1 || ' ' || ac.descrizione_2) descrizione,
486 trim(ac.descrizione_1 || ' ' || ac.descrizione_2) ragionesociale,
487 trim(cb.indirizzo || ' ' || cb.indirizzo_2) indirizzo,
488 trim(cb.cap || ' ' || cb.citta) citta,
489 p.desc_provincia provincia,
490 es.desc_stato paese,
491 case
492 when ac.data_chiusura_conto is not null then
493 'Chiuso'
494 when ac.data_sosp_conto is not null then
495 'Sospeso'
496 else
497 'Valido'
498 end stato,
499 case
500 when nvl(cv.data_variaz, sysdate) = sysdate then
501 'Non variato'
502 else
503 'variato'
504 end variazione,
505 cbtr.desc_tipo_rapporto,
506 esd.cod_ditta cod_ditta,
507 cb.codice_iban,
508 CASE
509 WHEN ac.data_chiusura_conto IS NOT NULL THEN
510 to_char(ac.data_chiusura_conto,'dd/mm/yyyy') || ' ' || ac.motivo_chiusura
511 ELSE
512 CASE
513 WHEN ac.data_sosp_conto IS NOT NULL THEN
514 to_char(ac.data_sosp_conto,'dd/mm/yyyy') || ' ' || ac.motivo_chiusura
515 else
516 null
517 end
518 END motivoannullamento
519 from anagrafico_conti ac,
520 cow_conti_banca cb,
521 (select mastro, partitario, max(data_variaz) data_variaz
522 from conti_variati
523 group by mastro, partitario) cv,
524 provincie p,
525 elenco_stati es,
526 cow_banche_tipo_rapporto cbtr,
527 eur_sec_ditte esd
528 where user = esd.cod_ditta
529 and ac.tipo_conto = 'B'
530 and ac.mastro = cv.mastro(+)
531 and ac.partitario = cv.partitario(+)
532 and ac.mastro = cb.mastro
533 and ac.partitario = cb.partitario
534 and cb.provincia = p.cod_provincia(+)
535 and cb.cod_iso = es.cod_iso(+)
536 and cb.tipo_rapporto = cbtr.tipo_rapporto (+)
537/
538
539create table SENSE_CHANGES_CLIFOR_ERP
540(
541 mastro CHAR(6),
542 partitario CHAR(6),
543 last_change DATE,
544 is_deleted CHAR(1),
545 id NUMBER not null
546);
547
548create index SENSE_CHG_CLIFOR_ERP_IND01 on SENSE_CHANGES_CLIFOR_ERP (MASTRO, PARTITARIO);
549
550CREATE INDEX sense_chg_clifor_erp_ind02 ON sense_changes_clifor_erp (last_change) TABLESPACE data01;
551
552
553
554alter table SENSE_CHANGES_CLIFOR_ERP
555 add constraint SENSE_CHANGES_CLIFOR_ERP_PK primary key (ID);
556
557alter table SENSE_CHANGES_CLIFOR_ERP
558 add constraint SENSE_CHANGES_CLIFOR_ERP_CK01
559 check (is_deleted = 'Y' OR is_deleted = 'N');
560
561alter table SENSE_CHANGES_CLIFOR_ERP
562 add constraint SENSE_CHANGES_CLIFOR_ERP_N01
563 check (last_change IS NOT NULL);
564
565alter table SENSE_CHANGES_CLIFOR_ERP
566 add constraint SENSE_CHANGES_CLIFOR_ERP_N02
567 check (is_deleted IS NOT NULL);
568
569CREATE OR REPLACE VIEW SENSE_V_LCHANGE_CLIFOR_ERP AS
570SELECT mastro,
571 partitario,
572 MAX(last_change) last_change,
573 MAX(is_deleted) is_deleted
574 FROM (SELECT mastro,
575 partitario,
576 LAST_VALUE(last_change) OVER(PARTITION BY mastro, partitario ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_change,
577 LAST_VALUE(is_deleted) OVER(PARTITION BY mastro, partitario ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) is_deleted
578 FROM sense_changes_clifor_erp)
579 GROUP BY mastro, partitario;
580
581CREATE OR REPLACE PROCEDURE sense_sp_change_clifor_erp(iMastro IN CHAR,
582 iPartitario IN CHAR,
583 iIsDeleted IN CHAR) IS
584BEGIN
585 INSERT INTO sense_changes_clifor_erp
586 (id, mastro, partitario, last_change, is_deleted)
587 VALUES
588 (sense_seq_changes.nextval, iMastro, iPartitario, SYSDATE, iIsDeleted);
589END;
590/
591
592CREATE OR REPLACE TRIGGER conti_clienti_sense_trg01
593 AFTER INSERT OR UPDATE OR DELETE ON conti_clienti
594 FOR EACH ROW
595DECLARE
596 v_is_deleted CHAR(1);
597BEGIN
598 IF (inserting OR updating) THEN
599 v_is_deleted := 'N';
600 ELSE
601 v_is_deleted := 'Y';
602 END IF;
603
604 sense_sp_change_clifor_erp(nvl (:new.mastro, :old.mastro), nvl (:new.partitario, :old.partitario), v_is_deleted);
605END;
606/
607
608CREATE OR REPLACE TRIGGER conti_fornitori_sense_trg01
609 AFTER INSERT OR UPDATE OR DELETE ON conti_fornitori
610 FOR EACH ROW
611DECLARE
612 v_is_deleted CHAR(1);
613BEGIN
614 IF (inserting OR updating) THEN
615 v_is_deleted := 'N';
616 ELSE
617 v_is_deleted := 'Y';
618 END IF;
619
620 sense_sp_change_clifor_erp(nvl (:new.mastro, :old.mastro), nvl (:new.partitario, :old.partitario), v_is_deleted);
621END;
622/
623
624CREATE OR REPLACE TRIGGER anagrafico_conti_sense_trg01
625 AFTER INSERT OR UPDATE OR DELETE ON anagrafico_conti
626 FOR EACH ROW
627DECLARE
628 v_is_deleted CHAR(1);
629BEGIN
630 IF (inserting OR updating) THEN
631 v_is_deleted := 'N';
632 ELSE
633 v_is_deleted := 'Y';
634 END IF;
635
636 if (nvl (:new.tipo_conto, :old.tipo_conto) in ('C','F','B')) then
637 sense_sp_change_clifor_erp(nvl (:NEW.mastro, :old.mastro), nvl (:NEW.partitario, :old.partitario), v_is_deleted);
638 end if;
639END;
640/
641
642CREATE OR REPLACE TRIGGER cow_conti_banca_sense_trg01
643 AFTER INSERT OR UPDATE OR DELETE ON cow_conti_banca
644 FOR EACH ROW
645DECLARE
646 v_is_deleted CHAR(1);
647BEGIN
648 IF (inserting OR updating) THEN
649 v_is_deleted := 'N';
650 ELSE
651 v_is_deleted := 'Y';
652 END IF;
653
654 sense_sp_change_clifor_erp(nvl (:new.mastro, :old.mastro), nvl (:new.partitario, :old.partitario), v_is_deleted);
655END;
656/
657
658-- *********************************************************************************************************
659-- In questa parte torviamo gli oggetti per il DocumentType Contatti
660
661CREATE OR REPLACE
662FUNCTION sense_sf_ant_dettaglioservizi(iRowid UROWID)
663 RETURN VARCHAR2 IS
664
665 vRetValue VARCHAR2(4000);
666
667 vRiga VARCHAR2(1024);
668 vSep CHAR(1) := chr(10);
669BEGIN
670 vRetValue := '';
671 FOR rec IN (SELECT * FROM cow_conti_rubrica WHERE ROWID = iRowid) LOOP
672 FOR rec_sp IN (SELECT etsa.descr
673 FROM cow_nominativi_servizi cns
674 JOIN eur_tab_serv_aziend etsa ON cns.nro_servizio = etsa.nro_servizio
675 WHERE cns.mastro = rec.mastro
676 and cns.partitario = rec.partitario
677 and cns.progr = rec.progr
678 ORDER BY etsa.descr) LOOP
679
680 IF rec_sp.descr IS NOT NULL THEN
681 vRetValue := vRetValue || rec_sp.descr || vSep;
682 END IF;
683
684 END LOOP;
685
686 END LOOP;
687
688 RETURN vRetValue;
689END;
690/
691
692CREATE OR REPLACE VIEW sense_v_erp_contatti (
693 ditta,
694 cod_ditta,
695 mastro,
696 partitario,
697 progr,
698 nominativo,
699 descrizione,
700 tipo,
701 tel,
702 fax,
703 email,
704 pec,
705 reparto,
706 note,
707 servizi,
708 tabid )
709AS
710select esd.desc_ditta ditta,
711 esd.cod_ditta cod_ditta,
712 CCR.mastro,
713 CCR.partitario,
714 ccr.progr,
715 ccr.nominativo,
716 trim(ac.descrizione_1 || ' ' || ac.descrizione_2) descrizione,
717 ac.tipo_conto,
718 DECODE(trim(ccr.pref_tel_1 || ' ' || ccr.nro_telefono_1),NULL,NULL,trim(ccr.pref_tel_1 || ' ' || ccr.nro_telefono_1)) ||
719 DECODE(trim(ccr.pref_tel_1 || ' ' || ccr.nro_telefono_1),NULL,NULL,' - ') ||
720 DECODE(trim(ccr.pref_tel_2 || ' ' || ccr.nro_telefono_2),NULL,NULL,trim(ccr.pref_tel_2 || ' ' || ccr.nro_telefono_2)) TEL,
721 DECODE(trim(ccr.pref_fax_1 || ' ' || ccr.nro_fax_1),NULL,NULL,trim(ccr.pref_fax_1 || ' ' || ccr.nro_fax_1)) ||
722 DECODE(trim(ccr.pref_fax_1 || ' ' || ccr.nro_fax_1),NULL,NULL,' - ') ||
723 DECODE(trim(ccr.pref_fax_2 || ' ' || ccr.nro_fax_2),NULL,NULL,trim(ccr.pref_fax_2 || ' ' || ccr.nro_fax_2)) fax,
724 DECODE(ccr.e_mail_1,NULL,NULL, ccr.e_mail_1) || DECODE(ccr.e_mail_1,NULL,NULL, '; ') || DECODE(ccr.e_mail_2,NULL,NULL, ccr.e_mail_2) email,
725 ccr.pec,
726 ctp.descrizione reparto,
727 ccr.note,
728 sense_sf_ant_dettaglioservizi(ccr.rowid) servizi,
729 -- in base al tipo conto viene restitutito un tab diverso per poter poi accedere alla relativa scheda corretta
730 DECODE(ac.Tipo_conto,'C',163,'F',323,'B',534,NULL)
731from cow_conti_rubrica ccr
732join anagrafico_conti ac on ccr.mastro = ac.mastro and ccr.partitario = ac.partitario
733left outer join cow_tab_reparti ctp on ccr.reparto = ctp.reparto
734join eur_sec_ditte esd on user = esd.cod_ditta
735/
736
737
738create table SENSE_CHANGES_CONTATTI_ERP
739(
740 mastro CHAR(6),
741 partitario CHAR(6),
742 progr NUMBER(3),
743 last_change DATE,
744 is_deleted CHAR(1),
745 id NUMBER not null
746);
747
748create index SENSE_CHANGES_CONTAT_ERP_IND01 on SENSE_CHANGES_CONTATTI_ERP (MASTRO, PARTITARIO, PROGR);
749
750alter table SENSE_CHANGES_CONTATTI_ERP
751 add constraint SENSE_CHANGES_CONTATTI_ERP_PK primary key (ID);
752
753alter table SENSE_CHANGES_CONTATTI_ERP
754 add constraint SENSE_CHANGES_CONTAT_ERP_CK01
755 check (is_deleted = 'Y' OR is_deleted = 'N');
756
757alter table SENSE_CHANGES_CONTATTI_ERP
758 add constraint SENSE_CHANGES_CONTATTI_ERP_N01
759 check (last_change IS NOT NULL);
760
761alter table SENSE_CHANGES_CONTATTI_ERP
762 add constraint SENSE_CHANGES_CONTATTI_ERP_N02
763 check (is_deleted IS NOT NULL);
764
765CREATE OR REPLACE VIEW SENSE_V_LCHANGE_CONTATTI_ERP AS
766SELECT mastro,
767 partitario,
768 progr,
769 MAX(last_change) last_change,
770 MAX(is_deleted) is_deleted
771 FROM (SELECT mastro,
772 partitario,
773 progr,
774 LAST_VALUE(last_change) OVER(PARTITION BY mastro, partitario,progr ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_change,
775 LAST_VALUE(is_deleted) OVER(PARTITION BY mastro, partitario,progr ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) is_deleted
776 FROM SENSE_CHANGES_CONTATTI_ERP)
777 GROUP BY mastro, partitario,progr;
778
779CREATE OR REPLACE PROCEDURE sense_sp_change_contatti_erp(iMastro IN CHAR,
780 iPartitario IN CHAR,
781 iProgr IN NUMBER,
782 iIsDeleted IN CHAR) IS
783BEGIN
784 INSERT INTO SENSE_CHANGES_CONTATTI_ERP
785 (id, mastro, partitario, progr, last_change, is_deleted)
786 VALUES
787 (sense_seq_changes.nextval, iMastro, iPartitario, iprogr, SYSDATE, iIsDeleted);
788END;
789/
790
791CREATE OR REPLACE TRIGGER cow_conti_rubrica_sense_trg01
792 AFTER INSERT OR UPDATE OR DELETE ON cow_conti_rubrica
793 FOR EACH ROW
794DECLARE
795 v_is_deleted CHAR(1);
796BEGIN
797 IF (inserting OR updating) THEN
798 v_is_deleted := 'N';
799 ELSE
800 v_is_deleted := 'Y';
801 END IF;
802
803 sense_sp_change_contatti_erp(nvl (:new.mastro, :old.mastro), nvl (:new.partitario, :old.partitario), nvl (:new.progr, :old.progr), v_is_deleted);
804END;
805/
806
807CREATE OR REPLACE TRIGGER cow_nominativi_servizi_trg01
808 AFTER INSERT OR UPDATE OR DELETE ON cow_nominativi_servizi
809 FOR EACH ROW
810DECLARE
811 v_is_deleted CHAR(1);
812BEGIN
813 IF (inserting OR updating) THEN
814 v_is_deleted := 'N';
815 ELSE
816 v_is_deleted := 'Y';
817 END IF;
818
819 sense_sp_change_contatti_erp(nvl (:new.mastro, :old.mastro), nvl (:new.partitario, :old.partitario), nvl (:new.progr, :old.progr), v_is_deleted);
820END;
821/
822
823-- *********************************************************************************************************
824-- In questa parte torviamo gli oggetti per il DocumentType Applicazione
825
826CREATE OR REPLACE FUNCTION sense_sf_get_application_path(i_cod_menu_padre dbo.eur_menu_std.cod_menu_padre%TYPE,
827 i_nro_riga dbo.eur_menu_std.nro_riga%TYPE)
828 RETURN VARCHAR2 IS
829 v_app_path VARCHAR2(2000);
830BEGIN
831 v_app_path := '';
832
833 FOR c IN (SELECT eur_menu_std.*, LEVEL
834 FROM dbo.eur_menu_std eur_menu_std
835 -- eliminiamo il nodo 'MENU PRINCIPALE'
836 WHERE cod_menu_padre != 'START' and nro_riga != 0
837 START WITH eur_menu_std.cod_menu_padre = i_cod_menu_padre
838 AND nro_riga = i_nro_riga
839 CONNECT BY PRIOR eur_menu_std.cod_menu_padre = cod_menu_figlio
840 ORDER BY LEVEL DESC) LOOP
841
842 IF (v_app_path IS NOT NULL) THEN
843 v_app_path := v_app_path || '->';
844 END IF;
845 v_app_path := v_app_path || c.desc_menu;
846 END LOOP;
847
848 RETURN(v_app_path);
849END sense_sf_get_application_path;
850/
851
852CREATE OR REPLACE FUNCTION sense_sf_get_app_fixed_params(
853 i_cod_app VARCHAR2,
854 i_params VARCHAR2) RETURN VARCHAR2 IS
855
856 v_params_str VARCHAR2(4000);
857 v_params_tbl eur_pkg_split.clobtabletype;
858
859BEGIN
860
861 v_params_str := trim(i_params);
862
863 if not i_params is null then
864
865 if trim(i_cod_app) = 'EUR070' and instr(v_params_str,'TitoloForm')=0 then
866 v_params_tbl:=eur_pkg_split.sf_split(v_params_str, eur_pkg_split.gc_sep_elementi_default);
867 v_params_str:='TitoloForm='||trim(v_params_tbl(1))||'&';
868 v_params_str:=v_params_str||'TipoAtt='||trim(v_params_tbl(2));
869
870 elsif trim(i_cod_app) = 'EUR005' and instr(v_params_str,'NomeFile')=0 then
871 v_params_str:='NomeFile='||v_params_str;
872
873 elsif trim(i_cod_app) = 'MAW107' and instr(v_params_str,'TipoPresentazione')=0 then
874 v_params_str:='TipoPresentazione='||v_params_str;
875
876 elsif trim(i_cod_app) = 'MAW109' and instr(v_params_str,'TipoAssociazione')=0 then
877 v_params_str:='TipoAssociazione='||v_params_str;
878
879 elsif trim(i_cod_app) = 'PRW018' and instr(v_params_str,'Massiva')=0 then
880 v_params_str:='Massiva='||replace(v_params_str,'/','');
881
882 elsif trim(i_cod_app) = 'PRW517' and instr(v_params_str,'Job')=0 then
883 v_params_str:='Job='||replace(v_params_str,'/','');
884
885 end if;
886
887 end if;
888
889 RETURN(v_params_str);
890
891END sense_sf_get_app_fixed_params;
892/
893
894
895create or replace view sense_v_app_erp (cod_ditta, cod_app, fixed_params, from_nwa_ref, from_old_menu) as
896with
897applicazioni_nwa as (
898 select
899 user as cod_ditta,
900 RNR.cod_app_logico AS cod_app,
901 ------sezione params ------
902 null as fixed_params,
903 ---------------------------
904 'Y' as from_nwa_ref,
905 null as from_old_menu,
906 replace(RC.rtc_name, RNR.cod_app_logico||' - ',null) AS desc_app
907 from freeway_rtc.rtc_nwa_reference RNR
908 JOIN FREEWAY_RTC.RTC_COMMANDS RC ON
909 RNR.cod_app_logico = RC.rtc_cmdcode
910 WHERE
911 RNR.classe_app = 'NWA'
912 -- Interessano solo i comandi presenti sul "form" che funge da menu In.De.
913 AND RC.rtc_form = '6F27834F-4A55-42DB-9E57-43DC77AA5CCC'
914),
915applicazioni_menu as (
916 select cod_ditta,
917 cod_app,
918 ------sezione params ------
919 sense_sf_get_app_fixed_params(cod_app,params) as fixed_params,
920 ---------------------------
921 from_nwa_ref,
922 from_old_menu,
923 desc_app
924 from
925 (select distinct
926 user as cod_ditta,
927 trim(replace(substr(upper(nome_pgm),1, case instr(nome_pgm,' ')
928 when 0 then length(nome_pgm)
929 else instr(nome_pgm,' ') end),'.EXE',null)) AS cod_app,
930 case instr(nome_pgm,' ')
931 when 0 then null
932 else trim(substr(nome_pgm,instr(nome_pgm,' ')+1)) end AS params,
933 null as from_nwa_ref,
934 'Y' as from_old_menu,
935 CAST(desc_menu AS NVARCHAR2(2000)) as desc_app
936 from dbo.eur_menu_std
937 where cod_menu_figlio is null and nome_pgm is not null
938 and replace(substr(upper(nome_pgm),1, case instr(nome_pgm,' ')
939 when 0 then length(nome_pgm)
940 else instr(nome_pgm,' ') end),'.EXE',null)
941 not in
942 (select
943 cod_app_logico AS cod_app
944 from freeway_rtc.rtc_nwa_reference RNR
945 JOIN FREEWAY_RTC.RTC_COMMANDS RC ON
946 RNR.cod_app_logico = RC.rtc_cmdcode
947 WHERE
948 RNR.classe_app = 'NWA'
949 -- Interessano solo i comandi presenti sul "form" che funge da menu In.De.
950 AND RC.rtc_form = '6F27834F-4A55-42DB-9E57-43DC77AA5CCC')
951 ) pgm_menu
952
953)
954select cod_ditta, cod_app, fixed_params, from_nwa_ref, from_old_menu from applicazioni_nwa
955union all
956select cod_ditta, cod_app, fixed_params, from_nwa_ref, from_old_menu from applicazioni_menu;
957/
958
959-- *********************************************************************************************************
960-- In questa parte troviamo gli oggetti per i document Type Fatture cliente e Fatture fornitore ERP
961CREATE OR REPLACE
962FUNCTION sense_sf_ant_dettagliofattcl(iNroReg NUMBER)
963 RETURN CLOB IS
964 vMastro anagrafico_conti.mastro%TYPE;
965 vPartit anagrafico_conti.partitario%TYPE;
966 vNroFatt vew_bolla_test.nro_ft%TYPE;
967 vDataFatt vew_bolla_test.data_ft%TYPE;
968 vRowAnag UROWID;
969 vConta NUMBER(5);
970 vTotFt mov_contab.importo_lit_d%TYPE;
971 vRetValue CLOB;
972
973 vRiga VARCHAR2(1024);
974 vSep CHAR(1) := chr(10);
975
976 vLenTipoArt EUR_LUNGH_ATTR.LUNGH_ATTR%TYPE;
977 vLenCodArt EUR_LUNGH_ATTR.LUNGH_ATTR%TYPE;
978 NlsParams CONSTANT VARCHAR2(40) := 'NLS_NUMERIC_CHARACTERS=,@';
979
980 vDatiCelle CLOB;
981 vDatiRiga CLOB;
982 vNota CLOB;
983BEGIN
984
985 vConta := 0;
986
987 SELECT EUR_PKG_LUNGH_ATTR.SF_LUNGH('TIPOART')
988 INTO vLenTipoArt
989 FROM DUAL;
990
991 SELECT EUR_PKG_LUNGH_ATTR.SF_LUNGH('CODART')
992 INTO vLenCodArt
993 FROM DUAL;
994
995 dbms_lob.createtemporary(vDatiRiga, TRUE);
996 vDatiRiga := sense_pkg_varie.SF_TABLE_HEADER_HTML('Tipo');
997
998 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Codice'));
999 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Descrizione'));
1000 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Qtà spedita'));
1001 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Prezzo'));
1002 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Valore'));
1003 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Progetto'));
1004 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Sottoprogetto'));
1005 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Rif. ordine'));
1006 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Note',iSE_CRLF_SUFFIX=>false));
1007
1008 vDatiRiga := sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiRiga,iSE_CRLF_PREFIX=>false);
1009
1010
1011 FOR rec_test IN (SELECT vbt.anno_bolla,
1012 vbt.tipo_bolla,
1013 vbt.nro_bolla,
1014 vbt.data_ins,
1015 vbt.mastro,
1016 vbt.partit,
1017 vbt.mastro_ag1,
1018 vbt.partit_ag1,
1019 age.descrizione_1 rag_soc_ag,
1020 vbt.rif_vs_nro_ord,
1021 to_char(vbt.rif_vs_data_ord, 'dd MONTH yyyy') rif_vs_data_ord,
1022 vbt.note_test_bolla,
1023 cp.desc_pagamento,
1024 vdc.desc_div_comm,
1025 vlc.desc_linea_comm,
1026 vcv.desc_canale_vend
1027 FROM vew_bolla_test vbt,
1028 anagrafico_conti age,
1029 condizioni_di_pagamento cp,
1030 vew_divisione_comm vdc,
1031 vew_linea_commerciale vlc,
1032 vew_canale_vendita vcv
1033 WHERE vbt.nro_mov_cont_ft = iNroReg
1034 AND vbt.mastro_ag1 = age.mastro(+)
1035 AND vbt.partit_ag1 = age.partitario(+)
1036 AND vbt.cod_pag = cp.cod_pagam(+)
1037 AND vdc.cod_div_comm(+) = vbt.cod_div_comm
1038 AND vlc.cod_linea_comm(+) = vbt.cod_linea_comm
1039 AND vcv.cod_canale_vend(+) = vbt.cod_canale_vend) LOOP
1040
1041 vConta := 1;
1042
1043
1044 dbms_lob.createtemporary(vDatiCelle, TRUE);
1045 dbms_lob.createtemporary(vNota, TRUE);
1046
1047
1048
1049
1050 FOR rec_righe IN (SELECT *
1051 FROM vew_bolla_riga vbr
1052 WHERE vbr.anno_bolla = rec_test.anno_bolla
1053 AND vbr.tipo_bolla = rec_test.tipo_bolla
1054 AND vbr.nro_bolla = rec_test.nro_bolla
1055 ORDER BY vbr.riga_bolla) LOOP
1056
1057 -- la prima assegnazione, quando vDatiCelle è null, è conveniente farla direttamente e non mediante append
1058 vDatiCelle:=sense_pkg_varie.SF_TABLE_CELL_HTML(rpad(rec_righe.tipo_art, vLenTipoArt));
1059 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_art, vLenCodArt)));
1060 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.desc_riga, 60)));
1061 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.qta_spedita,'9999999d9999',NlsParams)));
1062 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.prezzo,'9999999999d9999',NlsParams)));
1063 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.val_netto_sc_riga,'9999999999d9999',NlsParams)));
1064 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_progetto, 25)));
1065 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_sottoprogetto, 20)));
1066 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.rif_ns_anno_ord, 6) || rPad(rec_righe.rif_ns_tipo_ord, 5) ||rPad(rec_righe.rif_ns_nro_ord, 10)));
1067
1068
1069 -- la prima assegnazione, quando vNota è null, è conveniente farla direttamente e non mediante append
1070 vNota:=' ';
1071
1072 FOR rec_nota IN (SELECT *
1073 FROM vew_bolla_nota vocn
1074 WHERE vocn.anno_bolla = rec_righe.anno_bolla
1075 AND vocn.tipo_bolla = rec_righe.tipo_bolla
1076 AND vocn.nro_bolla = rec_righe.nro_bolla
1077 AND vocn.riga_bolla = rec_righe.riga_bolla) LOOP
1078 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vNota, ' ' || rec_nota.nota);
1079
1080 END LOOP; -- note
1081
1082 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(vNota));
1083 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiCelle));
1084
1085 END LOOP; -- su righe bolla
1086 END LOOP; -- su testata
1087
1088 dbms_lob.createtemporary(vREtValue, TRUE);
1089 -- la prima assegnazione, quando vREtValue è null, è conveniente farla direttamente e non mediante append
1090 vRetValue := sense_pkg_varie.SF_TABLE_HTML(vDatiRiga);
1091
1092 -- cerco scadenze e totale fattura
1093 SELECT nvl(mc.importo_lit_d, 0) - nvl(mc.importo_lit_a, 0)
1094 INTO vTotFt
1095 FROM mov_contab mc
1096 WHERE mc.nro_registrazione = iNroReg
1097 AND mc.nro_riga = 1;
1098
1099 dbms_lob.createtemporary(vDatiCelle, TRUE);
1100 vDatiCelle := sense_pkg_varie.SF_TABLE_CELL_HTML('Totale Fattura ' || rPad(to_char(vTotFt), 10) || ' €',iSE_CRLF_PREFIX=>false);
1101 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vRetValue,sense_pkg_varie.SF_TABLE_HTML(sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiCelle)));
1102
1103 dbms_lob.createtemporary(vDatiRiga, TRUE);
1104 FOR rec_sca IN (SELECT *
1105 FROM mov_scadenz
1106 WHERE nro_registrazione = iNroReg) LOOP
1107
1108 dbms_lob.createtemporary(vDatiCelle, TRUE);
1109 vDatiCelle:=sense_pkg_varie.SF_TABLE_CELL_HTML('Scadenza ' || Rpad(rec_sca.tipo_effetto,5));
1110 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML('del ' || to_char(rec_sca.data_scadenza, 'dd/mm/yyyy')));
1111 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_sca.importo_lit,'9999999999d99',NlsParams)|| ' €'));
1112
1113 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiCelle));
1114 END LOOP;
1115
1116 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vRetValue,sense_pkg_varie.SF_TABLE_HTML(vDatiRiga));
1117 RETURN vRetValue;
1118
1119END;
1120/
1121
1122
1123
1124CREATE OR REPLACE VIEW sense_v_docs_fatture_cli_erp (
1125 ditta,
1126 cod_ditta,
1127 sez_iva,
1128 nro_doc,
1129 anno_doc,
1130 data_doc,
1131 mese_doc,
1132 data_doc_char,
1133 cliente,
1134 ragionesociale,
1135 agente,
1136 agenteragsoc,
1137 pagamento,
1138 scadenze,
1139 dettaglio,
1140 importo_fattura_iva_incl,
1141 mastro,
1142 partitario,
1143 cod_pagam,
1144 nro_registrazione,
1145 nro_riga )
1146AS
1147SELECT esd.desc_ditta ditta,
1148 esd.cod_ditta,
1149 mc.cod_sezionale_iva sez_iva,
1150 mc.nro_iva nro_doc,
1151 EXTRACT(YEAR FROM mc.data_doc) anno_doc,
1152 mc.data_doc data_doc,
1153 to_char(mc.data_doc,'mm month') mese_doc,
1154 to_char (mc.data_doc, 'dd/mm/yy') data_doc_char,
1155 ac.mastro || ac.partitario || ' - ' ||
1156 RTRIM(ac.descrizione_1 || ' ' || ac.descrizione_2) cliente,
1157 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) ragionesociale,
1158 (SELECT ag.mastro || ag.partitario || ' - ' ||
1159 RTRIM(ag.descrizione_1 || ' ' || ag.descrizione_2)
1160 FROM vew_bolla_test vbt, anagrafico_conti ag
1161 WHERE vbt.nro_mov_cont_ft = mc.nro_registrazione
1162 AND vbt.riga_mov_cont_ft = mc.nro_riga
1163 AND vbt.mastro_ag1 = ag.mastro
1164 AND vbt.partit_ag1 = ag.partitario
1165 AND ROWNUM = 1) agente,
1166 (SELECT RTRIM(ag.descrizione_1 || ' ' || ag.descrizione_2)
1167 FROM vew_bolla_test vbt, anagrafico_conti ag
1168 WHERE vbt.nro_mov_cont_ft = mc.nro_registrazione
1169 AND vbt.riga_mov_cont_ft = mc.nro_riga
1170 AND vbt.mastro_ag1 = ag.mastro
1171 AND vbt.partit_ag1 = ag.partitario
1172 AND ROWNUM = 1) ragsocagente,
1173 cp.desc_pagamento pagamento,
1174 /* Usa la SF Oracle LISTAGG perchè Oracle 11 è prerequisito */
1175 (SELECT listagg(TO_CHAR(ms.data_scadenza, 'dd/MM/yyyy'), ' ') WITHIN GROUP(ORDER BY ms.data_scadenza)
1176 FROM mov_scadenz ms
1177 WHERE ms.nro_registrazione = mc.nro_registrazione
1178 AND ms.nro_riga = mc.nro_riga) scadenze,
1179 /* Invece in Oracle 10 bisogna usare la SF Sense
1180 sense_sf_ListAgg(cursor(SELECT TO_CHAR(ms.data_scadenza, 'dd/MM/yyyy')
1181 FROM mov_scadenz ms
1182 WHERE ms.nro_registrazione = mc.nro_registrazione
1183 AND ms.nro_riga = mc.nro_riga
1184 ORDER BY ms.data_scadenza)) scadenze, */
1185 sense_sf_Ant_dettagliofattcl(mc.nro_registrazione) dettaglio,
1186 -- importo della fattura, iva inclusa
1187 (SELECT SUM(nvl(mov_iva.imponib_lit, 0) + nvl(mov_iva.iva_lit, 0))
1188 FROM mov_iva
1189 WHERE mov_iva.nro_registrazione = mc.nro_registrazione) importo_fattura_iva_incl,
1190 ac.mastro,
1191 ac.partitario,
1192 mc.cod_pagam,
1193 mc.nro_registrazione,
1194 mc.nro_riga
1195 FROM condizioni_di_pagamento cp,
1196 mov_contab mc,
1197 anagrafico_conti ac,
1198 eur_sec_ditte esd,
1199 causali_movimento
1200 WHERE USER = esd.cod_ditta
1201 AND mc.cod_pagam = cp.cod_pagam
1202 AND mc.mastro = ac.mastro
1203 AND mc.partitario = ac.partitario
1204 AND causali_movimento.cod_causale = mc.cod_movim
1205 /* bisogna tirar su anche le fatture di vendita inserite direttamente dalla contabilita' ...
1206 AND EXISTS
1207 (SELECT 'x'
1208 FROM vew_bolla_test vbt
1209 WHERE vbt.nro_mov_cont_ft = mc.nro_registrazione
1210 AND vbt.riga_mov_cont_ft = mc.nro_riga);
1211 */
1212 -- .. quindi carico le registrazione con causale fattura di vendita
1213 AND causali_movimento.tipo_causale IN
1214 ('4' -- fattura di vendita
1215 )
1216 AND mc.nro_riga IN
1217 (SELECT MIN(mc2.nro_riga)
1218 FROM mov_contab mc2
1219 WHERE mc2.nro_registrazione = mc.nro_registrazione)
1220 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
1221 and mc.data_doc >= NVL((select spdt.data_estrazione
1222 from sense_par_doc_type spdt
1223 where spdt.nome_doc_type(+) ='Fattura di vendita (ERP)'),to_date('01011900','ddmmyyyy'))
1224/
1225
1226CREATE OR REPLACE VIEW sense_v_erp_fatture_for (
1227 ditta,
1228 cod_ditta,
1229 sez_iva,
1230 nro_iva,
1231 nro_doc,
1232 anno_doc,
1233 data_doc,
1234 mese_doc,
1235 fornitore,
1236 ragionesociale,
1237 pagamento,
1238 scadenze,
1239 mastro,
1240 partitario,
1241 cod_pagam,
1242 nro_registrazione,
1243 nro_riga,
1244 importo_fattura_iva_incl )
1245AS
1246SELECT esd.desc_ditta ditta,
1247 esd.cod_ditta,
1248 mc.cod_sezionale_iva sez_iva,
1249 mc.nro_iva nro_iva,
1250 mc.nro_docum nro_doc,
1251 EXTRACT(YEAR FROM mc.data_doc) anno_doc,
1252 mc.data_doc data_doc,
1253 to_char(mc.data_doc,'mm month') mese_doc,
1254 ac.mastro || ac.partitario || ' - ' ||
1255 RTRIM(ac.descrizione_1 || ' ' || ac.descrizione_2) fornitore,
1256 RTRIM(ac.descrizione_1 || ' ' || ac.descrizione_2) ragionesociale,
1257 cp.desc_pagamento pagamento,
1258 /* Usa la SF Oracle LISTAGG perchè Oracle 11 è prerequisito */
1259 (SELECT listagg(TO_CHAR(ms.data_scadenza, 'dd/MM/yyyy'), ' ') WITHIN GROUP(ORDER BY ms.data_scadenza)
1260 FROM mov_scadenz ms
1261 WHERE ms.nro_registrazione = mc.nro_registrazione
1262 AND ms.nro_riga = mc.nro_riga) scadenze,
1263 /* Invece in Oracle 10 bisogna usare la SF Sense
1264 sense_sf_ListAgg(cursor(SELECT TO_CHAR(ms.data_scadenza, 'dd/MM/yyyy')
1265 FROM mov_scadenz ms
1266 WHERE ms.nro_registrazione = mc.nro_registrazione
1267 AND ms.nro_riga = mc.nro_riga
1268 ORDER BY ms.data_scadenza)) scadenze, */
1269 ac.mastro,
1270 ac.partitario,
1271 mc.cod_pagam,
1272 mc.nro_registrazione,
1273 mc.nro_riga,
1274 -- importo della fattura, iva inclusa
1275 (SELECT SUM(nvl(mov_iva.imponib_lit, 0) + nvl(mov_iva.iva_lit, 0))
1276 FROM mov_iva
1277 WHERE mov_iva.nro_registrazione = mc.nro_registrazione) importo_fattura_iva_incl
1278 --? da implementare sense_pkg_fun_varie.getdettagliofattcl(mc.nro_registrazione) dettaglio
1279 FROM condizioni_di_pagamento cp,
1280 mov_contab mc,
1281 anagrafico_conti ac,
1282 eur_sec_ditte esd,
1283 causali_movimento
1284 WHERE USER = esd.cod_ditta
1285 AND mc.cod_pagam = cp.cod_pagam
1286 AND mc.mastro = ac.mastro
1287 AND mc.partitario = ac.partitario
1288 AND causali_movimento.cod_causale = mc.cod_movim
1289 /* bisogna tirar su anche le fatture inserite direttamente dalla contablità
1290 AND EXISTS
1291 (SELECT 'x'
1292 FROM acw_doc_test
1293 WHERE acw_doc_test.nro_mov_cont_ft = mc.nro_registrazione
1294 AND acw_doc_test.riga_mov_cont_ft = mc.nro_riga)
1295 */
1296 -- .. quindi carico le registrazione con causale fattura di vendita
1297 AND causali_movimento.tipo_causale IN
1298 ('5' -- fattura di acquisto
1299 )
1300 AND mc.nro_riga IN
1301 (SELECT MIN(mc2.nro_riga)
1302 FROM mov_contab mc2
1303 WHERE mc2.nro_registrazione = mc.nro_registrazione)
1304 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
1305 and mc.data_doc >= NVL((select spdt.data_estrazione
1306 from sense_par_doc_type spdt
1307 where spdt.nome_doc_type(+) ='Fattura di acquisto (ERP)'),to_date('01011900','ddmmyyyy'))
1308/
1309
1310create table SENSE_CHANGES_MOV_CONTAB_ERP
1311(
1312 nro_registrazione NUMBER(8) not null,
1313 sez_iva CHAR(3),
1314 anno_doc NUMBER(8),
1315 nro_doc NUMBER(8),
1316 last_change DATE,
1317 is_deleted CHAR(1),
1318 id NUMBER not null
1319);
1320
1321create index SENSE_CHG_MOV_CONTAB_ERP_IND01 on SENSE_CHANGES_MOV_CONTAB_ERP (NRO_REGISTRAZIONE);
1322
1323CREATE INDEX sense_chg_mov_contab_erp_ind02 ON sense_changes_mov_contab_erp (last_change) TABLESPACE data01;
1324
1325alter table SENSE_CHANGES_MOV_CONTAB_ERP
1326 add constraint SENSE_CHG_MOV_CONTAB_ERP_PK primary key (ID);
1327
1328alter table SENSE_CHANGES_MOV_CONTAB_ERP
1329 add constraint SENSE_CHG_MOV_CONT_ERP_CK01
1330 check (is_deleted = 'Y' OR is_deleted = 'N');
1331
1332alter table SENSE_CHANGES_MOV_CONTAB_ERP
1333 add constraint SENSE_CHG_MOV_CONT_ERP_N01
1334 check (last_change IS NOT NULL);
1335
1336alter table SENSE_CHANGES_MOV_CONTAB_ERP
1337 add constraint SENSE_CHG_MOV_CONT_ERP_N02
1338 check (is_deleted IS NOT NULL);
1339
1340
1341
1342
1343CREATE OR REPLACE VIEW SENSE_V_LCHANGE_MOV_CONTAB_ERP AS
1344SELECT nro_registrazione,
1345 sez_iva,
1346 anno_doc,
1347 nro_doc,
1348 MAX(last_change) last_change,
1349 MAX(is_deleted) is_deleted
1350 FROM (SELECT nro_registrazione,
1351 sez_iva,
1352 anno_doc,
1353 nro_doc,
1354 LAST_VALUE(last_change) OVER(PARTITION BY nro_registrazione ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_change,
1355 LAST_VALUE(is_deleted) OVER(PARTITION BY nro_registrazione ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) is_deleted
1356 FROM sense_changes_mov_contab_erp)
1357 GROUP BY nro_registrazione, sez_iva, anno_doc, nro_doc;
1358
1359
1360CREATE OR REPLACE PROCEDURE sense_sp_change_mov_contab_erp(i_nro_registrazione sense_changes_mov_contab_erp.nro_registrazione%type,
1361 i_sez_iva sense_changes_mov_contab_erp.sez_iva%type,
1362 i_anno_doc sense_changes_mov_contab_erp.anno_doc%type,
1363 i_nro_doc sense_changes_mov_contab_erp.nro_doc%type,
1364 i_is_deleted sense_changes_mov_contab_erp.is_deleted%type default 'N') IS
1365BEGIN
1366 insert into sense_changes_mov_contab_erp
1367 (id,
1368 nro_registrazione,
1369 sez_iva,
1370 anno_doc,
1371 nro_doc,
1372 last_change,
1373 is_deleted)
1374 values
1375 (sense_seq_changes.nextval,
1376 i_nro_registrazione,
1377 i_sez_iva,
1378 i_anno_doc,
1379 i_nro_doc,
1380 sysdate,
1381 i_is_deleted
1382 );
1383END;
1384/
1385
1386CREATE OR REPLACE TRIGGER mov_contab_sense_trg01
1387 AFTER INSERT OR UPDATE OR DELETE ON mov_contab
1388 FOR EACH ROW
1389DECLARE
1390 v_is_deleted CHAR(1);
1391BEGIN
1392 IF (inserting OR updating) THEN
1393 v_is_deleted := 'N';
1394 ELSE
1395 v_is_deleted := 'Y';
1396 END IF;
1397
1398 sense_sp_change_mov_contab_erp(nvl(:new.nro_registrazione,
1399 :old.nro_registrazione),
1400 nvl(:new.cod_sezionale_iva,
1401 :old.cod_sezionale_iva),
1402 EXTRACT(YEAR FROM
1403 nvl(:new.data_doc, :old.data_doc)),
1404 nvl(:new.nro_iva, :old.nro_iva),
1405 v_is_deleted);
1406END;
1407/
1408
1409CREATE OR REPLACE TRIGGER mov_scadenz_sense_trg01
1410 AFTER INSERT OR UPDATE OR DELETE ON mov_scadenz
1411 FOR EACH ROW
1412DECLARE
1413 v_is_deleted CHAR(1);
1414BEGIN
1415 v_is_deleted := 'N';
1416
1417 sense_sp_change_mov_contab_erp(nvl(:new.nro_registrazione,
1418 :old.nro_registrazione),
1419 NULL,
1420 NULL,
1421 NULL,
1422 v_is_deleted);
1423
1424END;
1425/
1426-- *********************************************************************************************************
1427-- In questa parte troviamo gli oggetti per i document Type Preventivi cliente e Ordini cliente ERP
1428CREATE OR REPLACE
1429FUNCTION sense_sf_ant_dettaglioordcl(iRowId UROWID)
1430 RETURN CLOB IS
1431 vRetValue CLOB;
1432
1433 vRiga VARCHAR2(1024);
1434 vSep CHAR(1) := chr(10);
1435
1436 vLenTipoArt EUR_LUNGH_ATTR.LUNGH_ATTR%TYPE;
1437 vLenCodArt EUR_LUNGH_ATTR.LUNGH_ATTR%TYPE;
1438 NlsParams CONSTANT VARCHAR2(40) := 'NLS_NUMERIC_CHARACTERS=,@';
1439 vDatiCelle CLOB;
1440 vDatiRiga CLOB;
1441 vNota CLOB;
1442BEGIN
1443
1444 SELECT EUR_PKG_LUNGH_ATTR.SF_LUNGH('TIPOART')
1445 INTO vLenTipoArt
1446 FROM DUAL;
1447
1448 SELECT EUR_PKG_LUNGH_ATTR.SF_LUNGH('CODART')
1449 INTO vLenCodArt
1450 FROM DUAL;
1451
1452 FOR rec IN (SELECT 'ordine cliente' categoria,
1453 to_char(voct.anno_ord) anno_ord,
1454 voct.tipo_ord,
1455 to_char(voct.nro_ord) nro_ord,
1456 voct.data_ins,
1457 voct.mastro,
1458 voct.partit,
1459 cldest.descrizione_1 rag_soc_dest,
1460 nvl(voct.mastro_ft, voct.mastro) mastro_ft,
1461 nvl(voct.partit_ft, voct.partit) partit_ft,
1462 clfat.descrizione_1 rag_soc_fat,
1463 voct.mastro_ag1,
1464 voct.partit_ag1,
1465 age.descrizione_1 rag_sog_ag,
1466 voct.rif_vs_nro_ord,
1467 to_char(voct.rif_vs_data_ord, 'dd MONTH yyyy') rif_vs_data_ord,
1468 voct.note_test_ord,
1469 cp.desc_pagamento,
1470 vsd.desc_stato_doc,
1471 decode(voct.se_evaso, 'Y', 'evaso', 'non Evaso') seEvaso,
1472 vdc.desc_div_comm,
1473 vlc.desc_linea_comm,
1474 vcv.desc_canale_vend
1475 FROM vew_ord_cl_test voct,
1476 condizioni_di_pagamento cp,
1477 vew_divisione_comm vdc,
1478 vew_linea_commerciale vlc,
1479 vew_canale_vendita vcv,
1480 vew_stato_doc vsd,
1481 anagrafico_conti age,
1482 anagrafico_conti clDest,
1483 anagrafico_conti clfat
1484 WHERE cp.cod_pagam = voct.cod_pag
1485 AND vdc.cod_div_comm(+) = voct.cod_div_comm
1486 AND vlc.cod_linea_comm(+) = voct.cod_linea_comm
1487 AND vcv.cod_canale_vend(+) = voct.cod_canale_vend
1488 AND vsd.cod_stato_doc(+) = voct.cod_stato_doc
1489 AND age.mastro(+) = voct.mastro_ag1
1490 AND age.partitario(+) = voct.partit_ag1
1491 AND cldest.mastro(+) = voct.mastro
1492 AND cldest.partitario(+) = voct.partit
1493 AND clfat.mastro(+) = nvl(voct.mastro_ft, voct.mastro)
1494 AND clfat.partitario(+) = nvl(voct.partit_ft, voct.partit)
1495 AND voct.rowid = iRowid) LOOP
1496
1497 dbms_lob.createtemporary(vDatiRiga, TRUE);
1498 dbms_lob.createtemporary(vDatiCelle, TRUE);
1499 dbms_lob.createtemporary(vNota, TRUE);
1500
1501 vDatiRiga := sense_pkg_varie.SF_TABLE_HEADER_HTML('Tipo');
1502 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Codice'));
1503 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Descrizione'));
1504 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Qtà Ordinata'));
1505 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Prezzo'));
1506 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Richiesta cons.'));
1507 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Prevista cons.'));
1508 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Progetto'));
1509 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Sottoprogetto'));
1510 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Note',iSE_CRLF_SUFFIX=>false));
1511
1512 vDatiRiga := sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiRiga,iSE_CRLF_PREFIX=>false);
1513
1514 FOR rec_righe IN (SELECT *
1515 FROM vew_ord_cl_riga vocr
1516 WHERE vocr.anno_ord = rec.anno_ord
1517 AND vocr.tipo_ord = rec.tipo_ord
1518 AND vocr.nro_ord = rec.nro_ord) LOOP
1519
1520 -- la prima assegnazione, quando vDatiCelle è null, è conveniente farla direttamente e non mediante append
1521 vDatiCelle:=sense_pkg_varie.SF_TABLE_CELL_HTML(rpad(rec_righe.tipo_art, vLenTipoArt));
1522 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_art, vLenCodArt)));
1523 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.desc_riga, 60)));
1524 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.qta_ordinata,'9999999d9999',NlsParams)));
1525 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.prezzo,'9999999999d9999',NlsParams)));
1526 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.data_rich_cons, 'dd/mm/yyyy')));
1527 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.data_prev_cons, 'dd/mm/yyyy')));
1528 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_progetto, 25)));
1529 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_sottoprogetto, 20)));
1530
1531 -- la prima assegnazione, quando vNota è null, è conveniente farla direttamente e non mediante append
1532 vNota:=' ';
1533 FOR rec_nota IN (SELECT *
1534 FROM vew_ord_cl_nota vocn
1535 WHERE vocn.anno_ord = rec_righe.anno_ord
1536 AND vocn.tipo_ord = rec_righe.tipo_ord
1537 AND vocn.nro_ord = rec_righe.nro_ord
1538 AND vocn.riga_ord = rec_righe.riga_ord) LOOP
1539 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vNota, ' ' || rec_nota.nota);
1540 END LOOP; -- note
1541
1542 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(vNota));
1543 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiCelle));
1544
1545 END LOOP; -- regrighe
1546 END LOOP;
1547 -- aggiungo le intestazioni
1548
1549 dbms_lob.createtemporary(vREtValue, TRUE);
1550 -- la prima assegnazione, quando vREtValue è null, è conveniente farla direttamente e non mediante append
1551 vRetValue := sense_pkg_varie.SF_TABLE_HTML(vDatiRiga);
1552
1553 RETURN vRetValue;
1554
1555END;
1556/
1557
1558-- Preventivi
1559CREATE OR REPLACE VIEW sense_v_docs_prev_cli_erp (
1560 ditta,
1561 anno_ord,
1562 tipo_ord,
1563 nro_ord,
1564 data_ins,
1565 mese_ins,
1566 mastro_cli,
1567 partit_cli,
1568 cliente,
1569 ragionesociale,
1570 mastro_age,
1571 partit_age,
1572 agente,
1573 agenteragsoc,
1574 cod_pag,
1575 pagamento,
1576 cod_div_comm,
1577 divisione,
1578 cod_linea_comm,
1579 linea,
1580 cod_canale_vend,
1581 canale,
1582 stato_ordine,
1583 evaso,
1584 importo_ordine_iva_escl,
1585 dettaglio,
1586 cod_ditta,
1587 se_evaso,
1588 motivoannullamento,
1589 descrtipo )
1590AS
1591SELECT esd.desc_ditta ditta,
1592 voct.anno_ord,
1593 voct.tipo_ord,
1594 voct.nro_ord,
1595 voct.data_ins,
1596 to_char(voct.data_ins,'mm month') as mese_ins,
1597 ac.mastro mastro_cli,
1598 ac.partitario partit_cli,
1599 ac.mastro || ac.partitario || ' - ' ||
1600 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) cliente,
1601 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) ragionesociale,
1602 ag.mastro mastro_age,
1603 ag.partitario partit_age,
1604 ag.mastro || ag.partitario || ' - ' ||
1605 rtrim(ag.descrizione_1 || ' ' || ag.descrizione_2) agente,
1606 rtrim(ag.descrizione_1 || ' ' || ag.descrizione_2) agenteragsoc,
1607 voct.cod_pag,
1608 cp.desc_pagamento pagamento,
1609 voct.cod_div_comm,
1610 vdc.desc_div_comm divisione,
1611 voct.cod_linea_comm,
1612 vlc.desc_linea_comm linea,
1613 voct.cod_canale_vend,
1614 vcv.desc_canale_vend canale,
1615 CASE
1616 WHEN voct.data_ann IS NOT NULL THEN
1617 'Annullato'
1618 WHEN voct.data_sosp IS NOT NULL THEN
1619 'Sospeso'
1620 ELSE
1621 'Normale'
1622 END stato_ordine,
1623 CASE
1624 WHEN voct.data_ann IS NOT NULL THEN
1625 'Annullato'
1626 ELSE
1627 CASE
1628 WHEN nvl(voct.se_evaso, 'N') = 'Y' THEN
1629 'Evaso'
1630 ELSE
1631 'Non evaso'
1632 END
1633 END evaso,
1634 -- importo dell'ordine, iva esclusa
1635 vew_pkg_std.sf_valore_ord(
1636 voct.anno_ord ,
1637 voct.tipo_ord ,
1638 voct.nro_ord) importo_ordine_iva_escl,
1639 sense_sf_Ant_DettaglioOrdCl(voct.rowid) dettaglio,
1640 esd.cod_ditta cod_ditta,
1641 NVL (voct.se_evaso, 'N') AS se_evaso, /* Aggiunta per filtraggio su stato evasione */
1642 CASE
1643 WHEN voct.data_ann IS NOT NULL THEN
1644 to_char(voct.data_ann,'dd/mm/yyyy') || ' ' || vmsa.desc_motivo
1645 ELSE
1646 CASE
1647 WHEN voct.data_sosp IS NOT NULL THEN
1648 to_char(voct.data_sosp,'dd/mm/yyyy') || ' ' || vmsa.desc_motivo
1649 else
1650 null
1651 end
1652 END motivoannullamento,
1653 vew_ord_cl_tipo.desc_tipo_ord
1654 FROM vew_ord_cl_test voct,
1655 anagrafico_conti ac,
1656 eur_sec_ditte esd,
1657 anagrafico_conti ag,
1658 condizioni_di_pagamento cp,
1659 vew_divisione_comm vdc,
1660 vew_linea_commerciale vlc,
1661 vew_canale_vendita vcv,
1662 vew_ord_cl_tipo,
1663 vew_motivo_sosp_ann vmsa
1664 WHERE USER = esd.cod_ditta
1665 AND nvl(voct.mastro_ft, voct.mastro) = ac.mastro
1666 AND nvl(voct.partit_ft, voct.partit) = ac.partitario
1667 AND voct.mastro_ag1 = ag.mastro(+)
1668 AND voct.partit_ag1 = ag.partitario(+)
1669 AND cp.cod_pagam(+) = voct.cod_pag
1670 AND vdc.cod_div_comm(+) = voct.cod_div_comm
1671 AND vlc.cod_linea_comm(+) = voct.cod_linea_comm
1672 AND vcv.cod_canale_vend(+) = voct.cod_canale_vend
1673 AND vew_ord_cl_tipo.tipo_ord = voct.tipo_ord
1674 AND vew_ord_cl_tipo.se_preventivo = 'Y'
1675 and voct.cod_motivo = vmsa.cod_motivo(+)
1676 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
1677 and voct.data_ins >= NVL((select spdt.data_estrazione
1678 from sense_par_doc_type spdt
1679 where spdt.nome_doc_type(+) ='Preventivo di vendita (ERP)'),to_date('01011900','ddmmyyyy'))
1680/
1681-- ordini
1682
1683CREATE OR REPLACE VIEW sense_v_docs_ordini_cli_erp (
1684 ditta,
1685 anno_ord,
1686 tipo_ord,
1687 nro_ord,
1688 data_ins,
1689 mese_ins,
1690 mastro_cli,
1691 partit_cli,
1692 cliente,
1693 ragionesociale,
1694 mastro_age,
1695 partit_age,
1696 agente,
1697 agenteragsoc,
1698 cod_pag,
1699 pagamento,
1700 vs_nro_ord,
1701 vs_data_ord,
1702 cod_div_comm,
1703 divisione,
1704 cod_linea_comm,
1705 linea,
1706 cod_canale_vend,
1707 canale,
1708 stato_ordine,
1709 evaso,
1710 importo_ordine_iva_escl,
1711 dettaglio,
1712 cod_ditta,
1713 se_evaso,
1714 motivoannullamento,
1715 descrtipo )
1716AS
1717select
1718 esd.desc_ditta ditta,
1719 voct.anno_ord,
1720 voct.tipo_ord,
1721 voct.nro_ord,
1722 voct.data_ins,
1723 to_char(voct.data_ins,'mm month') as mese_ins,
1724 ac.mastro mastro_cli,
1725 ac.partitario partit_cli,
1726 ac.mastro||ac.partitario||' - '||rtrim(ac.descrizione_1||' '||ac.descrizione_2) cliente,
1727 rtrim(ac.descrizione_1||' '||ac.descrizione_2) ragionesociale,
1728 ag.mastro mastro_age,
1729 ag.partitario partit_age,
1730 ag.mastro||ag.partitario||' - '||rtrim(ag.descrizione_1||' '||ag.descrizione_2) agente,
1731 rtrim(ag.descrizione_1||' '||ag.descrizione_2) agenteragsoc,
1732 voct.cod_pag,
1733 cp.desc_pagamento pagamento,
1734 voct.rif_vs_nro_ord vs_nro_ord,
1735 voct.rif_vs_data_ord vs_data_ord,
1736 voct.cod_div_comm,
1737 vdc.desc_div_comm divisione,
1738 voct.cod_linea_comm,
1739 vlc.desc_linea_comm linea,
1740 voct.cod_canale_vend,
1741 vcv.desc_canale_vend canale,
1742 case when voct.data_ann is not null then 'Annullato'
1743 when voct.data_sosp is not null then 'Sospeso' else 'Normale' end stato_ordine,
1744 case when voct.data_ann is not null then 'Annullato'
1745 else case when nvl(voct.se_evaso,'N') = 'Y' then 'Evaso'
1746 else
1747 case when ( select count(*) from vew_ord_cl_riga vocr
1748 where voct.anno_ord = vocr.anno_ord and voct.tipo_ord = vocr.tipo_ord and voct.nro_ord = vocr.nro_ord
1749 and vocr.tipo_riga in ('A','R') and nvl(vocr.se_evasa,'N') = 'N' and vocr.data_ann is null ) > 0 then
1750 case when (
1751 select sum(nvl(vocr.qta_ordinata_gest,0) - nvl(vocr.qta_spedita_gest,0)) from vew_ord_cl_riga vocr
1752 where voct.anno_ord = vocr.anno_ord and voct.tipo_ord = vocr.tipo_ord and voct.nro_ord = vocr.nro_ord
1753 and vocr.tipo_riga in ('A','R') and vocr.data_ann is null
1754 having sum(nvl(vocr.qta_spedita_gest,0)) <> 0 ) > 0 then 'Parzialmente evaso'
1755 when (
1756 select sum( nvl(vocr.qta_spedita_gest,0)) from vew_ord_cl_riga vocr
1757 where voct.anno_ord = vocr.anno_ord and voct.tipo_ord = vocr.tipo_ord and voct.nro_ord = vocr.nro_ord
1758 and vocr.tipo_riga in ('A','R') and vocr.data_ann is null ) = 0 then 'Non evaso'
1759 when (
1760 select sum(nvl(vocr.qta_ordinata_gest,0) - nvl(vocr.qta_spedita_gest,0)) from vew_ord_cl_riga vocr
1761 where voct.anno_ord = vocr.anno_ord and voct.tipo_ord = vocr.tipo_ord and voct.nro_ord = vocr.nro_ord
1762 and vocr.tipo_riga in ('A','R') and vocr.data_ann is null ) <= 0 then 'Evaso'
1763 else 'Evaso' end
1764 else 'Evaso' end
1765 end
1766 end evaso,
1767 -- importo dell'ordine, iva esclusa
1768 vew_pkg_std.sf_valore_ord(
1769 voct.anno_ord ,
1770 voct.tipo_ord ,
1771 voct.nro_ord) importo_ordine_iva_escl,
1772 sense_sf_Ant_DettaglioOrdCl ( voct.rowid ) dettaglio,
1773 esd.cod_ditta cod_ditta,
1774 NVL (voct.se_evaso, 'N') AS se_evaso, /* Aggiunta per filtraggio su stato evasione */
1775 CASE
1776 WHEN voct.data_ann IS NOT NULL THEN
1777 to_char(voct.data_ann,'dd/mm/yyyy') || ' ' || vmsa.desc_motivo
1778 ELSE
1779 CASE
1780 WHEN voct.data_sosp IS NOT NULL THEN
1781 to_char(voct.data_sosp,'dd/mm/yyyy') || ' ' || vmsa.desc_motivo
1782 else
1783 null
1784 end
1785 END motivoannullamento,
1786 vew_ord_cl_tipo.desc_tipo_ord
1787from
1788 vew_ord_cl_test voct,
1789 anagrafico_conti ac,
1790 eur_sec_ditte esd,
1791 anagrafico_conti ag,
1792 condizioni_di_pagamento cp,
1793 vew_divisione_comm vdc,
1794 vew_linea_commerciale vlc,
1795 vew_canale_vendita vcv,
1796 vew_ord_cl_tipo,
1797 vew_motivo_sosp_ann vmsa
1798where
1799 user = esd.cod_ditta and
1800 nvl(voct.mastro_ft, voct.mastro) = ac.mastro and
1801 nvl(voct.partit_ft, voct.partit) = ac.partitario and
1802 voct.mastro_ag1 = ag.mastro (+) and
1803 voct.partit_ag1 = ag.partitario (+) and
1804 cp.cod_pagam (+) = voct.cod_pag and
1805 vdc.cod_div_comm(+) = voct.cod_div_comm and
1806 vlc.cod_linea_comm(+) = voct.cod_linea_comm and
1807 vcv.cod_canale_vend(+) = voct.cod_canale_vend and
1808 vew_ord_cl_tipo.tipo_ord = voct.tipo_ord and
1809 vew_ord_cl_tipo.se_preventivo = 'N' and
1810 voct.cod_motivo = vmsa.cod_motivo (+)
1811 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
1812 and voct.data_ins >= NVL((select spdt.data_estrazione
1813 from sense_par_doc_type spdt
1814 where spdt.nome_doc_type(+) ='Ordine di vendita (ERP)'),to_date('01011900','ddmmyyyy'))
1815/
1816
1817create table SENSE_CHANGES_ORDINI_CLI_ERP
1818(
1819 anno_ord NUMBER(4),
1820 tipo_ord CHAR(2),
1821 nro_ord NUMBER(6),
1822 last_change DATE,
1823 is_deleted CHAR(1),
1824 id NUMBER not null
1825);
1826
1827create index SENSE_CHG_ORD_CLI_ERP_IND01 on SENSE_CHANGES_ORDINI_CLI_ERP (ANNO_ORD, TIPO_ORD, NRO_ORD);
1828
1829alter table SENSE_CHANGES_ORDINI_CLI_ERP
1830 add constraint SENSE_CHANGES_ORD_CLI_ERP_PK primary key (ID);
1831
1832alter table SENSE_CHANGES_ORDINI_CLI_ERP
1833 add constraint SENSE_CHANGES_ORD_CLI_ERP_CK01
1834 check (is_deleted = 'Y' OR is_deleted = 'N');
1835
1836alter table SENSE_CHANGES_ORDINI_CLI_ERP
1837 add constraint SENSE_CHANGES_ORD_CLI_ERP_N01
1838 check (last_change IS NOT NULL);
1839
1840alter table SENSE_CHANGES_ORDINI_CLI_ERP
1841 add constraint SENSE_CHANGES_ORD_CLI_ERP_N02
1842 check (is_deleted IS NOT NULL);
1843
1844CREATE OR REPLACE VIEW SENSE_V_LCHANGE_ORDINI_CLI_ERP AS
1845SELECT anno_ord,
1846 tipo_ord,
1847 nro_ord,
1848 MAX(last_change) last_change,
1849 MAX(is_deleted) is_deleted
1850 FROM (SELECT anno_ord,
1851 tipo_ord,
1852 nro_ord,
1853 LAST_VALUE(last_change) OVER(PARTITION BY anno_ord, tipo_ord, nro_ord ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_change,
1854 LAST_VALUE(is_deleted) OVER(PARTITION BY anno_ord, tipo_ord, nro_ord ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) is_deleted
1855 FROM sense_changes_ordini_cli_erp)
1856 GROUP BY anno_ord, tipo_ord, nro_ord;
1857
1858 CREATE OR REPLACE PROCEDURE sense_sp_change_ordini_cli_erp(iAnnoOrd IN NUMBER,
1859 iTipoOrd IN CHAR,
1860 iNroOrd IN NUMBER,
1861 iIsDeleted IN CHAR) IS
1862BEGIN
1863 INSERT INTO sense_changes_ordini_cli_erp
1864 (id, anno_ord, tipo_ord, nro_ord, last_change, is_deleted)
1865 VALUES
1866 (sense_seq_changes.nextval,
1867 iAnnoOrd,
1868 iTipoOrd,
1869 iNroOrd,
1870 SYSDATE,
1871 iIsDeleted);
1872END;
1873/
1874
1875CREATE OR REPLACE TRIGGER vew_ord_cl_test_sense_trg01
1876 AFTER INSERT OR UPDATE OR DELETE ON vew_ord_cl_test
1877 FOR EACH ROW
1878DECLARE
1879 v_is_deleted CHAR(1);
1880BEGIN
1881 IF (inserting OR updating) THEN
1882 v_is_deleted := 'N';
1883 ELSE
1884 v_is_deleted := 'Y';
1885 END IF;
1886
1887 sense_sp_change_ordini_cli_erp(nvl(:new.anno_ord, :old.anno_ord),
1888 nvl(:new.tipo_ord, :old.tipo_ord),
1889 nvl(:new.nro_ord, :old.nro_ord),
1890 v_is_deleted);
1891END;
1892/
1893
1894CREATE OR REPLACE TRIGGER vew_ord_cl_riga_sense_trg01
1895 AFTER INSERT OR UPDATE OR DELETE ON vew_ord_cl_riga
1896 FOR EACH ROW
1897DECLARE
1898 v_is_deleted CHAR(1);
1899BEGIN
1900 IF (inserting OR updating) THEN
1901 v_is_deleted := 'N';
1902 ELSE
1903 v_is_deleted := 'Y';
1904 END IF;
1905
1906 sense_sp_change_ordini_cli_erp(nvl(:new.anno_ord, :old.anno_ord),
1907 nvl(:new.tipo_ord, :old.tipo_ord),
1908 nvl(:new.nro_ord, :old.nro_ord),
1909 v_is_deleted);
1910END;
1911/
1912CREATE OR REPLACE TRIGGER anagrafico_conti_sense_trg_02
1913 AFTER UPDATE
1914 OF descrizione_1, descrizione_2
1915 ON anagrafico_conti
1916 FOR EACH ROW
1917DECLARE
1918 -- determina quali ordini del DocumentType "Ordini Clienti ERP" sono interessati alla modifica
1919 CURSOR ordini_da_aggiornare IS
1920 SELECT voct.anno_ord, voct.tipo_ord, voct.nro_ord
1921 FROM vew_ord_cl_test voct
1922 WHERE
1923 (nvl(voct.mastro_ft, voct.mastro) = :OLD.mastro and
1924 nvl(voct.partit_ft, voct.partit) = :OLD.partitario) or
1925 (voct.mastro_ag1 = :OLD.mastro and
1926 voct.partit_ag1 = :OLD.partitario);
1927BEGIN
1928 FOR ordine IN ordini_da_aggiornare
1929 LOOP
1930 sense_sp_change_ordini_cli_erp(ordine.anno_ord, ordine.tipo_ord, ordine.nro_ord,'N');
1931 END LOOP;
1932END;
1933/
1934-- *********************************************************************************************************
1935-- In questa parte troviamo gli oggetti per i document Type Documenti di vendita
1936CREATE OR REPLACE
1937FUNCTION sense_sf_ant_dettaglioddtcl(iRowid UROWID)
1938 RETURN CLOB IS
1939 vMastroFatt anagrafico_conti.mastro%TYPE;
1940 vPartitFatt anagrafico_conti.partitario%TYPE;
1941 vMastro anagrafico_conti.mastro%TYPE;
1942 vPartit anagrafico_conti.partitario%TYPE;
1943 vNroFatt vew_bolla_test.nro_ft%TYPE;
1944 vDataFatt vew_bolla_test.data_ft%TYPE;
1945 vRowAnag UROWID;
1946 vConta NUMBER(5);
1947 vTotFt mov_contab.importo_lit_d%TYPE;
1948 vRetValue CLOB;
1949
1950 vRiga VARCHAR2(1024);
1951 vSep CHAR(1) := chr(10);
1952
1953 vLenTipoArt EUR_LUNGH_ATTR.LUNGH_ATTR%TYPE;
1954 vLenCodArt EUR_LUNGH_ATTR.LUNGH_ATTR%TYPE;
1955 NlsParams CONSTANT VARCHAR2(40) := 'NLS_NUMERIC_CHARACTERS=,@';
1956 vDatiCelle CLOB;
1957 vDatiRiga CLOB;
1958 vNota CLOB;
1959BEGIN
1960 vConta := 0;
1961
1962 SELECT EUR_PKG_LUNGH_ATTR.SF_LUNGH('TIPOART')
1963 INTO vLenTipoArt
1964 FROM DUAL;
1965
1966 SELECT EUR_PKG_LUNGH_ATTR.SF_LUNGH('CODART')
1967 INTO vLenCodArt
1968 FROM DUAL;
1969
1970 FOR rec_test IN (SELECT vbt.anno_bolla,
1971 vbt.tipo_bolla,
1972 vbt.nro_bolla,
1973 vbt.data_ins,
1974 vbt.mastro mastro_dest,
1975 vbt.partit partit_dest,
1976 cl_dest.descrizione_1 descr_1_dest,
1977 nvl(vbt.mastro_ft, vbt.mastro) mastro_ft,
1978 nvl(vbt.partit_ft, vbt.partit) partit_ft,
1979 cl_fatt.descrizione_1 descr_1_ft,
1980 vbt.mastro_ag1,
1981 vbt.partit_ag1,
1982 age.descrizione_1 rag_soc_ag,
1983 vbt.rif_vs_nro_ord,
1984 to_char(vbt.rif_vs_data_ord, 'dd MONTH yyyy') rif_vs_data_ord,
1985 vbt.note_test_bolla,
1986 vbt.nro_ft,
1987 vbt.data_ft,
1988 cp.desc_pagamento,
1989 vdc.desc_div_comm,
1990 vlc.desc_linea_comm,
1991 vcv.desc_canale_vend
1992 FROM vew_bolla_test vbt,
1993 anagrafico_conti cl_dest,
1994 anagrafico_conti cl_fatt,
1995 anagrafico_conti age,
1996 condizioni_di_pagamento cp,
1997 vew_divisione_comm vdc,
1998 vew_linea_commerciale vlc,
1999 vew_canale_vendita vcv
2000 WHERE vbt.mastro_ag1 = age.mastro(+)
2001 AND vbt.partit_ag1 = age.partitario(+)
2002 AND vbt.cod_pag = cp.cod_pagam(+)
2003 AND vdc.cod_div_comm(+) = vbt.cod_div_comm
2004 AND vlc.cod_linea_comm(+) = vbt.cod_linea_comm
2005 AND vcv.cod_canale_vend(+) = vbt.cod_canale_vend
2006 AND vbt.mastro = cl_dest.mastro
2007 AND vbt.partit = cl_dest.partitario
2008 AND nvl(vbt.mastro_ft, vbt.mastro) = cl_fatt.mastro
2009 AND nvl(vbt.partit_ft, vbt.partit) =
2010 cl_fatt.partitario
2011 AND vbt.rowid = iRowId) LOOP
2012
2013 dbms_lob.createtemporary(vDatiRiga, TRUE);
2014 dbms_lob.createtemporary(vDatiCelle, TRUE);
2015 dbms_lob.createtemporary(vNota, TRUE);
2016
2017 vDatiRiga := sense_pkg_varie.SF_TABLE_HEADER_HTML('Tipo');
2018
2019 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Codice'));
2020 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Descrizione'));
2021 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Qtà spedita'));
2022 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Prezzo'));
2023 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Valore'));
2024 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Progetto'));
2025 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Sottoprogetto'));
2026 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Rif. ordine'));
2027 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Note',iSE_CRLF_SUFFIX=>false));
2028
2029 vDatiRiga := sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiRiga,iSE_CRLF_PREFIX=>false);
2030
2031 SELECT ROWID
2032 INTO vRowAnag
2033 FROM anagrafico_conti
2034 WHERE mastro = rec_test.mastro_dest
2035 AND partitario = rec_test.partit_dest;
2036
2037 vConta := 1;
2038 FOR rec_righe IN (SELECT *
2039 FROM vew_bolla_riga vbr
2040 WHERE vbr.anno_bolla = rec_test.anno_bolla
2041 AND vbr.tipo_bolla = rec_test.tipo_bolla
2042 AND vbr.nro_bolla = rec_test.nro_bolla
2043 ORDER BY vbr.riga_bolla) LOOP
2044
2045 -- la prima assegnazione, quando vDatiCelle è null, è conveniente farla direttamente e non mediante append
2046 vDatiCelle:=sense_pkg_varie.SF_TABLE_CELL_HTML(rpad(rec_righe.tipo_art, vLenTipoArt));
2047 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_art, vLenCodArt)));
2048 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.desc_riga, 60)));
2049 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.qta_spedita,'9999999d9999',NlsParams)));
2050 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.prezzo,'9999999999d9999',NlsParams)));
2051 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.val_netto_sc_riga,'9999999999d9999',NlsParams)));
2052 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_progetto, 25)));
2053 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_sottoprogetto, 20)));
2054 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.rif_ns_anno_ord, 6) || rPad(rec_righe.rif_ns_tipo_ord, 5) ||rPad(rec_righe.rif_ns_nro_ord, 10)));
2055
2056 -- la prima assegnazione, quando vNota è null, è conveniente farla direttamente e non mediante append
2057 vNota:=' ';
2058 FOR rec_nota IN (SELECT *
2059 FROM vew_bolla_nota vocn
2060 WHERE vocn.anno_bolla = rec_righe.anno_bolla
2061 AND vocn.tipo_bolla = rec_righe.tipo_bolla
2062 AND vocn.nro_bolla = rec_righe.nro_bolla
2063 AND vocn.riga_bolla = rec_righe.riga_bolla
2064
2065 ) LOOP
2066 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vNota, ' ' || rec_nota.nota);
2067 END LOOP; -- note
2068
2069 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(vNota));
2070 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiCelle));
2071
2072 END LOOP; -- su righe bolla
2073 END LOOP; -- su testata
2074 -- aggiungo le intestazioni
2075
2076 dbms_lob.createtemporary(vREtValue, TRUE);
2077 -- la prima assegnazione, quando vREtValue è null, è conveniente farla direttamente e non mediante append
2078 vRetValue := sense_pkg_varie.SF_TABLE_HTML(vDatiRiga);
2079
2080
2081 RETURN vRetValue;
2082
2083END;
2084/
2085CREATE OR REPLACE VIEW sense_v_docs_ddt_cli_erp (
2086 ditta,
2087 anno_ddt,
2088 tipo_ddt,
2089 nro_ddt,
2090 data_ddt,
2091 mese_ddt,
2092 cliente,
2093 ragionesociale,
2094 agente,
2095 agenteragsoc,
2096 pagamento,
2097 nro_vs_ord,
2098 data_vs_ord,
2099 divisione,
2100 linea,
2101 canale,
2102 stato,
2103 dettaglio,
2104 cod_ditta,
2105 mastro,
2106 partit,
2107 mastro_ft,
2108 partit_ft,
2109 data_ft,
2110 nro_ft,
2111 sez_iva,
2112 se_da_fatturare,
2113 desc_tipo_bolla,
2114 datifattura )
2115AS
2116select esd.desc_ditta ditta,
2117 vbt.anno_bolla anno_ddt,
2118 vbt.tipo_bolla tipo_ddt,
2119 vbt.nro_bolla nro_ddt,
2120 vbt.data_ins data_ddt,
2121 to_char(vbt.data_ins,'mm month') mese_ddt,
2122 ac.mastro || ac.partitario || ' - ' ||
2123 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) cliente,
2124 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) ragionesociale,
2125 ag.mastro || ag.partitario || ' - ' ||
2126 rtrim(ag.descrizione_1 || ' ' || ag.descrizione_2) agente,
2127 rtrim(ag.descrizione_1 || ' ' || ag.descrizione_2) agenteragsoc,
2128 cp.desc_pagamento pagamento,
2129 vbt.rif_vs_nro_ord nro_vs_ord,
2130 vbt.rif_vs_data_ord data_vs_ord,
2131 vdc.desc_div_comm divisione,
2132 vlc.desc_linea_comm linea,
2133 vcv.desc_canale_vend canale,
2134 case
2135 when vt.tipo_fatt_creaz not in ('1','2','8','9') then
2136 'Non fatturabile' /* non fatturabile quindi Altro */
2137 else
2138 case
2139 when nvl(vbt.nro_mov_cont_ft, 0) = 0 then
2140 'Da fatturare'
2141 else
2142 'Fatturato'
2143 end
2144 end stato,
2145 sense_sf_Ant_DettaglioDdtCl(vbt.rowid) dettaglio,
2146 esd.cod_ditta,
2147 vbt.mastro,
2148 vbt.partit,
2149 vbt.mastro_ft,
2150 vbt.partit_ft,
2151 vbt.data_ft,
2152 vbt.nro_ft,
2153 vbt.sez_iva,
2154
2155 case
2156 when vt.tipo_fatt_creaz not in ('1','2','8','9') then
2157 'A' /* non fatturabile quindi Altro */
2158 else
2159 case
2160 when nvl(vbt.nro_mov_cont_ft, 0) = 0 then
2161 'Y' /* da fatturare */
2162 else
2163 'N' /* fatturato*/
2164 end
2165 end se_da_fatturare,
2166 vt.desc_tipo_bolla,
2167 CASE
2168 WHEN VBT.NRO_FT IS NULL OR VBT.NRO_FT = 0 THEN
2169 NULL
2170 ELSE
2171 CASE
2172 when vt.tipo_fatt_creaz in ('1','2') then
2173 'Fattura ' || vbt.nro_ft || ' ' || trim(vbt.sez_iva) || ' del ' || to_char(vbt.data_ft,'dd/mm/yyyy')
2174 when vt.tipo_fatt_creaz = '8' then
2175 'Nota di debito ' || vbt.nro_ft || ' ' || trim(vbt.sez_iva) || ' del ' || to_char(vbt.data_ft,'dd/mm/yyyy')
2176 when vt.tipo_fatt_creaz = '9' then
2177 'Nota di credito ' || vbt.nro_ft || ' ' || trim(vbt.sez_iva) || ' del ' || to_char(vbt.data_ft,'dd/mm/yyyy')
2178 else
2179 null
2180 end
2181 END datifattura
2182
2183 from vew_bolla_test vbt,
2184 vew_bolla_tipo vt,
2185 anagrafico_conti ac,
2186 eur_sec_ditte esd,
2187 anagrafico_conti ag,
2188 condizioni_di_pagamento cp,
2189 vew_divisione_comm vdc,
2190 vew_linea_commerciale vlc,
2191 vew_canale_vendita vcv
2192 where user = esd.cod_ditta
2193 and nvl(vbt.mastro_ft, vbt.mastro) = ac.mastro
2194 and nvl(vbt.partit_ft, vbt.partit) = ac.partitario
2195 and vbt.mastro_ag1 = ag.mastro(+)
2196 and vbt.partit_ag1 = ag.partitario(+)
2197 and cp.cod_pagam = vbt.cod_pag(+)
2198 and vdc.cod_div_comm(+) = vbt.cod_div_comm
2199 and vlc.cod_linea_comm(+) = vbt.cod_linea_comm
2200 and vcv.cod_canale_vend(+) = vbt.cod_canale_vend
2201 and vbt.tipo_bolla = vt.tipo_bolla
2202 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
2203 and vbt.data_ins >= NVL((select spdt.data_estrazione
2204 from sense_par_doc_type spdt
2205 where spdt.nome_doc_type(+) ='Documento di vendita (ERP)'),to_date('01011900','ddmmyyyy'))
2206/
2207
2208
2209create table SENSE_CHANGES_DDT_CLI_ERP
2210(
2211 anno_ddt NUMBER(4),
2212 tipo_ddt CHAR(2),
2213 nro_ddt NUMBER(6),
2214 last_change DATE,
2215 is_deleted CHAR(1),
2216 id NUMBER not null
2217);
2218
2219create index SENSE_CHG_DDT_CLI_ERP_IND01 on SENSE_CHANGES_DDT_CLI_ERP (ANNO_DDT, TIPO_DDT, NRO_DDT);
2220
2221alter table SENSE_CHANGES_DDT_CLI_ERP
2222 add constraint SENSE_CHANGES_DDT_CLI_ERP_PK primary key (ID);
2223
2224alter table SENSE_CHANGES_DDT_CLI_ERP
2225 add constraint SENSE_CHANGES_DDT_CLI_ERP_CK01
2226 check (is_deleted = 'Y' OR is_deleted = 'N');
2227alter table SENSE_CHANGES_DDT_CLI_ERP
2228 add constraint SENSE_CHANGES_DDT_CLI_ERP_N01
2229 check (last_change IS NOT NULL);
2230alter table SENSE_CHANGES_DDT_CLI_ERP
2231 add constraint SENSE_CHANGES_DDT_CLI_ERP_N02
2232 check (is_deleted IS NOT NULL);
2233
2234
2235CREATE OR REPLACE VIEW SENSE_V_LCHANGE_DDT_CLI_ERP AS
2236SELECT anno_ddt,
2237 tipo_ddt,
2238 nro_ddt,
2239 MAX(last_change) last_change,
2240 MAX(is_deleted) is_deleted
2241 FROM (SELECT anno_ddt,
2242 tipo_ddt,
2243 nro_ddt,
2244 LAST_VALUE(last_change) OVER(PARTITION BY anno_ddt, tipo_ddt, nro_ddt ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_change,
2245 LAST_VALUE(is_deleted) OVER(PARTITION BY anno_ddt, tipo_ddt, nro_ddt ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) is_deleted
2246 FROM sense_changes_ddt_cli_erp)
2247 GROUP BY anno_ddt, tipo_ddt, nro_ddt;
2248
2249
2250CREATE OR REPLACE PROCEDURE sense_sp_change_ddt_cli_erp(iAnnoDdt IN NUMBER,
2251 iTipoDdt IN CHAR,
2252 iNroDdt IN NUMBER,
2253 iIsDeleted IN CHAR) IS
2254BEGIN
2255 INSERT INTO sense_changes_ddt_cli_erp
2256 (id, anno_ddt, tipo_ddt, nro_ddt, last_change, is_deleted)
2257 VALUES
2258 (sense_seq_changes.nextval,
2259 iAnnoDdt,
2260 iTipoDdt,
2261 iNroDdt,
2262 SYSDATE,
2263 iIsDeleted);
2264END;
2265/
2266
2267CREATE OR REPLACE TRIGGER vew_bolla_test_sense_trg01
2268 AFTER INSERT OR UPDATE OR DELETE ON vew_bolla_test
2269 FOR EACH ROW
2270DECLARE
2271 v_is_deleted CHAR(1);
2272BEGIN
2273 IF (inserting OR updating) THEN
2274 v_is_deleted := 'N';
2275 ELSE
2276 v_is_deleted := 'Y';
2277 END IF;
2278
2279 sense_sp_change_ddt_cli_erp(nvl(:new.anno_bolla, :old.anno_bolla),
2280 nvl(:new.tipo_bolla, :old.tipo_bolla),
2281 nvl(:new.nro_bolla, :old.nro_bolla),
2282 v_is_deleted);
2283END;
2284/
2285
2286CREATE OR REPLACE TRIGGER vew_bolla_riga_sense_trg01
2287 AFTER INSERT OR UPDATE OR DELETE ON vew_bolla_riga
2288 FOR EACH ROW
2289DECLARE
2290 v_is_deleted CHAR(1);
2291BEGIN
2292 IF (inserting OR updating) THEN
2293 v_is_deleted := 'N';
2294 ELSE
2295 v_is_deleted := 'Y';
2296 END IF;
2297
2298 sense_sp_change_ddt_cli_erp(nvl(:new.anno_bolla, :old.anno_bolla),
2299 nvl(:new.tipo_bolla, :old.tipo_bolla),
2300 nvl(:new.nro_bolla, :old.nro_bolla),
2301 v_is_deleted);
2302END;
2303/
2304-- *********************************************************************************************************
2305-- In questa parte troviamo gli oggetti per i document Type Progetto
2306CREATE OR REPLACE
2307FUNCTION sense_sf_ant_dettaglioprogetto(iRowid UROWID)
2308 RETURN CLOB IS
2309
2310 vRetValue CLOB;
2311
2312 vRiga VARCHAR2(1024);
2313 vSep CHAR(1) := chr(10);
2314BEGIN
2315 vRetValue := '';
2316 FOR rec IN (SELECT * FROM mag_prj WHERE ROWID = iRowid) LOOP
2317 FOR rec_sp IN (SELECT *
2318 FROM mag_prj_dett
2319 WHERE cod_Progetto = rec.cod_progetto
2320 ORDER BY sequenza_ord) LOOP
2321
2322 IF rec_sp.descr IS NOT NULL THEN
2323 vRetValue := vRetValue || rec_sp.descr || vSep;
2324 END IF;
2325
2326 END LOOP; -- sottoprogetti
2327
2328 END LOOP; -- su progetti
2329
2330 RETURN vRetValue;
2331
2332END;
2333/
2334CREATE OR REPLACE VIEW sense_v_progetti_erp (
2335 ditta,
2336 progetto,
2337 descrizione,
2338 data,
2339 mese,
2340 situazione_prj,
2341 descr_situazione_prj,
2342 stato_prj,
2343 cliente,
2344 ragionesociale,
2345 dettaglio,
2346 cod_ditta,
2347 mastro_cl,
2348 partit_cl,
2349 datafine )
2350AS
2351select
2352 esd.desc_ditta ditta,
2353 p.cod_progetto progetto,
2354 p.descr descrizione,
2355 p.data_ora_creaz data,
2356 to_char(p.data_ora_creaz,'mm month') mese,
2357 DECODE(st.id_stato,NULL,'C','T') situazione_prj,
2358 DECODE(st.id_stato,NULL,'In corso','Terminato') descr_situazione_prj,
2359 s.descrizione stato_prj,
2360 p.mastro_cl||p.partit_cl||' - '||trim(ac.descrizione_1||' '||ac.descrizione_2) cliente,
2361 trim(ac.descrizione_1||' '||ac.descrizione_2) ragionesociale,
2362 sense_sf_Ant_DettaglioProgetto ( p.rowid ) dettaglio,
2363 esd.cod_ditta cod_ditta,
2364 p.mastro_cl,
2365 p.partit_cl,
2366 p.data_fine_prev datafine
2367 from
2368 mag_prj p,
2369 mag_doc_stato s,
2370 anagrafico_conti ac,
2371 eur_sec_ditte esd,
2372 mag_doc_stato_trans st
2373 where
2374 p.mastro_cl = ac.mastro(+) and
2375 p.partit_cl = ac.partitario(+) and
2376 p.stato = s.id_stato and
2377 -- escludiamo il progetto anonimo
2378 p.cod_progetto <> '000000000000000' and
2379 user = esd.cod_ditta and
2380 st.id_stato(+) = s.id_stato and
2381 st.id_doc(+) = 'PRJ' and
2382 st.id_trans(+) = 'PRJTER'
2383/
2384
2385-- Create table
2386create table SENSE_CHANGES_PROGETTI_ERP
2387(
2388 cod_progetto CHAR(15) not null,
2389 last_change DATE,
2390 is_deleted CHAR(1),
2391 id NUMBER not null
2392);
2393
2394create index SENSE_CHG_PROGETTI_ERP_IND01 on SENSE_CHANGES_PROGETTI_ERP (COD_PROGETTO);
2395
2396
2397alter table SENSE_CHANGES_PROGETTI_ERP
2398 add constraint SENSE_CHANGES_PROGETTI_ERP_PK primary key (ID);
2399
2400alter table SENSE_CHANGES_PROGETTI_ERP
2401 add constraint SENSE_CHANGES_PROGET_ERP_CK01
2402 check (is_deleted = 'Y' OR is_deleted = 'N');
2403
2404alter table SENSE_CHANGES_PROGETTI_ERP
2405 add constraint SENSE_CHANGES_PROGET_ERP_N01
2406 check (last_change IS NOT NULL);
2407
2408alter table SENSE_CHANGES_PROGETTI_ERP
2409 add constraint SENSE_CHANGES_PROGET_ERP_N02
2410 check (is_deleted IS NOT NULL);
2411
2412CREATE OR REPLACE VIEW SENSE_V_LCHANGE_PROGETTI_ERP AS
2413SELECT cod_progetto,
2414 MAX(last_change) last_change,
2415 MAX(is_deleted) is_deleted
2416 FROM (SELECT cod_progetto,
2417 LAST_VALUE(last_change) OVER(PARTITION BY cod_progetto ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_change,
2418 LAST_VALUE(is_deleted) OVER(PARTITION BY cod_progetto ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) is_deleted
2419 FROM sense_changes_progetti_erp)
2420 GROUP BY cod_progetto;
2421
2422CREATE OR REPLACE PROCEDURE sense_sp_change_progetti_erp(iCodProgetto IN CHAR,
2423 iIsDeleted IN CHAR) IS
2424BEGIN
2425 INSERT INTO sense_changes_progetti_erp
2426 (id, cod_progetto, last_change, is_deleted)
2427 VALUES
2428 (sense_seq_changes.nextval, iCodProgetto, SYSDATE, iIsDeleted);
2429END;
2430/
2431
2432CREATE OR REPLACE TRIGGER mag_prj_sense_trg01
2433 AFTER INSERT OR UPDATE OR DELETE ON mag_prj
2434 FOR EACH ROW
2435DECLARE
2436 v_is_deleted CHAR(1);
2437BEGIN
2438 IF (inserting OR updating) THEN
2439 v_is_deleted := 'N';
2440 ELSE
2441 v_is_deleted := 'Y';
2442 END IF;
2443
2444 sense_sp_change_progetti_erp(nvl(:new.cod_progetto, :old.cod_progetto),
2445 v_is_deleted);
2446END;
2447/
2448-- *********************************************************************************************************
2449-- In questa parte troviamo gli oggetti per i document Type Articolo
2450CREATE OR REPLACE VIEW sense_v_articoli_erp (
2451 ditta,
2452 tipo,
2453 descr_tipo_art,
2454 codice,
2455 descrizione,
2456 datains,
2457 meseins,
2458 datasosp,
2459 dataann,
2460 stato,
2461 gruppomerc,
2462 listino,
2463 cod_ditta,
2464 motivoannullamento )
2465AS
2466SELECT DISTINCT esd.desc_ditta ditta,
2467 maa.tipo_articolo tipo,
2468 mtsca.descrizione descr_tipo_art,
2469 maa.cod_articolo codice,
2470 TRIM(maa.desc_articolo_1 || ' ' ||
2471 maa.desc_articolo_2) descrizione,
2472 maa.data_ins datains,
2473 to_char(maa.data_ins,'mm month') meseins,
2474 maa.data_blocco_articolo datasosp,
2475 maa.data_annullamento dataann,
2476 CASE
2477 WHEN maa.data_blocco_articolo IS NOT NULL AND
2478 maa.data_annullamento IS NOT NULL THEN
2479 'Chiuso'
2480 WHEN maa.data_annullamento IS NOT NULL THEN
2481 'Chiuso'
2482 WHEN maa.data_blocco_articolo IS NOT NULL THEN
2483 'Sospeso'
2484 ELSE
2485 'Valido'
2486 END stato,
2487 mtgm.descrizione gruppomerc,
2488 CASE
2489 WHEN maal.data_attivazione IS NOT NULL THEN
2490 'Ha listino vendita valido'
2491 ELSE
2492 'Non ha listino vendita valido'
2493 END listino,
2494 esd.cod_ditta,
2495 CASE
2496 WHEN maa.data_annullamento IS NOT NULL THEN
2497 to_char(maa.data_annullamento,'dd/mm/yyyy') || ' ' || maa.motivo_chiusura
2498 ELSE
2499 CASE
2500 WHEN maa.data_blocco_articolo IS NOT NULL THEN
2501 to_char(maa.data_blocco_articolo,'dd/mm/yyyy') || ' ' || maa.motivo_chiusura
2502 else
2503 null
2504 end
2505 END motivoannullamento
2506 FROM mag_ana_articoli maa,
2507 mag_tab_gruppi_merc mtgm,
2508 mag_ana_articoli_listini maal,
2509 eur_sec_ditte esd,
2510 mag_tab_strut_cod_artic mtsca
2511 WHERE USER = esd.cod_ditta
2512 AND maa.cod_gruppo_merc = mtgm.cod_gruppo_merc(+)
2513 and maa.tipo_articolo = mtsca.tipo_articolo
2514 and mtsca.sequenza = 0
2515 AND maa.tipo_articolo = maal.tipo_articolo(+)
2516 AND maa.cod_articolo = maal.cod_articolo(+)
2517 AND maal.data_attivazione(+) <= SYSDATE
2518 AND (maal.data_fine_val IS NULL OR maal.data_fine_val > SYSDATE)
2519 AND (maal.data_attivazione =
2520 (SELECT MAX(maal1.data_attivazione)
2521 FROM mag_ana_articoli_listini maal1
2522 WHERE maal.tipo_articolo = maal1.tipo_articolo
2523 AND maal.cod_articolo = maal1.cod_articolo
2524 AND maal1.data_attivazione <= SYSDATE
2525 AND (maal1.data_fine_val IS NULL OR
2526 maal1.data_fine_val > SYSDATE)) OR
2527 maal.data_attivazione IS NULL)
2528/
2529
2530-- Create table
2531create table SENSE_CHANGES_ARTICOLI_ERP
2532(
2533 tipo_articolo CHAR(3),
2534 cod_articolo CHAR(15),
2535 last_change DATE,
2536 is_deleted CHAR(1),
2537 id NUMBER not null
2538);
2539
2540create index SENSE_CHG_ARTICOLI_ERP_IND01 on SENSE_CHANGES_ARTICOLI_ERP (TIPO_ARTICOLO, COD_ARTICOLO);
2541
2542alter table SENSE_CHANGES_ARTICOLI_ERP
2543 add constraint SENSE_CHANGES_ARTICOLI_ERP_PK primary key (ID);
2544
2545alter table SENSE_CHANGES_ARTICOLI_ERP
2546 add constraint SENSE_CHANGES_ARTIC_ERP_CK01
2547 check (is_deleted = 'Y' OR is_deleted = 'N');
2548
2549alter table SENSE_CHANGES_ARTICOLI_ERP
2550 add constraint SENSE_CHANGES_ARTIC_ERP_N01
2551 check (last_change IS NOT NULL);
2552
2553alter table SENSE_CHANGES_ARTICOLI_ERP
2554 add constraint SENSE_CHANGES_ARTIC_ERP_N02
2555 check (is_deleted IS NOT NULL);
2556
2557
2558CREATE OR REPLACE VIEW SENSE_V_LCHANGE_ARTICOLI_ERP AS
2559SELECT tipo_articolo,
2560 cod_articolo,
2561 MAX(last_change) last_change,
2562 MAX(is_deleted) is_deleted
2563 FROM (SELECT tipo_articolo,
2564 cod_articolo,
2565 LAST_VALUE(last_change) OVER(PARTITION BY tipo_articolo, cod_articolo ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_change,
2566 LAST_VALUE(is_deleted) OVER(PARTITION BY tipo_articolo, cod_articolo ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) is_deleted
2567 FROM sense_changes_articoli_erp)
2568 GROUP BY tipo_articolo, cod_articolo;
2569
2570CREATE OR REPLACE PROCEDURE sense_sp_change_articoli_erp(iTipoArticolo IN CHAR,
2571 iCodArticolo IN CHAR,
2572 iIsDeleted IN CHAR) IS
2573BEGIN
2574 INSERT INTO sense_changes_articoli_erp
2575 (id, tipo_articolo, cod_articolo, last_change, is_deleted)
2576 VALUES
2577 (sense_seq_changes.nextval, iTipoArticolo, iCodArticolo, SYSDATE, iIsDeleted);
2578END;
2579/
2580
2581CREATE OR REPLACE TRIGGER mag_ana_articoli_sense_trg01
2582 AFTER INSERT OR UPDATE OR DELETE ON mag_ana_articoli
2583 FOR EACH ROW
2584DECLARE
2585 v_is_deleted CHAR(1);
2586BEGIN
2587 IF (inserting OR updating) THEN
2588 v_is_deleted := 'N';
2589 ELSE
2590 v_is_deleted := 'Y';
2591 END IF;
2592
2593 sense_sp_change_articoli_erp(nvl (:new.tipo_articolo, :old.tipo_articolo), nvl (:new.cod_articolo, :old.cod_articolo), v_is_deleted);
2594END;
2595/
2596
2597-- gestisco eventuale ridimensionamento del tipo e codice articolo in funzione di quanto impostato nella ditta
2598BEGIN
2599 EUR_PKG_LUNGH_ATTR.SP_MODIFY('SENSE_CHANGES_ARTICOLI_ERP','COD_ARTICOLO','CODART');
2600 EXCEPTION WHEN OTHERS THEN
2601 DBMS_OUTPUT.PUT_LINE('Non ha funzionato il comando: EUR_PKG_LUNGH_ATTR.SP_MODIFY(''SENSE_CHANGES_ARTICOLI_ERP'',''COD_ARTICOLO'',''CODART'');');
2602END;
2603/
2604
2605BEGIN
2606 EUR_PKG_LUNGH_ATTR.SP_MODIFY('SENSE_CHANGES_ARTICOLI_ERP','TIPO_ARTICOLO','TIPOART');
2607 EXCEPTION WHEN OTHERS THEN
2608 DBMS_OUTPUT.PUT_LINE('Non ha funzionato il comando: EUR_PKG_LUNGH_ATTR.SP_MODIFY(''SENSE_CHANGES_ARTICOLI_ERP'',''TIPO_ARTICOLO'',''TIPOART'');');
2609END;
2610/
2611-- *********************************************************************************************************
2612-- In questa parte troviamo gli oggetti per i document Type Documento di acquisto
2613CREATE OR REPLACE VIEW sense_v_docs_ddt_for_erp (
2614 ditta,
2615 anno_doc,
2616 tipo_doc,
2617 nro_doc,
2618 data_ins,
2619 mese_ins,
2620 numero_doc_forn,
2621 data_doc_forn,
2622 fornitore,
2623 ragionesociale,
2624 cod_ditta,
2625 mastro,
2626 partitario,
2627 nro_ft,
2628 sez_iva,
2629 data_ft,
2630 datifattura,
2631 desc_tipo_doc,
2632 stato_fatt,
2633 se_da_fatturare )
2634AS
2635select esd.desc_ditta ditta,
2636 doc.anno_doc,
2637 doc.tipo_doc,
2638 doc.nro_doc,
2639 doc.data_ins,
2640 to_char(doc.data_ins,'mm month') mese_ins,
2641 doc.numero_doc_forn,
2642 doc.data_doc_forn,
2643 ac.mastro || ac.partitario || ' - ' ||
2644 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) fornitore,
2645 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) ragionesociale,
2646 -- ?? da implementare GetDettaglioDdtFor(doc.rowid) dettaglio,
2647 esd.cod_ditta,
2648 ac.mastro,
2649 ac.partitario,
2650 doc.nro_ft,
2651 doc.sez_iva,
2652 doc.data_ft,
2653 CASE
2654 WHEN doc.nro_ft IS NOT NULL THEN
2655 'Fattura ' || doc.nro_ft || ' ' || ' del ' || to_char(doc.data_ft,'dd/mm/yyyy')
2656 ELSE
2657 NULL
2658 END DatiFattura,
2659 adt.desc_tipo_doc,
2660 case
2661 when adt.tipo_fatt_creaz not in ('1','8','9') then
2662 'Non fatturabile' /* non fatturabile quindi Altro */
2663 else
2664 case
2665 when nvl(doc.nro_mov_cont_ft, 0) = 0 then
2666 'Da fatturare'
2667 else
2668 'Fatturato'
2669 end
2670 end stato_fatt,
2671 case
2672 when adt.tipo_fatt_creaz not in ('1','8','9') then
2673 'A' /* non fatturabile quindi Altro */
2674 else
2675 case
2676 when nvl(doc.nro_mov_cont_ft, 0) = 0 then
2677 'Y' /* da fatturare */
2678 else
2679 'N' /* fatturato*/
2680 end
2681 end se_da_fatturare
2682 from acw_doc_test doc,
2683 anagrafico_conti ac,
2684 eur_sec_ditte esd,
2685 acw_doc_tipo adt
2686
2687 where user = esd.cod_ditta
2688 and doc.tipo_doc = adt.tipo_doc
2689 and doc.mastro = ac.mastro
2690 and doc.partit = ac.partitario
2691 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
2692 and doc.data_ins >= NVL((select spdt.data_estrazione
2693 from sense_par_doc_type spdt
2694 where spdt.nome_doc_type(+) ='Documento di acquisto (ERP)'),to_date('01011900','ddmmyyyy'))
2695/
2696
2697create table SENSE_CHANGES_DDT_FOR_ERP
2698(
2699 anno_ddt NUMBER(4),
2700 tipo_ddt CHAR(2),
2701 nro_ddt NUMBER(6),
2702 last_change DATE,
2703 is_deleted CHAR(1),
2704 id NUMBER not null
2705);
2706
2707create index SENSE_CHG_DDT_FOR_ERP_IND01 on SENSE_CHANGES_DDT_FOR_ERP (ANNO_DDT, TIPO_DDT, NRO_DDT);
2708
2709alter table SENSE_CHANGES_DDT_FOR_ERP
2710 add constraint SENSE_CHANGES_DDT_FOR_ERP_PK primary key (ID);
2711
2712alter table SENSE_CHANGES_DDT_FOR_ERP
2713 add constraint SENSE_CHANGES_DDT_FOR_ERP_CK01
2714 check (is_deleted = 'Y' OR is_deleted = 'N');
2715
2716alter table SENSE_CHANGES_DDT_FOR_ERP
2717 add constraint SENSE_CHANGES_DDT_FOR_ERP_N01
2718 check (last_change IS NOT NULL);
2719
2720alter table SENSE_CHANGES_DDT_FOR_ERP
2721 add constraint SENSE_CHANGES_DDT_FOR_ERP_N02
2722 check (is_deleted IS NOT NULL);
2723
2724CREATE OR REPLACE VIEW SENSE_V_LCHANGE_DDT_FOR_ERP AS
2725SELECT anno_ddt,
2726 tipo_ddt,
2727 nro_ddt,
2728 MAX(last_change) last_change,
2729 MAX(is_deleted) is_deleted
2730 FROM (SELECT anno_ddt,
2731 tipo_ddt,
2732 nro_ddt,
2733 LAST_VALUE(last_change) OVER(PARTITION BY anno_ddt, tipo_ddt, nro_ddt ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_change,
2734 LAST_VALUE(is_deleted) OVER(PARTITION BY anno_ddt, tipo_ddt, nro_ddt ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) is_deleted
2735 FROM sense_changes_ddt_for_erp)
2736 GROUP BY anno_ddt, tipo_ddt, nro_ddt;
2737
2738
2739CREATE OR REPLACE PROCEDURE sense_sp_change_ddt_for_erp(iAnnoDdt IN NUMBER,
2740 iTipoDdt IN CHAR,
2741 iNroDdt IN NUMBER,
2742 iIsDeleted IN CHAR) IS
2743BEGIN
2744 INSERT INTO sense_changes_ddt_for_erp
2745 (id, anno_ddt, tipo_ddt, nro_ddt, last_change, is_deleted)
2746 VALUES
2747 (sense_seq_changes.nextval,
2748 iAnnoDdt,
2749 iTipoDdt,
2750 iNroDdt,
2751 SYSDATE,
2752 iIsDeleted);
2753END;
2754/
2755
2756CREATE OR REPLACE TRIGGER acw_doc_test_sense_trg01
2757 AFTER INSERT OR UPDATE OR DELETE ON acw_doc_test
2758 FOR EACH ROW
2759DECLARE
2760 v_is_deleted CHAR(1);
2761BEGIN
2762 IF (inserting OR updating) THEN
2763 v_is_deleted := 'N';
2764 ELSE
2765 v_is_deleted := 'Y';
2766 END IF;
2767
2768 sense_sp_change_ddt_for_erp(nvl(:new.anno_doc, :old.anno_doc),
2769 nvl(:new.tipo_doc, :old.tipo_doc),
2770 nvl(:new.nro_doc, :old.nro_doc),
2771 v_is_deleted);
2772END;
2773/
2774
2775CREATE OR REPLACE TRIGGER acw_doc_riga_sense_trg01
2776 AFTER INSERT OR UPDATE OR DELETE ON acw_doc_riga
2777 FOR EACH ROW
2778DECLARE
2779 v_is_deleted CHAR(1);
2780BEGIN
2781 IF (inserting OR updating) THEN
2782 v_is_deleted := 'N';
2783 ELSE
2784 v_is_deleted := 'Y';
2785 END IF;
2786
2787 sense_sp_change_ddt_for_erp(nvl(:new.anno_doc, :old.anno_doc),
2788 nvl(:new.tipo_doc, :old.tipo_doc),
2789 nvl(:new.nro_doc, :old.nro_doc),
2790 v_is_deleted);
2791END;
2792/
2793-- *********************************************************************************************************
2794-- In questa parte troviamo gli oggetti per i document Type Ordine, Offerta e Richiesta di acquisto
2795CREATE OR REPLACE
2796FUNCTION sense_sf_ant_dettaglioordfor(iRowId UROWID)
2797 RETURN CLOB IS
2798 vRetValue CLOB;
2799
2800 vRiga VARCHAR2(1024);
2801 vSep CHAR(1) := chr(10);
2802
2803 vLenTipoArt EUR_LUNGH_ATTR.LUNGH_ATTR%TYPE;
2804 vLenCodArt EUR_LUNGH_ATTR.LUNGH_ATTR%TYPE;
2805 NlsParams CONSTANT VARCHAR2(40) := 'NLS_NUMERIC_CHARACTERS=,@';
2806 vDatiCelle CLOB;
2807 vDatiRiga CLOB;
2808 vNota CLOB;
2809BEGIN
2810
2811SELECT EUR_PKG_LUNGH_ATTR.SF_LUNGH('TIPOART')
2812 INTO vLenTipoArt
2813 FROM DUAL;
2814
2815 SELECT EUR_PKG_LUNGH_ATTR.SF_LUNGH('CODART')
2816 INTO vLenCodArt
2817 FROM DUAL;
2818
2819 FOR rec IN (SELECT 'ordine fornitore' categoria,
2820 to_char(aoft.anno_ord) anno_ord,
2821 aoft.tipo_ord,
2822 to_char(aoft.nro_ord) nro_ord,
2823 aoft.data_ins,
2824 aoft.mastro,
2825 aoft.partit,
2826 fordest.descrizione_1 rag_soc_dest,
2827 aoft.RIF_VS_NRO_OFF,
2828 to_char(aoft.RIF_VS_DATA_OFF, 'dd MONTH yyyy') rif_vs_data_off,
2829 aoft.note_test_ord,
2830 cp.desc_pagamento,
2831 asd.desc_stato_doc,
2832 decode(aoft.se_evaso, 'Y', 'evaso', 'non Evaso') seEvaso
2833 FROM acw_ord_for_test aoft,
2834 condizioni_di_pagamento cp,
2835 acw_stato_doc asd,
2836 anagrafico_conti forDest
2837 WHERE cp.cod_pagam = aoft.cod_pag
2838 AND asd.cod_stato_doc(+) = aoft.cod_stato_doc
2839 AND fordest.mastro(+) = aoft.mastro
2840 AND fordest.partitario(+) = aoft.partit
2841 AND aoft.rowid = iRowid) LOOP
2842
2843 dbms_lob.createtemporary(vDatiRiga, TRUE);
2844 dbms_lob.createtemporary(vDatiCelle, TRUE);
2845 dbms_lob.createtemporary(vNota, TRUE);
2846
2847 vDatiRiga := sense_pkg_varie.SF_TABLE_HEADER_HTML('Tipo');
2848
2849 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Codice'));
2850 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Descrizione'));
2851 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Qtà ordinata'));
2852 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Prezzo'));
2853 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Richiesta cons.'));
2854 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Prevista cons.'));
2855 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Progetto'));
2856 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Sottoprogetto'));
2857 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_HEADER_HTML('Note',iSE_CRLF_SUFFIX=>false));
2858
2859 vDatiRiga := sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiRiga,iSE_CRLF_PREFIX=>false);
2860
2861 FOR rec_righe IN (SELECT *
2862 FROM acw_ord_for_riga aofr
2863 WHERE aofr.anno_ord = rec.anno_ord
2864 AND aofr.tipo_ord = rec.tipo_ord
2865 AND aofr.nro_ord = rec.nro_ord) LOOP
2866
2867 -- la prima assegnazione, quando vDatiCelle è null, è conveniente farla direttamente e non mediante append
2868 vDatiCelle:=sense_pkg_varie.SF_TABLE_CELL_HTML(rpad(rec_righe.tipo_art, vLenTipoArt));
2869 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_art, vLenCodArt)));
2870 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.desc_riga, 60)));
2871 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.qta_ordinata,'9999999d9999',NlsParams)));
2872 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.prezzo,'9999999999d9999',NlsParams)));
2873 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.data_rich_cons, 'dd/mm/yyyy')));
2874 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(to_char(rec_righe.data_prev_cons, 'dd/mm/yyyy')));
2875 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_progetto, 25)));
2876 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(rPad(rec_righe.cod_sottoprogetto, 20)));
2877
2878 -- la prima assegnazione, quando vNota è null, è conveniente farla direttamente e non mediante append
2879 vNota:=' ';
2880 FOR rec_nota IN (SELECT *
2881 FROM acw_ord_for_nota aofn
2882 WHERE aofn.anno_ord = rec_righe.anno_ord
2883 AND aofn.tipo_ord = rec_righe.tipo_ord
2884 AND aofn.nro_ord = rec_righe.nro_ord
2885 AND aofn.riga_ord = rec_righe.riga_ord) LOOP
2886 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vNota, ' ' || rec_nota.nota);
2887 END LOOP; -- note
2888
2889 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiCelle,sense_pkg_varie.SF_TABLE_CELL_HTML(vNota));
2890 sense_pkg_varie.SP_APPEND_VARCHARC2_TO_CLOB(vDatiRiga,sense_pkg_varie.SF_TABLE_ROW_HTML(vDatiCelle));
2891
2892 END LOOP; -- regrighe
2893 END LOOP;
2894 dbms_lob.createtemporary(vREtValue, TRUE);
2895 -- la prima assegnazione, quando vREtValue è null, è conveniente farla direttamente e non mediante append
2896 vRetValue := sense_pkg_varie.SF_TABLE_HTML(vDatiRiga);
2897
2898 RETURN vRetValue;
2899
2900END;
2901/
2902
2903-- ordini
2904CREATE OR REPLACE VIEW sense_v_erp_ordini_for (
2905 ditta,
2906 anno_ord,
2907 tipo_ord,
2908 nro_ord,
2909 data_ins,
2910 mese_ins,
2911 mastro,
2912 partitario,
2913 fornitore,
2914 ragionesociale,
2915 destinatario,
2916 rif_vs_nro_ord,
2917 rif_vs_data_ord,
2918 stato_ordine,
2919 dettaglio,
2920 cod_ditta,
2921 se_evaso,
2922 statoevasione,
2923 categoria_ord,
2924 motivoannullamento,
2925 descrtipo )
2926AS
2927select esd.desc_ditta ditta,
2928 acw_ord_for_test.anno_ord,
2929 acw_ord_for_test.tipo_ord,
2930 acw_ord_for_test.nro_ord,
2931 acw_ord_for_test.data_ins,
2932 to_char(acw_ord_for_test.data_ins,'mm month') as Mese_ins,
2933 ac.mastro,
2934 ac.partitario,
2935 ac.mastro || ac.partitario || ' - ' ||
2936 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) fornitore,
2937 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) ragionesociale,
2938 decode(TRIM(de.mastro || de.partitario),NULL,NULL,de.mastro || de.partitario || ' - ' ||
2939 rtrim(de.descrizione_1 || ' ' || de.descrizione_2)) destinatario,
2940 acw_ord_for_test.rif_vs_nro_ord,
2941 acw_ord_for_test.rif_vs_data_ord,
2942 case
2943 when acw_ord_for_test.data_ann is not null then
2944 'Annullato'
2945 when acw_ord_for_test.data_sosp is not null then
2946 'Sospeso'
2947 else
2948 'Normale'
2949 end stato_ordine,
2950 sense_sf_Ant_DettaglioOrdFor( acw_ord_for_test.rowid ) dettaglio,
2951 esd.cod_ditta cod_ditta,
2952 acw_ord_for_test.se_evaso,
2953 case
2954 when acw_ord_for_test.data_ann is not null then 'Annullato'
2955 else
2956 case when nvl(acw_ord_for_test.se_evaso,'N') = 'Y' then 'Evaso'
2957 else
2958 case when ( select count(*) from acw_ord_for_riga aofr
2959 where acw_ord_for_test.anno_ord = aofr.anno_ord
2960 and acw_ord_for_test.tipo_ord = aofr.tipo_ord
2961 and acw_ord_for_test.nro_ord = aofr.nro_ord
2962 and aofr.tipo_riga in ('A','R') and nvl(aofr.se_evasa,'N') = 'N' and aofr.data_ann is null ) > 0 then
2963 case
2964 when (
2965 select sum(nvl(aofr.qta_ordinata_gest,0) - nvl(aofr.qta_ricevuta_gest,0))
2966 from acw_ord_for_riga aofr
2967 where acw_ord_for_test.anno_ord = aofr.anno_ord
2968 and acw_ord_for_test.tipo_ord = aofr.tipo_ord
2969 and acw_ord_for_test.nro_ord = aofr.nro_ord
2970 and aofr.tipo_riga in ('A','R')
2971 and aofr.data_ann is null
2972 having sum(nvl(aofr.qta_ricevuta_gest,0)) <> 0 ) > 0 then 'Parzialmente evaso'
2973 when (
2974 select sum( nvl(aofr.qta_ricevuta_gest,0))
2975 from acw_ord_for_riga aofr
2976 where acw_ord_for_test.anno_ord = aofr.anno_ord
2977 and acw_ord_for_test.tipo_ord = aofr.tipo_ord
2978 and acw_ord_for_test.nro_ord = aofr.nro_ord
2979 and aofr.tipo_riga in ('A','R')
2980 and aofr.data_ann is null ) = 0 then 'Non evaso'
2981 when (
2982 select sum(nvl(aofr.qta_ordinata_gest,0) - nvl(aofr.qta_ricevuta_gest,0))
2983 from acw_ord_for_riga aofr
2984 where acw_ord_for_test.anno_ord = aofr.anno_ord
2985 and acw_ord_for_test.tipo_ord = aofr.tipo_ord
2986 and acw_ord_for_test.nro_ord = aofr.nro_ord
2987 and aofr.tipo_riga in ('A','R')
2988 and aofr.data_ann is null ) <= 0 then 'Evaso'
2989 else 'Evaso'
2990 end
2991 else 'Evaso'
2992 end
2993 end
2994 end evaso,
2995 AOFT.categoria_ord,
2996 CASE
2997 WHEN acw_ord_for_test.data_ann IS NOT NULL THEN
2998 to_char(acw_ord_for_test.data_ann,'dd/mm/yyyy') || ' ' || amsa.desc_motivo
2999 ELSE
3000 CASE
3001 WHEN acw_ord_for_test.data_sosp IS NOT NULL THEN
3002 to_char(acw_ord_for_test.data_sosp,'dd/mm/yyyy') || ' ' || amsa.desc_motivo
3003 else
3004 null
3005 end
3006 END motivoannullamento,
3007 aoft.desc_tipo_ord
3008 from acw_ord_for_test, anagrafico_conti ac, eur_sec_ditte esd, anagrafico_conti de,
3009 acw_ord_for_tipo aoft,
3010 acw_motivo_sosp_ann amsa
3011 where user = esd.cod_ditta
3012 and acw_ord_for_test.mastro = ac.mastro
3013 and acw_ord_for_test.partit = ac.partitario
3014 and acw_ord_for_test.mastro_dest = de.mastro (+)
3015 and acw_ord_for_test.partit_dest = de.partitario (+)
3016 and acw_ord_for_test.tipo_ord = aoft.tipo_ord
3017 and aoft.categoria_ord = 'O'
3018 and acw_ord_for_test.cod_motivo = amsa.cod_motivo(+)
3019 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3020 and acw_ord_for_test.data_ins >= NVL((select spdt.data_estrazione
3021 from sense_par_doc_type spdt
3022 where spdt.nome_doc_type(+) ='Ordine di acquisto (ERP)'),to_date('01011900','ddmmyyyy'))
3023/
3024
3025-- offerte
3026CREATE OR REPLACE VIEW sense_v_erp_offerte_for (
3027 ditta,
3028 anno_ord,
3029 tipo_ord,
3030 nro_ord,
3031 data_ins,
3032 mese_ins,
3033 mastro,
3034 partitario,
3035 fornitore,
3036 destinatario,
3037 ragionesociale,
3038 rif_vs_nro_ord,
3039 rif_vs_data_ord,
3040 stato_ordine,
3041 dettaglio,
3042 cod_ditta,
3043 se_evaso,
3044 categoria_ord,
3045 descrtipo,
3046 motivoannullamento )
3047AS
3048select esd.desc_ditta ditta,
3049 acw_ord_for_test.anno_ord,
3050 acw_ord_for_test.tipo_ord,
3051 acw_ord_for_test.nro_ord,
3052 acw_ord_for_test.data_ins,
3053 to_char(acw_ord_for_test.data_ins,'mm month') mese_ins,
3054 ac.mastro,
3055 ac.partitario,
3056 ac.mastro || ac.partitario || ' - ' ||
3057 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) fornitore,
3058 decode(TRIM(de.mastro || de.partitario),NULL,NULL,de.mastro || de.partitario || ' - ' ||
3059 rtrim(de.descrizione_1 || ' ' || de.descrizione_2)) destinatario,
3060 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) ragionesociale,
3061 acw_ord_for_test.rif_vs_nro_ord,
3062 acw_ord_for_test.rif_vs_data_ord,
3063 case
3064 when acw_ord_for_test.data_ann is not null then
3065 'Annullato'
3066 when acw_ord_for_test.data_sosp is not null then
3067 'Sospeso'
3068 else
3069 'Normale'
3070 end stato_ordine,
3071 sense_sf_Ant_DettaglioOrdFor( acw_ord_for_test.rowid ) dettaglio,
3072 esd.cod_ditta cod_ditta,
3073 acw_ord_for_test.se_evaso,
3074 AOFT.categoria_ord,
3075 AOFT.desc_tipo_ord,
3076 CASE
3077 WHEN acw_ord_for_test.data_ann IS NOT NULL THEN
3078 to_char(acw_ord_for_test.data_ann,'dd/mm/yyyy') || ' ' || amsa.desc_motivo
3079 ELSE
3080 CASE
3081 WHEN acw_ord_for_test.data_sosp IS NOT NULL THEN
3082 to_char(acw_ord_for_test.data_sosp,'dd/mm/yyyy') || ' ' || amsa.desc_motivo
3083 else
3084 null
3085 end
3086 END motivoannullamento
3087 from acw_ord_for_test, anagrafico_conti ac, eur_sec_ditte esd, anagrafico_conti de,
3088 acw_ord_for_tipo aoft, acw_motivo_sosp_ann amsa
3089 where user = esd.cod_ditta
3090 and acw_ord_for_test.mastro = ac.mastro
3091 and acw_ord_for_test.partit = ac.partitario
3092 and acw_ord_for_test.mastro_dest = de.mastro (+)
3093 and acw_ord_for_test.partit_dest = de.partitario (+)
3094 and acw_ord_for_test.tipo_ord = aoft.tipo_ord
3095 and aoft.categoria_ord = 'F'
3096 and acw_ord_for_test.cod_motivo = amsa.cod_motivo (+)
3097 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3098 and acw_ord_for_test.data_ins >= NVL((select spdt.data_estrazione
3099 from sense_par_doc_type spdt
3100 where spdt.nome_doc_type(+) ='Offerta di acquisto (ERP)'),to_date('01011900','ddmmyyyy'))
3101/
3102
3103-- richieste di acquisto
3104CREATE OR REPLACE VIEW sense_v_erp_rda (
3105 ditta,
3106 anno_ord,
3107 tipo_ord,
3108 nro_ord,
3109 data_ins,
3110 mese_ins,
3111 mastro,
3112 partitario,
3113 fornitore,
3114 ragionesociale,
3115 destinatario,
3116 rif_vs_nro_ord,
3117 rif_vs_data_ord,
3118 stato_ordine,
3119 dettaglio,
3120 cod_ditta,
3121 se_evaso,
3122 categoria_ord,
3123 motivoannullamento,
3124 descrtipo )
3125AS
3126select esd.desc_ditta ditta,
3127 acw_ord_for_test.anno_ord,
3128 acw_ord_for_test.tipo_ord,
3129 acw_ord_for_test.nro_ord,
3130 acw_ord_for_test.data_ins,
3131 to_char(acw_ord_for_test.data_ins,'mm month') mese_ins,
3132 ac.mastro,
3133 ac.partitario,
3134 ac.mastro || ac.partitario || ' - ' ||
3135 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) fornitore,
3136 rtrim(ac.descrizione_1 || ' ' || ac.descrizione_2) ragionesociale,
3137 decode(TRIM(de.mastro || de.partitario),NULL,NULL,de.mastro || de.partitario || ' - ' ||
3138 rtrim(de.descrizione_1 || ' ' || de.descrizione_2)) destinatario,
3139 acw_ord_for_test.rif_vs_nro_ord,
3140 acw_ord_for_test.rif_vs_data_ord,
3141 case
3142 when acw_ord_for_test.data_ann is not null then
3143 'Annullato'
3144 when acw_ord_for_test.data_sosp is not null then
3145 'Sospeso'
3146 else
3147 'Normale'
3148 end stato_ordine,
3149 sense_sf_Ant_DettaglioOrdFor( acw_ord_for_test.rowid ) dettaglio,
3150 esd.cod_ditta cod_ditta,
3151 acw_ord_for_test.se_evaso,
3152 AOFT.categoria_ord,
3153 CASE
3154 WHEN acw_ord_for_test.data_ann IS NOT NULL THEN
3155 to_char(acw_ord_for_test.data_ann,'dd/mm/yyyy') || ' ' || amsa.desc_motivo
3156 ELSE
3157 CASE
3158 WHEN acw_ord_for_test.data_sosp IS NOT NULL THEN
3159 to_char(acw_ord_for_test.data_sosp,'dd/mm/yyyy') || ' ' || amsa.desc_motivo
3160 else
3161 null
3162 end
3163 END motivoannullamento,
3164 aoft.desc_tipo_ord
3165 from acw_ord_for_test, anagrafico_conti ac, eur_sec_ditte esd, anagrafico_conti de,
3166 acw_ord_for_tipo aoft, acw_motivo_sosp_ann amsa
3167 where user = esd.cod_ditta
3168 and acw_ord_for_test.mastro = ac.mastro
3169 and acw_ord_for_test.partit = ac.partitario
3170 and acw_ord_for_test.mastro_dest = de.mastro (+)
3171 and acw_ord_for_test.partit_dest = de.partitario (+)
3172 and acw_ord_for_test.tipo_ord = aoft.tipo_ord
3173 and acw_ord_for_test.cod_motivo = amsa.cod_motivo (+)
3174 and aoft.categoria_ord = 'R'
3175 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3176 and acw_ord_for_test.data_ins >= NVL((select spdt.data_estrazione
3177 from sense_par_doc_type spdt
3178 where spdt.nome_doc_type(+) ='Richiesta di acquisto (ERP)'),to_date('01011900','ddmmyyyy'))
3179/
3180
3181create table SENSE_CHANGES_ORDINI_FOR_ERP
3182(
3183 anno_ord NUMBER(4),
3184 tipo_ord CHAR(2),
3185 nro_ord NUMBER(6),
3186 last_change DATE,
3187 is_deleted CHAR(1),
3188 id NUMBER not null
3189);
3190
3191create index SENSE_CHG_ORD_FOR_ERP_IND01 on SENSE_CHANGES_ORDINI_FOR_ERP (ANNO_ORD, TIPO_ORD, NRO_ORD);
3192
3193alter table SENSE_CHANGES_ORDINI_FOR_ERP
3194 add constraint SENSE_CHANGES_ORD_FOR_ERP_PK primary key (ID);
3195
3196alter table SENSE_CHANGES_ORDINI_FOR_ERP
3197 add constraint SENSE_CHANGES_ORD_FOR_ERP_CK01
3198 check (is_deleted = 'Y' OR is_deleted = 'N');
3199alter table SENSE_CHANGES_ORDINI_FOR_ERP
3200 add constraint SENSE_CHANGES_ORD_FOR_ERP_N01
3201 check (last_change IS NOT NULL);
3202alter table SENSE_CHANGES_ORDINI_FOR_ERP
3203 add constraint SENSE_CHANGES_ORD_FOR_ERP_N02
3204 check (is_deleted IS NOT NULL);
3205
3206
3207CREATE OR REPLACE VIEW SENSE_V_LCHANGE_ORDINI_FOR_ERP AS
3208SELECT anno_ord,
3209 tipo_ord,
3210 nro_ord,
3211 MAX(last_change) last_change,
3212 MAX(is_deleted) is_deleted
3213 FROM (SELECT anno_ord,
3214 tipo_ord,
3215 nro_ord,
3216 LAST_VALUE(last_change) OVER(PARTITION BY anno_ord, tipo_ord, nro_ord ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_change,
3217 LAST_VALUE(is_deleted) OVER(PARTITION BY anno_ord, tipo_ord, nro_ord ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) is_deleted
3218 FROM sense_changes_ordini_for_erp)
3219 GROUP BY anno_ord, tipo_ord, nro_ord;
3220
3221CREATE OR REPLACE PROCEDURE sense_sp_change_ordini_for_erp(iAnnoOrd IN NUMBER,
3222 iTipoOrd IN CHAR,
3223 iNroOrd IN NUMBER,
3224 iIsDeleted IN CHAR) IS
3225BEGIN
3226 INSERT INTO sense_changes_ordini_for_erp
3227 (id, anno_ord, tipo_ord, nro_ord, last_change, is_deleted)
3228 VALUES
3229 (sense_seq_changes.nextval,
3230 iAnnoOrd,
3231 iTipoOrd,
3232 iNroOrd,
3233 SYSDATE,
3234 iIsDeleted);
3235END;
3236/
3237
3238CREATE OR REPLACE TRIGGER acw_ord_for_test_sense_trg01
3239 AFTER INSERT OR UPDATE OR DELETE ON acw_ord_for_test
3240 FOR EACH ROW
3241DECLARE
3242 v_is_deleted CHAR(1);
3243BEGIN
3244 IF (inserting OR updating) THEN
3245 v_is_deleted := 'N';
3246 ELSE
3247 v_is_deleted := 'Y';
3248 END IF;
3249
3250 sense_sp_change_ordini_for_erp(nvl(:new.anno_ord, :old.anno_ord),
3251 nvl(:new.tipo_ord, :old.tipo_ord),
3252 nvl(:new.nro_ord, :old.nro_ord),
3253 v_is_deleted);
3254END;
3255/
3256
3257CREATE OR REPLACE TRIGGER acw_ord_for_riga_sense_trg01
3258 AFTER INSERT OR UPDATE OR DELETE ON acw_ord_for_riga
3259 FOR EACH ROW
3260DECLARE
3261 v_is_deleted CHAR(1);
3262BEGIN
3263 IF (inserting OR updating) THEN
3264 v_is_deleted := 'N';
3265 ELSE
3266 v_is_deleted := 'Y';
3267 END IF;
3268
3269 sense_sp_change_ordini_for_erp(nvl(:new.anno_ord, :old.anno_ord),
3270 nvl(:new.tipo_ord, :old.tipo_ord),
3271 nvl(:new.nro_ord, :old.nro_ord),
3272 v_is_deleted);
3273END;
3274/
3275-- *********************************************************************************************************
3276-- In questa parte troviamo gli oggetti comuni per l'area FDS
3277create table SENSE_CHANGES_ALL_DOCS_FDS
3278(
3279 oiddoc RAW(16),
3280 oidclassedoc RAW(16),
3281 last_change DATE,
3282 is_deleted CHAR(1)
3283);
3284
3285alter table SENSE_CHANGES_ALL_DOCS_FDS
3286 add constraint SENSE_CHANGES_ALL_DOCS_FDS_PK primary key (OIDDOC);
3287
3288alter table SENSE_CHANGES_ALL_DOCS_FDS
3289 add constraint SENSE_CHANGES_ALL_DOCS_FDS_N01
3290 check (OIDDOC IS NOT NULL);
3291
3292create or replace package sense_pkg_fds_chg_notification is
3293
3294 procedure sp_notify(i_oid_documento sense_changes_all_docs_fds.oiddoc%type,
3295 i_oid_classedoc sense_changes_all_docs_fds.oidclassedoc%type,
3296 i_is_deleted sense_changes_all_docs_fds.is_deleted%type);
3297
3298end sense_pkg_fds_chg_notification;
3299/
3300
3301create or replace package body sense_pkg_fds_chg_notification is
3302
3303 procedure sp_notify(i_oid_documento sense_changes_all_docs_fds.oiddoc%type,
3304 i_oid_classedoc sense_changes_all_docs_fds.oidclassedoc%type,
3305 i_is_deleted sense_changes_all_docs_fds.is_deleted%type) is
3306 begin
3307 insert into sense_changes_all_docs_fds
3308 (oiddoc, oidclassedoc, last_change, is_deleted)
3309 values
3310 (i_oid_documento, i_oid_classedoc, sysdate, i_is_deleted);
3311 exception
3312 when dup_val_on_index then
3313 update sense_changes_all_docs_fds
3314 set last_change = sysdate, is_deleted = i_is_deleted
3315 where sense_changes_all_docs_fds.oiddoc = i_oid_documento;
3316 end;
3317
3318end sense_pkg_fds_chg_notification;
3319/
3320
3321
3322create or replace trigger fdm_doc_archiv_sense_trg01
3323 after insert or update or delete on fdm_doc_archiviazione
3324-- sense trigger:
3325 -- questo trigger serve per monitorare le entità interessate dal processo sense
3326 -- non contiene alcuna logica se non : discriminare il tipo di azione (insert/update/delete) e salvare la informazioni
3327 -- di base dell'entità oggetto della modifica
3328
3329 -- per il momento controlliamo tutte le colonna
3330 for each row
3331 when (substr (user, 1, 4) != 'TRIG')
3332declare
3333 v_is_deleted char(1);
3334begin
3335 if deleting then
3336 v_is_deleted := 'Y';
3337 else
3338 v_is_deleted := 'N';
3339 end if;
3340
3341 sense_pkg_fds_chg_notification.sp_notify (nvl(:new.oid_documento, :old.oid_documento),
3342 nvl(:new.oid_classe_doc, :old.oid_classe_doc),
3343 v_is_deleted);
3344
3345end sense_fdm_doc_archiv_trg01;
3346/
3347-- *********************************************************************************************************
3348-- In questa parte troviamo gli oggetti comuni per Fattura di acquisto FDS
3349CREATE OR REPLACE VIEW SENSE_V_FDS_FATTURE_FOR AS
3350select
3351 esd.desc_ditta AS ditta,
3352 esd.cod_ditta AS cod_ditta,
3353 doc.oid_documento,
3354 rawtohex(doc.oid_documento) AS hexoid ,
3355 (SELECT fp.valore FROM FDS_P_DATA_DOCUMENTO fp WHERE fp.oid_documento = doc.oid_documento ) AS Data_documento /* Data documento */,
3356 to_char((SELECT fp.valore FROM FDS_P_DATA_DOCUMENTO fp WHERE fp.oid_documento = doc.oid_documento ),'mm month') AS mese_documento,
3357 (SELECT fp.valore FROM FDS_P_NRO_FATTURA_FORNITO fp WHERE fp.oid_documento = doc.oid_documento ) AS Nro_documento /* Nro documento */,
3358 (SELECT fp.valore FROM FDS_P_NUMERO_IVA fp WHERE fp.oid_documento = doc.oid_documento ) AS Nro_IVA /* Nro IVA */,
3359 doc.data_ins /* Data_ins */,
3360 doc.estensione /* Estensione */,
3361 /* @#@ Abbiamo aggiunto l'estensione alla proprietà doc file per farla uscire nel grafo delle relazioni */
3362 '[' || trim(doc.estensione) || '] ' || doc.riassunto AS riassunto/* Info */,
3363 FDM_PKG_DOC_UTILS.get_allegato(doc.oid_allegato, doc.location) AS allegato, /* Allegato */
3364 doc.nome_documento
3365FROM
3366 fdm_doc_archiviazione doc,
3367 EUR_SEC_DITTE esd
3368 where nvl(doc.se_provvisorio,'N')='N'
3369 and doc.nro_versione = FDM_SF_ULTIMA_VERSIONE (doc.oid_documento)
3370 and doc.oid_classe_doc in (hextoraw('A4ADF0DA6E4C431781F3794F021F0FF8')) /*Fatture Fornitori (fds embedded)*/
3371 and esd.cod_ditta = USER
3372 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3373 and doc.data_ins >= NVL((select spdt.data_estrazione
3374 from sense_par_doc_type spdt
3375 where spdt.nome_doc_type(+) ='Fattura di acquisto (FDS)'),to_date('01011900','ddmmyyyy'))
3376;
3377
3378create or replace trigger sense_fds_data_documento_trg01
3379 after insert or update or delete on FDS_P_DATA_DOCUMENTO
3380 for each row
3381 when (substr (user, 1, 4) != 'TRIG')
3382declare
3383 v_is_deleted char(1);
3384begin
3385 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3386 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3387 :old.oid_documento),
3388 null,
3389 v_is_deleted);
3390end sense_fds_data_documento_trg01;
3391/
3392
3393create or replace trigger sense_fds_nro_fattura_trg01
3394 after insert or update or delete on FDS_P_NRO_FATTURA_FORNITO
3395 for each row
3396 when (substr (user, 1, 4) != 'TRIG')
3397declare
3398 v_is_deleted char(1);
3399begin
3400 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3401 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3402 :old.oid_documento),
3403 null,
3404 v_is_deleted);
3405end sense_fds_nro_fattura_trg01;
3406/
3407
3408create or replace trigger sense_fds_numero_iva_trg01
3409 after insert or update or delete on FDS_P_NUMERO_IVA
3410 for each row
3411 when (substr (user, 1, 4) != 'TRIG')
3412declare
3413 v_is_deleted char(1);
3414begin
3415 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3416 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3417 :old.oid_documento),
3418 null,
3419 v_is_deleted);
3420end sense_fds_numero_iva_trg01;
3421/
3422-- *********************************************************************************************************
3423-- In questa parte troviamo gli oggetti comuni per Preventivo e ordine di vendita FDS
3424CREATE OR REPLACE VIEW SENSE_V_FDS_ORD_CLI AS
3425select doc.DITTA,
3426 doc.COD_DITTA,
3427 doc.OID,
3428 doc.PROPRIETA_DOC_FILE,
3429 doc.NOME_DOC,
3430 doc.TIPO_FILE,
3431 doc.DOC_FILE,
3432 doc.oid_documento,
3433 doc.CodiceOrdineVen as rif_ord,
3434 doc.AnnoOrd as Anno_ord,
3435 doc.TipoOrd as Tipo_Ord,
3436 doc.NroOrd as Nro_Ord,
3437 doc.DataOrd as Data_Ord,
3438 doc.MeseOrd as Mese_Ord
3439 from (select esd.desc_ditta AS ditta,
3440 esd.cod_ditta AS cod_ditta,
3441 doc.oid_documento,
3442 rawtohex(doc.oid_documento) AS oid,
3443 /* @#@ Abbiamo aggiunto l'estensione alla proprietà doc file per farla uscire nel grafo delle relazioni */
3444 '[' || trim(doc.estensione) || '] ' ||doc.riassunto as proprieta_doc_file /* Info */,
3445 doc.nome_documento as nome_doc /* Nome_Documento */,
3446 doc.estensione as tipo_file /* Estensione */,
3447 doc.data_ins /* Data_ins */,
3448 FDM_PKG_DOC_UTILS.get_allegato(doc.oid_allegato, doc.location) AS doc_file, /* Allegato */
3449 (SELECT fp.valore
3450 FROM FDM_P_FDS_CodiceOrdineVen fp
3451 WHERE fp.oid_documento = doc.oid_documento) CodiceOrdineVen,
3452 (SELECT trim(FDM_PKG_KEY.anno_ord(fp.valore))
3453 FROM FDM_P_FDS_CodiceOrdineVen fp
3454 WHERE fp.oid_documento = doc.oid_documento) AnnoOrd,
3455 (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3456 FROM FDM_P_FDS_CodiceOrdineVen fp
3457 WHERE fp.oid_documento = doc.oid_documento) TipoOrd,
3458 (SELECT Trim(FDM_PKG_KEY.numero_ord(fp.valore))
3459 FROM FDM_P_FDS_CodiceOrdineVen fp
3460 WHERE fp.oid_documento = doc.oid_documento) NroOrd,
3461 (SELECT fp.valore
3462 FROM FDM_P_DATA_ORDINE_CLIENTE fp
3463 WHERE fp.oid_documento = doc.oid_documento) DataOrd,
3464 to_char((SELECT fp.valore
3465 FROM FDM_P_DATA_ORDINE_CLIENTE fp
3466 WHERE fp.oid_documento = doc.oid_documento),'mm month') as MeseOrd
3467 FROM fdm_doc_archiviazione doc
3468 ,eur_sec_Ditte esd,
3469 vew_ord_cl_tipo voct
3470 where esd.COD_DITTA = USER
3471 and nvl(doc.se_provvisorio, 'N') = 'N'
3472 and doc.nro_versione = FDM_SF_ULTIMA_VERSIONE(doc.oid_documento)
3473 and doc.oid_classe_doc in
3474 (hextoraw('EFA48064EC9749A59F58727C9ED66CA2')) /*Preventivo\Ordine Vendita (fds embedded)*/
3475 and voct.tipo_ord = (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3476 FROM FDM_P_FDS_CodiceOrdineVen fp
3477 WHERE fp.oid_documento = doc.oid_documento)
3478 and voct.se_preventivo = 'N'
3479 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3480 and (SELECT fp.valore
3481 FROM FDM_P_DATA_ORDINE_CLIENTE fp
3482 WHERE fp.oid_documento = doc.oid_documento) >= NVL((select spdt.data_estrazione
3483 from sense_par_doc_type spdt
3484 where spdt.nome_doc_type(+) ='Ordine di vendita (FDS)'),to_date('01011900','ddmmyyyy'))
3485 ) doc;
3486
3487CREATE OR REPLACE VIEW SENSE_V_FDS_PREV_CLI AS
3488select doc.DITTA,
3489 doc.COD_DITTA,
3490 doc.OID,
3491 doc.PROPRIETA_DOC_FILE,
3492 doc.NOME_DOC,
3493 doc.TIPO_FILE,
3494 doc.DOC_FILE,
3495 doc.oid_documento,
3496 doc.CodiceOrdineVen as rif_ord,
3497 doc.AnnoOrd as Anno_ord,
3498 doc.TipoOrd as Tipo_Ord,
3499 doc.NroOrd as Nro_Ord,
3500 doc.DataOrd as Data_Ord,
3501 doc.MeseOrd as Mese_Ord
3502 from (select esd.desc_ditta AS ditta,
3503 esd.cod_ditta AS cod_ditta,
3504 doc.oid_documento,
3505 rawtohex(doc.oid_documento) AS oid,
3506 /* @#@ Abbiamo aggiunto l'estensione alla proprietà doc file per farla uscire nel grafo delle relazioni */
3507 '[' || trim(doc.estensione) || '] ' ||doc.riassunto as proprieta_doc_file /* Info */,
3508 doc.nome_documento as nome_doc /* Nome_Documento */,
3509 doc.estensione as tipo_file /* Estensione */,
3510 doc.data_ins /* Data_ins */,
3511 FDM_PKG_DOC_UTILS.get_allegato(doc.oid_allegato, doc.location) AS doc_file, /* Allegato */
3512 (SELECT fp.valore
3513 FROM FDM_P_FDS_CodiceOrdineVen fp
3514 WHERE fp.oid_documento = doc.oid_documento) CodiceOrdineVen,
3515 (SELECT trim(FDM_PKG_KEY.anno_ord(fp.valore))
3516 FROM FDM_P_FDS_CodiceOrdineVen fp
3517 WHERE fp.oid_documento = doc.oid_documento) AnnoOrd,
3518 (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3519 FROM FDM_P_FDS_CodiceOrdineVen fp
3520 WHERE fp.oid_documento = doc.oid_documento) TipoOrd,
3521 (SELECT Trim(FDM_PKG_KEY.numero_ord(fp.valore))
3522 FROM FDM_P_FDS_CodiceOrdineVen fp
3523 WHERE fp.oid_documento = doc.oid_documento) NroOrd,
3524 (SELECT fp.valore
3525 FROM FDM_P_DATA_ORDINE_CLIENTE fp
3526 WHERE fp.oid_documento = doc.oid_documento) DataOrd,
3527 to_char((SELECT fp.valore
3528 FROM FDM_P_DATA_ORDINE_CLIENTE fp
3529 WHERE fp.oid_documento = doc.oid_documento),'mm month') MeseOrd
3530 FROM fdm_doc_archiviazione doc
3531 ,eur_sec_Ditte esd,
3532 vew_ord_cl_tipo voct
3533 where esd.COD_DITTA = USER
3534 and nvl(doc.se_provvisorio, 'N') = 'N'
3535 and doc.nro_versione = FDM_SF_ULTIMA_VERSIONE(doc.oid_documento)
3536 and doc.oid_classe_doc in
3537 (hextoraw('EFA48064EC9749A59F58727C9ED66CA2')) /*Preventivo\Ordine Vendita (fds embedded)*/
3538 and voct.tipo_ord = (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3539 FROM FDM_P_FDS_CodiceOrdineVen fp
3540 WHERE fp.oid_documento = doc.oid_documento)
3541 and voct.se_preventivo = 'Y'
3542 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3543 and (SELECT fp.valore
3544 FROM FDM_P_DATA_ORDINE_CLIENTE fp
3545 WHERE fp.oid_documento = doc.oid_documento) >= NVL((select spdt.data_estrazione
3546 from sense_par_doc_type spdt
3547 where spdt.nome_doc_type(+) ='Preventivo di vendita (FDS)'),to_date('01011900','ddmmyyyy'))
3548 ) doc;
3549
3550create or replace trigger sense_fds_CodOrdVen_trg01
3551 after insert or update or delete on FDM_P_FDS_CodiceOrdineVen
3552 for each row
3553 when (substr (user, 1, 4) != 'TRIG')
3554declare
3555 v_is_deleted char(1);
3556begin
3557 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3558 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3559 :old.oid_documento),
3560 null,
3561 v_is_deleted);
3562end sense_fds_CodOrdVen_trg01;
3563/
3564
3565create or replace trigger sense_fds_DataOrdCl_trg01
3566 after insert or update or delete on FDM_P_DATA_ORDINE_CLIENTE
3567 for each row
3568 when (substr (user, 1, 4) != 'TRIG')
3569declare
3570 v_is_deleted char(1);
3571begin
3572 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3573 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3574 :old.oid_documento),
3575 null,
3576 v_is_deleted);
3577end sense_fds_DataOrdCl_trg01;
3578/
3579-- *********************************************************************************************************
3580-- In questa parte troviamo gli oggetti comuni per Fattura di vendita FDS
3581CREATE OR REPLACE VIEW SENSE_V_FDS_FATTURE_CLI AS
3582select fatt."COD_DITTA",fatt."DITTA",fatt."OID_DOCUMENTO",fatt."HEXOID",fatt."DATA_FATTURA", fatt."MESE_FATTURA", fatt."NRO_FATTURA",
3583 fatt."NRO_REG_CONTABILE",fatt."SEZIONALE_IVA",fatt."TIPO_FILE",fatt."NOME_DOC",fatt."PROPRIETA_DOC_FILE",fatt."DOC_FILE",
3584 TRIM(mc.cod_sezionale_iva) || '\' || mc.nro_iva || ' ' ||
3585 mc.data_doc AS rif_fattura,
3586 TRIM(ac.descrizione_1 || ' ' || ac.descrizione_2) AS descrizione
3587from (select
3588 esd.desc_ditta AS ditta,
3589 esd.cod_ditta AS cod_ditta,
3590 doc.oid_documento,
3591 rawtohex(doc.oid_documento) AS hexoid ,
3592 (SELECT fp.valore
3593 FROM FDS_P_DATA_FATTURA fp
3594 WHERE fp.oid_documento = doc.oid_documento) AS Data_fattura /* Data fattura */,
3595 to_char((SELECT fp.valore
3596 FROM FDS_P_DATA_FATTURA fp
3597 WHERE fp.oid_documento = doc.oid_documento),'mm month') as Mese_fattura,
3598 (SELECT fp.valore
3599 FROM FDS_P_NRO_FATTURA fp
3600 WHERE fp.oid_documento = doc.oid_documento) AS Nro_fattura /* Nro fattura */,
3601 (SELECT fp.valore
3602 FROM FDS_P_NRO_REGISTRAZIONE_C fp
3603 WHERE fp.oid_documento = doc.oid_documento) AS Nro_reg_contabile /* Nro reg. contabile */,
3604 (SELECT fp.valore
3605 FROM FDS_P_SEZIONALE_IVA fp
3606 WHERE fp.oid_documento = doc.oid_documento) AS Sezionale_IVA, /* Sezionale IVA */
3607 doc.data_ins /* Data_ins */,
3608 doc.estensione as tipo_file /* Estensione */,
3609 /* @#@ Abbiamo aggiunto l'estensione alla proprietà doc file per farla uscire nel grafo delle relazioni */
3610 '[' || trim(doc.estensione) || '] ' || doc.riassunto as proprieta_doc_file /* Info */,
3611 FDM_PKG_DOC_UTILS.get_allegato(doc.oid_allegato, doc.location) AS doc_file, /* Allegato */
3612 doc.nome_documento as nome_doc
3613FROM
3614 fdm_doc_archiviazione doc,
3615 EUR_SEC_DITTE esd
3616 where nvl(doc.se_provvisorio,'N')='N'
3617 and doc.nro_versione = FDM_SF_ULTIMA_VERSIONE (doc.oid_documento)
3618 and doc.oid_classe_doc in (hextoraw('AF129BBDE2054145BEAE558D5BE899E7')) /*Fatture Clienti (fds embedded)*/
3619 and esd.cod_ditta = USER ) fatt,
3620 mov_contab mc,
3621 anagrafico_conti ac
3622 where mc.nro_registrazione = fatt.Nro_reg_contabile
3623 AND mc.nro_riga = 1
3624 AND ac.mastro = mc.mastro
3625 AND ac.partitario = mc.partitario
3626 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3627 and (SELECT fp.valore
3628 FROM FDS_P_DATA_FATTURA fp
3629 WHERE fp.oid_documento = fatt.oid_documento) >= NVL((select spdt.data_estrazione
3630 from sense_par_doc_type spdt
3631 where spdt.nome_doc_type(+) ='Fattura di vendita (FDS)'),to_date('01011900','ddmmyyyy'))
3632;
3633
3634create or replace trigger sense_fds_data_fattura_trg01
3635 after insert or update or delete on FDS_P_DATA_FATTURA
3636 for each row
3637 when (substr (user, 1, 4) != 'TRIG')
3638declare
3639 v_is_deleted char(1);
3640begin
3641 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3642 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3643 :old.oid_documento),
3644 null,
3645 v_is_deleted);
3646end sense_fds_data_fattura_trg01;
3647/
3648
3649create or replace trigger sense_fds_nro_fatturacl_trg01
3650 after insert or update or delete on FDS_P_NRO_FATTURA
3651 for each row
3652 when (substr (user, 1, 4) != 'TRIG')
3653declare
3654 v_is_deleted char(1);
3655begin
3656 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3657 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3658 :old.oid_documento),
3659 null,
3660 v_is_deleted);
3661end sense_fds_nro_fatturacl_trg01;
3662/
3663
3664create or replace trigger sense_fds_nro_reg_c_trg01
3665 after insert or update or delete on FDS_P_NRO_REGISTRAZIONE_C
3666 for each row
3667 when (substr (user, 1, 4) != 'TRIG')
3668declare
3669 v_is_deleted char(1);
3670begin
3671 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3672 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3673 :old.oid_documento),
3674 null,
3675 v_is_deleted);
3676end sense_fds_nro_reg_c_trg01;
3677/
3678create or replace trigger sense_fds_sezionale_iva_trg01
3679 after insert or update or delete on FDS_P_SEZIONALE_IVA
3680 for each row
3681 when (substr (user, 1, 4) != 'TRIG')
3682declare
3683 v_is_deleted char(1);
3684begin
3685 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3686 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3687 :old.oid_documento),
3688 null,
3689 v_is_deleted);
3690end sense_fds_sezionale_iva_trg01;
3691/
3692-- *********************************************************************************************************
3693-- In questa parte troviamo gli oggetti comuni per Ordine Offerta Richiesta di acquisto FDS
3694CREATE OR REPLACE VIEW SENSE_V_FDS_ORD_FOR AS
3695select doc.DITTA,
3696 doc.COD_DITTA,
3697 doc.OID,
3698 doc.PROPRIETA_DOC_FILE,
3699 doc.NOME_DOC,
3700 doc.TIPO_FILE,
3701 doc.doc_file,
3702 doc.oid_documento,
3703 doc.CodiceOrdineAcq as rif_ord,
3704 doc.AnnoOrd as Anno_ord,
3705 doc.TipoOrd as Tipo_Ord,
3706 doc.NroOrd as Nro_Ord,
3707 doc.DataOrd as Data_Ord,
3708 doc.MeseOrd as Mese_Ord
3709from (select
3710 esd.desc_ditta AS ditta,
3711 esd.cod_ditta AS cod_ditta,
3712 doc.oid_documento,
3713 rawtohex(doc.oid_documento) AS oid ,
3714 (SELECT fp.valore
3715 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3716 WHERE fp.oid_documento = doc.oid_documento) CodiceOrdineAcq,
3717 (SELECT trim(FDM_PKG_KEY.anno_ord(fp.valore))
3718 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3719 WHERE fp.oid_documento = doc.oid_documento) AnnoOrd,
3720 (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3721 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3722 WHERE fp.oid_documento = doc.oid_documento) TipoOrd,
3723 (SELECT Trim(FDM_PKG_KEY.numero_ord(fp.valore))
3724 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3725 WHERE fp.oid_documento = doc.oid_documento) NroOrd,
3726 (SELECT fp.valore
3727 FROM FDS_P_DATA_ORDINE_FORNITO fp
3728 WHERE fp.oid_documento = doc.oid_documento) DataOrd,
3729 to_char((SELECT fp.valore
3730 FROM FDS_P_DATA_ORDINE_FORNITO fp
3731 WHERE fp.oid_documento = doc.oid_documento),'mm month') as MeseOrd,
3732 doc.data_ins /* Data_ins */,
3733 doc.estensione tipo_file /* Estensione */,
3734 /* @#@ Abbiamo aggiunto l'estensione alla proprietà doc file per farla uscire nel grafo delle relazioni */
3735 '[' || trim(doc.estensione) || '] ' || doc.riassunto as proprieta_doc_file /* Info */,
3736 FDM_PKG_DOC_UTILS.get_allegato(doc.oid_allegato, doc.location) AS doc_file, /* Allegato */
3737 doc.nome_documento as nome_doc
3738FROM
3739 fdm_doc_archiviazione doc,
3740 EUR_SEC_DITTE esd,
3741 acw_ord_for_tipo aoft
3742 where nvl(doc.se_provvisorio,'N')='N'
3743 and doc.nro_versione = FDM_SF_ULTIMA_VERSIONE (doc.oid_documento)
3744 and doc.oid_classe_doc in (hextoraw('62975863CC3A438D848B0FF61586D395')) /*Ordini fornitori (fds embedded)*/
3745 and aoft.tipo_ord = (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3746 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3747 WHERE fp.oid_documento = doc.oid_documento)
3748 and aoft.categoria_ord = 'O'
3749 and esd.cod_ditta = USER
3750 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3751 and (SELECT fp.valore
3752 FROM FDS_P_DATA_ORDINE_FORNITO fp
3753 WHERE fp.oid_documento = doc.oid_documento) >= NVL((select spdt.data_estrazione
3754 from sense_par_doc_type spdt
3755 where spdt.nome_doc_type(+) ='Ordine di acquisto (FDS)'),to_date('01011900','ddmmyyyy'))
3756
3757)doc;
3758
3759
3760CREATE OR REPLACE VIEW SENSE_V_FDS_OFFERTE_FOR AS
3761select doc.DITTA,
3762 doc.COD_DITTA,
3763 doc.OID,
3764 doc.PROPRIETA_DOC_FILE,
3765 doc.NOME_DOC,
3766 doc.TIPO_FILE,
3767 doc.doc_file,
3768 doc.oid_documento,
3769 doc.CodiceOrdineAcq as rif_ord,
3770 doc.AnnoOrd as Anno_ord,
3771 doc.TipoOrd as Tipo_Ord,
3772 doc.NroOrd as Nro_Ord,
3773 doc.DataOrd as Data_Ord,
3774 doc.MeseOrd as Mese_Ord
3775from (select
3776 esd.desc_ditta AS ditta,
3777 esd.cod_ditta AS cod_ditta,
3778 doc.oid_documento,
3779 rawtohex(doc.oid_documento) AS oid ,
3780 (SELECT fp.valore
3781 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3782 WHERE fp.oid_documento = doc.oid_documento) CodiceOrdineAcq,
3783 (SELECT trim(FDM_PKG_KEY.anno_ord(fp.valore))
3784 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3785 WHERE fp.oid_documento = doc.oid_documento) AnnoOrd,
3786 (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3787 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3788 WHERE fp.oid_documento = doc.oid_documento) TipoOrd,
3789 (SELECT Trim(FDM_PKG_KEY.numero_ord(fp.valore))
3790 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3791 WHERE fp.oid_documento = doc.oid_documento) NroOrd,
3792 (SELECT fp.valore
3793 FROM FDS_P_DATA_ORDINE_FORNITO fp
3794 WHERE fp.oid_documento = doc.oid_documento) DataOrd,
3795 to_char((SELECT fp.valore
3796 FROM FDS_P_DATA_ORDINE_FORNITO fp
3797 WHERE fp.oid_documento = doc.oid_documento),'mm month') as MeseOrd,
3798 doc.data_ins /* Data_ins */,
3799 doc.estensione tipo_file /* Estensione */,
3800 /* @#@ Abbiamo aggiunto l'estensione alla proprietà doc file per farla uscire nel grafo delle relazioni */
3801 '[' || trim(doc.estensione) || '] ' ||doc.riassunto as proprieta_doc_file /* Info */,
3802 FDM_PKG_DOC_UTILS.get_allegato(doc.oid_allegato, doc.location) AS doc_file, /* Allegato */
3803 doc.nome_documento as nome_doc
3804FROM
3805 fdm_doc_archiviazione doc,
3806 EUR_SEC_DITTE esd,
3807 acw_ord_for_tipo aoft
3808 where nvl(doc.se_provvisorio,'N')='N'
3809 and doc.nro_versione = FDM_SF_ULTIMA_VERSIONE (doc.oid_documento)
3810 and doc.oid_classe_doc in (hextoraw('62975863CC3A438D848B0FF61586D395')) /*Ordini fornitori (fds embedded)*/
3811 and aoft.tipo_ord = (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3812 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3813 WHERE fp.oid_documento = doc.oid_documento)
3814 and aoft.categoria_ord = 'F'
3815 and esd.cod_ditta = USER
3816 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3817 and (SELECT fp.valore
3818 FROM FDS_P_DATA_ORDINE_FORNITO fp
3819 WHERE fp.oid_documento = doc.oid_documento) >= NVL((select spdt.data_estrazione
3820 from sense_par_doc_type spdt
3821 where spdt.nome_doc_type(+) ='Offerta di acquisto (FDS)'),to_date('01011900','ddmmyyyy'))
3822
3823
3824)doc;
3825
3826CREATE OR REPLACE VIEW SENSE_V_FDS_RDA_FOR AS
3827select doc.DITTA,
3828 doc.COD_DITTA,
3829 doc.OID,
3830 doc.PROPRIETA_DOC_FILE,
3831 doc.NOME_DOC,
3832 doc.TIPO_FILE,
3833 doc.DOC_FILE,
3834 doc.oid_documento,
3835 doc.CodiceOrdineAcq as rif_ord,
3836 doc.AnnoOrd as Anno_ord,
3837 doc.TipoOrd as Tipo_Ord,
3838 doc.NroOrd as Nro_Ord,
3839 doc.DataOrd as Data_Ord,
3840 doc.MeseOrd as Mese_Ord
3841from (select
3842 esd.desc_ditta AS ditta,
3843 esd.cod_ditta AS cod_ditta,
3844 doc.oid_documento,
3845 rawtohex(doc.oid_documento) AS oid ,
3846 (SELECT fp.valore
3847 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3848 WHERE fp.oid_documento = doc.oid_documento) CodiceOrdineAcq,
3849 (SELECT trim(FDM_PKG_KEY.anno_ord(fp.valore))
3850 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3851 WHERE fp.oid_documento = doc.oid_documento) AnnoOrd,
3852 (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3853 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3854 WHERE fp.oid_documento = doc.oid_documento) TipoOrd,
3855 (SELECT Trim(FDM_PKG_KEY.numero_ord(fp.valore))
3856 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3857 WHERE fp.oid_documento = doc.oid_documento) NroOrd,
3858 (SELECT fp.valore
3859 FROM FDS_P_DATA_ORDINE_FORNITO fp
3860 WHERE fp.oid_documento = doc.oid_documento) DataOrd,
3861 to_char((SELECT fp.valore
3862 FROM FDS_P_DATA_ORDINE_FORNITO fp
3863 WHERE fp.oid_documento = doc.oid_documento),'mm month') MeseOrd,
3864 doc.data_ins /* Data_ins */,
3865 doc.estensione tipo_file /* Estensione */,
3866 /* @#@ Abbiamo aggiunto l'estensione alla proprietà doc file per farla uscire nel grafo delle relazioni */
3867 '[' || trim(doc.estensione) || '] ' ||doc.riassunto as proprieta_doc_file /* Info */,
3868 FDM_PKG_DOC_UTILS.get_allegato(doc.oid_allegato, doc.location) AS doc_file, /* Allegato */
3869 doc.nome_documento as nome_doc
3870FROM
3871 fdm_doc_archiviazione doc,
3872 EUR_SEC_DITTE esd,
3873 acw_ord_for_tipo aoft
3874 where nvl(doc.se_provvisorio,'N')='N'
3875 and doc.nro_versione = FDM_SF_ULTIMA_VERSIONE (doc.oid_documento)
3876 and doc.oid_classe_doc in (hextoraw('62975863CC3A438D848B0FF61586D395')) /*Ordini fornitori (fds embedded)*/
3877 and aoft.tipo_ord = (SELECT trim(FDM_PKG_KEY.tipo_ord(fp.valore))
3878 FROM FDS_P_CODICE_ORDINE_ACQUI fp
3879 WHERE fp.oid_documento = doc.oid_documento)
3880 and aoft.categoria_ord = 'R'
3881 and esd.cod_ditta = USER
3882 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3883 and (SELECT fp.valore
3884 FROM FDS_P_DATA_ORDINE_FORNITO fp
3885 WHERE fp.oid_documento = doc.oid_documento) >= NVL((select spdt.data_estrazione
3886 from sense_par_doc_type spdt
3887 where spdt.nome_doc_type(+) ='Richiesta di acquisto (FDS)'),to_date('01011900','ddmmyyyy'))
3888
3889 )doc;
3890
3891create or replace trigger sense_fds_CodOrdAcq_trg01
3892 after insert or update or delete on FDS_P_CODICE_ORDINE_ACQUI
3893 for each row
3894 when (substr (user, 1, 4) != 'TRIG')
3895declare
3896 v_is_deleted char(1);
3897begin
3898 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3899 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3900 :old.oid_documento),
3901 null,
3902 v_is_deleted);
3903end sense_fds_CodOrdAcq_trg01;
3904/
3905
3906create or replace trigger sense_fds_DataOrdFor_trg01
3907 after insert or update or delete on FDS_P_DATA_ORDINE_FORNITO
3908 for each row
3909 when (substr (user, 1, 4) != 'TRIG')
3910declare
3911 v_is_deleted char(1);
3912begin
3913 v_is_deleted := 'N'; -- se cancello una proprieta sono sempre in modifica
3914 sense_pkg_fds_chg_notification.sp_notify(nvl(:new.oid_documento,
3915 :old.oid_documento),
3916 null,
3917 v_is_deleted);
3918end sense_fds_DataOrdFor_trg01;
3919/
3920-- *********************************************************************************************************
3921-- In questa parte troviamo lo script di definizione della view per gestire tutti i documenti fds archiviati che non rientrano negli altri document type
3922
3923CREATE OR REPLACE VIEW SENSE_V_FDS_ALTRI_DOCUMENTI AS
3924select doc.DITTA,
3925 doc.COD_DITTA,
3926 doc.OID,
3927 doc.PROPRIETA_DOC_FILE,
3928 doc.NOME_DOC,
3929 doc.TIPO_FILE,
3930 doc.DOC_FILE,
3931 doc.oid_documento
3932 from (select esd.desc_ditta AS ditta,
3933 esd.cod_ditta AS cod_ditta,
3934 doc.oid_documento,
3935 rawtohex(doc.oid_documento) AS oid,
3936 /* @#@ Abbiamo aggiunto l'estensione alla proprietà doc file per farla uscire nel grafo delle relazioni */
3937 '[' || trim(doc.estensione) || '] ' ||doc.riassunto as proprieta_doc_file /* Info */,
3938 doc.nome_documento as nome_doc /* Nome_Documento */,
3939 doc.estensione as tipo_file /* Estensione */,
3940 doc.data_ins /* Data_ins */,
3941 FDM_PKG_DOC_UTILS.get_allegato(doc.oid_allegato, doc.location) AS doc_file /* Allegato */
3942 FROM fdm_doc_archiviazione doc,
3943 fdm_classe_doc classe,
3944 eur_sec_Ditte esd
3945 where esd.COD_DITTA = USER
3946 and nvl(doc.se_provvisorio, 'N') = 'N'
3947 and doc.nro_versione = FDM_SF_ULTIMA_VERSIONE(doc.oid_documento)
3948 and classe.oid_classe_doc = doc.oid_classe_doc
3949 /* AL momento si includono tutte le classi anche quelle non embedded*/
3950 /* and classe.is_embedded = 'Y' */
3951 and doc.oid_classe_doc NOT in
3952 (hextoraw('EFA48064EC9749A59F58727C9ED66CA2'), /*Preventivo\Ordine Vendita (fds embedded)*/
3953 hextoraw('AF129BBDE2054145BEAE558D5BE899E7'), /*Fatture Clienti (fds embedded)*/
3954 hextoraw('A4ADF0DA6E4C431781F3794F021F0FF8'), /*Fatture Fornitori (fds embedded)*/
3955 hextoraw('62975863CC3A438D848B0FF61586D395') /*Ordini Fornitori (fds embedded)*/
3956 )
3957 -- #SPAZIO_TEMP# condizione per restringere lo spazio temporale
3958 --and extract(year from doc.data_ins) >= 2012
3959 -- #SPAZIO_TEMP# se si desidera modificare lo spazio temporale modificare il record in sense_par_doc_type
3960 and doc.data_ins >= NVL((select spdt.data_estrazione
3961 from sense_par_doc_type spdt
3962 where spdt.nome_doc_type(+) ='Altri documenti (FDS)'),to_date('01011900','ddmmyyyy'))
3963
3964
3965 ) doc;