Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Connection lost to database when executing query [CORE1092] #1514

Closed
firebird-automations opened this issue Jan 17, 2007 · 14 comments
Closed

Comments

@firebird-automations
Copy link
Collaborator

Submitted by: Massimo (setec_astronomy)

Attachments:
Plus_ib.dll
ib_udf.dll
UDF.zip

When executing query below engine respond with connection lost to database
I post the database dump and the query

Query

SELECT A.STHOSTESS, A.STBRIEFING, A.STREPORT, A.DSPROMOZIONE,
A.DSCAMPAGNA, A.CDMESE, A.DSMESE, A.CDANNO,
A.DSCOMUNEPV, A.CDPROVINCIAPV,
A.DSCOPERTURA, A.DSINSEGNA, A.DSDISPLAYINSEGNA,
MIN_DT, MAX_DT, NUM_G,
A.CDPUNTOVENDITA, A.CDJOB, A.CDCOPERTURA, A.CDAGENZIA,
A.CDOPERATORE, A.NMPREFERENZIALE, A.CDCAMPAGNA,
A.CDPROMOZIONE, B.STATTIVITA, B.STMAGAZZINO, B.STSPEDIZIONE,
B.STCONSEGNA, B.STRITIRO, A.DSATTIVITA, A.DSOPERATORE
FROM VIEW_ALL_INSTORE A LEFT JOIN VIEW_LOGISTICA_MIN B
ON A.CDJOB = B.CDJOB
WHERE NOT A.CDJOB IS NULL
ORDER BY A.DSPROMOZIONE

Database

/******************************************************************************/
/*** Generated by IBExpert 2006.12.10 16/01/2007 23.22.20 ***/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES NONE;

/******************************************************************************/
/*** User Defined Functions ***/
/******************************************************************************/

DECLARE EXTERNAL FUNCTION AGE
DATE
RETURNS INTEGER BY VALUE
ENTRY_POINT 'Age' MODULE_NAME 'Plus_ib.dll';

DECLARE EXTERNAL FUNCTION DAYOFWEEK
DATE
RETURNS INTEGER BY VALUE
ENTRY_POINT 'OrdDayOfWeek' MODULE_NAME 'Plus_ib.dll';

DECLARE EXTERNAL FUNCTION DISPLAYINSEGNA
INTEGER,
CSTRING(55),
INTEGER,
CSTRING(55),
INTEGER,
CSTRING(55),
INTEGER,
CSTRING(155),
INTEGER,
CSTRING(55)
RETURNS CSTRING(375) FREE_IT
ENTRY_POINT 'CalculateDisplayInsegna' MODULE_NAME 'Plus_ib.dll';

DECLARE EXTERNAL FUNCTION INTDAY
DATE
RETURNS INTEGER BY VALUE
ENTRY_POINT 'IntDay' MODULE_NAME 'Plus_ib.dll';

DECLARE EXTERNAL FUNCTION INTMONTH
DATE
RETURNS INTEGER BY VALUE
ENTRY_POINT 'IntMonth' MODULE_NAME 'Plus_ib.dll';

DECLARE EXTERNAL FUNCTION INTYEAR
DATE
RETURNS INTEGER BY VALUE
ENTRY_POINT 'IntYear' MODULE_NAME 'Plus_ib.dll';

DECLARE EXTERNAL FUNCTION STRMONTH
INTEGER
RETURNS CSTRING(10) FREE_IT
ENTRY_POINT 'DecodeMonth' MODULE_NAME 'Plus_ib.dll';

DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(255),
SMALLINT,
SMALLINT
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';

DECLARE EXTERNAL FUNCTION XLATENUMTOSTR
CSTRING(255),
INTEGER
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'XlateNumToStr' MODULE_NAME 'Plus_ib.dll';

/******************************************************************************/
/*** Domains ***/
/******************************************************************************/

CREATE DOMAIN ANNO AS
SMALLINT
CHECK (VALUE > 0);

CREATE DOMAIN BOOLEAN AS
SMALLINT
DEFAULT 0
NOT NULL
CHECK (VALUE BETWEEN 0 AND 1);

CREATE DOMAIN CAP AS
CHAR(5);

CREATE DOMAIN DESCRIZIONE AS
VARCHAR(50);

CREATE DOMAIN DESCRIZIONE_LUNGA AS
VARCHAR(100);

CREATE DOMAIN DESCRIZIONE_SHORT AS
VARCHAR(5);

CREATE DOMAIN EURO AS
NUMERIC(12,2)
DEFAULT 0
NOT NULL;

CREATE DOMAIN FIB$BOOLEAN AS
SMALLINT
DEFAULT 1
NOT NULL
CHECK (VALUE IN (0,1));

CREATE DOMAIN FISCALE AS
VARCHAR(16);

CREATE DOMAIN MESE AS
SMALLINT
CHECK(VALUE BETWEEN 1 AND 12);

CREATE DOMAIN NMGGWEEK AS
SMALLINT
CHECK (VALUE BETWEEN 1 AND 7);

CREATE DOMAIN NOTE AS
VARCHAR(250);

CREATE DOMAIN PARTITAIVA AS
VARCHAR(11);

CREATE DOMAIN PROGRESSIVO AS
INTEGER;

CREATE DOMAIN SEX AS
CHAR(1)
CHECK (VALUE IN ('M', 'F'));

CREATE DOMAIN STATO AS
SMALLINT
check (value between 1 and 3);

CREATE DOMAIN TELEFONO AS
VARCHAR(15);

/******************************************************************************/
/*** Generators ***/
/******************************************************************************/

CREATE GENERATOR CDAGENZIA;
SET GENERATOR CDAGENZIA TO 2;

CREATE GENERATOR CDCAMPAGNA;
SET GENERATOR CDCAMPAGNA TO 1;

CREATE GENERATOR CDCLIENTE;
SET GENERATOR CDCLIENTE TO 1;

CREATE GENERATOR CDCOMMESSA;
SET GENERATOR CDCOMMESSA TO 0;

CREATE GENERATOR CDCOMUNE;
SET GENERATOR CDCOMUNE TO 200211;

CREATE GENERATOR CDFORNITORE;
SET GENERATOR CDFORNITORE TO 0;

CREATE GENERATOR CDHOSTESS;
SET GENERATOR CDHOSTESS TO 2;

CREATE GENERATOR CDJOB;
SET GENERATOR CDJOB TO 2;

CREATE GENERATOR CDMANDATO;
SET GENERATOR CDMANDATO TO 0;

CREATE GENERATOR CDPROMOZIONE;
SET GENERATOR CDPROMOZIONE TO 1;

CREATE GENERATOR CDPUNTOVENDITA;
SET GENERATOR CDPUNTOVENDITA TO 1;

CREATE GENERATOR CDSPEDIZIONE;
SET GENERATOR CDSPEDIZIONE TO 0;

CREATE GENERATOR CDSTAMPA;
SET GENERATOR CDSTAMPA TO 0;

CREATE GENERATOR FIB$FIELD_INFO_VERSION;
SET GENERATOR FIB$FIELD_INFO_VERSION TO 1505;

SET TERM ^ ;

/******************************************************************************/
/*** Stored Procedures ***/
/******************************************************************************/

CREATE PROCEDURE SP_CREATE_LOGISTICA_JOB (
CDTEMPLATE INTEGER,
CDCAMPAGNA INTEGER,
CDJOB INTEGER,
CDPUNTOVENDITA INTEGER,
CDAGENZIA INTEGER,
CDHOSTESS INTEGER,
CDUPDATE INTEGER)
AS
BEGIN
EXIT;
END^

CREATE PROCEDURE SP_CREATE_SPEDIZIONI (
CDJOB INTEGER,
CDUPDATE INTEGER)
RETURNS (
RETCODE INTEGER)
AS
BEGIN
EXIT;
END^

CREATE PROCEDURE SP_FATTURAZIONE_CLIENTE (
ACDAZIENDA INTEGER,
ACDSEDE INTEGER,
ADTINIZIO DATE,
ADTFINE DATE,
ATPDATA SMALLINT,
AFLCHIUSE SMALLINT,
AFLNOTPAY SMALLINT)
RETURNS (
CDJOB INTEGER,
DS DATE,
DE DATE,
AN NUMERIC(7,3),
AF NUMERIC(7,3),
TA NUMERIC(10,3),
DN NUMERIC(7,3),
DF NUMERIC(7,3),
TD NUMERIC(10,3),
TN NUMERIC(12,3),
TF NUMERIC(12,3),
TT NUMERIC(12,3),
DSAZIENDA VARCHAR(100),
DSINDIRIZZO VARCHAR(200),
DSLOCALITA VARCHAR(200),
CDIVA VARCHAR(20),
DSSEDE VARCHAR(100),
DHSEDE VARCHAR(5))
AS
BEGIN
EXIT;
END^

CREATE PROCEDURE SP_INSTORE (
DTSTART DATE,
DTSTOP DATE,
CDOPERATORE INTEGER)
RETURNS (
CDPROMOZIONE INTEGER,
CDCOPERTURA INTEGER,
DSPROMOZIONE VARCHAR(200),
CDCAMPAGNA INTEGER,
STH1 SMALLINT,
STB1 SMALLINT,
STR1 SMALLINT,
DT1 DATE,
STH2 SMALLINT,
STB2 SMALLINT,
STR2 SMALLINT,
DT2 DATE,
STH3 SMALLINT,
STB3 SMALLINT,
STR3 SMALLINT,
DT3 DATE,
STH4 SMALLINT,
STB4 SMALLINT,
STR4 SMALLINT,
DT4 DATE,
STH5 SMALLINT,
STB5 SMALLINT,
STR5 SMALLINT,
DT5 DATE,
STH6 SMALLINT,
STB6 SMALLINT,
STR6 SMALLINT,
DT6 DATE,
STH7 SMALLINT,
STB7 SMALLINT,
STR7 SMALLINT,
DT7 DATE)
AS
BEGIN
EXIT;
END^

CREATE PROCEDURE SP_MANDATI_HOSTESS (
ACDMANDATO INTEGER,
ACDAZIENDA INTEGER,
ACDSEDE INTEGER,
ADTINIZIO DATE,
ADTFINE DATE,
APRRITENUTA SMALLINT,
ATPDATA SMALLINT,
AFLCHIUSE SMALLINT,
ANOTPAY SMALLINT)
RETURNS (
CDMANDATO INTEGER,
DTINIZIO DATE,
DTFINE DATE,
CDHOSTESS INTEGER,
PRRITENUTA SMALLINT,
NMGG INTEGER,
IMTOTALE NUMERIC(12,2),
IMLORDO NUMERIC(12,2),
IMRITENUTA NUMERIC(12,2),
DTLAVORO VARCHAR(250),
DSAZIENDA VARCHAR(100),
DSINDIRIZZO VARCHAR(200),
DSLOCALITA VARCHAR(200),
CDIVA VARCHAR(20),
DSSEDE VARCHAR(100),
DHSEDE VARCHAR(5))
AS
BEGIN
EXIT;
END^

CREATE PROCEDURE SP_NUMERO_HOSTESS
RETURNS (
CDJOB INTEGER,
NMHOSTESS INTEGER)
AS
BEGIN
EXIT;
END^

CREATE PROCEDURE SP_SMS_HOSTESS (
ACDJOB INTEGER,
ACDHOSTESS INTEGER)
RETURNS (
CDJOB INTEGER,
CDHOSTESS INTEGER,
DSPROMOZIONE VARCHAR(100),
DSDISPLAYINSEGNA VARCHAR(500),
DSDTJOB VARCHAR(1000),
DSOPERATORE VARCHAR(50))
AS
BEGIN
EXIT;
END^

CREATE PROCEDURE SP_STAMPE_HOSTESS (
ACDHOSTESS INTEGER,
ACDJOB INTEGER,
ADTJOB DATE,
APRRITENUTA SMALLINT,
ADSCAMICEAG VARCHAR(150),
ADSTAILLEURAG VARCHAR(150))
RETURNS (
CDCLIENTE INTEGER,
DSCLIENTE VARCHAR(50),
DSPROMOZIONE VARCHAR(100),
CDPUNTOVENDITA INTEGER,
DSPUNTOVENDITA VARCHAR(50),
DSDISPLAYINSEGNA VARCHAR(375),
DSCOMUNEPV VARCHAR(50),
DSLOCALITA VARCHAR(50),
CDCAPPV VARCHAR(50),
CDPROVINCIAPV VARCHAR(2),
CDAGENZIA INTEGER,
DSAGENZIA VARCHAR(50),
CDHOSTESS INTEGER,
DSNOMINATIVO VARCHAR(50),
CDMATRICOLA INTEGER,
DSINDIRIZZOHS VARCHAR(50),
DSINDIRIZZO2HS VARCHAR(50),
CDCAPHS VARCHAR(5),
DSRESIDENZA VARCHAR(50),
DSRESIDENZA2 VARCHAR(50),
CDCAPRESIDENZA VARCHAR(5),
DSRIFERIMENTO VARCHAR(50),
CDSEX CHAR(1),
FLCAMICEAG SMALLINT,
FLTAILLEURAG SMALLINT,
DTNASCITA DATE,
DSCOMUNENASHS VARCHAR(150),
CDPROVINCIANASHS VARCHAR(2),
DSCOMUNEINDHS VARCHAR(150),
CDPROVINCIAINDHS VARCHAR(2),
DSCOMUNEINDRS VARCHAR(150),
CDPROVINCIAINDRS VARCHAR(2),
DSCAMPAGNA VARCHAR(50),
DSMESE VARCHAR(50),
CDANNO INTEGER,
CDFISCALE VARCHAR(16),
IMGIORNATA NUMERIC(12,2),
IMRIMBORSO NUMERIC(12,2),
DSDETTAGLIODATE VARCHAR(3000),
XTDSDETTAGLIODATE VARCHAR(3000),
DSDETTAGLIOIMPORTI VARCHAR(3000),
DSDETTAGLIOIMPORTINR VARCHAR(3000),
XTDSDETTAGLIOIMPORTI VARCHAR(3000),
XTDSDETTAGLIOIMPORTINR VARCHAR(3000),
DSDETTAGLIOCONTRATTI VARCHAR(3000),
XPART1 VARCHAR(15),
XPART2 VARCHAR(15),
XPART3 VARCHAR(15),
XPART4 VARCHAR(15),
XPART5 VARCHAR(15),
XPART6 VARCHAR(15),
PRRITENUTA SMALLINT,
DSTAILLEURAG VARCHAR(150),
DSCAMICEAG VARCHAR(150),
DTNOW DATE,
NMGIORNATE INTEGER,
IMGIORNATE NUMERIC(12,2),
XTGIORNATE VARCHAR(1250),
DSATTIVITA VARCHAR(50),
DSAZIENDA VARCHAR(100),
DSORARIO1 VARCHAR(100),
DSORARIO2 VARCHAR(100),
DSORARIO3 VARCHAR(100),
DSORARIO4 VARCHAR(100),
DSORARIO5 VARCHAR(100),
DSORARIO6 VARCHAR(100),
DSORARIO7 VARCHAR(100),
DTMIN DATE,
DTMAX DATE,
CDJOB INTEGER,
NMLAVORO VARCHAR(50),
DTSCADENZALAVORO DATE,
CDINPS VARCHAR(50),
CDINAIL VARCHAR(50),
DSOPERATORE VARCHAR(50),
NMPVTELEFONO VARCHAR(15),
NMPVTELEFONO1 VARCHAR(15),
NMPVFAX VARCHAR(15),
NMPVFAX1 VARCHAR(15),
NMPVCELLULARE VARCHAR(15),
NMPVCELLULARE1 VARCHAR(15),
NMPVPREFERENZIALE VARCHAR(15))
AS
BEGIN
EXIT;
END^

SET TERM ; ^

/******************************************************************************/
/*** Tables ***/
/******************************************************************************/

CREATE TABLE DAGENZIE (
CDAGENZIA PROGRESSIVO NOT NULL,
DSAGENZIA DESCRIZIONE NOT NULL,
DSSHORTAGENZIA DESCRIZIONE_SHORT NOT NULL,
DSRESPONSABILE DESCRIZIONE,
FLAGENZIA BOOLEAN,
FLSUBAGENZIA BOOLEAN,
DSVIA DESCRIZIONE,
CDCAP CAP,
CDRESIDENZA PROGRESSIVO DEFAULT 0 NOT NULL,
NMPREFERENZIALE TELEFONO,
NMTELEFONO TELEFONO,
NMTELEFONO1 TELEFONO,
NMCELLULARE TELEFONO,
NMCELLULARE1 TELEFONO,
NMFAX TELEFONO,
NMFAX1 TELEFONO,
DSEMAIL DESCRIZIONE,
NTAGENZIA NOTE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE DAZIENDE (
CDAZIENDA PROGRESSIVO NOT NULL,
DSAZIENDA DESCRIZIONE_LUNGA NOT NULL,
DSSHORTAZIENDA DESCRIZIONE_SHORT NOT NULL,
DSINDIRIZZO DESCRIZIONE_LUNGA,
CDCAP CAP,
DSLOCALITA DESCRIZIONE_LUNGA,
DTSCADENZA DATE NOT NULL,
CDIVA PARTITAIVA NOT NULL,
CDKEY VARCHAR(50) NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE DCAMPAGNE (
CDCAMPAGNA PROGRESSIVO NOT NULL,
DSCAMPAGNA DESCRIZIONE NOT NULL,
CDCLIENTE PROGRESSIVO DEFAULT 0 NOT NULL,
CDOPERATORE PROGRESSIVO DEFAULT 0 NOT NULL,
NTCAMPAGNA NOTE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE DCLIENTI (
CDCLIENTE PROGRESSIVO NOT NULL,
DSCLIENTE DESCRIZIONE NOT NULL,
CDAGENZIA PROGRESSIVO DEFAULT 0 NOT NULL,
CDOPERATORE PROGRESSIVO DEFAULT 0 NOT NULL,
CDCONTABILITA DESCRIZIONE,
DSINDIRIZZO DESCRIZIONE,
CDCAP CAP,
CDLOCALITA PROGRESSIVO DEFAULT 0 NOT NULL,
NMTELEFONO TELEFONO,
NMTELEFONO1 TELEFONO,
NMCELLULARE TELEFONO,
NMCELLULARE1 TELEFONO,
NMFAX TELEFONO,
NMFAX1 TELEFONO,
NMPREFERENZIALE TELEFONO,
DSEMAIL DESCRIZIONE,
CDPARTITAIVA PARTITAIVA,
FLASSUNZIONE BOOLEAN,
NTCLIENTE NOTE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE DCOMMESSE (
CDCOMMESSA PROGRESSIVO NOT NULL,
CDCLIENTE PROGRESSIVO NOT NULL,
TPCOMMESSA PROGRESSIVO DEFAULT 0 NOT NULL,
DSCOMMESSA DESCRIZIONE,
STSTRUTTURAZIONE STATO DEFAULT 1 NOT NULL,
STBRIEFING STATO DEFAULT 1 NOT NULL,
STLAVORAZIONE STATO DEFAULT 1 NOT NULL,
STFATTURAZIONE STATO DEFAULT 1 NOT NULL,
NTCOMMESSE NOTE,
CDRESPONSABILE PROGRESSIVO DEFAULT 0 NOT NULL,
FLFATTURABILE BOOLEAN,
NMFATTURA DESCRIZIONE,
DTFATTURA DATE,
IMFATTURA EURO,
NMORDINE PROGRESSIVO,
FLCHIUSA BOOLEAN,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE DFORNITORI (
CDFORNITORE PROGRESSIVO NOT NULL,
DSFORNITORE DESCRIZIONE NOT NULL,
DSINDIRIZZO DESCRIZIONE_LUNGA,
CDCOMUNE PROGRESSIVO DEFAULT 0 NOT NULL,
CDCAP CAP,
NMPREFERENZIALE TELEFONO,
NMTELEFONO TELEFONO,
NMTELEFONO1 TELEFONO,
NMCELLULARE TELEFONO,
NMCELLULARE1 TELEFONO,
NMFAX TELEFONO,
NMFAX1 TELEFONO,
DSEMAIL DESCRIZIONE,
DSNOMINATIVOTITOLARE DESCRIZIONE,
NMTELEFONOTITOLARE TELEFONO,
NMCELLULARETITOLARE TELEFONO,
DSEMAILTITOLARE DESCRIZIONE,
DSNOMINATIVOPRODUZIONE DESCRIZIONE,
NMTELEFONOPRODUZIONE TELEFONO,
NMCELLULAREPRODUZIONE TELEFONO,
DSEMAILPRODUZIONE DESCRIZIONE,
DSNOMINATIVOAMMVO DESCRIZIONE,
NMTELEFONOAMMVO TELEFONO,
NMCELLULAREAMMVO TELEFONO,
DSEMAILAMMVO DESCRIZIONE,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE DHOSTESS (
CDHOSTESS PROGRESSIVO NOT NULL,
DSCOGNOME DESCRIZIONE NOT NULL,
DSNOME DESCRIZIONE NOT NULL,
DSNOMINATIVO COMPUTED BY (dscognome || ' ' || dsnome),
CDCONTABILITA DESCRIZIONE,
CDMATRICOLA DESCRIZIONE,
DSINDIRIZZO DESCRIZIONE,
DSINDIRIZZO2 DESCRIZIONE,
CDCAP CAP,
CDINDIRIZZO PROGRESSIVO DEFAULT 0 NOT NULL,
FLCOORDINATRICE BOOLEAN,
NMTELEFONO TELEFONO,
NMTELEFONO1 TELEFONO,
NMCELLULARE TELEFONO,
NMCELLULARE1 TELEFONO,
NMFAX TELEFONO,
NMFAX1 TELEFONO,
NMPREFERENZIALE TELEFONO,
DSEMAIL DESCRIZIONE,
CDSEX SEX DEFAULT 'F' NOT NULL,
DTNASCITA DATE,
CDNASCITA PROGRESSIVO DEFAULT 0 NOT NULL,
CDFISCALE FISCALE,
CDPAGAMENTO PROGRESSIVO DEFAULT 0 NOT NULL,
CDPARTITAIVA PARTITAIVA,
CDTRATTAMENTOFISCALE PROGRESSIVO DEFAULT 0 NOT NULL,
IMGIORNATA EURO,
DSBANCA DESCRIZIONE,
CDCIN CHAR(1),
CDABI PROGRESSIVO,
CDCAB PROGRESSIVO,
CDCONTOCORRENTE DESCRIZIONE,
CDSTATOCIVILE PROGRESSIVO DEFAULT 0 NOT NULL,
CDTITOLODISTUDIO PROGRESSIVO DEFAULT 0 NOT NULL,
DSTIPOTITOLO DESCRIZIONE,
FLSANITARIO BOOLEAN,
NMSANITARIO DESCRIZIONE,
DTSCADENZASANITARIO DATE,
FLLAVORO BOOLEAN,
NMLAVORO DESCRIZIONE,
DTSCADENZALAVORO DATE,
NMTAGLIA DESCRIZIONE,
NMALTEZZA SMALLINT,
NMPESO SMALLINT,
NMSCARPE SMALLINT,
CDOCCHI PROGRESSIVO DEFAULT 0 NOT NULL,
CDCAPELLI PROGRESSIVO DEFAULT 0 NOT NULL,
FLTAILLEUR BOOLEAN,
CDJOBTAILLEUR PROGRESSIVO,
FLCAMICE BOOLEAN,
CDJOBCAMICE PROGRESSIVO,
DTINDISPONIBILEDAL DATE,
DTINDISPONIBILEAL DATE,
FLAUTO BOOLEAN,
FLSPOSTAMENTI BOOLEAN,
FLLUNEDIAM BOOLEAN,
FLLUNEDIPM BOOLEAN,
FLMARTEDIAM BOOLEAN,
FLMARTEDIPM BOOLEAN,
FLMERCOLEDIAM BOOLEAN,
FLMERCOLEDIPM BOOLEAN,
FLGIOVEDIAM BOOLEAN,
FLGIOVEDIPM BOOLEAN,
FLVENERDIAM BOOLEAN,
FLVENERDIPM BOOLEAN,
FLSABATOAM BOOLEAN,
FLSABATOPM BOOLEAN,
FLDOMENICAAM BOOLEAN,
FLDOMENICAPM BOOLEAN,
NTZONE NOTE,
NTHOSTESS NOTE,
FLFREQUENTE BOOLEAN,
FLPROMOTER BOOLEAN,
FLMERCHANDISER BOOLEAN,
FLASSUNZIONE BOOLEAN,
FLEXPORT BOOLEAN,
FLTESTCF BOOLEAN,
CDREPARTO PROGRESSIVO DEFAULT 0 NOT NULL,
DSRESIDENZA DESCRIZIONE,
DSRESIDENZA2 DESCRIZIONE,
CDRESIDENZA PROGRESSIVO DEFAULT 0 NOT NULL,
CDCAPRESIDENZA CAP,
CDINAIL DESCRIZIONE,
CDINPS DESCRIZIONE,
DTISCRIZIONE DATE,
DTUSCITA DATE,
DTVERSAMENTO DATE,
DTRIMBORSO DATE,
FLARCHIVIO BOOLEAN,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE DMANDATI (
CDMANDATO PROGRESSIVO NOT NULL,
CDMESE MESE NOT NULL,
DSMESE COMPUTED BY (STRMONTH(CDMESE)),
CDANNO ANNO NOT NULL,
DSMANDATO DESCRIZIONE NOT NULL,
DSMANDATOSIA DESCRIZIONE NOT NULL,
CDESERCIZIO DESCRIZIONE,
CDPRIMANOTA DESCRIZIONE,
NMNOTAHOSTESS PROGRESSIVO,
DTPRIMANOTA DATE,
DTNOTAHOSTESS DATE,
DTQUIETANZA DATE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE DOPERATORI (
CDOPERATORE PROGRESSIVO NOT NULL,
DSOPERATORE DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE DPROMOZIONI (
CDPROMOZIONE PROGRESSIVO NOT NULL,
CDCAMPAGNA PROGRESSIVO DEFAULT 0 NOT NULL,
CDANNO ANNO NOT NULL,
CDMESE MESE NOT NULL,
DSMESE COMPUTED BY (STRMONTH(CDMESE)),
DSFATTURAZIONE COMPUTED BY (STRMONTH(CDMESE) || ' - ' || CDANNO),
NTFATTURAZIONE NOTE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE DPUNTI_VENDITA (
CDPUNTOVENDITA PROGRESSIVO NOT NULL,
DSPUNTOVENDITA DESCRIZIONE NOT NULL,
DSDENOMINAZIONE DESCRIZIONE,
CDINSEGNA PROGRESSIVO DEFAULT 0 NOT NULL,
CDLOCALITA PROGRESSIVO DEFAULT 0 NOT NULL,
DSLOCALITA DESCRIZIONE,
DSLOCALITA2 DESCRIZIONE,
CDCAP CAP,
NMTELEFONO TELEFONO,
NMTELEFONO1 TELEFONO,
NMCELLULARE TELEFONO,
NMCELLULARE1 TELEFONO,
NMFAX TELEFONO,
NMFAX1 TELEFONO,
NMPREFERENZIALE TELEFONO,
DSEMAIL DESCRIZIONE,
DSRESPONSABILE DESCRIZIONE,
DSREPARTORESPONSABILE DESCRIZIONE,
NMTELEFONORESPONSABILE TELEFONO,
DSEMAILRESPONSABILE DESCRIZIONE,
NMMQ SMALLINT,
NMCASSE SMALLINT,
DSORARIO VARCHAR(100),
CDTIPOPUNTOVENDITA PROGRESSIVO DEFAULT 0 NOT NULL,
NTPUNTOVENDITA NOTE,
FLASSUNZIONE BOOLEAN,
CDAREANIELSEN SMALLINT,
FLDISPLAYPV BOOLEAN,
FLDISPLAYINSEGNA BOOLEAN,
FLDISPLAYINDIRIZZO BOOLEAN,
FLDISPLAYLOCALITA BOOLEAN,
FLDISPLAYDENOMINAZIONE BOOLEAN,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE DSPEDIZIONI (
CDSPEDIZIONE PROGRESSIVO NOT NULL,
DSDESTINATARIO VARCHAR(150),
DSINDIRIZZO DESCRIZIONE_LUNGA NOT NULL,
CDCAP CAP,
DSLOCALITA VARCHAR(150),
CDPROVINCIA CHAR(2) NOT NULL,
DTSPEDIZIONE TIMESTAMP DEFAULT 'NOW' NOT NULL,
DSMAGAZZINO DESCRIZIONE NOT NULL,
CDMAGAZZINO PROGRESSIVO NOT NULL,
DTTASSATIVA DATE NOT NULL,
DSSPEDIZIONE COMPUTED BY (DSINDIRIZZO || ' - ' || CDCAP || ' ' || DSLOCALITA || ' (' || CDPROVINCIA || ')'),
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP NOT NULL
);

CREATE TABLE DSTAMPE (
CDSTAMPA PROGRESSIVO NOT NULL,
TPSTAMPA PROGRESSIVO NOT NULL,
DSSTAMPA DESCRIZIONE NOT NULL,
FLSELECT BOOLEAN,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE DUTENTI (
CDUTENTE PROGRESSIVO NOT NULL,
CDLIVELLO PROGRESSIVO NOT NULL,
DSUTENTE DESCRIZIONE NOT NULL,
PWUTENTE DESCRIZIONE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE FIB$FIELDS_INFO (
TABLE_NAME VARCHAR(31) NOT NULL,
FIELD_NAME VARCHAR(31) NOT NULL,
DISPLAY_LABEL VARCHAR(50),
VISIBLE FIB$BOOLEAN DEFAULT 1 NOT NULL,
DISPLAY_FORMAT VARCHAR(15),
EDIT_FORMAT VARCHAR(15),
TRIGGERED FIB$BOOLEAN DEFAULT 0 NOT NULL,
DISPLAY_WIDTH INTEGER DEFAULT 0,
FIB$VERSION INTEGER
);

CREATE TABLE RCAMPAGNE_CONTRATTI (
CDCAMPAGNA PROGRESSIVO NOT NULL,
CDCONTRATTO SMALLINT NOT NULL,
DSSHORTCONTRATTO DESCRIZIONE_SHORT NOT NULL,
DSCONTRATTO DESCRIZIONE NOT NULL,
TPCONTRATTO PROGRESSIVO DEFAULT 0 NOT NULL,
TPUM PROGRESSIVO DEFAULT 0 NOT NULL,
IMCLIENTE EURO,
IMHOSTESS EURO,
FLASSUNZIONE BOOLEAN,
FLFESTIVO BOOLEAN,
FLDEFAULT BOOLEAN,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE RCAMPAGNE_LOGISTICA_ATTIVITA (
CDCAMPAGNA PROGRESSIVO NOT NULL,
CDLOGISTICA PROGRESSIVO NOT NULL,
CDTEMPLATE PROGRESSIVO NOT NULL,
DSLOGISTICA DESCRIZIONE_LUNGA,
FLCHKATTIVITA BOOLEAN,
DTUPDATE TIMESTAMP NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RCAMPAGNE_LOGISTICA_MOVIMENTO (
CDCAMPAGNA PROGRESSIVO NOT NULL,
CDLOGISTICA PROGRESSIVO NOT NULL,
CDTEMPLATE PROGRESSIVO NOT NULL,
FLCONSEGNADIRETTA BOOLEAN,
FLMAGAZZINO BOOLEAN,
CDARTICOLO PROGRESSIVO DEFAULT 0 NOT NULL,
CDMAGAZZINO PROGRESSIVO DEFAULT 0 NOT NULL,
FLCHKSPEDIZIONE BOOLEAN NOT NULL,
FLCHKCONSEGNA BOOLEAN,
QTFISSA INTEGER DEFAULT 0 NOT NULL,
QTGG INTEGER DEFAULT 0 NOT NULL,
FLFORNITURA BOOLEAN,
FLRITIRI BOOLEAN,
CDDESTINATARIO SMALLINT DEFAULT 0 NOT NULL,
DTUPDATE TIMESTAMP NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RCAMPAGNE_LOGISTICA_TEMPLATE (
CDCAMPAGNA PROGRESSIVO NOT NULL,
CDTEMPLATE PROGRESSIVO NOT NULL,
DSTEMPLATE DESCRIZIONE NOT NULL,
BLOB_MECCANICA BLOB SUB_TYPE 1 SEGMENT SIZE 80,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP default 'now' NOT NULL
);

CREATE TABLE RCLIENTI_ARTICOLI (
CDCLIENTE PROGRESSIVO NOT NULL,
CDARTICOLO PROGRESSIVO NOT NULL,
DSARTICOLO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RCLIENTI_REPARTI (
CDCLIENTE PROGRESSIVO NOT NULL,
CDPROG PROGRESSIVO NOT NULL,
DSRESPONSABILE DESCRIZIONE NOT NULL,
DSPOSIZIONE DESCRIZIONE,
NMTELEFONO TELEFONO,
NMFAX TELEFONO,
DSEMAIL DESCRIZIONE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RCOMMESSE_REVISIONE (
CDCOMMESSA PROGRESSIVO NOT NULL,
CDREVISIONE PROGRESSIVO NOT NULL,
DSPATHPDF DESCRIZIONE_LUNGA NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE RCOMMESSE_RIGHE (
CDCOMMESSA PROGRESSIVO NOT NULL,
CDRIGA PROGRESSIVO NOT NULL,
DSRIGA DESCRIZIONE NOT NULL,
TPRIGA PROGRESSIVO DEFAULT 0 NOT NULL,
STPREVENTIVAZIONE STATO DEFAULT 1 NOT NULL,
TPUM PROGRESSIVO DEFAULT 0 NOT NULL,
QTRIGA INTEGER NOT NULL,
IMUNITARIO EURO,
IMAGENZIA EURO,
IMTOTALE COMPUTED BY ((IMUNITARIO * QTRIGA)),
PRRICARICO COMPUTED BY (CASE
WHEN (IMUNITARIO > 0) THEN
((IMUNITARIO - IMAGENZIA) / IMUNITARIO)
ELSE 0
END),
CDFORNITORE PROGRESSIVO DEFAULT 0 NOT NULL,
NMPREVENTIVO DESCRIZIONE,
DTPREVENTIVO DATE,
DTTAXPREVENTIVO DATE,
FLCOSTO BOOLEAN,
DTTAXCONSEGNA DATE,
FLCONSUNTIVO BOOLEAN,
QTCONSUNTIVA INTEGER DEFAULT 0 NOT NULL,
IMCONSUNTIVO EURO,
FLFATTURABILE BOOLEAN,
NMFATTURA DESCRIZIONE,
DTFATTURA DATE,
IMFATTURA EURO,
FLCHIUSA BOOLEAN,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RCOMMESSE_VOCI_RIGHE_TT (
CDCOMMESSA PROGRESSIVO NOT NULL,
CDVOCE PROGRESSIVO NOT NULL,
CDRIGA PROGRESSIVO NOT NULL,
DSRIGA DESCRIZIONE,
DSTIME DESCRIZIONE,
TPTIME PROGRESSIVO DEFAULT 0 NOT NULL,
STRIGA STATO DEFAULT 0,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE RCOMMESSE_VOCI_TT (
CDCOMMESSA PROGRESSIVO NOT NULL,
CDVOCE PROGRESSIVO NOT NULL,
DSVOCE DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE RCOMMESSE_WIP (
CDCOMMESSA PROGRESSIVO NOT NULL,
CDREVISIONE PROGRESSIVO NOT NULL,
DSSETTIMANA DESCRIZIONE_LUNGA NOT NULL,
DSPATHPDF NOTE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE RHOSTESS_PAGAMENTI (
CDHOSTESS PROGRESSIVO NOT NULL,
CDPROG SMALLINT NOT NULL,
DSPAGAMENTO DESCRIZIONE,
CDANNO ANNO NOT NULL,
CDMESE MESE NOT NULL,
DSMESE COMPUTED BY ((STRMONTH(CDMESE))),
TPPAGAMENTO PROGRESSIVO DEFAULT 0 NOT NULL,
DTPAGAMENTO DATE NOT NULL,
IMPAGAMENTO EURO,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE RJOB (
CDJOB PROGRESSIVO NOT NULL,
CDPROMOZIONE PROGRESSIVO DEFAULT 0 NOT NULL,
CDPUNTOVENDITA PROGRESSIVO DEFAULT 0 NOT NULL,
CDTIPOATTIVITA PROGRESSIVO DEFAULT 0 NOT NULL,
CDCOPERTURA PROGRESSIVO DEFAULT 0 NOT NULL,
MTCONSEGNA PROGRESSIVO DEFAULT 0 NOT NULL,
STCONSEGNA PROGRESSIVO DEFAULT 0 NOT NULL,
CDAGENZIA PROGRESSIVO DEFAULT 0 NOT NULL,
NTAGENZIA NOTE,
CDCOORDINATRICE PROGRESSIVO DEFAULT 0 NOT NULL,
IMGIORNOCOORDINATRICE EURO DEFAULT 0 NOT NULL,
IMFIXCOORDINATRICE EURO DEFAULT 0 NOT NULL,
NTCOORDINATRICE NOTE,
NMCONSEGNE PROGRESSIVO DEFAULT 0 NOT NULL,
NMRITIRI PROGRESSIVO DEFAULT 0 NOT NULL,
NTFATTURAZIONE NOTE,
DSPROGRAMMA DESCRIZIONE,
DSRIFERIMENTO DESCRIZIONE,
CDSEDE PROGRESSIVO DEFAULT 0 NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RJOB_HOSTESS (
CDJOB PROGRESSIVO NOT NULL,
CDPROG PROGRESSIVO NOT NULL,
CDAZIENDA PROGRESSIVO DEFAULT 1 NOT NULL,
TPJOB INTEGER DEFAULT 0 NOT NULL,
CDHOSTESS PROGRESSIVO DEFAULT 0 NOT NULL,
CDFORNITORE PROGRESSIVO DEFAULT 0 NOT NULL,
STHOSTESS STATO DEFAULT 1 NOT NULL,
STBRIEFING STATO DEFAULT 1 NOT NULL,
STREPORT STATO DEFAULT 1 NOT NULL,
DTJOB DATE NOT NULL,
DSORARIO DESCRIZIONE_LUNGA,
NMGIORNATE NUMERIC(5,3) DEFAULT 0 NOT NULL,
IMGIORNATA EURO DEFAULT 0 NOT NULL,
IMRIMBORSO EURO DEFAULT 0 NOT NULL,
FLCAMICEAG BOOLEAN,
FLTAILLEURAG BOOLEAN,
FLASSUNZIONE BOOLEAN,
FLFESTIVO BOOLEAN,
FLEXPORTED BOOLEAN,
CDCONTRATTO SMALLINT NOT NULL,
CDCOORDINATRICE PROGRESSIVO DEFAULT 0 NOT NULL,
IMGGCOORDINATRICE EURO,
IMFIXCOORDINATRICE EURO,
DTPAGAMENTO DATE NOT NULL,
FLRIMBORSO BOOLEAN,
DTRIMBORSO DATE,
DTREPORT DATE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RJOB_INFO (
CDJOB PROGRESSIVO NOT NULL,
CDINFO PROGRESSIVO NOT NULL,
DSINFO DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP NOT NULL
);

CREATE TABLE RJOB_LOGISTICA_ATTIVITA (
CDJOB PROGRESSIVO NOT NULL,
CDPROG PROGRESSIVO NOT NULL,
CDCAMPAGNA PROGRESSIVO DEFAULT 0 NOT NULL,
DSLOGISTICA DESCRIZIONE_LUNGA NOT NULL,
FLCHKATTIVITA BOOLEAN,
STATTIVITA STATO DEFAULT 1 NOT NULL,
DTUPDATE TIMESTAMP NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RJOB_LOGISTICA_MECCANICA (
CDJOB PROGRESSIVO NOT NULL,
BLOB_MECCANICA BLOB SUB_TYPE 1 SEGMENT SIZE 80 NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP NOT NULL
);

CREATE TABLE RJOB_LOGISTICA_MOVIMENTO (
CDJOB PROGRESSIVO NOT NULL,
CDPROG PROGRESSIVO NOT NULL,
CDCAMPAGNA PROGRESSIVO DEFAULT 0 NOT NULL,
FLCONSEGNADIRETTA BOOLEAN,
FLMAGAZZINO BOOLEAN,
CDARTICOLO PROGRESSIVO NOT NULL,
CDMAGAZZINO PROGRESSIVO DEFAULT 0 NOT NULL,
FLCHKSPEDIZIONE BOOLEAN,
FLCHKCONSEGNA BOOLEAN,
QTMOVIMENTO INTEGER,
QTRESO INTEGER DEFAULT 0,
FLFORNITURA BOOLEAN,
FLRITIRI BOOLEAN,
CDSPEDIZIONE PROGRESSIVO DEFAULT 0 NOT NULL,
STSPEDIZIONE STATO DEFAULT 1 NOT NULL,
STMAGAZZINO STATO DEFAULT 1 NOT NULL,
TPDESTINATARIO SMALLINT DEFAULT 0 NOT NULL,
CDDESTINATARIO PROGRESSIVO default 0 NOT NULL,
STCONSEGNA STATO DEFAULT 1 NOT NULL,
STRITIRO STATO DEFAULT 1 NOT NULL,
FLKIT SMALLINT,
DTUPDATE TIMESTAMP NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RMAGAZZINI_MOVIMENTI (
CDMAGAZZINO PROGRESSIVO NOT NULL,
CDCLIENTE PROGRESSIVO NOT NULL,
CDARTICOLO PROGRESSIVO NOT NULL,
CDPROG PROGRESSIVO NOT NULL,
CDCAUSALE SMALLINT DEFAULT 0 NOT NULL,
QTMOVIMENTO INTEGER NOT NULL,
DTMOVIMENTO DATE DEFAULT 'NOW' NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RMANDATI_HOSTESS (
CDMANDATO PROGRESSIVO NOT NULL,
CDMESE SMALLINT NOT NULL,
DSMESE COMPUTED BY (STRMONTH(CDMESE)),
CDANNO ANNO NOT NULL,
CDHOSTESS PROGRESSIVO NOT NULL,
CDCONTABILITA DESCRIZIONE,
DSCOGNOME DESCRIZIONE NOT NULL,
DSNOME DESCRIZIONE NOT NULL,
DSNOMINATIVO COMPUTED BY (DSCOGNOME || ' ' || DSNOME),
CDSEX SEX NOT NULL,
DSINDIRIZZO DESCRIZIONE NOT NULL,
DSINDIRIZZO2 DESCRIZIONE,
CDCAP CAP NOT NULL,
DSLOCALITA VARCHAR(150) NOT NULL,
CDPROV CHAR(2) NOT NULL,
DSCITTA COMPUTED BY (CDCAP || ' ' || DSLOCALITA || ' ' || CDPROV),
DTNASCITA DATE NOT NULL,
DSNASLOC VARCHAR(150) NOT NULL,
CDNASPROV CHAR(2) NOT NULL,
CDFISCALE FISCALE NOT NULL,
DTLAVORO NOTE NOT NULL,
IMRETRIB EURO NOT NULL,
PRRITENUTA SMALLINT NOT NULL,
IMLORDO COMPUTED BY ((((IMRETRIB * 100) / (100 - PRRITENUTA)) - IMRETRIB) + IMRETRIB),
IMRITENUTA COMPUTED BY ((((IMRETRIB * 100) / (100 - PRRITENUTA)) - IMRETRIB)),
NMGG SMALLINT NOT NULL,
FLEXPORT BOOLEAN,
CDABI PROGRESSIVO,
CDCAB PROGRESSIVO,
CDCONTOCORRENTE DESCRIZIONE,
CDCIN CHAR(1),
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RMANDATI_PROVINCIE (
CDMANDATO PROGRESSIVO NOT NULL,
CDPROVINCIA CHAR(2) NOT NULL,
DTPAGAMENTO DATE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RPROMOZIONI_SPEDIZIONI (
CDPROMOZIONE PROGRESSIVO NOT NULL,
CDPROG SMALLINT NOT NULL,
CDCONTRATTO PROGRESSIVO DEFAULT 0 NOT NULL,
TPMITTENTE SMALLINT NOT NULL,
CDCORRIERE PROGRESSIVO DEFAULT 0 NOT NULL,
CDHOSTESS PROGRESSIVO DEFAULT 0 NOT NULL,
DTSPEDIZIONE DATE DEFAULT 'NOW' NOT NULL,
DSSPEDIZIONE DESCRIZIONE,
NMSPEDIZIONI INTEGER DEFAULT 1 NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE INTEGER NOT NULL
);

CREATE TABLE RPUNTI_VENDITA_REPARTI (
CDPUNTOVENDITA PROGRESSIVO NOT NULL,
CDPROG PROGRESSIVO NOT NULL,
DSRESPONSABILE DESCRIZIONE NOT NULL,
DSREPARTO DESCRIZIONE,
NMCELLULARE TELEFONO,
NMTELEFONO TELEFONO,
NMFAX TELEFONO,
DSEMAIL DESCRIZIONE,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE RSTAMPE_DETTAGLIO (
CDSTAMPA PROGRESSIVO NOT NULL,
CDPROG PROGRESSIVO NOT NULL,
CDAZIENDA PROGRESSIVO DEFAULT 0 NOT NULL,
CDINSEGNA PROGRESSIVO DEFAULT 0 NOT NULL,
CDPUNTOVENDITA PROGRESSIVO DEFAULT 0 NOT NULL,
TPEXT PROGRESSIVO DEFAULT 0 NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TATTIVITA (
CDATTIVITA PROGRESSIVO NOT NULL,
DSATTIVITA DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TCAUSALI_MAGAZZINO (
CDCAUSALE PROGRESSIVO NOT NULL,
DSCAUSALE DESCRIZIONE NOT NULL,
TPMOVIMENTO SMALLINT NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TCOLORE_CAPELLI (
CDCAPELLI PROGRESSIVO NOT NULL,
DSCAPELLI DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TCOLORE_OCCHI (
CDOCCHI PROGRESSIVO NOT NULL,
DSOCCHI DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TCOMUNI (
CDCOMUNE PROGRESSIVO NOT NULL,
CDCAP CHAR(5) NOT NULL,
DSCOMUNE VARCHAR(150) NOT NULL,
CDPROVINCIA CHAR(2) NOT NULL,
CDFINANZE CHAR(4) NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TCONSEGNA_METODO (
CDMETODO PROGRESSIVO NOT NULL,
DSMETODO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TCONSEGNA_STATO (
CDSTATO PROGRESSIVO NOT NULL,
DSSTATO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TCONSEGNA_TASSATIVA (
CDGG NMGGWEEK NOT NULL,
NMGGEXT INTEGER NOT NULL,
NMGGINT INTEGER NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TCOPERTURA (
CDCOPERTURA PROGRESSIVO NOT NULL,
DSCOPERTURA DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TCORRIERI (
CDCORRIERE PROGRESSIVO NOT NULL,
DSCORRIERE DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TDECODE (
DSDECODE DESCRIZIONE NOT NULL,
FDCODICE DESCRIZIONE NOT NULL,
FDDESCRIZIONE DESCRIZIONE NOT NULL,
DSTABLE DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TDESTINATARIO (
CDDESTINATARIO SMALLINT NOT NULL,
DSDESTINATARIO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TEXT_STAMPA (
CDEXTSTAMPA PROGRESSIVO NOT NULL,
DSEXTSTAMPA DESCRIZIONE_SHORT NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TFESTIVITA (
CDFESTIVITA SMALLINT NOT NULL,
DSFESTIVITA DESCRIZIONE NOT NULL,
NMGIORNO SMALLINT NOT NULL,
NMMESE MESE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TINI (
CDSECTION VARCHAR(25) NOT NULL,
CDKEY DESCRIZIONE NOT NULL,
CDVALUE DESCRIZIONE_LUNGA NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TINSEGNA (
CDINSEGNA PROGRESSIVO NOT NULL,
DSINSEGNA DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TJOB_INFO (
CDINFO PROGRESSIVO NOT NULL,
DSINFO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TMAGAZZINO (
CDMAGAZZINO PROGRESSIVO NOT NULL,
DSMAGAZZINO DESCRIZIONE NOT NULL,
FLESTERNO BOOLEAN,
FLCHKMAGAZZINO BOOLEAN,
DTUPDATE TIMESTAMP NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TPAGAMENTO (
CDPAGAMENTO PROGRESSIVO NOT NULL,
DSPAGAMENTO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TREPARTO (
CDREPARTO PROGRESSIVO NOT NULL,
DSREPARTO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TSEDI (
CDSEDE PROGRESSIVO NOT NULL,
DHSEDE DESCRIZIONE_SHORT NOT NULL,
DSSEDE DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TSTATO (
CDTIPO SMALLINT NOT NULL,
CDSTATO STATO NOT NULL,
DSSTATO DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TSTATO_CIVILE (
CDSTATOCIVILE PROGRESSIVO NOT NULL,
DSSTATOCIVILE DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TTEMPLATE_CONTRATTI (
CDCONTRATTO SMALLINT NOT NULL,
DSSHORTCONTRATTO DESCRIZIONE_SHORT NOT NULL,
DSCONTRATTO DESCRIZIONE NOT NULL,
TPCONTRATTO PROGRESSIVO DEFAULT 0 NOT NULL,
TPUM PROGRESSIVO DEFAULT 0 NOT NULL,
IMCLIENTE EURO,
IMHOSTESS EURO,
FLASSUNZIONE BOOLEAN,
FLFESTIVO BOOLEAN,
FLDEFAULT BOOLEAN,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TTIPO_COMMESSE (
CDTIPOCOMMESSA PROGRESSIVO NOT NULL,
DSTIPOCOMMESSA DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TTIPO_CONTRATTO (
CDTIPOCONTRATTO PROGRESSIVO NOT NULL,
DSTIPOCONTRATTO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TTIPO_JOB (
CDTPJOB PROGRESSIVO NOT NULL,
DSTPJOB DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TTIPO_PAGAMENTO (
CDTIPOPAGAMENTO PROGRESSIVO NOT NULL,
DSTIPOPAGAMENTO DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TTIPO_PUNTI_VENDITA (
CDTIPOPUNTOVENDITA PROGRESSIVO NOT NULL,
DSTIPOPUNTOVENDITA DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TTIPO_RIGA_COMMESSA (
CDTIPORIGA PROGRESSIVO NOT NULL,
DSTIPORIGA DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TTIPO_STAMPA (
CDTIPOSTAMPA PROGRESSIVO NOT NULL,
DSTIPOSTAMPA DESCRIZIONE NOT NULL,
DSSUFIX DESCRIZIONE_SHORT NOT NULL,
CDORDER PROGRESSIVO NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TTIPO_STATO (
CDTIPO SMALLINT NOT NULL,
DSTIPO DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE TTITOLO_STUDIO (
CDTITOLOSTUDIO PROGRESSIVO NOT NULL,
DSTITOLOSTUDIO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TTRATTAMENTO_FISCALE (
CDTRATTAMENTO PROGRESSIVO NOT NULL,
DSTRATTAMENTO DESCRIZIONE NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL
);

CREATE TABLE TUNITA_MISURA (
CDUNITA PROGRESSIVO NOT NULL,
DSUNITA DESCRIZIONE NOT NULL,
CDUPDATE PROGRESSIVO NOT NULL,
DTUPDATE TIMESTAMP DEFAULT 'NOW' NOT NULL
);

CREATE TABLE VERSIONE (
NMVER INTEGER NOT NULL,
DTVER TIMESTAMP DEFAULT 'NOW' NOT NULL,
DSVER NOTE
);

/******************************************************************************/
/*** Views ***/
/******************************************************************************/

/* View: VIEW_ALL_INSTORE */
CREATE VIEW VIEW_ALL_INSTORE(
STHOSTESS,
STBRIEFING,
STREPORT,
DSCAMPAGNA,
CDMESE,
DSMESE,
CDANNO,
DSPROMOZIONE,
MIN_DT,
MAX_DT,
NUM_G,
CDPUNTOVENDITA,
CDJOB,
CDCOPERTURA,
CDAGENZIA,
CDOPERATORE,
CDCAMPAGNA,
CDPROMOZIONE,
DSATTIVITA,
DSOPERATORE)
AS
SELECT MIN(F.STHOSTESS), MIN(F.STBRIEFING), MIN(F.STREPORT),
H.DSCAMPAGNA, G.CDMESE, G.DSMESE, G.CDANNO,
H.DSCAMPAGNA || ' - ' || G.DSMESE || ' - ' || G.CDANNO,
MIN(F.DTJOB), MAX(F.DTJOB),
SUM(F.NMGIORNATE), A.CDPUNTOVENDITA, A.CDJOB, A.CDCOPERTURA,
A.CDAGENZIA, H.CDOPERATORE,
H.CDCAMPAGNA, G.CDPROMOZIONE, M.DSATTIVITA, N.DSOPERATORE
FROM RJOB A, TCOPERTURA C,
DAGENZIE E, RJOB_HOSTESS F,
DPROMOZIONI G, DCAMPAGNE H, DCLIENTI I, TCOPERTURA L,
TATTIVITA M, DOPERATORI N
WHERE A.CDCOPERTURA = C.CDCOPERTURA
AND A.CDAGENZIA = E.CDAGENZIA
AND A.CDJOB = F.CDJOB
AND A.CDCOPERTURA = L.CDCOPERTURA

AND  A\.CDPROMOZIONE     = G\.CDPROMOZIONE
AND  G\.CDCAMPAGNA       = H\.CDCAMPAGNA
AND  I\.CDCLIENTE        = H\.CDCLIENTE
AND  A\.CDTIPOATTIVITA   = M\.CDATTIVITA

AND  H\.CDOPERATORE      = N\.CDOPERATORE

GROUP BY H\.DSCAMPAGNA, G\.CDMESE, G\.DSMESE, G\.CDANNO,

         A\.CDCOPERTURA,
         A\.CDPUNTOVENDITA, A\.CDJOB, A\.CDAGENZIA,
         L\.DSCOPERTURA, E\.DSAGENZIA,
         H\.CDOPERATORE, H\.CDCAMPAGNA, G\.CDPROMOZIONE,
         DSATTIVITA, N\.DSOPERATORE

;

/* View: VIEW_ANNO_JOB_HOSTESS */
CREATE VIEW VIEW_ANNO_JOB_HOSTESS(
CDHOSTESS,
CDAZIENDA,
NMANNO,
NMGIORNATEANNO,
IMGIORNATAANNO)
AS
SELECT A.CDHOSTESS, A.CDAZIENDA, INTYEAR(A.DTJOB), SUM(A.NMGIORNATE), SUM(A.IMGIORNATA + A.IMRIMBORSO)
FROM RJOB_HOSTESS A
WHERE A.FLASSUNZIONE = 0
GROUP BY A.CDHOSTESS, A.CDAZIENDA, INTYEAR(A.DTJOB)
;

/* View: VIEW_CAMPAGNE_PROMOZIONI */
CREATE VIEW VIEW_CAMPAGNE_PROMOZIONI(
CDCAMPAGNA,
DSCAMPAGNA,
CDCLIENTE,
NTCAMPAGNA,
CDPROMOZIONE,
CDANNO,
CDMESE,
DSMESE,
NTFATTURAZIONE,
DSPROMOZIONE,
DSCLIENTE,
CDAGENZIA,
CDOPERATORE,
CDCONTABILITA,
DSINDIRIZZO,
CDCAP,
CDLOCALITA,
NMTELEFONO,
NMTELEFONO1,
NMCELLULARE,
NMCELLULARE1,
NMFAX,
NMFAX1,
NMPREFERENZIALE,
DSEMAIL,
CDPARTITAIVA,
FLASSUNZIONE,
NTCLIENTE,
DSCOMUNE,
CDPROVINCIA)
AS
SELECT A.CDCAMPAGNA, A.DSCAMPAGNA, A.CDCLIENTE, A.NTCAMPAGNA, B.CDPROMOZIONE, B.CDANNO,
B.CDMESE, B.DSMESE, B.NTFATTURAZIONE, A.DSCAMPAGNA || ' - ' || B.DSMESE || ' - ' || B.CDANNO,
C.DSCLIENTE, C.CDAGENZIA, A.CDOPERATORE, C.CDCONTABILITA, C.DSINDIRIZZO, C.CDCAP, C.CDLOCALITA,
C.NMTELEFONO, C.NMTELEFONO1, C.NMCELLULARE, C.NMCELLULARE1, C.NMFAX, C.NMFAX1, C.NMPREFERENZIALE,
C.DSEMAIL, C.CDPARTITAIVA, C.FLASSUNZIONE, C.NTCLIENTE, D.DSCOMUNE, D.CDPROVINCIA
FROM DCAMPAGNE A, DPROMOZIONI B, DCLIENTI C, TCOMUNI D
WHERE A.CDCAMPAGNA = B.CDCAMPAGNA
AND A.CDCLIENTE = C.CDCLIENTE
AND C.CDLOCALITA = D.CDCOMUNE
;

/* View: VIEW_JOB_CLIENTE */
CREATE VIEW VIEW_JOB_CLIENTE(
CDJOB,
CDCLIENTE,
CDCAMPAGNA,
CDPROMOZIONE)
AS
SELECT A.CDJOB, C.CDCLIENTE, C.CDCAMPAGNA, B.CDPROMOZIONE
FROM RJOB A, DPROMOZIONI B, DCAMPAGNE C
WHERE A.CDPROMOZIONE = B.CDPROMOZIONE
AND B.CDCAMPAGNA = C.CDCAMPAGNA
;

/* View: VIEW_CLIENTE_CONTRATTI */
CREATE VIEW VIEW_CLIENTE_CONTRATTI(
CDCAMPAGNA,
CDPROMOZIONE,
CDCLIENTE,
CDANNO,
CDMESE,
DSMESE,
DSCAMPAGNA,
DSPROMOZIONE,
DSCLIENTE,
CDPARTITAIVA,
DSINDIRIZZO,
CDCAP,
DSCOMUNE,
CDPROVINCIA,
NMGIORNATE,
CDCONTRATTO,
DSSHORTCONTRATTO,
DSCONTRATTO,
TPCONTRATTO,
TPUM,
IMCLIENTE,
IMHOSTESS,
FLASSUNZIONE,
FLFESTIVO,
FLDEFAULT,
DSTIPOCONTRATTO,
DSUNITA,
DSLOCALITAESTESA,
IMTOTALE,
DSAGENZIACLIENTE)
AS
SELECT A.CDCAMPAGNA, A.CDPROMOZIONE, A.CDCLIENTE, E.CDANNO, E.CDMESE, E.DSMESE,
E.DSCAMPAGNA, E.DSPROMOZIONE, E.DSCLIENTE, E.CDPARTITAIVA,
E.DSINDIRIZZO, E.CDCAP, E.DSCOMUNE, E.CDPROVINCIA,
B.NMGIORNATE,
C.CDCONTRATTO, C.DSSHORTCONTRATTO, C.DSCONTRATTO, C.TPCONTRATTO,
C.TPUM, C.IMCLIENTE, C.IMHOSTESS, C.FLASSUNZIONE, C.FLFESTIVO, C.FLDEFAULT,
D.DSTIPOCONTRATTO, F.DSUNITA,
E.CDCAP || ' - ' || E.DSCOMUNE || ' - (' || E.CDPROVINCIA || ')',
CAST((B.NMGIORNATE * C.IMCLIENTE) AS FLOAT),
G.DSAGENZIA || ' - ' || E.DSCLIENTE
FROM VIEW_JOB_CLIENTE A, RJOB_HOSTESS B,
RCAMPAGNE_CONTRATTI C, TTIPO_CONTRATTO D,
VIEW_CAMPAGNE_PROMOZIONI E, TUNITA_MISURA F,
DAGENZIE G
WHERE A.CDCAMPAGNA = C.CDCAMPAGNA
AND A.CDJOB = B.CDJOB
AND B.CDCONTRATTO = C.CDCONTRATTO
AND C.TPCONTRATTO = D.CDTIPOCONTRATTO
AND A.CDCAMPAGNA = E.CDCAMPAGNA
AND A.CDPROMOZIONE = E.CDPROMOZIONE
AND C.TPUM = F.CDUNITA
AND E.CDAGENZIA = G.CDAGENZIA

UNION ALL

SELECT A.CDCAMPAGNA, A.CDPROMOZIONE, A.CDCLIENTE, A.CDANNO, A.CDMESE, A.DSMESE,
A.DSCAMPAGNA, A.DSPROMOZIONE, A.DSCLIENTE, A.CDPARTITAIVA,
A.DSINDIRIZZO, A.CDCAP, A.DSCOMUNE, A.CDPROVINCIA,
B.NMSPEDIZIONI,
C.CDCONTRATTO, C.DSSHORTCONTRATTO, C.DSCONTRATTO, C.TPCONTRATTO,
C.TPUM, C.IMCLIENTE, C.IMHOSTESS, C.FLASSUNZIONE, C.FLFESTIVO, C.FLDEFAULT,
D.DSTIPOCONTRATTO, E.DSUNITA,
A.CDCAP || ' - ' || A.DSCOMUNE || ' - (' || A.CDPROVINCIA || ')',
CAST((B.NMSPEDIZIONI * C.IMCLIENTE) AS FLOAT),
F.DSAGENZIA || ' - ' || A.DSCLIENTE
FROM VIEW_CAMPAGNE_PROMOZIONI A, RPROMOZIONI_SPEDIZIONI B,
RCAMPAGNE_CONTRATTI C, TTIPO_CONTRATTO D, TUNITA_MISURA E,
DAGENZIE F
WHERE A.CDCAMPAGNA = C.CDCAMPAGNA
AND A.CDPROMOZIONE = B.CDPROMOZIONE
AND B.CDCONTRATTO = C.CDCONTRATTO
AND C.TPCONTRATTO = D.CDTIPOCONTRATTO
AND C.TPUM = E.CDUNITA
AND A.CDAGENZIA = F.CDAGENZIA
;

/* View: VIEW_COPERTURA */
CREATE VIEW VIEW_COPERTURA(
CDJOB,
DSCOPERTURA)
AS
SELECT A.CDJOB,
CASE A.CDCOPERTURA
WHEN 1 THEN C.DSCOPERTURA
WHEN 2 THEN B.DSAGENZIA
END
FROM RJOB A, DAGENZIE B, TCOPERTURA C
WHERE A.CDCOPERTURA = C.CDCOPERTURA
AND A.CDAGENZIA = B.CDAGENZIA
AND A.CDCOPERTURA > 0
;

/* View: VIEW_DESTINATARI */
CREATE VIEW VIEW_DESTINATARI(
CDDESTINATARIO,
TPDESTINATARIO,
DSDESTINATARIO,
DSINDIRIZZO,
CDCAP,
CDLOCALITA)
AS
/* Serve per fare CDDESTINATARIO = 0 & TPDESTINATARIO = 0,
altrimenti non prederebbe alcuni record */

SELECT CDHOSTESS, 0, CAST (DSNOMINATIVO AS VARCHAR(150)), CAST((DSINDIRIZZO || ' ' || DSINDIRIZZO2) AS VARCHAR(100)), CDCAP, CDINDIRIZZO
FROM DHOSTESS
WHERE CDHOSTESS = 0

UNION ALL

SELECT CDHOSTESS, 1, CAST (DSNOMINATIVO AS VARCHAR(150)), CAST((DSINDIRIZZO || ' ' || DSINDIRIZZO2) AS VARCHAR(100)), CDCAP, CDINDIRIZZO
FROM DHOSTESS

UNION ALL

SELECT CDPUNTOVENDITA, 2, CAST (DSPUNTOVENDITA AS VARCHAR(150)), CAST(DSLOCALITA AS VARCHAR (100)), CDCAP, CDLOCALITA
FROM DPUNTI_VENDITA

UNION ALL

SELECT CDAGENZIA, 3, CAST (DSAGENZIA AS VARCHAR(150)), CAST(DSVIA AS VARCHAR (100)), CDCAP, CDRESIDENZA
FROM DAGENZIE
;

/* View: VIEW_FETCH_HOSTESS */
CREATE VIEW VIEW_FETCH_HOSTESS(
CDJOB,
NMHOSTESS)
AS
SELECT CDJOB, COUNT(DTJOB)
FROM RJOB_HOSTESS
GROUP BY CDJOB, DTJOB
;

/* View: VIEW_HOSTESS_COMPENSI */
CREATE VIEW VIEW_HOSTESS_COMPENSI(
CDHOSTESS,
CDANNO,
CDMESE,
IMGIORNATE,
IMRIMBORSI,
IMTOTALE)
AS
SELECT A.CDHOSTESS, C.CDANNO, C.CDMESE, SUM(A.IMGIORNATA), SUM(A.IMRIMBORSO),
SUM(A.IMGIORNATA + A.IMRIMBORSO)
FROM RJOB_HOSTESS A, RJOB B, DPROMOZIONI C
WHERE A.CDJOB = B.CDJOB
AND B.CDPROMOZIONE = C.CDPROMOZIONE
GROUP BY A.CDHOSTESS, C.CDANNO, C.CDMESE
;

/* View: VIEW_HOSTESS_CONTRATTI */
CREATE VIEW VIEW_HOSTESS_CONTRATTI(
CDJOB,
CDCONTRATTO,
CDCLIENTE,
CDCAMPAGNA,
DSSHORTCONTRATTO,
DSCONTRATTO,
TPUM,
DSUNITA,
IMCLIENTE,
IMHOSTESS,
FLASSUNZIONE,
FLFESTIVO,
FLDEFAULT)
AS
SELECT B.CDJOB, C.CDCONTRATTO, B.CDCLIENTE, B.CDCAMPAGNA, C.DSSHORTCONTRATTO,
C.DSCONTRATTO, C.TPUM, D.DSUNITA, C.IMCLIENTE, C.IMHOSTESS,
C.FLASSUNZIONE, C.FLFESTIVO, C.FLDEFAULT
FROM VIEW_JOB_CLIENTE B, RCAMPAGNE_CONTRATTI C,
TUNITA_MISURA D
WHERE B.CDCAMPAGNA = C.CDCAMPAGNA
AND C.TPUM = D.CDUNITA
;

/* View: VIEW_HOSTESS_COORDINATRICE */
CREATE VIEW VIEW_HOSTESS_COORDINATRICE(
CDJOB,
CDHOSTESS,
DSHOSTESS,
CDCOORDINATRICE,
DSCOORDINATRICE)
AS
SELECT A.CDJOB, A.CDHOSTESS, B.DSNOMINATIVO, A.CDCOORDINATRICE, C.DSNOMINATIVO
FROM RJOB_HOSTESS A, DHOSTESS B, DHOSTESS C
WHERE A.CDHOSTESS = B.CDHOSTESS
AND A.CDCOORDINATRICE = C.CDHOSTESS
GROUP BY A.CDJOB, A.CDHOSTESS, B.DSNOMINATIVO, A.CDCOORDINATRICE, C.DSNOMINATIVO
;

/* View: VIEW_HOSTESS_ENGAGED */
CREATE VIEW VIEW_HOSTESS_ENGAGED(
CDHOSTESS,
DTJOB,
NUM_CX)
AS
SELECT CDHOSTESS, DTJOB, COUNT(*)
FROM RJOB_HOSTESS
GROUP BY CDHOSTESS, DTJOB
;

/* View: VIEW_HOSTESS_NMGG */
CREATE VIEW VIEW_HOSTESS_NMGG(
CDHOSTESS,
NMGG)
AS
SELECT A.CDHOSTESS, SUM(B.NMGIORNATE)
FROM DHOSTESS A LEFT JOIN RJOB_HOSTESS B
ON A.CDHOSTESS = B.CDHOSTESS
GROUP BY A.CDHOSTESS
;

/* View: VIEW_HOSTESS_PAGAMENTI */
CREATE VIEW VIEW_HOSTESS_PAGAMENTI(
CDHOSTESS,
CDANNO,
CDMESE,
IMANTICIPI,
IMSALDI,
IMALTRI,
IMTOTALE)
AS
SELECT B.CDHOSTESS, B.CDANNO, B.CDMESE,
SUM(CASE B.TPPAGAMENTO WHEN 1 THEN B.IMPAGAMENTO ELSE 0 END),
SUM(CASE B.TPPAGAMENTO WHEN 2 THEN B.IMPAGAMENTO ELSE 0 END),
SUM(CASE
WHEN ((NOT (B.TPPAGAMENTO = 1)) AND
(NOT (B.TPPAGAMENTO = 2)) AND
(NOT B.IMPAGAMENTO IS NULL)) THEN
B.IMPAGAMENTO
ELSE 0 END),
SUM(B.IMPAGAMENTO)
FROM RHOSTESS_PAGAMENTI B
GROUP BY B.CDHOSTESS, B.CDANNO, B.CDMESE
;

/* View: VIEW_HOSTESS_SALDO */
CREATE VIEW VIEW_HOSTESS_SALDO(
CDHOSTESS,
CDANNO,
CDMESE,
DSMESE,
IMGIORNATE,
IMRIMBORSI,
IMANTICIPI,
IMSALDI,
IMALTRI,
IMTOTALE)
AS
SELECT A.CDHOSTESS, A.CDANNO, A.CDMESE, STRMONTH(A.CDMESE),
A.IMGIORNATE, A.IMRIMBORSI,
COALESCE(B.IMANTICIPI, 0), COALESCE(B.IMSALDI, 0),
COALESCE(B.IMALTRI, 0), A.IMTOTALE - COALESCE(B.IMTOTALE, 0)
FROM VIEW_HOSTESS_COMPENSI A LEFT JOIN VIEW_HOSTESS_PAGAMENTI B
ON A.CDHOSTESS = B.CDHOSTESS
AND A.CDMESE = B.CDMESE
AND A.CDANNO = B.CDANNO
;

/* View: VIEW_INSTORE_ATTIVITA */
CREATE VIEW VIEW_INSTORE_ATTIVITA(
STHOSTESS,
STBRIEFING,
STREPORT,
CDJOB,
DTJOB,
CDPROG,
CDAZIENDA,
DSORARIO,
CDFORNITORE,
CDHOSTESS,
CDATTIVITA,
DSATTIVITA,
NMPREFERENZIALE,
NMCELLULARE,
NMCELLULARE1,
NMGIORNATE,
IMGIORNATA,
IMRIMBORSO,
CDCONTRATTO,
FLASSUNZIONE,
FLFESTIVO,
FLEXPORTED,
DTUPDATE,
CDUPDATE,
FLCAMICEAG,
FLTAILLEURAG,
NUM_CX,
DSSHORT,
CDCAMPAGNA,
DSSHORTCONTRATTO,
CDCOORDINATRICE,
IMGGCOORDINATRICE,
IMFIXCOORDINATRICE,
FLRIMBORSO,
DTRIMBORSO,
DTPAGAMENTO,
DSCOORDINATRICE,
DTREPORT,
TPJOB,
DSTPJOB)
AS
SELECT B.STHOSTESS, B.STBRIEFING, B.STREPORT,
B.CDJOB, B.DTJOB, B.CDPROG, B.CDAZIENDA, B.DSORARIO,
B.CDFORNITORE, B.CDHOSTESS,

     CASE B\.TPJOB
     WHEN 1 THEN  B\.CDHOSTESS
     WHEN 2 THEN  B\.CDFORNITORE
     END,

     CASE B\.TPJOB
     WHEN 1 THEN  C\.DSNOMINATIVO
     WHEN 2 THEN  I\.DSFORNITORE
     END,

     CASE B\.TPJOB
     WHEN 1 THEN  C\.NMPREFERENZIALE
     WHEN 2 THEN  I\.NMPREFERENZIALE
     END,

     CASE B\.TPJOB
     WHEN 1 THEN  C\.NMCELLULARE
     WHEN 2 THEN  I\.NMCELLULARE
     END,

     CASE B\.TPJOB
     WHEN 1 THEN  C\.NMCELLULARE1
     WHEN 2 THEN  I\.NMCELLULARE1
     END,

     B\.NMGIORNATE, B\.IMGIORNATA, B\.IMRIMBORSO, B\.CDCONTRATTO,
     B\.FLASSUNZIONE, B\.FLFESTIVO, B\.FLEXPORTED, 
     B\.DTUPDATE, B\.CDUPDATE,
     B\.FLCAMICEAG, B\.FLTAILLEURAG, G\.NUM\_CX,
     E\.DSSHORTAZIENDA,
     D\.CDCAMPAGNA, F\.DSSHORTCONTRATTO,
     B\.CDCOORDINATRICE, B\.IMGGCOORDINATRICE, B\.IMFIXCOORDINATRICE,
     B\.FLRIMBORSO, B\.DTRIMBORSO, B\.DTPAGAMENTO, 
     A\.DSNOMINATIVO, B\.DTREPORT,
     B\.TPJOB, H\.DSTPJOB

FROM RJOB_HOSTESS B, DHOSTESS C,
VIEW_HOSTESS_ENGAGED G, DAZIENDE E,
VIEW_JOB_CLIENTE D, VIEW_HOSTESS_CONTRATTI F,
DHOSTESS A, TTIPO_JOB H, DFORNITORI I
WHERE B.CDHOSTESS = C.CDHOSTESS
AND B.CDHOSTESS = G.CDHOSTESS
AND B.DTJOB = G.DTJOB
AND B.CDAZIENDA = E.CDAZIENDA
AND B.CDJOB = D.CDJOB
AND B.CDJOB = F.CDJOB
AND B.CDCONTRATTO = F.CDCONTRATTO
AND B.CDCOORDINATRICE = A.CDHOSTESS
AND B.TPJOB = H.CDTPJOB
AND B.CDFORNITORE = I.CDFORNITORE
;

/* View: VIEW_JOB_GIORNATE */
CREATE VIEW VIEW_JOB_GIORNATE(
CDJOB,
DTMIN,
DTMAX,
NMGIORNATE,
NMFESTIVE)
AS
SELECT CDJOB, MIN(DTJOB), MAX(DTJOB), SUM(NMGIORNATE), SUM(FLFESTIVO * NMGIORNATE)
FROM RJOB_HOSTESS
GROUP BY CDJOB
;

/* View: VIEW_JOB_INFO */
CREATE VIEW VIEW_JOB_INFO(
CDJOB,
DSINFO,
DSVALUE)
AS
SELECT A.CDJOB, B.DSINFO, A.DSINFO
FROM RJOB_INFO A, TJOB_INFO B
WHERE A.CDINFO = B.CDINFO
;

/* View: VIEW_LOGISTICA_ART_MAG */
CREATE VIEW VIEW_LOGISTICA_ART_MAG(
CDJOB,
CDPROG,
CDCAMPAGNA,
FLCONSEGNADIRETTA,
FLMAGAZZINO,
CDARTICOLO,
DSARTICOLO,
CDMAGAZZINO,
DSMAGAZZINO,
FLESTERNO,
FLCHKSPEDIZIONE,
FLCHKCONSEGNA,
QTMOVIMENTO,
QTRESO,
FLFORNITURA,
FLRITIRI,
CDSPEDIZIONE,
STSPEDIZIONE,
STMAGAZZINO,
TPDESTINATARIO,
CDDESTINATARIO,
STCONSEGNA,
STRITIRO,
FLKIT)
AS
SELECT A.CDJOB, A.CDPROG, A.CDCAMPAGNA, A.FLCONSEGNADIRETTA, A.FLMAGAZZINO, A.CDARTICOLO, C.DSARTICOLO,
A.CDMAGAZZINO, D.DSMAGAZZINO, D.FLESTERNO, A.FLCHKSPEDIZIONE, A.FLCHKCONSEGNA, A.QTMOVIMENTO,
A.QTRESO, A.FLFORNITURA, A.FLRITIRI, A.CDSPEDIZIONE, A.STSPEDIZIONE, A.STMAGAZZINO,
A.TPDESTINATARIO, A.CDDESTINATARIO, A.STCONSEGNA, A.STRITIRO, A.FLKIT
FROM RJOB_LOGISTICA_MOVIMENTO A, DCAMPAGNE B,
RCLIENTI_ARTICOLI C, TMAGAZZINO D
WHERE A.CDCAMPAGNA = B.CDCAMPAGNA
AND A.CDARTICOLO = C.CDARTICOLO
AND B.CDCLIENTE = C.CDCLIENTE
AND A.CDMAGAZZINO = D.CDMAGAZZINO
;

/* View: VIEW_LOGISTICA_MIN */
CREATE VIEW VIEW_LOGISTICA_MIN(
CDJOB,
STATTIVITA,
STMAGAZZINO,
STSPEDIZIONE,
STCONSEGNA,
STRITIRO)
AS
SELECT E.CDJOB,
MIN(E.STATTIVITA) STATTIVITA,
MIN(F.STMAGAZZINO) STMAGAZZINO,
MIN(F.STSPEDIZIONE) STSPEDIZIONE,
MIN(F.STCONSEGNA) STCONSEGNA,
MIN(F.STRITIRO) STRITIRO
FROM RJOB_LOGISTICA_ATTIVITA E,
RJOB_LOGISTICA_MOVIMENTO F
WHERE E.CDJOB = F.CDJOB

GROUP BY E.CDJOB, F.CDJOB
;

/* View: VIEW_LOGISTICA_MOVIMENTI */
CREATE VIEW VIEW_LOGISTICA_MOVIMENTI(
CDCLIENTE,
CDARTICOLO,
CDMAGAZZINO,
FLESTERNO,
DSCLIENTE,
DSARTICOLO,
DSMAGAZZINO,
DSMOVIMENTO)
AS
SELECT B.CDCLIENTE, A.CDARTICOLO, A.CDMAGAZZINO, D.FLESTERNO,
E.DSCLIENTE, C.DSARTICOLO, D.DSMAGAZZINO,
DSCLIENTE || ' - ' || DSARTICOLO || ' - ' || DSMAGAZZINO
FROM RCAMPAGNE_LOGISTICA_MOVIMENTO A, DCAMPAGNE B,
RCLIENTI_ARTICOLI C, TMAGAZZINO D, DCLIENTI E
WHERE A.CDCAMPAGNA = B.CDCAMPAGNA
AND A.CDARTICOLO = C.CDARTICOLO
AND B.CDCLIENTE = C.CDCLIENTE
AND B.CDCLIENTE = E.CDCLIENTE
AND A.CDMAGAZZINO = D.CDMAGAZZINO

UNION

SELECT B.CDCLIENTE, A.CDARTICOLO, A.CDMAGAZZINO, D.FLESTERNO,
E.DSCLIENTE, C.DSARTICOLO, D.DSMAGAZZINO,
DSCLIENTE || ' - ' || DSARTICOLO || ' - ' || DSMAGAZZINO
FROM RJOB_LOGISTICA_MOVIMENTO A, DCAMPAGNE B,
RCLIENTI_ARTICOLI C, TMAGAZZINO D, DCLIENTI E
WHERE A.CDCAMPAGNA = B.CDCAMPAGNA
AND A.CDARTICOLO = C.CDARTICOLO
AND B.CDCLIENTE = C.CDCLIENTE
AND B.CDCLIENTE = E.CDCLIENTE
AND A.CDMAGAZZINO = D.CDMAGAZZINO

UNION

SELECT A.CDCLIENTE, A.CDARTICOLO, A.CDMAGAZZINO, D.FLESTERNO,
E.DSCLIENTE, C.DSARTICOLO, D.DSMAGAZZINO,
DSCLIENTE || ' - ' || DSARTICOLO || ' - ' || DSMAGAZZINO
FROM RMAGAZZINI_MOVIMENTI A,
RCLIENTI_ARTICOLI C, TMAGAZZINO D, DCLIENTI E
WHERE A.CDARTICOLO = C.CDARTICOLO
AND A.CDCLIENTE = C.CDCLIENTE
AND A.CDCLIENTE = E.CDCLIENTE
AND A.CDMAGAZZINO = D.CDMAGAZZINO
;

/* View: VIEW_MAGAZZINI_MOVIMENTI */
CREATE VIEW VIEW_MAGAZZINI_MOVIMENTI(
CDCLIENTE,
CDARTICOLO,
CDMAGAZZINO,
CDPROG,
DSCLIENTE,
DSARTICOLO,
DSMAGAZZINO,
DSMOVIMENTO,
DTMOVIMENTO,
QTMOVIMENTO,
CDCAUSALE,
DSCAUSALE,
QT0,
QT1)
AS
SELECT D.CDCLIENTE, A.CDARTICOLO, A.CDMAGAZZINO, 0, C.DSCLIENTE, D.DSARTICOLO, E.DSMAGAZZINO,
(C.DSCLIENTE || ' - ' || E.DSMAGAZZINO || ' - ' || D.DSARTICOLO),
CAST(B.DTSPEDIZIONE AS TIMESTAMP),
CAST((A.QTMOVIMENTO - CAST(COALESCE(A.QTRESO, 0) AS INTEGER)) * F.TPMOVIMENTO AS INTEGER),
CAST(5 AS SMALLINT), F.DSCAUSALE,
CAST(COALESCE(A.QTMOVIMENTO, 0) AS INTEGER),
CAST(COALESCE(A.QTRESO, 0) AS INTEGER)

FROM RJOB_LOGISTICA_MOVIMENTO A, DSPEDIZIONI B, DCLIENTI C,
RCLIENTI_ARTICOLI D, TMAGAZZINO E, TCAUSALI_MAGAZZINO F
WHERE A.CDARTICOLO = D.CDARTICOLO
AND A.CDSPEDIZIONE = B.CDSPEDIZIONE
AND A.CDMAGAZZINO = E.CDMAGAZZINO
AND D.CDCLIENTE = C.CDCLIENTE
AND F.CDCAUSALE = 5

UNION ALL

SELECT D.CDCLIENTE, A.CDARTICOLO, A.CDMAGAZZINO, A.CDPROG, B.DSCLIENTE, D.DSARTICOLO, E.DSMAGAZZINO,
(B.DSCLIENTE || ' - ' || E.DSMAGAZZINO || ' - ' || D.DSARTICOLO),
CAST(A.DTMOVIMENTO AS TIMESTAMP),
CAST(A.QTMOVIMENTO * F.TPMOVIMENTO AS INTEGER), CAST(A.CDCAUSALE AS SMALLINT), F.DSCAUSALE,
CAST(IIF(F.TPMOVIMENTO = -1, A.QTMOVIMENTO * -1, 0) AS INTEGER),
CAST(IIF(F.TPMOVIMENTO = -1, 0, A.QTMOVIMENTO) AS INTEGER)

FROM RMAGAZZINI_MOVIMENTI A, RCLIENTI_ARTICOLI D, DCLIENTI B,
TMAGAZZINO E, TCAUSALI_MAGAZZINO F
WHERE A.CDARTICOLO = D.CDARTICOLO
AND A.CDMAGAZZINO = E.CDMAGAZZINO
AND A.CDCLIENTE = B.CDCLIENTE
AND A.CDCAUSALE = F.CDCAUSALE
;

/* View: VIEW_NUMERO_HOSTESS */
CREATE VIEW VIEW_NUMERO_HOSTESS(
CDJOB,
NMHOSTESS)
AS
SELECT CDJOB, MAX(NMHOSTESS)
FROM VIEW_FETCH_HOSTESS
GROUP BY CDJOB
;

/* View: VIEW_PROMOZIONE_NMGG */
CREATE VIEW VIEW_PROMOZIONE_NMGG(
CDPROMOZIONE,
NMGIORNATE)
AS
SELECT A.CDPROMOZIONE, COUNT(C.DTJOB)
FROM (DPROMOZIONI A LEFT JOIN RJOB B
ON A.CDPROMOZIONE = B.CDPROMOZIONE) LEFT JOIN RJOB_HOSTESS C
ON B.CDJOB = C.CDJOB
GROUP BY A.CDPROMOZIONE
;

/* View: VIEW_PROMOZIONE_NMPV */
CREATE VIEW VIEW_PROMOZIONE_NMPV(
CDPROMOZIONE,
NMPUNTIVENDITA)
AS
SELECT B.CDPROMOZIONE, COUNT(A.CDPROMOZIONE)
FROM DPROMOZIONI B LEFT JOIN RJOB A
ON B.CDPROMOZIONE = A.CDPROMOZIONE
GROUP BY B.CDPROMOZIONE
;

/* View: VIEW_PROMOZIONI_SPEDIZIONI */
CREATE VIEW VIEW_PROMOZIONI_SPEDIZIONI(
CDPROMOZIONE,
CDPROG,
CDCONTRATTO,
TPMITTENTE,
CDCORRIERE,
CDHOSTESS,
DTSPEDIZIONE,
DSCONTRATTO,
DSSHORTCONTRATTO,
DSMITTENTE,
DSTPMITTENTE)
AS
SELECT A.CDPROMOZIONE, A.CDPROG, A.CDCONTRATTO, A.TPMITTENTE, A.CDCORRIERE,
A.CDHOSTESS, A.DTSPEDIZIONE, B.DSCONTRATTO, B.DSSHORTCONTRATTO,
CASE TPMITTENTE
WHEN 1 THEN C.DSNOMINATIVO
WHEN 2 THEN E.DSCORRIERE
END,
CASE TPMITTENTE
WHEN 1 THEN 'Hostess'
WHEN 2 THEN 'Corriere'
END

FROM RPROMOZIONI_SPEDIZIONI A, RCAMPAGNE_CONTRATTI B, DHOSTESS C,
DPROMOZIONI D, TCORRIERI E
WHERE A.CDPROMOZIONE = D.CDPROMOZIONE
AND A.CDCONTRATTO = B.CDCONTRATTO
AND D.CDCAMPAGNA = B.CDCAMPAGNA
AND A.CDHOSTESS = C.CDHOSTESS
AND A.CDCORRIERE = E.CDCORRIERE
;

/* View: VIEW_PV_DISPLAYINSEGNA */
CREATE VIEW VIEW_PV_DISPLAYINSEGNA(
CDPUNTOVENDITA,
DSPUNTOVENDITA,
DSDENOMINAZIONE,
CDINSEGNA,
CDLOCALITA,
DSLOCALITA,
DSLOCALITA2,
CDCAP,
NMTELEFONO,
NMTELEFONO1,
NMCELLULARE,
NMCELLULARE1,
NMFAX,
NMFAX1,
NMPREFERENZIALE,
DSEMAIL,
DSRESPONSABILE,
DSREPARTORESPONSABILE,
NMTELEFONORESPONSABILE,
DSEMAILRESPONSABILE,
NMMQ,
NMCASSE,
DSORARIO,
CDTIPOPUNTOVENDITA,
NTPUNTOVENDITA,
FLASSUNZIONE,
CDAREANIELSEN,
FLDISPLAYPV,
FLDISPLAYINSEGNA,
FLDISPLAYINDIRIZZO,
FLDISPLAYLOCALITA,
FLDISPLAYDENOMINAZIONE,
DTUPDATE,
CDUPDATE,
DSDISPLAYINSEGNA,
DSINSEGNA,
DSCOMUNEPV,
CDPROVINCIAPV)
AS
SELECT
CDPUNTOVENDITA,
DSPUNTOVENDITA,
DSDENOMINAZIONE,
A.CDINSEGNA,
CDLOCALITA,
DSLOCALITA,
DSLOCALITA2,
A.CDCAP,
NMTELEFONO,
NMTELEFONO1,
NMCELLULARE,
NMCELLULARE1,
NMFAX TELEFONO,
NMFAX1,
NMPREFERENZIALE,
DSEMAIL,
DSRESPONSABILE,
DSREPARTORESPONSABILE,
NMTELEFONORESPONSABILE,
DSEMAILRESPONSABILE,
NMMQ,
NMCASSE,
DSORARIO,
CDTIPOPUNTOVENDITA,
NTPUNTOVENDITA,
FLASSUNZIONE,
CDAREANIELSEN,
FLDISPLAYPV,
FLDISPLAYINSEGNA,
FLDISPLAYINDIRIZZO,
FLDISPLAYLOCALITA,
FLDISPLAYDENOMINAZIONE,
A.DTUPDATE,
A.CDUPDATE,
DISPLAYINSEGNA(
A.FLDISPLAYINSEGNA, B.DSINSEGNA,
A.FLDISPLAYPV, A.DSPUNTOVENDITA,
A.FLDISPLAYDENOMINAZIONE, A.DSDENOMINAZIONE,
A.FLDISPLAYLOCALITA, C.DSCOMUNE,
A.FLDISPLAYINDIRIZZO, A.DSLOCALITA
),
DSINSEGNA,
DSCOMUNE,
CDPROVINCIA
FROM DPUNTI_VENDITA A, TINSEGNA B, TCOMUNI C
WHERE A.CDINSEGNA = B.CDINSEGNA
AND A.CDLOCALITA = C.CDCOMUNE
;

/* View: VIEW_SPEDIZIONE_CAMPAGNA_PV */
CREATE VIEW VIEW_SPEDIZIONE_CAMPAGNA_PV(
CDSPEDIZIONE,
CDCAMPAGNA,
CDPUNTOVENDITA)
AS
SELECT A.CDSPEDIZIONE, A.CDCAMPAGNA, B.CDPUNTOVENDITA
FROM RJOB_LOGISTICA_MOVIMENTO A, RJOB B
WHERE A.CDJOB = B.CDJOB
GROUP BY A.CDSPEDIZIONE, A.CDCAMPAGNA, B.CDPUNTOVENDITA
;

/* View: VIEW_SPEDIZIONE_JOB */
CREATE VIEW VIEW_SPEDIZIONE_JOB(
CDJOB,
CDSPEDIZIONE)
AS
SELECT CDJOB, CDSPEDIZIONE
FROM RJOB_LOGISTICA_MOVIMENTO
GROUP BY CDJOB, CDSPEDIZIONE
;

/* View: VIEW_SPEDIZIONI_MIN */
CREATE VIEW VIEW_SPEDIZIONI_MIN(
CDSPEDIZIONE,
STMAGAZZINO,
STSPEDIZIONE,
STCONSEGNA,
STRITIRO)
AS
SELECT F.CDSPEDIZIONE,
MIN(F.STMAGAZZINO) STMAGAZZINO,
MIN(F.STSPEDIZIONE) STSPEDIZIONE,
MIN(F.STCONSEGNA) STCONSEGNA,
MIN(F.STRITIRO) STRITIRO
FROM RJOB_LOGISTICA_MOVIMENTO F
WHERE F.CDSPEDIZIONE IS NOT NULL
GROUP BY F.CDSPEDIZIONE
;

/* View: VIEW_STAMPE_DETTAGLIO */
CREATE VIEW VIEW_STAMPE_DETTAGLIO(
CDSTAMPA,
TPSTAMPA,
DSTIPOSTAMPA,
FLSELECT,
CDORDER,
DSSTAMPA,
CDPROG,
CDAZIENDA,
CDINSEGNA,
CDPUNTOVENDITA,
DSAZIENDA,
DSINSEGNA,
DSPUNTOVENDITA,
DSDISPLAYINSEGNA,
DSSTAMPADETTAGLIO,
TPEXT,
DSEXTSTAMPA,
DSSUFIX)
AS
SELECT A.CDSTAMPA, A.TPSTAMPA, G.DSTIPOSTAMPA, A.FLSELECT, G.CDORDER, A.DSSTAMPA, B.CDPROG, B.CDAZIENDA, B.CDINSEGNA,
B.CDPUNTOVENDITA, C.DSAZIENDA, D.DSINSEGNA, E.DSPUNTOVENDITA, E.DSDISPLAYINSEGNA,
C.DSAZIENDA || ' - ' || D.DSINSEGNA || ' - ' || E.DSPUNTOVENDITA,
B.TPEXT, F.DSEXTSTAMPA, G.DSSUFIX
FROM DSTAMPE A, RSTAMPE_DETTAGLIO B, DAZIENDE C,
TINSEGNA D, VIEW_PV_DISPLAYINSEGNA E, TEXT_STAMPA F,
TTIPO_STAMPA G
WHERE A.CDSTAMPA = B.CDSTAMPA
AND B.CDAZIENDA = C.CDAZIENDA
AND B.CDINSEGNA = D.CDINSEGNA
AND B.CDPUNTOVENDITA = E.CDPUNTOVENDITA
AND B.TPEXT = F.CDEXTSTAMPA
AND A.TPSTAMPA = G.CDTIPOSTAMPA
;

/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/

ALTER TABLE DAGENZIE ADD CONSTRAINT PK_DAGENZIE PRIMARY KEY (CDAGENZIA);
ALTER TABLE DAZIENDE ADD CONSTRAINT PK_DAZIENDE PRIMARY KEY (CDAZIENDA);
ALTER TABLE DCAMPAGNE ADD CONSTRAINT PK_DCAMPAGNE PRIMARY KEY (CDCAMPAGNA);
ALTER TABLE DCLIENTI ADD CONSTRAINT PK_DCLIENTI PRIMARY KEY (CDCLIENTE);
ALTER TABLE DCOMMESSE ADD CONSTRAINT PK_DCOMMESSE PRIMARY KEY (CDCOMMESSA);
ALTER TABLE DFORNITORI ADD CONSTRAINT PK_DFORNITORI PRIMARY KEY (CDFORNITORE);
ALTER TABLE DHOSTESS ADD CONSTRAINT PK_DHOSTESS PRIMARY KEY (CDHOSTESS);
ALTER TABLE DMANDATI ADD CONSTRAINT PK_DMANDATI PRIMARY KEY (CDMANDATO);
ALTER TABLE DOPERATORI ADD CONSTRAINT PK_DOPERATORI PRIMARY KEY (CDOPERATORE);
ALTER TABLE DPROMOZIONI ADD CONSTRAINT PK_DPROMOZIONI PRIMARY KEY (CDPROMOZIONE);
ALTER TABLE DPUNTI_VENDITA ADD CONSTRAINT PK_DPUNTI_VENDITA PRIMARY KEY (CDPUNTOVENDITA);
ALTER TABLE DSPEDIZIONI ADD CONSTRAINT PK_DSPEDIZIONI PRIMARY KEY (CDSPEDIZIONE);
ALTER TABLE DSTAMPE ADD CONSTRAINT PK_DSTAMPE PRIMARY KEY (CDSTAMPA);
ALTER TABLE DUTENTI ADD CONSTRAINT PK_DUTENTI PRIMARY KEY (CDUTENTE);
ALTER TABLE FIB$FIELDS_INFO ADD CONSTRAINT PK_FIB$FIELDS_INFO PRIMARY KEY (TABLE_NAME, FIELD_NAME);
ALTER TABLE RCAMPAGNE_CONTRATTI ADD CONSTRAINT PK_RCAMPAGNE_CONTRATTI PRIMARY KEY (CDCAMPAGNA, CDCONTRATTO);
ALTER TABLE RCAMPAGNE_LOGISTICA_ATTIVITA ADD CONSTRAINT PK_RCAMPAGNE_LOGISTICA_ATTIVITA PRIMARY KEY (CDCAMPAGNA, CDLOGISTICA, CDTEMPLATE);
ALTER TABLE RCAMPAGNE_LOGISTICA_MOVIMENTO ADD CONSTRAINT PK_RCAMPAGNE_LOGISTICA_MOV PRIMARY KEY (CDCAMPAGNA, CDLOGISTICA, CDTEMPLATE);
ALTER TABLE RCAMPAGNE_LOGISTICA_TEMPLATE ADD CONSTRAINT PK_RCAMPAGNE_LOGISTICA_TEMPLATE PRIMARY KEY (CDCAMPAGNA, CDTEMPLATE);
ALTER TABLE RCLIENTI_ARTICOLI ADD CONSTRAINT PK_RCLIENTI_ARTICOLI PRIMARY KEY (CDCLIENTE, CDARTICOLO);
ALTER TABLE RCLIENTI_REPARTI ADD CONSTRAINT PK_RCLIENTI_REPARTI PRIMARY KEY (CDCLIENTE, CDPROG);
ALTER TABLE RCOMMESSE_REVISIONE ADD CONSTRAINT PK_RCOMMESSE_REVISIONE PRIMARY KEY (CDCOMMESSA, CDREVISIONE);
ALTER TABLE RCOMMESSE_RIGHE ADD CONSTRAINT PK_RCOMMESSE_RIGHE PRIMARY KEY (CDCOMMESSA, CDRIGA);
ALTER TABLE RCOMMESSE_VOCI_RIGHE_TT ADD CONSTRAINT PK_RCOMMESSE_VOCI_RIGHE_TT PRIMARY KEY (CDCOMMESSA, CDVOCE, CDRIGA);
ALTER TABLE RCOMMESSE_VOCI_TT ADD CONSTRAINT PK_RCOMMESSE_VOCI_TT PRIMARY KEY (CDCOMMESSA, CDVOCE);
ALTER TABLE RCOMMESSE_WIP ADD CONSTRAINT PK_RCOMMESSE_WIP PRIMARY KEY (CDCOMMESSA, CDREVISIONE);
ALTER TABLE RHOSTESS_PAGAMENTI ADD CONSTRAINT PK_RHOSTESS_PAGAMENTI PRIMARY KEY (CDHOSTESS, CDPROG);
ALTER TABLE RJOB ADD CONSTRAINT PK_RJOB PRIMARY KEY (CDJOB);
ALTER TABLE RJOB_HOSTESS ADD CONSTRAINT PK_RJOB_HOSTESS PRIMARY KEY (CDJOB, CDPROG);
ALTER TABLE RJOB_INFO ADD CONSTRAINT PK_RJOB_INFO PRIMARY KEY (CDJOB, CDINFO);
ALTER TABLE RJOB_LOGISTICA_ATTIVITA ADD CONSTRAINT PK_RJOB_LOGISTICA_ATTIVITA PRIMARY KEY (CDJOB, CDPROG);
ALTER TABLE RJOB_LOGISTICA_MECCANICA ADD CONSTRAINT PK_RJOB_LOGISTICA_MECCANICA PRIMARY KEY (CDJOB);
ALTER TABLE RJOB_LOGISTICA_MOVIMENTO ADD CONSTRAINT PK_RJOB_LOGISTICA_MOVIMENTO PRIMARY KEY (CDJOB, CDPROG);
ALTER TABLE RMAGAZZINI_MOVIMENTI ADD CONSTRAINT PK_RMAGAZZINI_MOVIMENTI PRIMARY KEY (CDMAGAZZINO, CDCLIENTE, CDARTICOLO, CDPROG);
ALTER TABLE RMANDATI_HOSTESS ADD CONSTRAINT PK_RMANDATI_HOSTESS PRIMARY KEY (CDMANDATO, CDHOSTESS);
ALTER TABLE RMANDATI_PROVINCIE ADD CONSTRAINT PK_RMANDATI_PROVINCIE PRIMARY KEY (CDMANDATO, CDPROVINCIA);
ALTER TABLE RPROMOZIONI_SPEDIZIONI ADD CONSTRAINT PK_RPROMOZIONI_SPEDIZIONI PRIMARY KEY (CDPROMOZIONE, CDPROG);
ALTER TABLE RPUNTI_VENDITA_REPARTI ADD CONSTRAINT PK_RPUNTI_VENDITA_REPARTI PRIMARY KEY (CDPUNTOVENDITA, CDPROG);
ALTER TABLE RSTAMPE_DETTAGLIO ADD CONSTRAINT PK_RSTAMPE_DETTAGLIO PRIMARY KEY (CDSTAMPA, CDPROG);
ALTER TABLE TATTIVITA ADD CONSTRAINT PK_TATTIVITA PRIMARY KEY (CDATTIVITA);
ALTER TABLE TCAUSALI_MAGAZZINO ADD CONSTRAINT PK_TCAUSALI_MAGAZZINO PRIMARY KEY (CDCAUSALE);
ALTER TABLE TCOLORE_CAPELLI ADD CONSTRAINT PK_TCOLORE_CAPELLI PRIMARY KEY (CDCAPELLI);
ALTER TABLE TCOLORE_OCCHI ADD CONSTRAINT PK_TCOLORE_OCCHI PRIMARY KEY (CDOCCHI);
ALTER TABLE TCOMUNI ADD CONSTRAINT PK_TCOMUNI PRIMARY KEY (CDCOMUNE);
ALTER TABLE TCONSEGNA_METODO ADD CONSTRAINT PK_TCONSEGNA_METODO PRIMARY KEY (CDMETODO);
ALTER TABLE TCONSEGNA_STATO ADD CONSTRAINT PK_TCONSEGNA_STATO PRIMARY KEY (CDSTATO);
ALTER TABLE TCONSEGNA_TASSATIVA ADD CONSTRAINT PK_TCONSEGNA_TASSATIVA PRIMARY KEY (CDGG);
ALTER TABLE TCOPERTURA ADD CONSTRAINT PK_TCOPERTURA PRIMARY KEY (CDCOPERTURA);
ALTER TABLE TCORRIERI ADD CONSTRAINT PK_TCORRIERI PRIMARY KEY (CDCORRIERE);
ALTER TABLE TDESTINATARIO ADD CONSTRAINT PK_TDESTINATARIO PRIMARY KEY (CDDESTINATARIO);
ALTER TABLE TEXT_STAMPA ADD CONSTRAINT PK_TEXT_STAMPA PRIMARY KEY (CDEXTSTAMPA);
ALTER TABLE TFESTIVITA ADD CONSTRAINT PK_TFESTIVITA PRIMARY KEY (CDFESTIVITA);
ALTER TABLE TINI ADD CONSTRAINT PK_TINI PRIMARY KEY (CDSECTION, CDKEY);
ALTER TABLE TINSEGNA ADD CONSTRAINT PK_TINSEGNA PRIMARY KEY (CDINSEGNA);
ALTER TABLE TJOB_INFO ADD CONSTRAINT PK_TJOB_INFO PRIMARY KEY (CDINFO);
ALTER TABLE TMAGAZZINO ADD CONSTRAINT PK_TMAGAZZINO PRIMARY KEY (CDMAGAZZINO);
ALTER TABLE TPAGAMENTO ADD CONSTRAINT PK_TPAGAMENTO PRIMARY KEY (CDPAGAMENTO);
ALTER TABLE TREPARTO ADD CONSTRAINT PK_TREPARTO PRIMARY KEY (CDREPARTO);
ALTER TABLE TSEDI ADD CONSTRAINT PK_TSEDI PRIMARY KEY (CDSEDE);
ALTER TABLE TSTATO ADD CONSTRAINT PK_TSTATO PRIMARY KEY (CDTIPO, CDSTATO);
ALTER TABLE TSTATO_CIVILE ADD CONSTRAINT PK_TSTATO_CIVILE PRIMARY KEY (CDSTATOCIVILE);
ALTER TABLE TTEMPLATE_CONTRATTI ADD CONSTRAINT PK_TTEMPLATE_CONTRATTI PRIMARY KEY (CDCONTRATTO);
ALTER TABLE TTIPO_COMMESSE ADD CONSTRAINT PK_TTIPO_COMMESSE PRIMARY KEY (CDTIPOCOMMESSA);
ALTER TABLE TTIPO_CONTRATTO ADD CONSTRAINT PK_TTIPO_CONTRATTO PRIMARY KEY (CDTIPOCONTRATTO);
ALTER TABLE TTIPO_JOB ADD CONSTRAINT PK_TTIPO_JOB PRIMARY KEY (CDTPJOB);
ALTER TABLE TTIPO_PAGAMENTO ADD CONSTRAINT PK_TTIPO_PAGAMENTO PRIMARY KEY (CDTIPOPAGAMENTO);
ALTER TABLE TTIPO_PUNTI_VENDITA ADD CONSTRAINT PK_TTIPO_PUNTI_VENDITA PRIMARY KEY (CDTIPOPUNTOVENDITA);
ALTER TABLE TTIPO_RIGA_COMMESSA ADD CONSTRAINT PK_TTIPO_RIGA_COMMESSA PRIMARY KEY (CDTIPORIGA);
ALTER TABLE TTIPO_STAMPA ADD CONSTRAINT PK_TTIPO_STAMPA PRIMARY KEY (CDTIPOSTAMPA);
ALTER TABLE TTIPO_STATO ADD CONSTRAINT PK_TTIPO_STATO PRIMARY KEY (CDTIPO);
ALTER TABLE TTITOLO_STUDIO ADD CONSTRAINT PK_TTITOLO_STUDIO PRIMARY KEY (CDTITOLOSTUDIO);
ALTER TABLE TTRATTAMENTO_FISCALE ADD CONSTRAINT PK_TTRATTAMENTO_FISCALE PRIMARY KEY (CDTRATTAMENTO);
ALTER TABLE TUNITA_MISURA ADD CONSTRAINT PK_TUNITA_MISURA PRIMARY KEY (CDUNITA);

/******************************************************************************/
/*** Foreign Keys ***/
/******************************************************************************/

ALTER TABLE DAGENZIE ADD CONSTRAINT FK_DAGENZIE__CDRESIDENZA FOREIGN KEY (CDRESIDENZA) REFERENCES TCOMUNI (CDCOMUNE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DCAMPAGNE ADD CONSTRAINT FK_DCAMPAGNE_CDOPER FOREIGN KEY (CDOPERATORE) REFERENCES DOPERATORI (CDOPERATORE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DCAMPAGNE ADD CONSTRAINT FK_DCAMPAGNE__CDCLIENTE FOREIGN KEY (CDCLIENTE) REFERENCES DCLIENTI (CDCLIENTE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DCLIENTI ADD CONSTRAINT FK_DCLIENTI__CDAGENZIA FOREIGN KEY (CDAGENZIA) REFERENCES DAGENZIE (CDAGENZIA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DCLIENTI ADD CONSTRAINT FK_DCLIENTI__CDLOCALITA FOREIGN KEY (CDLOCALITA) REFERENCES TCOMUNI (CDCOMUNE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DCLIENTI ADD CONSTRAINT FK_DCLIENTI__CDOPERATORE FOREIGN KEY (CDOPERATORE) REFERENCES DOPERATORI (CDOPERATORE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DCOMMESSE ADD CONSTRAINT FK_DCOMMESSE_1 FOREIGN KEY (CDCLIENTE) REFERENCES DCLIENTI (CDCLIENTE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE DCOMMESSE ADD CONSTRAINT FK_DCOMMESSE_2 FOREIGN KEY (TPCOMMESSA) REFERENCES TTIPO_COMMESSE (CDTIPOCOMMESSA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DCOMMESSE ADD CONSTRAINT FK_DCOMMESSE_3 FOREIGN KEY (CDRESPONSABILE) REFERENCES DUTENTI (CDUTENTE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DFORNITORI ADD CONSTRAINT FK_DFORNITORI_1 FOREIGN KEY (CDCOMUNE) REFERENCES TCOMUNI (CDCOMUNE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDCAPELLI FOREIGN KEY (CDCAPELLI) REFERENCES TCOLORE_CAPELLI (CDCAPELLI) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDINDIRIZZO FOREIGN KEY (CDINDIRIZZO) REFERENCES TCOMUNI (CDCOMUNE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDNASCITA FOREIGN KEY (CDNASCITA) REFERENCES TCOMUNI (CDCOMUNE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDOCCHI FOREIGN KEY (CDOCCHI) REFERENCES TCOLORE_OCCHI (CDOCCHI) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDPAGAMENTO FOREIGN KEY (CDPAGAMENTO) REFERENCES TPAGAMENTO (CDPAGAMENTO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDREPARTO FOREIGN KEY (CDREPARTO) REFERENCES TREPARTO (CDREPARTO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDRESIDENZA FOREIGN KEY (CDRESIDENZA) REFERENCES TCOMUNI (CDCOMUNE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDSTATOCIVILE FOREIGN KEY (CDSTATOCIVILE) REFERENCES TSTATO_CIVILE (CDSTATOCIVILE) ON DELETE SET DEFAULT ON UPDATE CASCADE
USING INDEX FK_DHOSTESS_CDSTATOCIVILE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDTITOLO FOREIGN KEY (CDTITOLODISTUDIO) REFERENCES TTITOLO_STUDIO (CDTITOLOSTUDIO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DHOSTESS ADD CONSTRAINT FK_DHOSTESS__CDTRATTAMENTO FOREIGN KEY (CDTRATTAMENTOFISCALE) REFERENCES TTRATTAMENTO_FISCALE (CDTRATTAMENTO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DPROMOZIONI ADD CONSTRAINT FK_DPROMOZIONI__CDCAMPAGNA FOREIGN KEY (CDCAMPAGNA) REFERENCES DCAMPAGNE (CDCAMPAGNA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DPUNTI_VENDITA ADD CONSTRAINT FK_DPUNTI_VENDITA__CDINSEGNA FOREIGN KEY (CDINSEGNA) REFERENCES TINSEGNA (CDINSEGNA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DPUNTI_VENDITA ADD CONSTRAINT FK_DPUNTI_VENDITA__CDLOCALITA FOREIGN KEY (CDLOCALITA) REFERENCES TCOMUNI (CDCOMUNE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DPUNTI_VENDITA ADD CONSTRAINT FK_DPUNTI_VENDITA__CDTIPOPV FOREIGN KEY (CDTIPOPUNTOVENDITA) REFERENCES TTIPO_PUNTI_VENDITA (CDTIPOPUNTOVENDITA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE DSTAMPE ADD CONSTRAINT FK_DSTAMPE_TPSTAMPA FOREIGN KEY (TPSTAMPA) REFERENCES TTIPO_STAMPA (CDTIPOSTAMPA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_CONTRATTI ADD CONSTRAINT FK_RCAMPAGNE_CONTRATTI_CDCAMP FOREIGN KEY (CDCAMPAGNA) REFERENCES DCAMPAGNE (CDCAMPAGNA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_CONTRATTI ADD CONSTRAINT FK_RCAMPAGNE_CONTRATTI_TPCON FOREIGN KEY (TPCONTRATTO) REFERENCES TTIPO_CONTRATTO (CDTIPOCONTRATTO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_CONTRATTI ADD CONSTRAINT FK_RCAMPAGNE_CONTRATTI_TPUM FOREIGN KEY (TPUM) REFERENCES TUNITA_MISURA (CDUNITA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_LOGISTICA_ATTIVITA ADD CONSTRAINT FK_RCAMPAGNE_LOG_AT__CDCAMPAGNA FOREIGN KEY (CDCAMPAGNA) REFERENCES DCAMPAGNE (CDCAMPAGNA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_LOGISTICA_ATTIVITA ADD CONSTRAINT FK_RCAMPAGNE_LOG_AT__CDCA_CDTE FOREIGN KEY (CDCAMPAGNA, CDTEMPLATE) REFERENCES RCAMPAGNE_LOGISTICA_TEMPLATE (CDCAMPAGNA, CDTEMPLATE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_LOGISTICA_MOVIMENTO ADD CONSTRAINT FK_RCAMPAGNE_LOG_MOV_TPDEST FOREIGN KEY (CDDESTINATARIO) REFERENCES TDESTINATARIO (CDDESTINATARIO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_LOGISTICA_MOVIMENTO ADD CONSTRAINT FK_RCAMPAGNE_LOG_MOV__CDCAM FOREIGN KEY (CDCAMPAGNA) REFERENCES DCAMPAGNE (CDCAMPAGNA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_LOGISTICA_MOVIMENTO ADD CONSTRAINT FK_RCAMPAGNE_LOG_MOV__CDCA_CDTE FOREIGN KEY (CDCAMPAGNA, CDTEMPLATE) REFERENCES RCAMPAGNE_LOGISTICA_TEMPLATE (CDCAMPAGNA, CDTEMPLATE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_LOGISTICA_MOVIMENTO ADD CONSTRAINT FK_RCAMPAGNE_LOG_MOV__CDMAGA FOREIGN KEY (CDMAGAZZINO) REFERENCES TMAGAZZINO (CDMAGAZZINO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RCAMPAGNE_LOGISTICA_TEMPLATE ADD CONSTRAINT FK_RCAMPAGNE_LOGISTICA_TEMPLATE FOREIGN KEY (CDCAMPAGNA) REFERENCES DCAMPAGNE (CDCAMPAGNA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCLIENTI_ARTICOLI ADD CONSTRAINT FK_RCLIENTI_ARTICOLI__CDCLIENTE FOREIGN KEY (CDCLIENTE) REFERENCES DCLIENTI (CDCLIENTE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCLIENTI_REPARTI ADD CONSTRAINT FK_RCLIENTI_REPARTI__CDCLIENTE FOREIGN KEY (CDCLIENTE) REFERENCES DCLIENTI (CDCLIENTE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCOMMESSE_REVISIONE ADD CONSTRAINT FK_RCOMMESSE_REVISIONE_1 FOREIGN KEY (CDCOMMESSA) REFERENCES DCOMMESSE (CDCOMMESSA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCOMMESSE_RIGHE ADD CONSTRAINT FK_RCOMMESSE_RIGHE_1 FOREIGN KEY (TPRIGA) REFERENCES TTIPO_RIGA_COMMESSA (CDTIPORIGA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RCOMMESSE_RIGHE ADD CONSTRAINT FK_RCOMMESSE_RIGHE_2 FOREIGN KEY (TPUM) REFERENCES TUNITA_MISURA (CDUNITA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RCOMMESSE_RIGHE ADD CONSTRAINT FK_RCOMMESSE_RIGHE_3 FOREIGN KEY (CDFORNITORE) REFERENCES DFORNITORI (CDFORNITORE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RCOMMESSE_RIGHE ADD CONSTRAINT FK_RCOMMESSE_RIGHE_4 FOREIGN KEY (CDCOMMESSA) REFERENCES DCOMMESSE (CDCOMMESSA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCOMMESSE_VOCI_RIGHE_TT ADD CONSTRAINT FK_RCOMMESSE_VOCI_RIGHE_TT_1 FOREIGN KEY (CDCOMMESSA, CDVOCE) REFERENCES RCOMMESSE_VOCI_TT (CDCOMMESSA, CDVOCE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCOMMESSE_VOCI_TT ADD CONSTRAINT FK_RCOMMESSE_VOCI_TT_1 FOREIGN KEY (CDCOMMESSA) REFERENCES DCOMMESSE (CDCOMMESSA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RCOMMESSE_WIP ADD CONSTRAINT FK_RCOMMESSE_WIP_1 FOREIGN KEY (CDCOMMESSA) REFERENCES DCOMMESSE (CDCOMMESSA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RHOSTESS_PAGAMENTI ADD CONSTRAINT FK_RHOSTESS_PAGAMENTI_CDHS FOREIGN KEY (CDHOSTESS) REFERENCES DHOSTESS (CDHOSTESS) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RHOSTESS_PAGAMENTI ADD CONSTRAINT FK_RHOSTESS_PAGAMENTI_TPPAG FOREIGN KEY (TPPAGAMENTO) REFERENCES TTIPO_PAGAMENTO (CDTIPOPAGAMENTO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB ADD CONSTRAINT FK_RJOB_CDSEDE FOREIGN KEY (CDSEDE) REFERENCES TSEDI (CDSEDE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB ADD CONSTRAINT FK_RJOB__CDAGENZIA FOREIGN KEY (CDAGENZIA) REFERENCES DAGENZIE (CDAGENZIA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB ADD CONSTRAINT FK_RJOB__CDCOORD FOREIGN KEY (CDCOORDINATRICE) REFERENCES DHOSTESS (CDHOSTESS) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB ADD CONSTRAINT FK_RJOB__CDCOPERTURA FOREIGN KEY (CDCOPERTURA) REFERENCES TCOPERTURA (CDCOPERTURA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB ADD CONSTRAINT FK_RJOB__CDPROMOZIONE FOREIGN KEY (CDPROMOZIONE) REFERENCES DPROMOZIONI (CDPROMOZIONE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB ADD CONSTRAINT FK_RJOB__CDPV FOREIGN KEY (CDPUNTOVENDITA) REFERENCES DPUNTI_VENDITA (CDPUNTOVENDITA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB ADD CONSTRAINT FK_RJOB__CDTPATTIVITA FOREIGN KEY (CDTIPOATTIVITA) REFERENCES TATTIVITA (CDATTIVITA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB ADD CONSTRAINT FK_RJOB__MTCONSEGNA FOREIGN KEY (MTCONSEGNA) REFERENCES TCONSEGNA_METODO (CDMETODO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB ADD CONSTRAINT FK_RJOB__STCONSEGNA FOREIGN KEY (STCONSEGNA) REFERENCES TCONSEGNA_STATO (CDSTATO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB_HOSTESS ADD CONSTRAINT FK_RJOB_HOSTESS_1 FOREIGN KEY (CDFORNITORE) REFERENCES DFORNITORI (CDFORNITORE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB_HOSTESS ADD CONSTRAINT FK_RJOB_HOSTESS_3 FOREIGN KEY (TPJOB) REFERENCES TTIPO_JOB (CDTPJOB) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RJOB_HOSTESS ADD CONSTRAINT FK_RJOB_HOSTESS__CDAZIENDA FOREIGN KEY (CDAZIENDA) REFERENCES DAZIENDE (CDAZIENDA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB_HOSTESS ADD CONSTRAINT FK_RJOB_HOSTESS__CDCOORD FOREIGN KEY (CDCOORDINATRICE) REFERENCES DHOSTESS (CDHOSTESS) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB_HOSTESS ADD CONSTRAINT FK_RJOB_HOSTESS__CDHS FOREIGN KEY (CDHOSTESS) REFERENCES DHOSTESS (CDHOSTESS) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB_HOSTESS ADD CONSTRAINT FK_RJOB_HOSTESS__CDJOB FOREIGN KEY (CDJOB) REFERENCES RJOB (CDJOB) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RJOB_INFO ADD CONSTRAINT FK_RJOB_INFO__CDINFO FOREIGN KEY (CDINFO) REFERENCES TJOB_INFO (CDINFO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RJOB_INFO ADD CONSTRAINT FK_RJOB_INFO__CDJOB FOREIGN KEY (CDJOB) REFERENCES RJOB (CDJOB) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RJOB_LOGISTICA_ATTIVITA ADD CONSTRAINT FK_RJOB_LOG_ATT__CDCAMPAGNA FOREIGN KEY (CDCAMPAGNA) REFERENCES DCAMPAGNE (CDCAMPAGNA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB_LOGISTICA_ATTIVITA ADD CONSTRAINT FK_RJOB_LOG_ATT__CDJOB FOREIGN KEY (CDJOB) REFERENCES RJOB (CDJOB) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RJOB_LOGISTICA_MECCANICA ADD CONSTRAINT FK_RJOB_LOG_MEC__CDJOB FOREIGN KEY (CDJOB) REFERENCES RJOB (CDJOB) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RJOB_LOGISTICA_MOVIMENTO ADD CONSTRAINT FK_RJOB_LOG_MOV__CDCAMPAGNA FOREIGN KEY (CDCAMPAGNA) REFERENCES DCAMPAGNE (CDCAMPAGNA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB_LOGISTICA_MOVIMENTO ADD CONSTRAINT FK_RJOB_LOG_MOV__CDJOB FOREIGN KEY (CDJOB) REFERENCES RJOB (CDJOB) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RJOB_LOGISTICA_MOVIMENTO ADD CONSTRAINT FK_RJOB_LOG_MOV__CDMAGAZZINO FOREIGN KEY (CDMAGAZZINO) REFERENCES TMAGAZZINO (CDMAGAZZINO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RJOB_LOGISTICA_MOVIMENTO ADD CONSTRAINT FK_RJOB_LOG_MOV__CDSPEDIZIONE FOREIGN KEY (CDSPEDIZIONE) REFERENCES DSPEDIZIONI (CDSPEDIZIONE) ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE RJOB_LOGISTICA_MOVIMENTO ADD CONSTRAINT FK_RJOB_LOG_MOV__TPDESTINATARIO FOREIGN KEY (TPDESTINATARIO) REFERENCES TDESTINATARIO (CDDESTINATARIO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RMAGAZZINI_MOVIMENTI ADD CONSTRAINT FK_RMAGAZZINI_MOV_CDCAUSALE FOREIGN KEY (CDCAUSALE) REFERENCES TCAUSALI_MAGAZZINO (CDCAUSALE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RMAGAZZINI_MOVIMENTI ADD CONSTRAINT FK_RMAGAZZINI_MOV__CDART_CDCLI FOREIGN KEY (CDCLIENTE, CDARTICOLO) REFERENCES RCLIENTI_ARTICOLI (CDCLIENTE, CDARTICOLO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RMAGAZZINI_MOVIMENTI ADD CONSTRAINT FK_RMAGAZZINI_MOV__CDCLIENTE FOREIGN KEY (CDCLIENTE) REFERENCES DCLIENTI (CDCLIENTE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RMAGAZZINI_MOVIMENTI ADD CONSTRAINT FK_RMAGAZZINI_MOV__CDMAGAZZINO FOREIGN KEY (CDMAGAZZINO) REFERENCES TMAGAZZINO (CDMAGAZZINO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RMANDATI_HOSTESS ADD CONSTRAINT FK_RMANDATI_HOSTESS_CDMANDATO FOREIGN KEY (CDMANDATO) REFERENCES DMANDATI (CDMANDATO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RMANDATI_PROVINCIE ADD CONSTRAINT FK_RMANDATI_PROVINCIE_CDMANDATO FOREIGN KEY (CDMANDATO) REFERENCES DMANDATI (CDMANDATO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RPROMOZIONI_SPEDIZIONI ADD CONSTRAINT FK_RPROMOZIONI_SPEDIZIONI_1 FOREIGN KEY (CDPROMOZIONE) REFERENCES DPROMOZIONI (CDPROMOZIONE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RPROMOZIONI_SPEDIZIONI ADD CONSTRAINT FK_RPROMOZIONI_SPEDIZIONI_2 FOREIGN KEY (CDHOSTESS) REFERENCES DHOSTESS (CDHOSTESS) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RPROMOZIONI_SPEDIZIONI ADD CONSTRAINT FK_RPROMOZIONI_SPEDIZIONI_3 FOREIGN KEY (CDCORRIERE) REFERENCES TCORRIERI (CDCORRIERE) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RPUNTI_VENDITA_REPARTI ADD CONSTRAINT FK_RPUNTI_VENDITA_REPARTI_CDPV FOREIGN KEY (CDPUNTOVENDITA) REFERENCES DPUNTI_VENDITA (CDPUNTOVENDITA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RSTAMPE_DETTAGLIO ADD CONSTRAINT FK_RSTAMPE_DETTAGLIO_CDAZIENDA FOREIGN KEY (CDAZIENDA) REFERENCES DAZIENDE (CDAZIENDA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RSTAMPE_DETTAGLIO ADD CONSTRAINT FK_RSTAMPE_DETTAGLIO_CDINSEGNA FOREIGN KEY (CDINSEGNA) REFERENCES TINSEGNA (CDINSEGNA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RSTAMPE_DETTAGLIO ADD CONSTRAINT FK_RSTAMPE_DETTAGLIO_CDPV FOREIGN KEY (CDPUNTOVENDITA) REFERENCES DPUNTI_VENDITA (CDPUNTOVENDITA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE RSTAMPE_DETTAGLIO ADD CONSTRAINT FK_RSTAMPE_DETTAGLIO_CDSTAMPA FOREIGN KEY (CDSTAMPA) REFERENCES DSTAMPE (CDSTAMPA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE RSTAMPE_DETTAGLIO ADD CONSTRAINT FK_RSTAMPE_DETTAGLIO_TPEXT FOREIGN KEY (TPEXT) REFERENCES TEXT_STAMPA (CDEXTSTAMPA) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE TSTATO ADD CONSTRAINT FK_TSTATO_CDTIPO FOREIGN KEY (CDTIPO) REFERENCES TTIPO_STATO (CDTIPO) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE TTEMPLATE_CONTRATTI ADD CONSTRAINT FK_TTEMPLATE_CONTRATTI_TPCONTR FOREIGN KEY (TPCONTRATTO) REFERENCES TTIPO_CONTRATTO (CDTIPOCONTRATTO) ON DELETE SET DEFAULT ON UPDATE CASCADE;
ALTER TABLE TTEMPLATE_CONTRATTI ADD CONSTRAINT FK_TTEMPLATE_CONTRATTI_TPUM FOREIGN KEY (TPUM) REFERENCES TUNITA_MISURA (CDUNITA) ON DELETE SET DEFAULT ON UPDATE CASCADE;

/******************************************************************************/
/*** Indices ***/
/******************************************************************************/

CREATE INDEX DHOSTESS_CDINDIRIZZO ON DHOSTESS (CDINDIRIZZO);
CREATE INDEX DHOSTESS_CDNASCITA ON DHOSTESS (CDNASCITA);
CREATE INDEX DSNOMINATIVO ON DHOSTESS (DSCOGNOME, DSNOME);
CREATE INDEX DTNASCITA ON DHOSTESS (DTNASCITA);
CREATE INDEX FLFREQUENTE ON DHOSTESS (FLFREQUENTE);
CREATE UNIQUE INDEX DPROMOZIONI_CAM_ANN_MES ON DPROMOZIONI (CDCAMPAGNA, CDANNO, CDMESE);
CREATE INDEX RCAMPAGNE_LOGISTICA_MOVIME_IDX1 ON RCAMPAGNE_LOGISTICA_MOVIMENTO (CDCAMPAGNA);
CREATE INDEX RCAMPAGNE_LOGISTICA_MOVIME_IDX2 ON RCAMPAGNE_LOGISTICA_MOVIMENTO (CDMAGAZZINO, CDARTICOLO);
CREATE INDEX RCAMPAGNE_LOGISTICA_MOVIME_IDX3 ON RCAMPAGNE_LOGISTICA_MOVIMENTO (CDCAMPAGNA, CDARTICOLO);
CREATE INDEX RJOB_CDAGENZIA ON RJOB (CDAGENZIA);
CREATE INDEX RJOB_CDCOORDINATRICE ON RJOB (CDCOORDINATRICE);
CREATE INDEX RJOB_CDPROMOZIONE ON RJOB (CDPROMOZIONE);
CREATE INDEX RJOB_CDPUNTOVENDITA ON RJOB (CDPUNTOVENDITA);
CREATE INDEX RJOB_HOSTESS_CDHOSTESS ON RJOB_HOSTESS (CDHOSTESS);
CREATE INDEX RJOB_HOSTESS_DTJOB ON RJOB_HOSTESS (DTJOB);
CREATE INDEX RJOB_HOSTESS_ENGAGED ON RJOB_HOSTESS (CDHOSTESS, DTJOB);
CREATE INDEX RJOB_HOSTESS_FLASSUNZIONE ON RJOB_HOSTESS (FLASSUNZIONE);
CREATE INDEX RJOB_LOGISTICA_ATT_IDX1 ON RJOB_LOGISTICA_ATTIVITA (CDCAMPAGNA);
CREATE INDEX RJOB_LOGISTICA_MOV_IDX1 ON RJOB_LOGISTICA_MOVIMENTO (CDCAMPAGNA);
CREATE INDEX RJOB_LOGISTICA_MOV_IDX2 ON RJOB_LOGISTICA_MOVIMENTO (CDCAMPAGNA, CDARTICOLO);
CREATE INDEX RJOB_LOGISTICA_MOV_IDX3 ON RJOB_LOGISTICA_MOVIMENTO (CDMAGAZZINO);
CREATE INDEX RJOB_LOGISTICA_MOV_IDX4 ON RJOB_LOGISTICA_MOVIMENTO (CDDESTINATARIO, TPDESTINATARIO);
CREATE INDEX RMAGAZZINI_MOVIMENTI_IDX1 ON RMAGAZZINI_MOVIMENTI (CDCAUSALE);
CREATE INDEX RMAGAZZINI_MOVIMENTI_IDX2 ON RMAGAZZINI_MOVIMENTI (CDMAGAZZINO, CDCLIENTE, CDARTICOLO);
CREATE INDEX TCOMUNI_DSCOMUNE ON TCOMUNI (DSCOMUNE);

/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/

SET TERM ^ ;

/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/

/* Trigger: DAGENZIE_BD0 */
CREATE TRIGGER DAGENZIE_BD0 FOR DAGENZIE
ACTIVE BEFORE DELETE POSITION 0
AS
begin
UPDATE RJOB_LOGISTICA_MOVIMENTO
SET CDDESTINATARIO = 0
WHERE CDDESTINATARIO = OLD.CDAGENZIA
AND TPDESTINATARIO = 3;

end
^

/* Trigger: DAZIENDE_BI0 */
CREATE TRIGGER DAZIENDE_BI0 FOR DAZIENDE
ACTIVE BEFORE INSERT POSITION 0
AS
Declare variable iMax integer;
BEGIN

if (NEW.CDAZIENDA is null) then
begin
SELECT MAX(CDAZIENDA)
FROM DAZIENDE
INTO :iMAX;
if (iMax is null) then
iMAX = 0;

NEW\.CDAZIENDA = iMAX \+ 1;

end

END
^

/* Trigger: DCAMPAGNE_AI0 */
CREATE TRIGGER DCAMPAGNE_AI0 FOR DCAMPAGNE
ACTIVE AFTER INSERT POSITION 0
AS
begin
/* Trigger text */
INSERT INTO RCAMPAGNE_LOGISTICA_TEMPLATE
(CDCAMPAGNA,
DSTEMPLATE,
CDUPDATE)
VALUES
(NEW.CDCAMPAGNA,
'Base',
0);

end
^

/* Trigger: DCAMPAGNE_AI2 */
CREATE TRIGGER DCAMPAGNE_AI2 FOR DCAMPAGNE
ACTIVE AFTER INSERT POSITION 1
AS
declare variable CDCONTRATTO smallint ;
declare variable DSSHORTCONTRATTO varchar(5);
declare variable DSCONTRATTO varchar(50);
declare variable TPCONTRATTO integer;
declare variable TPUM integer;
declare variable IMCLIENTE numeric(12,2);
declare variable IMHOSTESS numeric(12,2);
declare variable FLASSUNZIONE smallint;
declare variable FLFESTIVO smallint;
declare variable FLDEFAULT smallint;

begin
/* Trigger text */
for
SELECT CDCONTRATTO, DSSHORTCONTRATTO, DSCONTRATTO, TPCONTRATTO, TPUM,
IMCLIENTE, IMHOSTESS, FLASSUNZIONE, FLFESTIVO,
FLDEFAULT
FROM TTEMPLATE_CONTRATTI
into
:CDCONTRATTO, :DSSHORTCONTRATTO, :DSCONTRATTO, :TPCONTRATTO, :TPUM,
:IMCLIENTE, :IMHOSTESS, :FLASSUNZIONE, :FLFESTIVO,
:FLDEFAULT
do
begin

/\* Creo i contratti di default \*/
INSERT INTO RCAMPAGNE\_CONTRATTI
\(CDCAMPAGNA,
 CDCONTRATTO,
 DSSHORTCONTRATTO,
 DSCONTRATTO,
 TPCONTRATTO,
 TPUM,
 IMCLIENTE,
 IMHOSTESS,
 FLASSUNZIONE, 
 FLFESTIVO, 
 FLDEFAULT,
 CDUPDATE\)
 VALUES
 \(NEW\.CDCAMPAGNA,
  :CDCONTRATTO,
  :DSSHORTCONTRATTO,
  :DSCONTRATTO,
  :TPCONTRATTO, 
  :TPUM,
  :IMCLIENTE, 
  :IMHOSTESS,
  :FLASSUNZIONE,
  :FLFESTIVO,
  :FLDEFAULT,
  0\);

end

end
^

/* Trigger: DHOSTESS_BD0 */
CREATE TRIGGER DHOSTESS_BD0 FOR DHOSTESS
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN

UPDATE RJOB_LOGISTICA_MOVIMENTO
SET CDDESTINATARIO = 0
WHERE CDDESTINATARIO = OLD.CDHOSTESS
AND TPDESTINATARIO = 1;

END
^

/* Trigger: DOPERATORI_BI0 */
CREATE TRIGGER DOPERATORI_BI0 FOR DOPERATORI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDOPERATORE is null) then
begin
SELECT MAX(CDOPERATORE)
FROM DOPERATORI
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDOPERATORE = iMAX \+ 1;

end
end
^

/* Trigger: DPUNTI_VENDITA_BD0 */
CREATE TRIGGER DPUNTI_VENDITA_BD0 FOR DPUNTI_VENDITA
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN

UPDATE RJOB_LOGISTICA_MOVIMENTO
SET CDDESTINATARIO = 0
WHERE CDDESTINATARIO = OLD.CDPUNTOVENDITA
AND TPDESTINATARIO = 2;

END
^

/* Trigger: DUTENTI_BI0 */
CREATE TRIGGER DUTENTI_BI0 FOR DUTENTI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDUTENTE is null) then
begin
SELECT MAX(CDUTENTE)
FROM DUTENTI
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDUTENTE = iMAX + 1;
end
end
^

/* Trigger: FIB$FIELDS_INFO_BI */
CREATE TRIGGER FIB$FIELDS_INFO_BI FOR FIB$FIELDS_INFO
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.fib$version=gen_id(fib$field_info_version,1);
end
^

/* Trigger: FIB$FIELDS_INFO_BU */
CREATE TRIGGER FIB$FIELDS_INFO_BU FOR FIB$FIELDS_INFO
ACTIVE BEFORE UPDATE POSITION 0
as
begin
new.fib$version=gen_id(fib$field_info_version,1);
end
^

/* Trigger: RCAMPAGNE_CONTRATTI_AD0 */
CREATE TRIGGER RCAMPAGNE_CONTRATTI_AD0 FOR RCAMPAGNE_CONTRATTI
ACTIVE AFTER DELETE POSITION 0
AS
begin

/*
Imposto il contratto a null, non posso farlo
con l'integrit? referenziale poich? in RJOB_HOSTESS
non conosco la campagna
*/
UPDATE RJOB_HOSTESS
SET CDCONTRATTO = 0
WHERE CDCONTRATTO = OLD.CDCONTRATTO
AND CDJOB IN
(
SELECT (CDJOB)
FROM VIEW_JOB_CLIENTE
WHERE CDCAMPAGNA = OLD.CDCAMPAGNA
);

end
^

/* Trigger: RCAMPAGNE_CONTRATTI_AD1 */
CREATE TRIGGER RCAMPAGNE_CONTRATTI_AD1 FOR RCAMPAGNE_CONTRATTI
ACTIVE AFTER DELETE POSITION 1
AS
begin

/*
Imposto il contratto a null, non posso farlo
con l'integrit? referenziale poich? in RPROMOZIONI_SPEDIZIONI
non conosco la campagna
*/
UPDATE RPROMOZIONI_SPEDIZIONI
SET CDCONTRATTO = 0
WHERE CDCONTRATTO = OLD.CDCONTRATTO
AND CDPROMOZIONE IN
(
SELECT (CDPROMOZIONE)
FROM VIEW_JOB_CLIENTE
WHERE CDCAMPAGNA = OLD.CDCAMPAGNA
);

end
^

/* Trigger: RCAMPAGNE_CONTRATTI_BI0 */
CREATE TRIGGER RCAMPAGNE_CONTRATTI_BI0 FOR RCAMPAGNE_CONTRATTI
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE IMAX INTEGER;
BEGIN
if (new.cdcontratto is null) then
begin
SELECT MAX(CDCONTRATTO)
FROM RCAMPAGNE_CONTRATTI
WHERE CDCAMPAGNA = NEW.CDCAMPAGNA
INTO :IMAX;

if \(IMAX IS NULL\) then
  IMAX = 0;

NEW\.CDCONTRATTO = IMAX \+ 1;

end

END
^

/* Trigger: RCAMPAGNE_LOG_ATT_BI0 */
CREATE TRIGGER RCAMPAGNE_LOG_ATT_BI0 FOR RCAMPAGNE_LOGISTICA_ATTIVITA
ACTIVE BEFORE INSERT POSITION 0
AS
Declare variable iMax integer;
begin
if (New.cdLogistica is null) then
begin
SELECT MAX(cdLogistica)
FROM RCAMPAGNE_LOGISTICA_ATTIVITA
WHERE CDCAMPAGNA = NEW.CDCAMPAGNA
AND CDTEMPLATE = NEW.CDTEMPLATE
INTO :iMAX;

if \(iMax is null\) then
  iMax = 0;

New\.cdLogistica = iMax \+ 1;

end
end
^

/* Trigger: RCAMPAGNE_LOG_MOV_BI0 */
CREATE TRIGGER RCAMPAGNE_LOG_MOV_BI0 FOR RCAMPAGNE_LOGISTICA_MOVIMENTO
ACTIVE BEFORE INSERT POSITION 0
AS
Declare variable iMax integer;
begin
if (New.cdLogistica is Null) then
begin
SELECT MAX(cdLogistica)
FROM RCAMPAGNE_LOGISTICA_MOVIMENTO
WHERE CDCAMPAGNA = NEW.CDCAMPAGNA
AND CDTEMPLATE = NEW.CDTEMPLATE
INTO :iMAX;

if \(iMax is null\) then
  iMax = 0;
New\.cdLogistica = iMax \+ 1;

end
end
^

/* Trigger: RCAMPAGNE_LOG_TEMPLATE_BI0 */
CREATE TRIGGER RCAMPAGNE_LOG_TEMPLATE_BI0 FOR RCAMPAGNE_LOGISTICA_TEMPLATE
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDTEMPLATE is null) then
begin
SELECT MAX(CDTEMPLATE)
FROM RCAMPAGNE_LOGISTICA_TEMPLATE
WHERE CDCAMPAGNA = NEW.CDCAMPAGNA
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDTEMPLATE = iMAX \+ 1;

end
END
^

/* Trigger: RCLIENTI_ARTICOLI_BD0 */
CREATE TRIGGER RCLIENTI_ARTICOLI_BD0 FOR RCLIENTI_ARTICOLI
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN

DELETE FROM RCAMPAGNE_LOGISTICA_MOVIMENTO
WHERE CDARTICOLO = OLD.CDARTICOLO
AND CDCAMPAGNA IN
(
SELECT (A.CDCAMPAGNA)
FROM DCAMPAGNE A, RCAMPAGNE_LOGISTICA_MOVIMENTO B
WHERE A.CDCAMPAGNA = B.CDCAMPAGNA
AND A.CDCLIENTE = OLD.CDCLIENTE
);

DELETE FROM RJOB_LOGISTICA_MOVIMENTO
WHERE CDARTICOLO = OLD.CDARTICOLO
AND CDCAMPAGNA IN
(
SELECT (A.CDCAMPAGNA)
FROM DCAMPAGNE A, RCAMPAGNE_LOGISTICA_MOVIMENTO B
WHERE A.CDCAMPAGNA = B.CDCAMPAGNA
AND A.CDCLIENTE = OLD.CDCLIENTE
);

end
^

/* Trigger: RCLIENTI_ARTICOLI_BI0 */
CREATE TRIGGER RCLIENTI_ARTICOLI_BI0 FOR RCLIENTI_ARTICOLI
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE IMAX INTEGER;
begin
if (New.cdArticolo is Null) then
begin
SELECT MAX(CDARTICOLO)
FROM RCLIENTI_ARTICOLI
WHERE CDCLIENTE = NEW.CDCLIENTE
INTO :IMAX;

if \(IMAX IS NULL\) then
  IMAX = 0;

New\.cdArticolo = IMAX \+ 1;

end
end
^

/* Trigger: RCLIENTI_REPARTI_BI0 */
CREATE TRIGGER RCLIENTI_REPARTI_BI0 FOR RCLIENTI_REPARTI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
SELECT MAX(cdProg)
FROM RCLIENTI_REPARTI
WHERE cdCliente = New.cdCliente
INTO :iMAX;

if (iMax is null) then
iMax = 0;
New.cdProg = iMax + 1;
end
^

/* Trigger: RCOMMESSE_RIGHE_BI0 */
CREATE TRIGGER RCOMMESSE_RIGHE_BI0 FOR RCOMMESSE_RIGHE
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDRIGA is null) then
begin
SELECT MAX(CDRIGA)
FROM RCOMMESSE_RIGHE
WHERE CDCOMMESSA = NEW.CDCOMMESSA
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDRIGA = iMAX \+ 1;

end
end
^

/* Trigger: RCOMMESSE_VOCI_TT_BI0 */
CREATE TRIGGER RCOMMESSE_VOCI_TT_BI0 FOR RCOMMESSE_VOCI_TT
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDVOCE is null) then
begin
SELECT MAX(CDVOCE)
FROM RCOMMESSE_VOCI_TT
WHERE CDCOMMESSA = NEW.CDCOMMESSA
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDVOCE = iMAX \+ 1;

end
end
^

/* Trigger: RHOSTESS_PAGAMENTI_BI0 */
CREATE TRIGGER RHOSTESS_PAGAMENTI_BI0 FOR RHOSTESS_PAGAMENTI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin

SELECT MAX(CDPROG)
FROM RHOSTESS_PAGAMENTI
WHERE CDHOSTESS = NEW.CDHOSTESS
INTO :iMax;

if (iMax is null) then
iMax = 0;

NEW.CDPROG = iMax + 1;

end
^

/* Trigger: RJOB_HOSTESS_BI0 */
CREATE TRIGGER RJOB_HOSTESS_BI0 FOR RJOB_HOSTESS
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
SELECT MAX(cdProg)
FROM RJob_hostess
WHERE cdjob = New.cdjob
INTO :iMAX;

if (iMax is null) then
iMax = 0;
New.cdProg = iMax + 1;
end
^

/* Trigger: RJOB_LOG_ATTIVITA_BI1 */
CREATE TRIGGER RJOB_LOG_ATTIVITA_BI1 FOR RJOB_LOGISTICA_ATTIVITA
ACTIVE BEFORE INSERT POSITION 1
AS
Declare variable iMax integer;
begin
SELECT MAX(cdProg)
FROM rjob_logistica_attivita
WHERE cdjob = New.cdjob
INTO :iMAX;

if (iMax is null) then
iMax = 0;
New.cdProg = iMax + 1;

end
^

/* Trigger: RJOB_LOG_MOVIMENTO_BI1 */
CREATE TRIGGER RJOB_LOG_MOVIMENTO_BI1 FOR RJOB_LOGISTICA_MOVIMENTO
ACTIVE BEFORE INSERT POSITION 1
AS
Declare variable iMax integer;
begin
SELECT MAX(cdProg)
FROM rjob_logistica_movimento
WHERE cdjob = New.cdjob
INTO :iMAX;

if (iMax is null) then
iMax = 0;
New.cdProg = iMax + 1;

end
^

/* Trigger: RMAGAZZINI_MOVIMENTI_BI0 */
CREATE TRIGGER RMAGAZZINI_MOVIMENTI_BI0 FOR RMAGAZZINI_MOVIMENTI
ACTIVE BEFORE INSERT POSITION 0
AS
Declare variable iMax integer;
begin
SELECT MAX(CDPROG)
FROM RMAGAZZINI_MOVIMENTI
WHERE CDCLIENTE = NEW.CDCLIENTE
AND CDMAGAZZINO = NEW.CDMAGAZZINO
AND CDARTICOLO = NEW.CDARTICOLO
INTO :iMax;

if (iMax is null) then
iMax = 0;

New.CDPROG = iMax + 1;
end
^

/* Trigger: RPROMOZIONI_SPEDIZIONI_BI0 */
CREATE TRIGGER RPROMOZIONI_SPEDIZIONI_BI0 FOR RPROMOZIONI_SPEDIZIONI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
SELECT MAX(CDPROG)
FROM RPROMOZIONI_SPEDIZIONI
WHERE CDPROMOZIONE = NEW.CDPROMOZIONE
INTO :iMAX;

if (iMax is null) then
iMax = 0;
NEW.CDPROG = iMax + 1;
end
^

/* Trigger: RPUNTI_VENDITA_REPARTI_BI0 */
CREATE TRIGGER RPUNTI_VENDITA_REPARTI_BI0 FOR RPUNTI_VENDITA_REPARTI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
SELECT MAX(cdProg)
FROM RPUNTI_VENDITA_REPARTI
WHERE cdPuntoVendita = New.cdPuntoVendita
INTO :iMAX;

if (iMax is null) then
iMax = 0;
New.cdProg = iMax + 1;

end
^

/* Trigger: RSTAMPE_DETTAGLIO_BI0 */
CREATE TRIGGER RSTAMPE_DETTAGLIO_BI0 FOR RSTAMPE_DETTAGLIO
ACTIVE BEFORE INSERT POSITION 0
AS
Declare variable iMax integer;
begin
if (NEW.CDPROG is null) then
begin
SELECT MAX(CDPROG)
FROM RSTAMPE_DETTAGLIO
WHERE CDSTAMPA = NEW.CDSTAMPA
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDPROG = iMAX + 1;
end
end
^

/* Trigger: TATTIVITA_BI0 */
CREATE TRIGGER TATTIVITA_BI0 FOR TATTIVITA
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDATTIVITA is null) then
begin
SELECT MAX(CDATTIVITA)
FROM TATTIVITA
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDATTIVITA = iMAX + 1;
end
end
^

/* Trigger: TCOLORE_CAPELLI_BI0 */
CREATE TRIGGER TCOLORE_CAPELLI_BI0 FOR TCOLORE_CAPELLI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDCAPELLI is null) then
begin
SELECT MAX(CDCAPELLI)
FROM TCOLORE_CAPELLI
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDCAPELLI = iMAX \+ 1;

end
end
^

/* Trigger: TCOLORE_OCCHI_BI0 */
CREATE TRIGGER TCOLORE_OCCHI_BI0 FOR TCOLORE_OCCHI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDOCCHI is null) then
begin
SELECT MAX(CDOCCHI)
FROM TCOLORE_OCCHI
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDOCCHI = iMAX \+ 1;

end
end
^

/* Trigger: TCONSEGNA_METODO_BI0 */
CREATE TRIGGER TCONSEGNA_METODO_BI0 FOR TCONSEGNA_METODO
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDMETODO is null) then
begin
SELECT MAX(CDMETODO)
FROM TCONSEGNA_METODO
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDMETODO = iMAX \+ 1;

end
end
^

/* Trigger: TCONSEGNA_STATO_BI0 */
CREATE TRIGGER TCONSEGNA_STATO_BI0 FOR TCONSEGNA_STATO
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDSTATO is null) then
begin
SELECT MAX(CDSTATO)
FROM TCONSEGNA_STATO
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;
NEW\.CDSTATO = iMAX \+ 1;

end
end
^

/* Trigger: TCORRIERI_BI0 */
CREATE TRIGGER TCORRIERI_BI0 FOR TCORRIERI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDCORRIERE is null) then
begin
SELECT MAX(CDCORRIERE)
FROM TCORRIERI
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDCORRIERE = iMAX + 1;
end
end
^

/* Trigger: TDESTINATARIO_BI0 */
CREATE TRIGGER TDESTINATARIO_BI0 FOR TDESTINATARIO
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDDESTINATARIO is null) then
begin
SELECT MAX(CDDESTINATARIO)
FROM TDESTINATARIO
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDDESTINATARIO = iMAX \+ 1;

end
end
^

/* Trigger: TEXT_STAMPA_BI0 */
CREATE TRIGGER TEXT_STAMPA_BI0 FOR TEXT_STAMPA
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDEXTSTAMPA is null) then
begin
SELECT MAX(CDEXTSTAMPA)
FROM TEXT_STAMPA
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDEXTSTAMPA = iMAX \+ 1;

end
end
^

/* Trigger: TFESTIVITA_BI0 */
CREATE TRIGGER TFESTIVITA_BI0 FOR TFESTIVITA
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDFESTIVITA is null) then
begin
SELECT MAX(CDFESTIVITA)
FROM TFESTIVITA
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDFESTIVITA = iMAX + 1;
end
end
^

/* Trigger: TINSEGNA_BI0 */
CREATE TRIGGER TINSEGNA_BI0 FOR TINSEGNA
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDINSEGNA is null) then
begin
SELECT MAX(CDINSEGNA)
FROM TINSEGNA
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDINSEGNA = iMAX + 1;
end
end
^

/* Trigger: TJOB_INFO_BI0 */
CREATE TRIGGER TJOB_INFO_BI0 FOR TJOB_INFO
ACTIVE BEFORE INSERT POSITION 0
AS
Declare variable iMax integer;
BEGIN

if (NEW.CDINFO is null) then
begin
SELECT MAX(CDINFO)
FROM TJOB_INFO
INTO :iMAX;
if (iMax is null) then
iMAX = 0;

NEW\.CDINFO = iMAX \+ 1;

end

END
^

/* Trigger: TMAGAZZINO_BI0 */
CREATE TRIGGER TMAGAZZINO_BI0 FOR TMAGAZZINO
ACTIVE BEFORE INSERT POSITION 0
AS
Declare variable iMax integer;
begin
if (NEW.CDMAGAZZINO is null) then
begin
SELECT MAX(CDMAGAZZINO)
FROM TMAGAZZINO
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDMAGAZZINO = iMAX + 1;
end
end
^

/* Trigger: TREPARTO_BI0 */
CREATE TRIGGER TREPARTO_BI0 FOR TREPARTO
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDREPARTO is null) then
begin
SELECT MAX(CDREPARTO)
FROM TREPARTO
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDREPARTO = iMAX + 1;
end
end
^

/* Trigger: TSEDI_BI0 */
CREATE TRIGGER TSEDI_BI0 FOR TSEDI
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDSEDE is null) then
begin
SELECT MAX(CDSEDE)
FROM TSEDI
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDSEDE = iMAX + 1;
end
end
^

/* Trigger: TSTATO_CIVILE_BI0 */
CREATE TRIGGER TSTATO_CIVILE_BI0 FOR TSTATO_CIVILE
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDSTATOCIVILE is null) then
begin
SELECT MAX(CDSTATOCIVILE)
FROM TSTATO_CIVILE
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDSTATOCIVILE = iMAX + 1;
end
end
^

/* Trigger: TTEMPLATE_CONTRATTI_BI0 */
CREATE TRIGGER TTEMPLATE_CONTRATTI_BI0 FOR TTEMPLATE_CONTRATTI
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE IMAX INTEGER;
BEGIN
if (NEW.CDCONTRATTO is null) then
begin
SELECT MAX(CDCONTRATTO)
FROM TTEMPLATE_CONTRATTI
INTO :IMAX;

if \(IMAX IS NULL\) then
  IMAX = 0;

NEW\.CDCONTRATTO = IMAX \+ 1;

end

END
^

/* Trigger: TTIPO_COMMESSE_BI0 */
CREATE TRIGGER TTIPO_COMMESSE_BI0 FOR TTIPO_COMMESSE
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDTIPOCOMMESSA is null) then
begin
SELECT MAX(CDTIPOCOMMESSA)
FROM TTIPO_COMMESSE
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDTIPOCOMMESSA = iMAX \+ 1;

end
end
^

/* Trigger: TTIPO_CONTRATTO_BI0 */
CREATE TRIGGER TTIPO_CONTRATTO_BI0 FOR TTIPO_CONTRATTO
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDTIPOCONTRATTO is null) then
begin
SELECT MAX(CDTIPOCONTRATTO)
FROM TTIPO_CONTRATTO
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDTIPOCONTRATTO = iMAX \+ 1;

end
end
^

/* Trigger: TTIPO_PAGAMENTO_BI0 */
CREATE TRIGGER TTIPO_PAGAMENTO_BI0 FOR TTIPO_PAGAMENTO
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDTIPOPAGAMENTO is null) then
begin
SELECT MAX(CDTIPOPAGAMENTO)
FROM TTIPO_PAGAMENTO
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDTIPOPAGAMENTO = iMAX \+ 1;

end
end
^

/* Trigger: TTIPO_PUNTI_VENDITA_BI0 */
CREATE TRIGGER TTIPO_PUNTI_VENDITA_BI0 FOR TTIPO_PUNTI_VENDITA
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDTIPOPUNTOVENDITA is null) then
begin
SELECT MAX(CDTIPOPUNTOVENDITA)
FROM TTIPO_PUNTI_VENDITA
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDTIPOPUNTOVENDITA = iMAX + 1;
end
end
^

/* Trigger: TTIPO_RIGA_COMMESSA_BI0 */
CREATE TRIGGER TTIPO_RIGA_COMMESSA_BI0 FOR TTIPO_RIGA_COMMESSA
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDTIPORIGA is null) then
begin
SELECT MAX(CDTIPORIGA)
FROM TTIPO_RIGA_COMMESSA
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDTIPORIGA = iMAX \+ 1;

end
end
^

/* Trigger: TTIPO_STAMPA_BI0 */
CREATE TRIGGER TTIPO_STAMPA_BI0 FOR TTIPO_STAMPA
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDTIPOSTAMPA is null) then
begin
SELECT MAX(CDTIPOSTAMPA)
FROM TTIPO_STAMPA
INTO :iMAX;

if \(iMax is null\) then
  iMAX = 0;

NEW\.CDTIPOSTAMPA = iMAX \+ 1;

end
end
^

/* Trigger: TTITOLO_STUDIO_BI0 */
CREATE TRIGGER TTITOLO_STUDIO_BI0 FOR TTITOLO_STUDIO
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDTITOLOSTUDIO is null) then
begin
SELECT MAX(CDTITOLOSTUDIO)
FROM TTITOLO_STUDIO
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDTITOLOSTUDIO = iMAX + 1;
end
end
^

/* Trigger: TTRATTAMENTO_FISCALE_BI0 */
CREATE TRIGGER TTRATTAMENTO_FISCALE_BI0 FOR TTRATTAMENTO_FISCALE
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDTRATTAMENTO is null) then
begin
SELECT MAX(CDTRATTAMENTO)
FROM TTRATTAMENTO_FISCALE
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDTRATTAMENTO = iMAX + 1;
end
end
^

/* Trigger: TUNITA_MISURA_BI0 */
CREATE TRIGGER TUNITA_MISURA_BI0 FOR TUNITA_MISURA
ACTIVE BEFORE INSERT POSITION 0
as
Declare variable iMax integer;
begin
if (NEW.CDUNITA is null) then
begin
SELECT MAX(CDUNITA)
FROM TUNITA_MISURA
INTO :iMAX;
if (iMax is null) then
iMAX = 0;
NEW.CDUNITA = iMAX + 1;
end
end
^

SET TERM ; ^

/******************************************************************************/
/*** Stored Procedures ***/
/******************************************************************************/

SET TERM ^ ;

ALTER PROCEDURE SP_CREATE_LOGISTICA_JOB (
CDTEMPLATE INTEGER,
CDCAMPAGNA INTEGER,
CDJOB INTEGER,
CDPUNTOVENDITA INTEGER,
CDAGENZIA INTEGER,
CDHOSTESS INTEGER,
CDUPDATE INTEGER)
AS
DECLARE VARIABLE DSLOGISTICA VARCHAR(100);
DECLARE VARIABLE FLCONSEGNADIRETTA SMALLINT;
DECLARE VARIABLE FLMAGAZZINO SMALLINT;
DECLARE VARIABLE CDARTICOLO INTEGER;
DECLARE VARIABLE CDMAGAZZINO INTEGER;
DECLARE VARIABLE FLCHKSPEDIZIONE SMALLINT;
DECLARE VARIABLE FLCHKCONSEGNA SMALLINT;
DECLARE VARIABLE FLFORNITURA SMALLINT;
DECLARE VARIABLE FLRITIRI SMALLINT;
DECLARE VARIABLE QTMOVIMENTO INTEGER;
DECLARE VARIABLE QTFISSA INTEGER;
DECLARE VARIABLE QTGG INTEGER;
DECLARE VARIABLE FLCHKATTIVITA SMALLINT;
DECLARE VARIABLE NMGG INTEGER;
DECLARE VARIABLE CDDESTINATARIO SMALLINT;
DECLARE VARIABLE BLOB_MECCANICA BLOB SUB_TYPE 1 SEGMENT SIZE 80;
DECLARE VARIABLE BLOB_MECCANICA_TMP BLOB SUB_TYPE 1 SEGMENT SIZE 80;
DECLARE VARIABLE CDJOBDESTINATARIO INTEGER;
BEGIN

/* Calcolo del numero giornate*/
SELECT COUNT(*)
FROM RJOB_HOSTESS
WHERE CDJOB = :CDJOB
INTO :NMGG;

/* Logistica Movimento */
FOR
SELECT A.FLCONSEGNADIRETTA, A.FLMAGAZZINO,
A.CDARTICOLO, A.CDMAGAZZINO, A.FLCHKSPEDIZIONE,
A.FLCHKCONSEGNA, A.FLFORNITURA, A.QTFISSA, A.QTGG,
A.FLRITIRI, A.CDDESTINATARIO
FROM RCAMPAGNE_LOGISTICA_MOVIMENTO A
WHERE A.CDCAMPAGNA = :CDCAMPAGNA
AND A.CDTEMPLATE = :CDTEMPLATE

  INTO :FLCONSEGNADIRETTA, :FLMAGAZZINO,
        :CDARTICOLO, :CDMAGAZZINO, :FLCHKSPEDIZIONE,
        :FLCHKCONSEGNA, :FLFORNITURA, :QTFISSA, :QTGG,
        :FLRITIRI, :CDDESTINATARIO

DO
BEGIN
/* Generazione dei movimenti */
QTMOVIMENTO = :QTFISSA + (QTGG * NMGG);

 /\* Se il destinatario non esiste \*/
 IF \(CDDESTINATARIO = 0\) THEN
   CDJOBDESTINATARIO = 0;

 /\* Se il destinatario ? una hostess metto il codice passato \*/
 IF \(CDDESTINATARIO = 1\) THEN
   CDJOBDESTINATARIO = CDHOSTESS;

 /\* Se il destinatario ? un Punto Vendita metto il codice passato \*/
 IF \(CDDESTINATARIO = 2\) THEN
   CDJOBDESTINATARIO = CDPUNTOVENDITA;

 /\* Se il destinatario ? una Agenzia metto il codice passato \*/
 IF \(CDDESTINATARIO = 3\) THEN
   CDJOBDESTINATARIO = CDAGENZIA;

 INSERT INTO RJOB\_LOGISTICA\_MOVIMENTO
 \(
 CDJOB, CDCAMPAGNA, FLCONSEGNADIRETTA, FLMAGAZZINO,
 CDARTICOLO, CDMAGAZZINO, FLCHKSPEDIZIONE,
 FLCHKCONSEGNA, QTMOVIMENTO, FLFORNITURA, TPDESTINATARIO, CDDESTINATARIO,
 FLRITIRI, DTUPDATE, CDUPDATE
 \)
 VALUES
 \(
 :CDJOB, :CDCAMPAGNA, :FLCONSEGNADIRETTA, :FLMAGAZZINO,
 :CDARTICOLO, :CDMAGAZZINO, :FLCHKSPEDIZIONE,
 :FLCHKCONSEGNA, :QTMOVIMENTO, :FLFORNITURA, :CDDESTINATARIO, :CDJOBDESTINATARIO,
 :FLRITIRI, current\_timestamp, :CDUPDATE
 \);

END

/* Logistica Attivita */

FOR SELECT DSLOGISTICA, FLCHKATTIVITA
FROM RCAMPAGNE_LOGISTICA_ATTIVITA
WHERE CDCAMPAGNA = :CDCAMPAGNA
AND CDTEMPLATE = :CDTEMPLATE
INTO :DSLOGISTICA, :FLCHKATTIVITA

DO
BEGIN
/* Generazione dei movimenti */
INSERT INTO RJOB_LOGISTICA_ATTIVITA
(
CDJOB, CDCAMPAGNA, DSLOGISTICA, FLCHKATTIVITA,
DTUPDATE, CDUPDATE
)
VALUES
(
:CDJOB, :CDCAMPAGNA, :DSLOGISTICA, :FLCHKATTIVITA,
current_timestamp, :CDUPDATE
);

END

/*
* Generazione della meccanica
* Se esiste una meccanica in job che ? nulla la elimino
* poi aggiungo, se esiste quella di template
*/

SELECT BLOB_MECCANICA
FROM RJOB_LOGISTICA_MECCANICA
WHERE CDJOB = :CDJOB
INTO :BLOB_MECCANICA_TMP;

IF ((BLOB_MECCANICA_TMP IS NULL) OR (BLOB_MECCANICA_TMP = '')) THEN
BEGIN
DELETE FROM RJOB_LOGISTICA_MECCANICA
WHERE CDJOB = :CDJOB;

/\* Cerco se esiste un template \*/
SELECT BLOB\_MECCANICA
FROM RCAMPAGNE\_LOGISTICA\_TEMPLATE
WHERE CDTEMPLATE = :CDTEMPLATE
 AND  CDCAMPAGNA = :CDCAMPAGNA
INTO
  :BLOB\_MECCANICA;

/\* Se esiste lo inserisco \*/
IF \(NOT \(BLOB\_MECCANICA IS NULL\)\) THEN
BEGIN

  INSERT INTO RJOB\_LOGISTICA\_MECCANICA
  \(
   CDJOB, BLOB\_MECCANICA,
   DTUPDATE, CDUPDATE
  \)
  VALUES
  \(
   :CDJOB, :BLOB\_MECCANICA,
   current\_timestamp, :CDUPDATE
  \);

END

END

SUSPEND;

END
^

ALTER PROCEDURE SP_CREATE_SPEDIZIONI (
CDJOB INTEGER,
CDUPDATE INTEGER)
RETURNS (
RETCODE INTEGER)
AS
DECLARE VARIABLE NMJOB INTEGER;
DECLARE VARIABLE CDDESTINATARIO INTEGER;
DECLARE VARIABLE CDCAMPAGNA INTEGER;
DECLARE VARIABLE CDPUNTOVENDITA INTEGER;
DECLARE VARIABLE TPDESTINATARIO SMALLINT;
DECLARE VARIABLE DSDESTINATARIO VARCHAR(150);
DECLARE VARIABLE DSINDIRIZZO VARCHAR(100);
DECLARE VARIABLE CDCAP CHAR(5);
DECLARE VARIABLE DSCOMUNE VARCHAR(150);
DECLARE VARIABLE CDPROVINCIA CHAR(2);
DECLARE VARIABLE CDSPEDIZIONE INTEGER;
DECLARE VARIABLE STSPEDIZIONE SMALLINT;
DECLARE VARIABLE STMAGAZZINO SMALLINT;
DECLARE VARIABLE STCONSEGNA SMALLINT;
DECLARE VARIABLE STRITIRO SMALLINT;
DECLARE VARIABLE FLCONSEGNADIRETTA SMALLINT;
DECLARE VARIABLE FLCHKSPEDIZIONE SMALLINT;
DECLARE VARIABLE FLCHKCONSEGNA SMALLINT;
DECLARE VARIABLE FLRITIRI SMALLINT;
DECLARE VARIABLE CDJOB_1 INTEGER;
DECLARE VARIABLE CDPROG INTEGER;
DECLARE VARIABLE CDMAGAZZINO INTEGER;
DECLARE VARIABLE DSMAGAZZINO VARCHAR(50);
DECLARE VARIABLE DTINT DATE;
DECLARE VARIABLE DTEXT DATE;
DECLARE VARIABLE FLESTERNO SMALLINT;
DECLARE VARIABLE DTTASSATIVA DATE;
BEGIN
/*
Generazione di una spedizione,
inserimento nella tabella DSPEDIZIONI
e update della tabella RJOB_LOGISTICA_MOVIMENTO
vengono aggiornati anche i flag relativi

  la procedura ? replicata in due:
  con codice job, senza codice job

  La Stored restituisce un codice:

  0 Tutto Ok
  1 Nessuna spedizione da generare
  2 Alcuni righe non sono state spedite

  Senza codice job, la rottura ?
    per campagna, destinatario
  Con codice job
    destinatario

*/

/*
blank FLDESTINATARI ? 0 se ho trovato tutti i destinatari 1 se
ALMENO uno ? <non assegnato>
*/

RETCODE = 0;

/* Controllo che la spedizione NON esista */
IF (NOT CDJOB = 0) THEN
BEGIN
SELECT COUNT(CDJOB)
FROM RJOB_LOGISTICA_MOVIMENTO
WHERE CDJOB = :CDJOB
AND CDSPEDIZIONE = 0
INTO :NMJOB;
END
ELSE BEGIN
SELECT COUNT(CDJOB)
FROM RJOB_LOGISTICA_MOVIMENTO
WHERE CDSPEDIZIONE = 0
INTO :NMJOB;
END

/* Se non ci sono spedizioni genero eccezione*/
IF (NMJOB = 0) THEN
BEGIN
RETCODE = 1;
/* EXCEPTION EXC_ERR_CREATE_SPEDIZIONI; */
END
ELSE BEGIN

  /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
                               1  J O B
  \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
IF \(NOT CDJOB = 0\) THEN
BEGIN

  /\* 
    Creazione spedizione per il job selezionato
    Questa select e update LOGISTICA MOVIMENTO sono diversa per TUTTI I JOB,
    il resto ? uguale 
  \*/
  FOR

    SELECT A\.CDDESTINATARIO, A\.TPDESTINATARIO, B\.DSDESTINATARIO,
           B\.DSINDIRIZZO, B\.CDCAP, C\.DSCOMUNE, C\.CDPROVINCIA, A\.CDMAGAZZINO,
           D\.DSMAGAZZINO, D\.FLESTERNO
    FROM RJOB\_LOGISTICA\_MOVIMENTO A, VIEW\_DESTINATARI B, TCOMUNI C, TMAGAZZINO D
    WHERE A\.CDDESTINATARIO = B\.CDDESTINATARIO
     AND  A\.TPDESTINATARIO = B\.TPDESTINATARIO
     AND  A\.CDMAGAZZINO    = D\.CDMAGAZZINO
     AND  B\.CDLOCALITA     = C\.CDCOMUNE
     AND  A\.CDJOB          = :CDJOB
     AND  A\.CDSPEDIZIONE   = 0
    GROUP BY A\.CDDESTINATARIO, A\.TPDESTINATARIO, B\.DSDESTINATARIO,
      B\.DSINDIRIZZO, B\.CDCAP, C\.DSCOMUNE, C\.CDPROVINCIA, A\.CDMAGAZZINO,
      D\.DSMAGAZZINO, D\.FLESTERNO

    INTO
      :CDDESTINATARIO, :TPDESTINATARIO, :DSDESTINATARIO,
      :DSINDIRIZZO, :CDCAP, :DSCOMUNE, :CDPROVINCIA, :CDMAGAZZINO,
      :DSMAGAZZINO, :FLESTERNO

  DO
  BEGIN

    /\* Se incontro un destinatario a zero lo segnalo all'uscita e lo salto \*/
    IF \(CDDESTINATARIO = 0\) THEN
    BEGIN
      RETCODE = 2;
    END
    ELSE BEGIN

      /\* Forzo i campi a blank nel caso in cui non siano stati immessi \*/
      IF \(DSINDIRIZZO IS NULL\) THEN
        DSINDIRIZZO = '<non specificato\>';

      IF \(CDCAP IS NULL\) THEN
        CDCAP = 00000;

      /\*
        Se ? un destinatario valido
      \*/


      /\*
        Calcolo data consegna tassativa
        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
        Prendo l'ordinale della settimana dalla data minima del job \[1 = LUN \.\.\. 7 = DOM\]
        vado a vedere quanti giorni in meno devo togliere alla DTJOB sia per
        il magazzino esterno che quello interno la nuova data calcolata ? la
        data consegna tassativa da inserire poi in DSPEDIZIONI, a seconda che sia
        un magazzino esterno o uno interno, lo vedo dal flag FLESTERNO della
        tabella TMAGAZZINO

      \*/

      SELECT \(A\.DTJOB \- NMGGINT\), \(A\.DTJOB \- NMGGEXT\)
      FROM RJOB\_HOSTESS A, TCONSEGNA\_TASSATIVA B
      WHERE B\.CDGG = EXTRACT \(WEEKDAY FROM \(A\.DTJOB\)\)
      AND A\.DTJOB = \(
        SELECT MIN\(DTJOB\)
        FROM RJOB\_HOSTESS
        WHERE CDJOB = :CDJOB
                     \)
      AND CDJOB = :CDJOB
      GROUP BY DTJOB, NMGGINT, NMGGEXT

      INTO :DTINT, :DTEXT;

      IF \(FLESTERNO = 1\) THEN
      BEGIN
        DTTASSATIVA = DTEXT;
      END
      ELSE BEGIN
        DTTASSATIVA = DTINT;
      END

      /\* Generazione codice spedizione \*/
      CDSPEDIZIONE = GEN\_ID\(CDSPEDIZIONE,1\);

      /\* Inserimento nella tabella spedizioni\*/
      INSERT INTO DSPEDIZIONI
      \(
       CDSPEDIZIONE,
       DSDESTINATARIO,
       DSINDIRIZZO,
       DSLOCALITA,
       CDCAP,
       CDPROVINCIA,
       DTSPEDIZIONE,
       CDMAGAZZINO,
       DSMAGAZZINO,
       DTTASSATIVA,
       CDUPDATE,
       DTUPDATE
      \)
      VALUES
      \(
       :CDSPEDIZIONE,
       :DSDESTINATARIO,
       :DSINDIRIZZO,
       :DSCOMUNE,
       :CDCAP,
       :CDPROVINCIA,
       'NOW',
       :CDMAGAZZINO,
       :DSMAGAZZINO,
       :DTTASSATIVA,
       :CDUPDATE,
       'NOW'
      \);

      /\* Update dei record relativi \*/
      UPDATE RJOB\_LOGISTICA\_MOVIMENTO
       SET CDSPEDIZIONE   = :CDSPEDIZIONE
      WHERE CDJOB         = :CDJOB
       AND CDDESTINATARIO = :CDDESTINATARIO
       AND TPDESTINATARIO = :TPDESTINATARIO;

      /\*
        Ciclo di Update dei flag relativi alla spedizione per il codice spedizione
        non posso prendere il primo numero spedizione e fare poi l'update in fondo
        perch? sono in ambiente client/server
      \*/
      FOR
        SELECT A\.CDJOB, A\.CDPROG, A\.STSPEDIZIONE, A\.STMAGAZZINO, A\.STCONSEGNA, A\.STRITIRO,
               A\.FLCONSEGNADIRETTA, A\.FLCHKSPEDIZIONE, A\.FLCHKCONSEGNA,
               A\.FLRITIRI
        FROM RJOB\_LOGISTICA\_MOVIMENTO A
        WHERE A\.CDSPEDIZIONE = :CDSPEDIZIONE

        INTO
               :CDJOB\_1, :CDPROG, :STSPEDIZIONE, :STMAGAZZINO, :STCONSEGNA, :STRITIRO,
               :FLCONSEGNADIRETTA, :FLCHKSPEDIZIONE, :FLCHKCONSEGNA,
               :FLRITIRI
      DO
      BEGIN

        /\* Impostazione FLAG \*/

        IF \(FLCONSEGNADIRETTA = 1\) THEN
        BEGIN
          /\* Se CD = 1 S = Verde \*/
          UPDATE RJOB\_LOGISTICA\_MOVIMENTO
           SET STSPEDIZIONE = 3
          WHERE CDJOB  = :CDJOB\_1
           AND  CDPROG = :CDPROG;
        END
        ELSE BEGIN

          /\* Se CD = 0 \*/

          IF \(FLCHKSPEDIZIONE = 0\) THEN
          BEGIN
            /\* Se SC = 0 S = Verde \*/
            UPDATE RJOB\_LOGISTICA\_MOVIMENTO
             SET STSPEDIZIONE = 3
            WHERE CDJOB  = :CDJOB\_1
             AND  CDPROG = :CDPROG;
          END
          ELSE BEGIN
            /\* Se SC = 1 S = Rosso \*/
            UPDATE RJOB\_LOGISTICA\_MOVIMENTO
             SET STSPEDIZIONE = 1
            WHERE CDJOB  = :CDJOB\_1
             AND  CDPROG = :CDPROG;

          END

        END


        /\* Se CC = 0 C = Verde \*/
        IF \(FLCHKCONSEGNA = 0\) THEN
        BEGIN
          UPDATE RJOB\_LOGISTICA\_MOVIMENTO
           SET STCONSEGNA = 3
          WHERE CDJOB  = :CDJOB\_1
           AND  CDPROG = :CDPROG;
        END


        /\* Se RC = 0 R = Verde \*/
        IF \(FLRITIRI = 0\) THEN
        BEGIN
          UPDATE RJOB\_LOGISTICA\_MOVIMENTO
           SET STRITIRO = 3
          WHERE CDJOB  = :CDJOB\_1
           AND  CDPROG = :CDPROG;
        END

      END

    END /\* Destinatario valido \*/

  END

END
ELSE BEGIN



  /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
                        T U T T I  I  J O B
  \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/

  /\*
     Creazione spedizione per tutti i job senza spedizione, rottura per
     campagna, puntovendita, destinatario
  \*/
  FOR

    SELECT A\.CDCAMPAGNA, E\.CDPUNTOVENDITA, A\.CDDESTINATARIO, A\.TPDESTINATARIO, B\.DSDESTINATARIO,
           B\.DSINDIRIZZO, B\.CDCAP, C\.DSCOMUNE, C\.CDPROVINCIA, A\.CDMAGAZZINO,
           D\.DSMAGAZZINO, D\.FLESTERNO
    FROM RJOB\_LOGISTICA\_MOVIMENTO A, VIEW\_DESTINATARI B,
         TCOMUNI C, TMAGAZZINO D, RJOB E
    WHERE A\.CDDESTINATARIO = B\.CDDESTINATARIO
     AND  A\.TPDESTINATARIO = B\.TPDESTINATARIO
     AND  A\.CDMAGAZZINO    = D\.CDMAGAZZINO
     AND  B\.CDLOCALITA     = C\.CDCOMUNE
     AND  A\.CDSPEDIZIONE   = 0
     AND  A\.CDJOB          = E\.CDJOB
    GROUP BY A\.CDCAMPAGNA, E\.CDPUNTOVENDITA, A\.CDDESTINATARIO, A\.TPDESTINATARIO, B\.DSDESTINATARIO,
      B\.DSINDIRIZZO, B\.CDCAP, C\.DSCOMUNE, C\.CDPROVINCIA, A\.CDMAGAZZINO,
      D\.DSMAGAZZINO, D\.FLESTERNO

    INTO
      :CDCAMPAGNA, :CDPUNTOVENDITA, :CDDESTINATARIO, :TPDESTINATARIO, :DSDESTINATARIO,
      :DSINDIRIZZO, :CDCAP, :DSCOMUNE, :CDPROVINCIA, :CDMAGAZZINO,
      :DSMAGAZZINO, :FLESTERNO

  DO
  BEGIN

    /\* Se incontro un destinatario a zero lo segnalo all'uscita e lo salto \*/
    IF \(CDDESTINATARIO = 0\) THEN
    BEGIN
      RETCODE = 2;
    END
    ELSE BEGIN


      /\* Forzo i campi a blank nel caso in cui non siano stati immessi \*/
      IF \(DSINDIRIZZO IS NULL\) THEN
        DSINDIRIZZO = '<non specificato\>';

      IF \(CDCAP IS NULL\) THEN
        CDCAP = 00000;



      /\*
        Se ? un destinatario valido
      \*/

      /\*
        Calcolo data consegna tassativa
        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
        Prendo l'ordinale della settimana dalla data minima del job \[1 = LUN \.\.\. 7 = DOM\]
        vado a vedere quanti giorni in meno devo togliere alla DTJOB sia per
        il magazzino esterno che quello interno la nuova data calcolata ? la
        data consegna tassativa da inserire poi in DSPEDIZIONI, a seconda che sia
        un magazzino esterno o uno interno, lo vedo dal flag FLESTERNO della
        tabella TMAGAZZINO

      \*/

      SELECT \(A\.DTJOB \- NMGGINT\), \(A\.DTJOB \- NMGGEXT\)
      FROM RJOB\_HOSTESS A, TCONSEGNA\_TASSATIVA B
      WHERE B\.CDGG = EXTRACT \(WEEKDAY FROM \(A\.DTJOB\)\)
      AND A\.DTJOB = \(
        SELECT MIN\(DTJOB\)
        FROM RJOB\_HOSTESS
        WHERE CDJOB = :CDJOB
                     \)
      AND CDJOB = :CDJOB
      GROUP BY DTJOB, NMGGINT, NMGGEXT
      INTO :DTINT, :DTEXT;

      IF \(FLESTERNO = 1\) THEN
      BEGIN
        DTTASSATIVA = DTEXT;
      END
      ELSE BEGIN
        DTTASSATIVA = DTINT;
      END


      /\* Generazione codice spedizione \*/
      CDSPEDIZIONE = GEN\_ID\(CDSPEDIZIONE,1\);

      /\* Inserimento nella tabella spedizioni\*/
      INSERT INTO DSPEDIZIONI
      \(
       CDSPEDIZIONE,
       DSDESTINATARIO,
       DSINDIRIZZO,
       DSLOCALITA,
       CDCAP,
       CDPROVINCIA,
       DTSPEDIZIONE,
       CDMAGAZZINO,
       DSMAGAZZINO,
       DTTASSATIVA,
       CDUPDATE,
       DTUPDATE
      \)
      VALUES
      \(
       :CDSPEDIZIONE,
       :DSDESTINATARIO,
       :DSINDIRIZZO,
       :DSCOMUNE,
       :CDCAP,
       :CDPROVINCIA,
       'NOW',
       :CDMAGAZZINO,
       :DSMAGAZZINO,
       :DTTASSATIVA,
       :CDUPDATE,
       'NOW'
      \);

      /\* Update dei record relativi \*/
      UPDATE RJOB\_LOGISTICA\_MOVIMENTO
       SET CDSPEDIZIONE    = :CDSPEDIZIONE
      WHERE CDDESTINATARIO = :CDDESTINATARIO
       AND TPDESTINATARIO  = :TPDESTINATARIO;


      /\*
        Ciclo di Update dei flag relativi alla spedizione per il codice spedizione
        non posso prendere il primo numero spedizione e fare poi l'update in fondo
        perch? sono in ambiente client/server
      \*/

      FOR
        SELECT A\.CDJOB, A\.CDPROG, A\.STSPEDIZIONE, A\.STMAGAZZINO, A\.STCONSEGNA, A\.STRITIRO,
               A\.FLCONSEGNADIRETTA, A\.FLCHKSPEDIZIONE, A\.FLCHKCONSEGNA,
               A\.FLRITIRI
        FROM RJOB\_LOGISTICA\_MOVIMENTO A
        WHERE A\.CDSPEDIZIONE = :CDSPEDIZIONE

        INTO
               :CDJOB\_1, :CDPROG, :STSPEDIZIONE, :STMAGAZZINO, :STCONSEGNA, :STRITIRO,
               :FLCONSEGNADIRETTA, :FLCHKSPEDIZIONE, :FLCHKCONSEGNA,
               :FLRITIRI
      DO
      BEGIN

        /\* Impostazione FLAG \*/

        IF \(FLCONSEGNADIRETTA = 1\) THEN
        BEGIN
          /\* Se CD = 1 S = Verde \*/
          UPDATE RJOB\_LOGISTICA\_MOVIMENTO
           SET STSPEDIZIONE = 3
          WHERE CDJOB  = :CDJOB\_1
           AND  CDPROG = :CDPROG;
        END
        ELSE BEGIN

          /\* Se CD = 0 \*/

          IF \(FLCHKSPEDIZIONE = 0\) THEN
          BEGIN
            /\* Se SC = 0 S = Verde \*/
            UPDATE RJOB\_LOGISTICA\_MOVIMENTO
             SET STSPEDIZIONE = 3
            WHERE CDJOB  = :CDJOB\_1
             AND  CDPROG = :CDPROG;
          END
          ELSE BEGIN
            /\* Se SC = 1 S = Rosso \*/
            UPDATE RJOB\_LOGISTICA\_MOVIMENTO
             SET STSPEDIZIONE = 1
            WHERE CDJOB  = :CDJOB\_1
             AND  CDPROG = :CDPROG;

          END

        END


        /\* Se CC = 0 C = Verde \*/
        IF \(FLCHKCONSEGNA = 0\) THEN
        BEGIN
          UPDATE RJOB\_LOGISTICA\_MOVIMENTO
           SET STCONSEGNA = 3
          WHERE CDJOB  = :CDJOB\_1
           AND  CDPROG = :CDPROG;
        END


        /\* Se RC = 0 R = Verde \*/
        IF \(FLRITIRI = 0\) THEN
        BEGIN
          UPDATE RJOB\_LOGISTICA\_MOVIMENTO
           SET STRITIRO = 3
          WHERE CDJOB  = :CDJOB\_1
           AND  CDPROG = :CDPROG;
        END

      END
    
    END /\* Destinatario valido \*/

  END
END

END

SUSPEND;

END
^

ALTER PROCEDURE SP_FATTURAZIONE_CLIENTE (
ACDAZIENDA INTEGER,
ACDSEDE INTEGER,
ADTINIZIO DATE,
ADTFINE DATE,
ATPDATA SMALLINT,
AFLCHIUSE SMALLINT,
AFLNOTPAY SMALLINT)
RETURNS (
CDJOB INTEGER,
DS DATE,
DE DATE,
AN NUMERIC(7,3),
AF NUMERIC(7,3),
TA NUMERIC(10,3),
DN NUMERIC(7,3),
DF NUMERIC(7,3),
TD NUMERIC(10,3),
TN NUMERIC(12,3),
TF NUMERIC(12,3),
TT NUMERIC(12,3),
DSAZIENDA VARCHAR(100),
DSINDIRIZZO VARCHAR(200),
DSLOCALITA VARCHAR(200),
CDIVA VARCHAR(20),
DSSEDE VARCHAR(100),
DHSEDE VARCHAR(5))
AS
DECLARE VARIABLE ICDJOB INTEGER;
DECLARE VARIABLE IFLFESTIVO SMALLINT;
DECLARE VARIABLE IFLASSUZIONE SMALLINT;
DECLARE VARIABLE INMGIORNATE NUMERIC(5,3);
DECLARE VARIABLE IDS DATE;
DECLARE VARIABLE IDE DATE;
DECLARE VARIABLE IFG INTEGER;
DECLARE VARIABLE IDSAZIENDA VARCHAR(100);
DECLARE VARIABLE IDSINDIRIZZO VARCHAR(200);
DECLARE VARIABLE IDSLOCALITA VARCHAR(200);
DECLARE VARIABLE ICDIVA VARCHAR(20);
DECLARE VARIABLE IDSSEDE VARCHAR(100);
DECLARE VARIABLE IDHSEDE VARCHAR(5);
BEGIN
/* Select per le date lavorate per job e hostess */
CDJOB = 0;
iFG = 0;

if \(:ACDAZIENDA IS NULL\) then
begin
  ACDAZIENDA = 0;
end

if \(:ACDSEDE IS NULL\) then
begin
  ACDSEDE = 0;
end

if \(:ATPDATA IS NULL\) then
begin
  ATPDATA = 0;
end

if \(:ADTINIZIO IS NULL\) then
begin
  ADTINIZIO = 'NOW';
end

if \(:ADTFINE IS NULL\) then
begin
  ADTFINE = 'NOW';
end

if \(:AFLCHIUSE IS NULL\) then
begin
  AFLCHIUSE = 0;
end

if \(:AFLNOTPAY IS NULL\) then
begin
  AFLNOTPAY = 0;
end

FOR
  SELECT A\.CDJOB, A\.FLFESTIVO, A\.FLASSUNZIONE, SUM\(A\.NMGIORNATE\), MIN\(A\.DTJOB\), MAX\(A\.DTJOB\),
         C\.DSAZIENDA, C\.DSINDIRIZZO, C\.DSLOCALITA, C\.CDIVA, D\.DSSEDE, D\.DHSEDE
  FROM RJOB\_HOSTESS A, RJOB B, DAZIENDE C, TSEDI D
  WHERE A\.CDJOB      = B\.CDJOB
   AND  A\.CDAZIENDA  = C\.CDAZIENDA
   AND  B\.CDSEDE     = D\.CDSEDE

   AND  case :ACDAZIENDA
        when 0 then :ACDAZIENDA
        else A\.CDAZIENDA
        end
        = :ACDAZIENDA

   AND  case :ACDSEDE
        when 0 then :ACDSEDE
        else B\.CDSEDE
        end
        = :ACDSEDE

   AND  case :ATPDATA
        when 1 THEN A\.DTJOB
        when 2 THEN A\.DTPAGAMENTO
        else :ADTINIZIO
        end
        \>= :ADTINIZIO

   AND  case :ATPDATA
        when 1 THEN A\.DTJOB
        when 2 THEN A\.DTPAGAMENTO
        else :ADTFINE
        end
        <= :ADTFINE

   AND  case :AFLCHIUSE
        when 1 THEN A\.STREPORT
        else 3
        end
        = 3

  GROUP BY A\.CDJOB, A\.FLFESTIVO, A\.FLASSUNZIONE, C\.DSAZIENDA, C\.DSINDIRIZZO,
           C\.DSLOCALITA, C\.CDIVA, D\.DSSEDE, D\.DHSEDE
  ORDER BY A\.CDJOB
  INTO
   :iCDJOB,
   :iFLFESTIVO,
   :iFLASSUZIONE,
   :iNMGIORNATE,
   :iDS,
   :iDE,
   :iDSAZIENDA,
   :iDSINDIRIZZO,
   :iDSLOCALITA,
   :iCDIVA,
   :iDSSEDE,
   :iDHSEDE

DO
BEGIN
  /\* Dettaglio date \*/
  IF \(iCDJOB <\> :CDJOB\) THEN
  BEGIN
     IF \(iFG = 0\) THEN
      iFG = 1;
    ELSE
      SUSPEND;
    CDJOB  = iCDJOB;
    DS = iDS;
    DE = iDE;
    AN = 0;
    AF = 0;
    TA = 0;
    DN = 0;
    DF = 0;
    TD = 0;
    TN = 0;
    TF = 0;
    TT = 0;
    DSAZIENDA = iDSAZIENDA;
    DSINDIRIZZO = iDSINDIRIZZO;
    DSLOCALITA = iDSLOCALITA;
    CDIVA = iCDIVA;
    DSSEDE = iDSSEDE;
    DHSEDE = iDHSEDE;

  END
  IF \(\(iFLASSUZIONE = 0\) AND\(iFLFESTIVO = 0\)\) THEN
  BEGIN
    DN = :iNMGIORNATE;
    TD = TD \+ DN;
    TN = TN \+ DN;
    TT = TT \+ DN;
  END
  IF \(\(iFLASSUZIONE = 0\) AND\(iFLFESTIVO = 1\)\) THEN
  BEGIN
    DF = :iNMGIORNATE;
    TD = TD \+ DF;
    TF = TF \+ DF;
    TT = TT \+ DF;
  END
  IF \(\(iFLASSUZIONE = 1\) AND\(iFLFESTIVO = 0\)\) THEN
  BEGIN
    AN = :iNMGIORNATE;
    TA = TA \+ AN;
    TN = TN \+ AN;
    TT = TT \+ AN;
  END
  IF \(\(iFLASSUZIONE = 1\) AND\(iFLFESTIVO = 1\)\) THEN
  BEGIN
    AF = :iNMGIORNATE;
    TA = TA \+ AF;
    TF = TF \+ AF;
    TT = TT \+ AF;
  END
  IF \(iDS < DS\) THEN
    DS = iDS;
  IF \(iDE \> DE\) THEN
    DE = iDE;
END
IF \(iFG = 1\) THEN
  SUSPEND;

END
^

ALTER PROCEDURE SP_INSTORE (
DTSTART DATE,
DTSTOP DATE,
CDOPERATORE INTEGER)
RETURNS (
CDPROMOZIONE INTEGER,
CDCOPERTURA INTEGER,
DSPROMOZIONE VARCHAR(200),
CDCAMPAGNA INTEGER,
STH1 SMALLINT,
STB1 SMALLINT,
STR1 SMALLINT,
DT1 DATE,
STH2 SMALLINT,
STB2 SMALLINT,
STR2 SMALLINT,
DT2 DATE,
STH3 SMALLINT,
STB3 SMALLINT,
STR3 SMALLINT,
DT3 DATE,
STH4 SMALLINT,
STB4 SMALLINT,
STR4 SMALLINT,
DT4 DATE,
STH5 SMALLINT,
STB5 SMALLINT,
STR5 SMALLINT,
DT5 DATE,
STH6 SMALLINT,
STB6 SMALLINT,
STR6 SMALLINT,
DT6 DATE,
STH7 SMALLINT,
STB7 SMALLINT,
STR7 SMALLINT,
DT7 DATE)
AS
DECLARE VARIABLE DTJOB DATE;
DECLARE VARIABLE STH SMALLINT;
DECLARE VARIABLE STB SMALLINT;
DECLARE VARIABLE STR SMALLINT;
DECLARE VARIABLE LAST1 VARCHAR(200);
DECLARE VARIABLE DSPROMO VARCHAR(200);
DECLARE VARIABLE CDCOP INTEGER;
DECLARE VARIABLE CDCAM INTEGER;
DECLARE VARIABLE CDPRO INTEGER;
DECLARE VARIABLE FIRST_CYCLE SMALLINT;
begin
FIRST_CYCLE = 1;
LAST1 = '';
CDCOPERTURA = 0;
DSPROMOZIONE = '';
CDCAMPAGNA = 0;

/*
Riporto le righe di instore in colonna cos? da poter stampare il planning
viene generato un record per ogni promozione in una settimana

                 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
                 IMPORTANTE L'ORDINAMENTO
                 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

*/

IF ((DTSTART + 6) = DTSTOP) THEN
BEGIN
IF (CDOPERATORE = -1) THEN
BEGIN

  FOR
    SELECT C\.CDPROMOZIONE, A\.DTJOB, C\.CDCOPERTURA,
           D\.DSCAMPAGNA \|\| ' \- ' \|\| B\.DSMESE \|\| ' \- ' \|\| B\.CDANNO DSPROMOZIONE,
           MIN \(A\.STHOSTESS\) STHOSTESS, MIN \(A\.STBRIEFING\) STBRIEFING,
           MIN \(A\.STREPORT\) STREPORT, D\.CDCAMPAGNA
    FROM RJOB\_HOSTESS A, DPROMOZIONI B, RJOB C, DCAMPAGNE D, DCLIENTI E
    WHERE A\.DTJOB BETWEEN :DTSTART AND :DTSTOP
     AND  A\.CDJOB        = C\.CDJOB
     AND  D\.CDCAMPAGNA   = B\.CDCAMPAGNA
     AND  D\.CDCLIENTE    = E\.CDCLIENTE
     AND  C\.CDPROMOZIONE = B\.CDPROMOZIONE
     AND  C\.CDCOPERTURA  \> 0
    GROUP BY C\.CDPROMOZIONE, D\.DSCAMPAGNA, B\.DSMESE, B\.CDANNO, A\.DTJOB,
             C\.CDCOPERTURA, D\.CDCAMPAGNA
    ORDER BY 4, 2 DESC
    INTO
     :CDPRO, :DTJOB, :CDCOP, :DSPROMO, :STH, :STB, :STR, :CDCAM
  DO
  BEGIN

      IF \(:FIRST\_CYCLE = 1\) THEN
      BEGIN
        FIRST\_CYCLE  = 0;
        LAST1        = DSPROMO;
        CDCAMPAGNA   = CDCAM;
        CDCOPERTURA  = CDCOP;
        CDPROMOZIONE = CDPRO;
      END

      IF \(not \(:LAST1 = DSPROMO\)\) THEN
      BEGIN
        DSPROMOZIONE = LAST1;
        SUSPEND;

        CDCOPERTURA  = CDCOP;
        CDCAMPAGNA   = CDCAM;
        CDPROMOZIONE = CDPRO;

        LAST1 = DSPROMO;

        STH1 = null;
        STB1 = null;
        STR1 = null;
        DT1  = null;
    
        STH2 = null;
        STB2 = null;
        STR2 = null;
        DT2  = null;
    
        STH3 = null;
        STB3 = null;
        STR3 = null;
        DT3  = null;
    
        STH4 = null;
        STB4 = null;
        STR4 = null;
        DT4  = null;
    
        STH5 = null;
        STB5 = null;
        STR5 = null;
        DT5  = null;
    
        STH6 = null;
        STB6 = null;
        STR6 = null;
        DT6  = null;
    
        STH7 = null;
        STB7 = null;
        STR7 = null;
        DT7  = null;

      END

      IF \(DTJOB = DTSTART\) THEN
      BEGIN
        STH1 = :STH;
        STB1 = :STB;
        STR1 = :STR;
        DT1  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 1\) THEN
      BEGIN
        STH2 = :STH;
        STB2 = :STB;
        STR2 = :STR;
        DT2  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 2\) THEN
      BEGIN
        STH3 = :STH;
        STB3 = :STB;
        STR3 = :STR;
        DT3  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 3\) THEN
      BEGIN
        STH4 = :STH;
        STB4 = :STB;
        STR4 = :STR;
        DT4  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 4\) THEN
      BEGIN
        STH5 = :STH;
        STB5 = :STB;
        STR5 = :STR;
        DT5  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 5\) THEN
      BEGIN
        STH6 = :STH;
        STB6 = :STB;
        STR6 = :STR;
        DT6  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 6\) THEN
      BEGIN
        STH7 = :STH;
        STB7 = :STB;
        STR7 = :STR;
        DT7  = :DTJOB;
      END


  END
  DSPROMOZIONE = LAST1;
  SUSPEND;

END
ELSE BEGIN
  /\* Con operatore \*/
  FOR
    SELECT C\.CDPROMOZIONE, A\.DTJOB, C\.CDCOPERTURA,
           D\.DSCAMPAGNA \|\| ' \- ' \|\| B\.DSMESE \|\| ' \- ' \|\| B\.CDANNO DSPROMOZIONE,
           MIN \(A\.STHOSTESS\) STHOSTESS, MIN \(A\.STBRIEFING\) STBRIEFING,
           MIN \(A\.STREPORT\) STREPORT, D\.CDCAMPAGNA
    FROM RJOB\_HOSTESS A, DPROMOZIONI B, RJOB C, DCAMPAGNE D, DCLIENTI E
    WHERE A\.DTJOB BETWEEN :DTSTART AND :DTSTOP
     AND  A\.CDJOB        = C\.CDJOB
     AND  D\.CDCAMPAGNA   = B\.CDCAMPAGNA
     AND  D\.CDCLIENTE    = E\.CDCLIENTE
     AND  C\.CDPROMOZIONE = B\.CDPROMOZIONE
     AND  E\.CDOPERATORE  = :CDOPERATORE
     AND  C\.CDCOPERTURA  \> 0
    GROUP BY C\.CDPROMOZIONE, D\.DSCAMPAGNA, B\.DSMESE, B\.CDANNO, A\.DTJOB,
             C\.CDCOPERTURA, D\.CDCAMPAGNA
    ORDER BY 4, 2 DESC
    INTO
     :CDPRO, :DTJOB, :CDCOP, :DSPROMO, :STH, :STB, :STR, CDCAMPAGNA
  DO
  BEGIN

      IF \(:FIRST\_CYCLE = 1\) THEN
      BEGIN
        FIRST\_CYCLE  = 0;
        LAST1        = DSPROMO;
        CDCOPERTURA  = CDCOP;
        CDPROMOZIONE = CDPRO;
      END

      IF \(not \(:LAST1 = DSPROMO\)\) THEN
      BEGIN
        DSPROMOZIONE = LAST1;

        SUSPEND;

        CDCOPERTURA  = CDCOP;
        LAST1        = DSPROMO;
        CDCAMPAGNA   = CDCAM;
        CDPROMOZIONE = CDPRO;

        STH1 = null;
        STB1 = null;
        STR1 = null;
        DT1  = null;
    
        STH2 = null;
        STB2 = null;
        STR2 = null;
        DT2  = null;
    
        STH3 = null;
        STB3 = null;
        STR3 = null;
        DT3  = null;
    
        STH4 = null;
        STB4 = null;
        STR4 = null;
        DT4  = null;
    
        STH5 = null;
        STB5 = null;
        STR5 = null;
        DT5  = null;
    
        STH6 = null;
        STB6 = null;
        STR6 = null;
        DT6  = null;
    
        STH7 = null;
        STB7 = null;
        STR7 = null;
        DT7  = null;

      END

      IF \(DTJOB = DTSTART\) THEN
      BEGIN
        STH1 = :STH;
        STB1 = :STB;
        STR1 = :STR;
        DT1  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 1\) THEN
      BEGIN
        STH2 = :STH;
        STB2 = :STB;
        STR2 = :STR;
        DT2  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 2\) THEN
      BEGIN
        STH3 = :STH;
        STB3 = :STB;
        STR3 = :STR;
        DT3  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 3\) THEN
      BEGIN
        STH4 = :STH;
        STB4 = :STB;
        STR4 = :STR;
        DT4  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 4\) THEN
      BEGIN
        STH5 = :STH;
        STB5 = :STB;
        STR5 = :STR;
        DT5  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 5\) THEN
      BEGIN
        STH6 = :STH;
        STB6 = :STB;
        STR6 = :STR;
        DT6  = :DTJOB;
      END

      IF \(DTJOB = DTSTART \+ 6\) THEN
      BEGIN
        STH7 = :STH;
        STB7 = :STB;
        STR7 = :STR;
        DT7  = :DTJOB;
      END


  END
  DSPROMOZIONE = LAST1;
  SUSPEND;
END

END

END
^

ALTER PROCEDURE SP_MANDATI_HOSTESS (
ACDMANDATO INTEGER,
ACDAZIENDA INTEGER,
ACDSEDE INTEGER,
ADTINIZIO DATE,
ADTFINE DATE,
APRRITENUTA SMALLINT,
ATPDATA SMALLINT,
AFLCHIUSE SMALLINT,
ANOTPAY SMALLINT)
RETURNS (
CDMANDATO INTEGER,
DTINIZIO DATE,
DTFINE DATE,
CDHOSTESS INTEGER,
PRRITENUTA SMALLINT,
NMGG INTEGER,
IMTOTALE NUMERIC(12,2),
IMLORDO NUMERIC(12,2),
IMRITENUTA NUMERIC(12,2),
DTLAVORO VARCHAR(250),
DSAZIENDA VARCHAR(100),
DSINDIRIZZO VARCHAR(200),
DSLOCALITA VARCHAR(200),
CDIVA VARCHAR(20),
DSSEDE VARCHAR(100),
DHSEDE VARCHAR(5))
AS
DECLARE VARIABLE IDTJOB DATE;
DECLARE VARIABLE ICDHOSTESS INTEGER;
DECLARE VARIABLE IIMGIORNATA NUMERIC(12,2);
DECLARE VARIABLE IIMRIMBORSO NUMERIC(12,2);
DECLARE VARIABLE IFG INTEGER;
DECLARE VARIABLE IDSAZIENDA VARCHAR(100);
DECLARE VARIABLE IDSINDIRIZZO VARCHAR(200);
DECLARE VARIABLE IDSLOCALITA VARCHAR(200);
DECLARE VARIABLE ICDIVA VARCHAR(20);
DECLARE VARIABLE IDSSEDE VARCHAR(100);
DECLARE VARIABLE IDHSEDE VARCHAR(5);
BEGIN

CDHOSTESS = 0;
iFG = 0;

/*
Escludere il codice 0 altrimenti errore di string
truncation
*/

FOR
SELECT A.CDHOSTESS, A.DTJOB, A.IMGIORNATA, A.IMRIMBORSO,
C.DSAZIENDA, C.DSINDIRIZZO, C.DSLOCALITA, C.CDIVA, D.DSSEDE, D.DHSEDE
FROM RJOB_HOSTESS A, RJOB B, DAZIENDE C, TSEDI D
WHERE A.CDJOB = B.CDJOB
AND A.CDHOSTESS > 0
AND B.CDCOPERTURA = 1
AND A.FLASSUNZIONE = 0
AND (A.IMGIORNATA > 0 OR A.IMRIMBORSO > 0)
AND A.CDAZIENDA = C.CDAZIENDA
AND B.CDSEDE = D.CDSEDE

 AND  case :ACDAZIENDA
      when 0 then :ACDAZIENDA
      else A\.CDAZIENDA
      end
      = :ACDAZIENDA

 AND  case :ACDSEDE
      when 0 then :ACDSEDE
      else B\.CDSEDE
      end
      = :ACDSEDE

   AND  case :ATPDATA
        when 1 THEN A\.DTJOB
        when 2 THEN A\.DTPAGAMENTO
        else :ADTINIZIO
        end
        \>= :ADTINIZIO

   AND  case :ATPDATA
        when 1 THEN A\.DTJOB
        when 2 THEN A\.DTPAGAMENTO
        else :ADTFINE
        end
        <= :ADTFINE

 AND  case :AFLCHIUSE
      when 1 THEN A\.STREPORT
      else 3
      end
      = 3

ORDER BY A\.CDHOSTESS, A\.DTJOB
INTO
       :iCDHOSTESS,
       :iDTJOB,
       :iIMGIORNATA,
       :iIMRIMBORSO,
       :iDSAZIENDA,
       :iDSINDIRIZZO,
       :iDSLOCALITA,
       :iCDIVA,
       :iDSSEDE,
       :iDHSEDE

DO
BEGIN
IF (iCDHOSTESS <> :CDHOSTESS) THEN
BEGIN
IF (iFG = 0) THEN
iFG = 1;
ELSE
SUSPEND;

  CDHOSTESS   = iCDHOSTESS;
  DTLAVORO    = null;
  NMGG        = 0;
  IMTOTALE    = 0;
  DSAZIENDA   = '';
  DSINDIRIZZO = '';
  DSLOCALITA  = '';
  CDIVA       = '';
  DSSEDE      = '';
  DHSEDE      = '';

END

  NMGG        = NMGG \+ 1;
  IMTOTALE    = IMTOTALE \+ iIMRIMBORSO \+ iIMGIORNATA;

  PRRITENUTA  = :APRRITENUTA;
  CDMANDATO   = :ACDMANDATO;
  DTINIZIO    = :ADTINIZIO;
  DTFINE      = :ADTFINE;
  DSAZIENDA   = :iDSAZIENDA;
  DSINDIRIZZO = :iDSINDIRIZZO;
  DSLOCALITA  = :iDSLOCALITA;
  CDIVA       = :iCDIVA;
  DSSEDE      = :iDSSEDE;
  DHSEDE      = :IDHSEDE;


  IMLORDO =  \(\(\(\(IMTOTALE \* 100\) / \(100 \- PRRITENUTA\)\) \- IMTOTALE\) \+ IMTOTALE\);
  IMRITENUTA = \(\(\(\(IMTOTALE \* 100\) / \(100 \- PRRITENUTA\)\) \- IMTOTALE\)\);

  IF \(DTLAVORO IS NULL\) THEN
    DTLAVORO = IntDay\(:iDTJOB\);
  ELSE
    DTLAVORO = DTLAVORO  \|\| '\-' \|\| IntDay\(:iDTJOB\);

END

IF (iFG = 1) THEN
SUSPEND;

END
^

ALTER PROCEDURE SP_NUMERO_HOSTESS
RETURNS (
CDJOB INTEGER,
NMHOSTESS INTEGER)
AS
DECLARE VARIABLE ICDJOB INTEGER;
DECLARE VARIABLE IFG INTEGER;
BEGIN
/* Select per per job e hostess */
iFG = 0;
CDJOB = 0;
NMHOSTESS = 0;
FOR
SELECT CDJOB
FROM RJOB_HOSTESS
GROUP BY CDJOB, CDHOSTESS
ORDER BY 1
INTO
:iCDJOB
DO
BEGIN
/* Dettaglio date */
IF (iCDJOB <> :CDJOB) THEN
BEGIN
IF (iFG = 0) THEN
iFG = 1;
ELSE
SUSPEND;
CDJOB = iCDJOB;
NMHOSTESS = 0;
END
NMHOSTESS = NMHOSTESS +1;
END
IF (iFG = 1) THEN
SUSPEND;
END
^

ALTER PROCEDURE SP_SMS_HOSTESS (
ACDJOB INTEGER,
ACDHOSTESS INTEGER)
RETURNS (
CDJOB INTEGER,
CDHOSTESS INTEGER,
DSPROMOZIONE VARCHAR(100),
DSDISPLAYINSEGNA VARCHAR(500),
DSDTJOB VARCHAR(1000),
DSOPERATORE VARCHAR(50))
AS
DECLARE VARIABLE DTJOB DATE;
DECLARE VARIABLE LASTMONTH SMALLINT;
begin

LastMonth = 0;
DSDTJOB = '';

for
SELECT B.CDJOB, B.CDHOSTESS, B.DTJOB, D.DSPROMOZIONE, C.DSDISPLAYINSEGNA,
E.DSOPERATORE
FROM RJOB A, RJOB_HOSTESS B, VIEW_PV_DISPLAYINSEGNA C,
VIEW_CAMPAGNE_PROMOZIONI D, DOPERATORI E
WHERE A.CDJOB = B.CDJOB
AND A.CDPUNTOVENDITA = C.CDPUNTOVENDITA
AND A.CDPROMOZIONE = D.CDPROMOZIONE
AND D.CDOPERATORE = E.CDOPERATORE
AND B.CDJOB = :ACDJOB
AND B.CDHOSTESS = :ACDHOSTESS
ORDER BY B.DTJOB DESC
INTO
:CDJOB,
:CDHOSTESS,
:DTJOB,
:DSPROMOZIONE,
:DSDISPLAYINSEGNA,
:DSOPERATORE
do begin

if \(IntMonth\(DTJOB\) <\> LastMonth\)  then
   DSDTJOB = IntDay\(DTJOB\) \|\| '/' \|\| IntMonth\(DTJOB\) \|\| ' ' \|\| DSDTJOB;
else
   DSDTJOB = IntDay\(DTJOB\) \|\| '\-' \|\| DSDTJOB;

LastMonth = IntMonth\(DTJOB\);

end

suspend;

end
^

ALTER PROCEDURE SP_STAMPE_HOSTESS (
ACDHOSTESS INTEGER,
ACDJOB INTEGER,
ADTJOB DATE,
APRRITENUTA SMALLINT,
ADSCAMICEAG VARCHAR(150),
ADSTAILLEURAG VARCHAR(150))
RETURNS (
CDCLIENTE INTEGER,
DSCLIENTE VARCHAR(50),
DSPROMOZIONE VARCHAR(100),
CDPUNTOVENDITA INTEGER,
DSPUNTOVENDITA VARCHAR(50),
DSDISPLAYINSEGNA VARCHAR(375),
DSCOMUNEPV VARCHAR(50),
DSLOCALITA VARCHAR(50),
CDCAPPV VARCHAR(50),
CDPROVINCIAPV VARCHAR(2),
CDAGENZIA INTEGER,
DSAGENZIA VARCHAR(50),
CDHOSTESS INTEGER,
DSNOMINATIVO VARCHAR(50),
CDMATRICOLA INTEGER,
DSINDIRIZZOHS VARCHAR(50),
DSINDIRIZZO2HS VARCHAR(50),
CDCAPHS VARCHAR(5),
DSRESIDENZA VARCHAR(50),
DSRESIDENZA2 VARCHAR(50),
CDCAPRESIDENZA VARCHAR(5),
DSRIFERIMENTO VARCHAR(50),
CDSEX CHAR(1),
FLCAMICEAG SMALLINT,
FLTAILLEURAG SMALLINT,
DTNASCITA DATE,
DSCOMUNENASHS VARCHAR(150),
CDPROVINCIANASHS VARCHAR(2),
DSCOMUNEINDHS VARCHAR(150),
CDPROVINCIAINDHS VARCHAR(2),
DSCOMUNEINDRS VARCHAR(150),
CDPROVINCIAINDRS VARCHAR(2),
DSCAMPAGNA VARCHAR(50),
DSMESE VARCHAR(50),
CDANNO INTEGER,
CDFISCALE VARCHAR(16),
IMGIORNATA NUMERIC(12,2),
IMRIMBORSO NUMERIC(12,2),
DSDETTAGLIODATE VARCHAR(3000),
XTDSDETTAGLIODATE VARCHAR(3000),
DSDETTAGLIOIMPORTI VARCHAR(3000),
DSDETTAGLIOIMPORTINR VARCHAR(3000),
XTDSDETTAGLIOIMPORTI VARCHAR(3000),
XTDSDETTAGLIOIMPORTINR VARCHAR(3000),
DSDETTAGLIOCONTRATTI VARCHAR(3000),
XPART1 VARCHAR(15),
XPART2 VARCHAR(15),
XPART3 VARCHAR(15),
XPART4 VARCHAR(15),
XPART5 VARCHAR(15),
XPART6 VARCHAR(15),
PRRITENUTA SMALLINT,
DSTAILLEURAG VARCHAR(150),
DSCAMICEAG VARCHAR(150),
DTNOW DATE,
NMGIORNATE INTEGER,
IMGIORNATE NUMERIC(12,2),
XTGIORNATE VARCHAR(1250),
DSATTIVITA VARCHAR(50),
DSAZIENDA VARCHAR(100),
DSORARIO1 VARCHAR(100),
DSORARIO2 VARCHAR(100),
DSORARIO3 VARCHAR(100),
DSORARIO4 VARCHAR(100),
DSORARIO5 VARCHAR(100),
DSORARIO6 VARCHAR(100),
DSORARIO7 VARCHAR(100),
DTMIN DATE,
DTMAX DATE,
CDJOB INTEGER,
NMLAVORO VARCHAR(50),
DTSCADENZALAVORO DATE,
CDINPS VARCHAR(50),
CDINAIL VARCHAR(50),
DSOPERATORE VARCHAR(50),
NMPVTELEFONO VARCHAR(15),
NMPVTELEFONO1 VARCHAR(15),
NMPVFAX VARCHAR(15),
NMPVFAX1 VARCHAR(15),
NMPVCELLULARE VARCHAR(15),
NMPVCELLULARE1 VARCHAR(15),
NMPVPREFERENZIALE VARCHAR(15))
AS
DECLARE VARIABLE IDTJOB DATE;
DECLARE VARIABLE IIMGIORNATA NUMERIC(12,2);
DECLARE VARIABLE IIMRIMBORSO NUMERIC(12,2);
DECLARE VARIABLE IFLTAILLEURAG SMALLINT;
DECLARE VARIABLE IFLCAMICEAG SMALLINT;
DECLARE VARIABLE INMGIORNATE INTEGER;
DECLARE VARIABLE DSORARIO VARCHAR(100);
DECLARE VARIABLE DSCONTRATTO VARCHAR(50);
DECLARE VARIABLE CDCONTRATTO INTEGER;
DECLARE VARIABLE FLDTMIN SMALLINT;
BEGIN

SELECT E.CDCLIENTE, E.DSCLIENTE, C.CDPUNTOVENDITA, C.DSPUNTOVENDITA,
C.DSDISPLAYINSEGNA, C.DSCOMUNEPV, C.DSLOCALITA, C.CDCAP CDCAPPV, C.CDPROVINCIAPV,
D.CDAGENZIA, D.DSAGENZIA, H.CDHOSTESS, H.DSNOMINATIVO, H.CDMATRICOLA,
H.DSINDIRIZZO DSINDIRIZZOHS, H.DSINDIRIZZO2 DSINDIRIZZO2HS, H.CDCAP CDCAPHS,
H.DSRESIDENZA, H.DSRESIDENZA2, H.CDCAPRESIDENZA,
A.DSRIFERIMENTO, H.CDSEX, G.FLCAMICEAG, G.FLTAILLEURAG, H.DTNASCITA,
I.DSCOMUNE DSCOMUNENASHS, I.CDPROVINCIA CDPROVINCIANASHS,
L.DSCOMUNE DSCOMUNEINDHS, L.CDPROVINCIA CDPROVINCIAINDHS,
O.DSCOMUNE DSCOMUNEINDRS, O.CDPROVINCIA CDPROVINCIAINDRS,
E.DSCAMPAGNA, E.DSMESE, E.CDANNO, E.DSPROMOZIONE, H.CDFISCALE,
M.DSATTIVITA, N.DSAZIENDA, H.NMLAVORO, H.DTSCADENZALAVORO,
H.CDINPS, H.CDINAIL, P.DSOPERATORE, C.NMTELEFONO, C.NMTELEFONO1,
C.NMCELLULARE, C.NMCELLULARE1, C.NMFAX, C.NMFAX1, C.NMPREFERENZIALE

FROM RJOB A, VIEW_PV_DISPLAYINSEGNA C, DAGENZIE D, VIEW_CAMPAGNE_PROMOZIONI E,
RJOB_HOSTESS G, DHOSTESS H, TCOMUNI I, TCOMUNI L, TATTIVITA M,
DAZIENDE N, TCOMUNI O, DOPERATORI P
WHERE A.CDPROMOZIONE = E.CDPROMOZIONE
AND A.CDPUNTOVENDITA = C.CDPUNTOVENDITA
AND A.CDJOB = G.CDJOB
AND G.CDHOSTESS = H.CDHOSTESS
AND E.CDAGENZIA = D.CDAGENZIA
AND H.CDNASCITA = I.CDCOMUNE
AND H.CDINDIRIZZO = L.CDCOMUNE
AND H.CDRESIDENZA = O.CDCOMUNE
AND A.CDTIPOATTIVITA = M.CDATTIVITA
AND G.CDAZIENDA = N.CDAZIENDA
AND E.CDOPERATORE = P.CDOPERATORE
AND G.CDHOSTESS = :ACDHOSTESS
AND G.CDJOB = :ACDJOB
AND G.DTJOB = :ADTJOB
INTO
:CDCLIENTE,
:DSCLIENTE,
:CDPUNTOVENDITA,
:DSPUNTOVENDITA,
:DSDISPLAYINSEGNA,
:DSCOMUNEPV,
:DSLOCALITA,
:CDCAPPV,
:CDPROVINCIAPV,
:CDAGENZIA,
:DSAGENZIA,
:CDHOSTESS,
:DSNOMINATIVO,
:CDMATRICOLA,
:DSINDIRIZZOHS,
:DSINDIRIZZO2HS,
:CDCAPHS,
:DSRESIDENZA,
:DSRESIDENZA2,
:CDCAPRESIDENZA,
:DSRIFERIMENTO,
:CDSEX,
:FLCAMICEAG,
:FLTAILLEURAG,
:DTNASCITA,
:DSCOMUNENASHS,
:CDPROVINCIANASHS,
:DSCOMUNEINDHS,
:CDPROVINCIAINDHS,
:DSCOMUNEINDRS,
:CDPROVINCIAINDRS,
:DSCAMPAGNA,
:DSMESE,
:CDANNO,
:DSPROMOZIONE,
:CDFISCALE,
:DSATTIVITA,
:DSAZIENDA,
:NMLAVORO,
:DTSCADENZALAVORO,
:CDINPS,
:CDINAIL,
:DSOPERATORE,
:NMPVTELEFONO,
:NMPVTELEFONO1,
:NMPVCELLULARE,
:NMPVCELLULARE1,
:NMPVFAX,
:NMPVFAX1,
:NMPVPREFERENZIALE
;
/* Inizializzazione delle variabili */
DSTAILLEURAG = '';
DSCAMICEAG = '';
NMGIORNATE = 0;
IMGIORNATE = 0;

FLDTMIN = 0;

/* Select per le date lavorate per job e hostess */
FOR
SELECT A.DTJOB, A.IMGIORNATA, A.IMRIMBORSO, A.FLTAILLEURAG, A.FLCAMICEAG,
A.NMGIORNATE, A.DSORARIO, B.DSCONTRATTO, B.CDCONTRATTO
FROM RJOB_HOSTESS A, VIEW_HOSTESS_CONTRATTI B
WHERE A.CDJOB = B.CDJOB
AND A.CDCONTRATTO = B.CDCONTRATTO
AND A.CDHOSTESS = :ACDHOSTESS
AND A.CDJOB = :ACDJOB
ORDER BY 1
INTO
:iDTJOB, :iIMGIORNATA, :iIMRIMBORSO, :iFLTAILLEURAG, :iFLCAMICEAG,
:iNMGIORNATE, :DSORARIO, :DSCONTRATTO, :CDCONTRATTO
DO
BEGIN
/* Data minima job hostess */
if (FLDTMIN = 0) then
begin
FLDTMIN = 1;
DTMIN = iDTJOB;
end

if \(DayOfWeek\(IDTJOB\) = 1\) then
  DSORARIO1 = DSORARIO;

if \(DayOfWeek\(IDTJOB\) = 2\) then
  DSORARIO2 = DSORARIO;

if \(DayOfWeek\(IDTJOB\) = 3\) then
  DSORARIO3 = DSORARIO;

if \(DayOfWeek\(IDTJOB\) = 4\) then
  DSORARIO4 = DSORARIO;

if \(DayOfWeek\(IDTJOB\) = 5\) then
  DSORARIO5 = DSORARIO;

if \(DayOfWeek\(IDTJOB\) = 6\) then
  DSORARIO6 = DSORARIO;

if \(DayOfWeek\(IDTJOB\) = 7\) then
  DSORARIO7 = DSORARIO;


if \(CDCONTRATTO = 0\) then
  DSCONTRATTO = '';

if \(DSORARIO IS NULL\) then
  DSORARIO = '';



/\* Dettaglio date \*/
IF \(DSDETTAGLIODATE IS NULL\) THEN
BEGIN
   DSDETTAGLIODATE = IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\);
   XPART4 = 'il giorno';
END
ELSE BEGIN
   DSDETTAGLIODATE = DSDETTAGLIODATE  \|\| ',  ' \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\);
   XPART4 = 'i giorni';
END


/\* Dettaglio date con contratto \*/
IF \(XTDSDETTAGLIODATE IS NULL\) THEN
BEGIN
   XTDSDETTAGLIODATE = IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
                     \|\| ' '  \|\| DSCONTRATTO \|\| ' ' \|\| DSORARIO;
END
ELSE BEGIN
   XTDSDETTAGLIODATE = XTDSDETTAGLIODATE  \|\| ',  ' \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
                     \|\| ' '  \|\| DSCONTRATTO \|\| ' ' \|\| DSORARIO;
END


/\* Numero giornate lavorate \*/
NMGIORNATE = NMGIORNATE \+ iNMGIORNATE;

/\* Importo complessivo giornate \*/
IMGIORNATE = IMGIORNATE \+ iIMGIORNATA;

/\* Se sempre la stessa cifra la riporto altrimenti zero \*/
IF \(IMGIORNATA IS NULL\) THEN
  IF \(NOT \(iIMGIORNATA IS NULL\)\) THEN
    IMGIORNATA = :iIMGIORNATA;
IF \(IMGIORNATA <\> iIMGIORNATA\) THEN
  IMGIORNATA = 0;
IF \(iIMGIORNATA IS NULL\) THEN
   iIMGIORNATA = 0;

/\* Se sempre la stessa cifra la riporto altrimenti zero \*/
IF \(IMRIMBORSO IS NULL\) THEN
  IF \(NOT \(iIMRIMBORSO IS NULL\)\) THEN
    IMRIMBORSO = :iIMRIMBORSO;
IF \(IMRIMBORSO <\> iIMRIMBORSO\) THEN
  IMRIMBORSO = 0;
IF \(iIMRIMBORSO IS NULL\) THEN
   iIMRIMBORSO = 0;

/\* Elenco giornate lavorate con contratto, importo e rimborso \*/
IF \(XTDSDETTAGLIOIMPORTI IS NULL\) THEN
   XTDSDETTAGLIOIMPORTI = '' \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ' \|\| DSCONTRATTO \|\| ' ' \|\| ' imp\. ? ' \|\| :iIMGIORNATA \|\| ' rimb\. ? ' \|\| :iIMRIMBORSO
     \|\| ' ' \|\| DSORARIO \|\| '; ';
ELSE
   XTDSDETTAGLIOIMPORTI = XTDSDETTAGLIOIMPORTI \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ' \|\| DSCONTRATTO \|\| ' ' \|\| ' imp\. ? ' \|\| :iIMGIORNATA \|\| ' rimb\. ? ' \|\| :iIMRIMBORSO
     \|\| ' ' \|\| DSORARIO \|\| '; ';


/\* Elenco giornate con importo e rimborso \*/
IF \(DSDETTAGLIOIMPORTI IS NULL\) THEN
   DSDETTAGLIOIMPORTI = 'Giorno ' \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ? giornata ' \|\| :iIMGIORNATA \|\| ' ? rimborso ' \|\| :iIMRIMBORSO \|\|'; ';
ELSE
   DSDETTAGLIOIMPORTI = DSDETTAGLIOIMPORTI \|\| 'Giorno ' \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ? giornata ' \|\| :iIMGIORNATA \|\| ' ? rimborso ' \|\| :iIMRIMBORSO \|\|'; ';


/\* Elenco giornate lavorate con contratto e importo SENZA rimborso \*/
IF \(XTDSDETTAGLIOIMPORTINR IS NULL\) THEN
   XTDSDETTAGLIOIMPORTINR = '' \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ' \|\| DSCONTRATTO \|\| ' ' \|\| ' imp\. ? ' \|\| :iIMGIORNATA
     \|\| ' ' \|\| DSORARIO \|\| '; ';
ELSE
   XTDSDETTAGLIOIMPORTINR = XTDSDETTAGLIOIMPORTINR \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ' \|\| DSCONTRATTO \|\| ' ' \|\| ' imp\. ? ' \|\| :iIMGIORNATA
     \|\| ' ' \|\| DSORARIO \|\| '; ';



/\* Elenco giornate con importo SENZA rimborso \*/
IF \(DSDETTAGLIOIMPORTINR IS NULL\) THEN
   DSDETTAGLIOIMPORTINR = 'Giorno ' \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ? giornata ' \|\| :iIMGIORNATA \|\|'; ';
ELSE
   DSDETTAGLIOIMPORTINR = DSDETTAGLIOIMPORTINR \|\| 'Giorno ' \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ? giornata ' \|\| :iIMGIORNATA \|\|'; ';



/\* Elenco giornate lavorate con contratto \*/
IF \(DSDETTAGLIOCONTRATTI IS NULL\) THEN
   DSDETTAGLIOCONTRATTI = '' \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ' \|\| DSCONTRATTO
     \|\| ' ' \|\| DSORARIO \|\| '; ';
ELSE
   DSDETTAGLIOCONTRATTI = DSDETTAGLIOCONTRATTI \|\| IntDay\(:iDTJOB\) \|\| '/' \|\| IntMonth\(:iDTJOB\) \|\| '/' \|\| IntYear\(:iDTJOB\)
     \|\| ' ' \|\| DSCONTRATTO
     \|\| ' ' \|\| DSORARIO \|\| '; ';


/\* Ritorno la frase passata se il flag ? vero \*/
IF \(:iFLTAILLEURAG = 1\) THEN
  DSTAILLEURAG = ADSTAILLEURAG;
IF \(:iFLCAMICEAG = 1\) THEN
  DSCAMICEAG = ADSCAMICEAG;

END
/* Data max job hostess */
DTMAX = iDTJOB;

/* Frasi di rito per sesso del soggetto */
IF (CDSEX = 'F') THEN
BEGIN
XPART1 = 'la';
XPART2 = 'Sig.ra';
XPART3 = 'promotrice';
XPART5 = 'a';
XPART6 = 'collaboratrice';
END
IF (CDSEX = 'M') THEN
BEGIN
XPART1 = 'il';
XPART2 = 'Sig.';
XPART3 = 'promotore';
XPART5 = 'o';
XPART6 = 'collaboratore';
END

/* Importo in lettere */
XTGIORNATE = XLATENUMTOSTR(IMGIORNATE, 0);
PRRITENUTA = APRRITENUTA;
DTNOW = 'NOW';
CDJOB = ACDJOB;
SUSPEND;

END
^

SET TERM ; ^

/******************************************************************************/
/*** Descriptions ***/
/******************************************************************************/

DESCRIBE TABLE DAZIENDE
'Il record *zero deve essere presente
Il record 1 ? la ditta principale';

DESCRIBE TABLE RHOSTESS_PAGAMENTI
'Pagamenti ed anticipi per le hostess';

DESCRIBE TABLE RPROMOZIONI_SPEDIZIONI
'Spedizioni per promozione';

DESCRIBE TABLE TDESTINATARIO
'Vedi RJOB_LOGISTICA_MOVIMENTO';

DESCRIBE TABLE TEXT_STAMPA
'Descrizioni tipi estensioni file delle stampe';

DESCRIBE TABLE TINI
'File INI del programma';

DESCRIBE TABLE TTIPO_JOB
'Tipo job relativo a RJOB_HOSTESS';

DESCRIBE TABLE TTIPO_PAGAMENTO
'Tipi pagamento per i compensi hostess RHOSTESS_PAGAMENTI';

DESCRIBE TABLE TTIPO_STAMPA
'Descrizioni tipi stampe';

/******************************************************************************/
/*** Descriptions ***/
/******************************************************************************/

DESCRIBE VIEW VIEW_ANNO_JOB_HOSTESS
'Vista del compenso e numero giorni delle hostess per anno solare (Legge Biagi),
divisa per azienda';

DESCRIBE VIEW VIEW_COPERTURA
'Copertura per il singolo RJOB';

DESCRIBE VIEW VIEW_DESTINATARI
'Lista dei destinatri, viene utilizzata per la logistica';

DESCRIBE VIEW VIEW_FETCH_HOSTESS
'Dipende da VIEW_NUMERO_HOSTESS, per ili job quante date ci sono uguali';

DESCRIBE VIEW VIEW_HOSTESS_COMPENSI
'Compenso della hostess da rjob_hostess diviso per mese/anno di promozione';

DESCRIBE VIEW VIEW_HOSTESS_CONTRATTI
'I contratti per le righe di RJOB_HOSTESS';

DESCRIBE VIEW VIEW_HOSTESS_COORDINATRICE
'Coordinatrice per la hostess in RJOB_HOSTESS';

DESCRIBE VIEW VIEW_HOSTESS_ENGAGED
'Se la hostess ? impegnata per lo stesso giorno il conteggio ? maggiore di 1,
non si possono escludere quelle a 0 poich? servono nella join';

DESCRIBE VIEW VIEW_HOSTESS_NMGG
'Quanti giorni a lavorato la hostess';

DESCRIBE VIEW VIEW_HOSTESS_PAGAMENTI
'Pagamenti effettuati alla hostess per mese/anno di promozione, i codici
pagamento DEVO essere uguali a quelli in tabella TTIPO_PAGAMENTO';

DESCRIBE VIEW VIEW_HOSTESS_SALDO
'Saldi delle hostess, dal compenso di RJOB_HOSTESS vengono tolti i pagamenti
che sono su RHOSTESS_PAGAMENTI';

DESCRIBE VIEW VIEW_JOB_CLIENTE
'Vista per prendere il CDCLIENTE per il CDJOB';

DESCRIBE VIEW VIEW_JOB_INFO
'Le info per il job';

DESCRIBE VIEW VIEW_LOGISTICA_ART_MAG
'Gli articoli del cliente, per la logistica, divisi per magazzino';

DESCRIBE VIEW VIEW_LOGISTICA_MIN
'La situazione peggiore a livello di LOGISTICA';

DESCRIBE VIEW VIEW_LOGISTICA_MOVIMENTI
'Prendo tutti gli articoli NON generati in InStore (solo elencati in DCAMPAGNA,
quelli utilizzati in RJOB_LOGISTICA_MOVIMENTO, e quelli movimentati in
RMAGAZZINI_MOVIMENTI';

DESCRIBE VIEW VIEW_MAGAZZINI_MOVIMENTI
'Movimenti di magazzino divisi per articolo';

DESCRIBE VIEW VIEW_NUMERO_HOSTESS
'Il numero di hostess per ogni JOB, vedi anche VIEW_FETCH_HOSTESS';

DESCRIBE VIEW VIEW_PROMOZIONE_NMGG
'Il numero di giornate per ogni promozione, molto lenta poich? fa tre LEFT JOIN';

DESCRIBE VIEW VIEW_PROMOZIONE_NMPV
'Numero di punti vendita per ogni promozione';

DESCRIBE VIEW VIEW_PROMOZIONI_SPEDIZIONI
'Vista di decodifica delle spedizioni per promozione';

DESCRIBE VIEW VIEW_PV_DISPLAYINSEGNA
'Calcolo del displayinsegna, modificare anche CalculateDisplayInsegna su PV';

DESCRIBE VIEW VIEW_SPEDIZIONE_CAMPAGNA_PV
'le spedizioni della logistica per ogni campagna e punto vendita';

DESCRIBE VIEW VIEW_SPEDIZIONE_JOB
'Le spedizioni per ogni JOB, raggruppate';

DESCRIBE VIEW VIEW_SPEDIZIONI_MIN
'La situazione peggiore per le spedizioni';

/******************************************************************************/
/*** Descriptions ***/
/******************************************************************************/

DESCRIBE FUNCTION AGE
'Et? da una data';

DESCRIBE FUNCTION INTDAY
'Giorno da una data';

DESCRIBE FUNCTION INTMONTH
'Mese da una data';

DESCRIBE FUNCTION INTYEAR
'Anno da una data';

DESCRIBE FUNCTION STRMONTH
'Descrizione del mese da un numero';

DESCRIBE FUNCTION XLATENUMTOSTR
'Traduzione in lettere di una data, il parametro se 1 traduce anche i decimali';

/******************************************************************************/
/*** Descriptions ***/
/******************************************************************************/

DESCRIBE PROCEDURE SP_FATTURAZIONE_CLIENTE
'Conteggio giornate divise tra assunzione/non assunzione coordinatrice/non coordinatrice';

/******************************************************************************/
/*** Descriptions ***/
/******************************************************************************/

DESCRIBE TRIGGER DCAMPAGNE_AI0
'Quando inserisco un record creo in automatico anche un kit di stampa';

DESCRIBE TRIGGER DCAMPAGNE_AI2
'Creazione dei contratti dalla tabella TTEMPLATE_CONTRATTI';

DESCRIBE TRIGGER RCAMPAGNE_CONTRATTI_AD0
'Imposto il contratto a null, poich? in RJOB_HOSTESS non conosco la campagna';

DESCRIBE TRIGGER RCAMPAGNE_CONTRATTI_AD1
'Imposto il contratto a null, poich? in RPROMOZIONI_SPEDIZIONE non conosco la campagna';

/* Fields descriptions */

DESCRIBE FIELD DSSHORTAGENZIA TABLE DAGENZIE
'Descrizione breve per InStore';

DESCRIBE FIELD CDAZIENDA TABLE DAZIENDE
'Il codice 1 rappresenta l''azienda principale';

DESCRIBE FIELD CDOPERATORE TABLE DCAMPAGNE
'Eredita quello presente in DCLIENTI';

DESCRIBE FIELD DTISCRIZIONE TABLE DHOSTESS
'Libro soci';

DESCRIBE FIELD DTUSCITA TABLE DHOSTESS
'Libro soci';

DESCRIBE FIELD DTVERSAMENTO TABLE DHOSTESS
'Libro soci';

DESCRIBE FIELD DTRIMBORSO TABLE DHOSTESS
'Libro soci';

DESCRIBE FIELD FLARCHIVIO TABLE DHOSTESS
'Visibile/Non visibile in lista';

DESCRIBE FIELD TPUM TABLE RCAMPAGNE_CONTRATTI
'Unit? di misura, vedi tabella TUNITA_MISURA';

DESCRIBE FIELD DSTIME TABLE RCOMMESSE_VOCI_RIGHE_TT
'Elenco date per Time Table';

DESCRIBE FIELD TPTIME TABLE RCOMMESSE_VOCI_RIGHE_TT
'Tipo (Simbolo, colore)';

DESCRIBE FIELD STRIGA TABLE RCOMMESSE_VOCI_RIGHE_TT
'Elenco simboli e colori';

DESCRIBE FIELD CDAZIENDA TABLE RJOB_HOSTESS
'Contiene l''azienda a cui ? intestata la riga (stampe base)';

DESCRIBE FIELD TPJOB TABLE RJOB_HOSTESS
'1=Persona Fisica; 2=Fornitore';

DESCRIBE FIELD CDCONTRATTO TABLE RJOB_HOSTESS
'Viene gestito con un trigger sulla tabella relativa';

DESCRIBE FIELD DTPAGAMENTO TABLE RJOB_HOSTESS
'Data pagamento Hostess';

DESCRIBE FIELD DTRIMBORSO TABLE RJOB_HOSTESS
'Data rimborso hostess';

DESCRIBE FIELD DTREPORT TABLE RJOB_HOSTESS
'STREPORT = 3';

DESCRIBE FIELD TPDESTINATARIO TABLE RJOB_LOGISTICA_MOVIMENTO
'TDESTINATARIO in base a quello CDDESTINATARIO';

DESCRIBE FIELD CDDESTINATARIO TABLE RJOB_LOGISTICA_MOVIMENTO
'Gestito con trigger';

DESCRIBE FIELD CDHOSTESS TABLE RMANDATI_HOSTESS
'Non c''? integrit?';

DESCRIBE FIELD CDCONTRATTO TABLE RPROMOZIONI_SPEDIZIONI
'Non esiste la FOREIGN (non conosco CDCAMPAGNA), viene utilizzato un trigger su RCAMPAGNE_CONTRATTI';

DESCRIBE FIELD CDORDER TABLE TTIPO_STAMPA
'Serve per l''ordinamento della lista stampe';

/* Parameters descriptions */

DESCRIBE PARAMETER AF PROCEDURE SP_FATTURAZIONE_CLIENTE
'Assunzione Festive';

DESCRIBE PARAMETER AN PROCEDURE SP_FATTURAZIONE_CLIENTE
'Assunzione NON Festive';

DESCRIBE PARAMETER DE PROCEDURE SP_FATTURAZIONE_CLIENTE
'Data Fine';

DESCRIBE PARAMETER DF PROCEDURE SP_FATTURAZIONE_CLIENTE
'Dirette Festive';

DESCRIBE PARAMETER DN PROCEDURE SP_FATTURAZIONE_CLIENTE
'Dirette NON Festive';

DESCRIBE PARAMETER DS PROCEDURE SP_FATTURAZIONE_CLIENTE
'Data Inizio';

DESCRIBE PARAMETER TA PROCEDURE SP_FATTURAZIONE_CLIENTE
'Totale in Assunzione (Festive e NON)';

DESCRIBE PARAMETER TD PROCEDURE SP_FATTURAZIONE_CLIENTE
'Totale Dirette (NON Assunzione)(Festive e NON)';

DESCRIBE PARAMETER TF PROCEDURE SP_FATTURAZIONE_CLIENTE
'Totale Festive (Dirette e NON)';

DESCRIBE PARAMETER TN PROCEDURE SP_FATTURAZIONE_CLIENTE
'Totale NON Festive (Dirette e NON)';

DESCRIBE PARAMETER TT PROCEDURE SP_FATTURAZIONE_CLIENTE
'Totale generale';

@firebird-automations
Copy link
Collaborator Author

Commented by: @dyemanov

You need to provide the UDF library, otherwise it's impossible to run your script.

@firebird-automations
Copy link
Collaborator Author

Commented by: Massimo (setec_astronomy)

I send you the UDF

@firebird-automations
Copy link
Collaborator Author

Modified by: Massimo (setec_astronomy)

Attachment: Plus_ib.dll [ 10231 ]

Attachment: ib_udf.dll [ 10232 ]

@firebird-automations
Copy link
Collaborator Author

Commented by: @dyemanov

Your plus_ib.dll library seems to allocate output CSTRING parameters using malloc(). That's plain wrong. It should use ib_util_malloc() from ib_util.dll instead. Also check that all UDFs are defined using "cdecl" calling convention.

@firebird-automations
Copy link
Collaborator Author

Commented by: Massimo (setec_astronomy)

Source code of UDF

@firebird-automations
Copy link
Collaborator Author

Modified by: Massimo (setec_astronomy)

Attachment: UDF.zip [ 10240 ]

@firebird-automations
Copy link
Collaborator Author

Commented by: Massimo (setec_astronomy)

Please consider to change Priority to critical, for an error I check Blocker
Thanks

@firebird-automations
Copy link
Collaborator Author

Commented by: @dyemanov

It's your problem, not a Firebird one. Your UDFs are implemented wrong.

function DecodeMonth(var AMonth: integer; ARet: PChar): PChar; cdecl; export;
begin
//Max return length 9
ARet := malloc(10);
result := ARet;

if ((AMonth > 0) and (AMonth < 13)) then
StrCopy(ARet, PChar(LongMonthNames[AMonth]))
else
StrCopy(ARet, #⁠0);
end;

If you define an output parameter using FREE_IT clause, then you should allocate memory for it using function ib_util_malloc() that's exported from ib_util.dll (included in the package). Otherwise, there's no guarantee that your UDF uses the same memory allocator as the FB engine. Your library uses malloc() imported from msvcrt.dll, while Firebird imports C runtime from msvcr71.dll.

Please read the documentation carefully. The easiest way to fix your library is to replace:
function malloc(Size: Integer): Pointer; cdecl; external 'msvcrt.dll';
with:
function malloc(Size: Integer): Pointer; cdecl; external 'ib_util.dll' name 'ib_util_malloc';

@firebird-automations
Copy link
Collaborator Author

Modified by: Massimo (setec_astronomy)

priority: Blocker [ 1 ] => Critical [ 2 ]

@firebird-automations
Copy link
Collaborator Author

Commented by: Massimo (setec_astronomy)

Thanks for response I see how to call UDF in Delphi at this link http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_howto2 and I not find any other, please tell me where I can find doc on UDF

Thanks for help

@firebird-automations
Copy link
Collaborator Author

Commented by: @dyemanov

Even the document you're referring to contains the note about memory allocation using ib_util.dll (section "Memory allocation issues").
You can also find more information in InterBase Developer's Guide, page 78. It's available at IBPhoenix: http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_download_documentation

@firebird-automations
Copy link
Collaborator Author

Modified by: @dyemanov

status: Open [ 1 ] => Resolved [ 5 ]

resolution: Won't Fix [ 2 ]

@firebird-automations
Copy link
Collaborator Author

Modified by: @pcisar

status: Resolved [ 5 ] => Closed [ 6 ]

@firebird-automations
Copy link
Collaborator Author

Modified by: @pcisar

Workflow: jira [ 11505 ] => Firebird [ 14999 ]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant