-- v2 - 26/04/2018 
--      aggiunto scelte a conferimenti
--      per aggiornare clienti fare agg completo, aggiungere al db ARUGBS.
--
-- v3 - 25/05/2018 
--      aggiunto tabella carichi_uve (conferimenti come carichi di raggruppamenti di vinificazione).
--      tolto qualche commento assurdo su mysql
--      per aggiornare clienti fare agg completo, aggiungere al db ARUGBP e ARUGBQ.

-- n.b. I DB AV_COL_TMP E AV_COL VANNO CREATI MANUALMENTE

-- LE TABELLE DEL DB AV_COL VENGONO AGGIORNATE DA QUESTO SCRIPT LANCIATO IN CODA ALLA
-- CREAZIONE DI UN DATABASE TEMPORANEO CHE CREATO DA AV2000

-- LE TABELLE VENGONO CREATE SOLO CON I CAMPI GESTITI AD OGGI SUI RECORD, PER FARE QUESTO
-- VIENE CREATA UNA TABELLA TEMPORANEA (STRUTTURA) CON UNA SELECT SULLA TABELLA
-- NEL DATABASE TEMPORANEO CHE SELEZIONA I CAMPI GESTITI AD OGGI (QUESTO EVITA
-- DI FARE UNA CREATE TABLE CON TUTTE LE PICTURE DEI CAMPI).

-- DOPO LA CREATE VIENE FATTO L'ALLINEAMENTO TRA LE DUE TABELLE ATTRAVERSO:
-- - LA INSERT DELLE RIGHE PRESENTI NEL DATABASE TEMPORANEO E NON IN QUELLO REALE
-- - LA DELETE DELLE RIGHE PRESENTI NEL DATABASE RELAE NON IN QUELLO TEMPORANEO
-- - LA UPDATE DEI VALORI DEI CAMPI DIVERSI NEL DATABASE RELAE RISPETTO A QUELLO
--   TEMPORANEO

-- *********
-- SOGGETTI --
-- *********

-- CANCELLA TABELLA STRUTTURA (SERVE PER FARE I TEST)
IF EXISTS (SELECT TABLE_NAME FROM AV_COL_TMP.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'STRUTTURA_SOGGETTI') DROP TABLE AV_COL_TMP.dbo.STRUTTURA_SOGGETTI;
go

-- CREA TABELLA STRUTTURA (LA WHERE 1=2 SERVE PER NON INSERIRE NEANCHE UNA RIGA)
SELECT ID_AZI,CODICE,RAGSOC,PARIVA
INTO AV_COL_TMP.dbo.STRUTTURA_SOGGETTI
FROM AV_COL_TMP.dbo.AANCL1_01
WHERE 1 = 2

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_SOGGETTI ALTER COLUMN ID_AZI VARCHAR(2) NOT NULL
go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_SOGGETTI ADD TIPSOG VARCHAR(1) NOT NULL;
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_SOGGETTI ADD CODSOG VARCHAR(7) NOT NULL;

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_SOGGETTI ADD PRIMARY KEY (
ID_AZI,
CODSOG);

go

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'SOGGETTI') 
SELECT * INTO AV_COL.dbo.SOGGETTI FROM AV_COL_TMP.dbo.STRUTTURA_SOGGETTI WHERE 1 = 0;

go

-- CLIENTI --

-- AGGIUNGE UN CAMPO ALLA TABELLA CLIENTI CON IL VALORE DELL'ATTRIBUTO INSERITO NEI PARAMETRI DI INTERFACCIA COME SELEZIONE DEI CLIENTI DA ESPORTARE
-- MI SEMBRA L'UNICO MODO PER POTERLO FILTRARE NELLE SUCCESSIVE OPERAZIONI CONSIDERANDO CHE IN SQL NON CI SONO GLI ARRAY

ALTER TABLE AV_COL_TMP.dbo.AANCL1_01 ADD ATTSEL INTEGER;

go

-- SERVE PER NON AVERE IL VALORE NULL IN MODO CHE SE NEI PARAMTERI NON C'E' UN ATTRIBUTO IMPOSTATO INSERISCE TUTTI I SOGGETTI
UPDATE CLIENTI SET CLIENTI.ATTSEL = 0
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI;

go 

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_1
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 1;

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_2
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 2;

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_3
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 3;

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_4
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 4;

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_5
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 5;

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_6
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 6;

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_7
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 7;

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_8
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 8;

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_9
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 9;

UPDATE CLIENTI SET CLIENTI.ATTSEL=CLIENTI.CODATT_10
FROM AV_COL_TMP.dbo.AANCL1_01 CLIENTI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON CLIENTI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.CNRATT = 10;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.SOGGETTI
(ID_AZI,
CODICE,
TIPSOG,
CODSOG,
RAGSOC,
PARIVA)
SELECT
SORGENTE.ID_AZI,
SORGENTE.CODICE,
'C',
'C'+REPLICATE('0',6-LEN(RTRIM(SORGENTE.CODICE))) + RTRIM(SORGENTE.CODICE),
SORGENTE.RAGSOC,
SORGENTE.PARIVA
FROM AV_COL_TMP.dbo.AANCL1_01 SORGENTE 
LEFT JOIN AV_COL.dbo.SOGGETTI DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.CODICE = DESTINAZIONE.CODICE
AND DESTINAZIONE.TIPSOG = 'C'
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON SORGENTE.ID_AZI = PARAMETRI.ID_AZI
WHERE DESTINAZIONE.CODICE IS NULL
AND SORGENTE.ATTSEL = PARAMETRI.CCDATT;

-- RIMOZIONE DEI CLIENTI CANCELLATI SU AV2000 (NON SI CANCELLANO MAI!) O CON ATTRIBUTO NO
DELETE AV_COL.dbo.SOGGETTI
FROM AV_COL.dbo.SOGGETTI 
LEFT JOIN AV_COL_TMP.dbo.AANCL1_01 ON AV_COL_TMP.dbo.AANCL1_01.ID_AZI = AV_COL.dbo.SOGGETTI.ID_AZI AND AV_COL_TMP.dbo.AANCL1_01.CODICE = AV_COL.dbo.SOGGETTI.CODICE
JOIN AV_COL_TMP.dbo.APICOL_01 ON AV_COL.dbo.SOGGETTI.ID_AZI = AV_COL_TMP.dbo.APICOL_01.ID_AZI
WHERE AV_COL.dbo.SOGGETTI.TIPSOG = 'C' AND (AV_COL_TMP.dbo.AANCL1_01.CODICE IS NULL OR AV_COL_TMP.dbo.AANCL1_01.ATTSEL <> AV_COL_TMP.dbo.APICOL_01.CCDATT);

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODICE=SORGENTE.CODICE,
DESTINAZIONE.TIPSOG='C',
DESTINAZIONE.CODSOG='C'+REPLICATE('0',6-LEN(RTRIM(SORGENTE.CODICE))) + RTRIM(SORGENTE.CODICE),
DESTINAZIONE.RAGSOC=SORGENTE.RAGSOC,
DESTINAZIONE.PARIVA=SORGENTE.PARIVA
FROM AV_COL.dbo.SOGGETTI DESTINAZIONE
JOIN AV_COL_TMP.dbo.AANCL1_01 SORGENTE
ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI
AND DESTINAZIONE.CODICE = SORGENTE.CODICE
AND DESTINAZIONE.TIPSOG = 'C'
WHERE DESTINAZIONE.RAGSOC <> SORGENTE.RAGSOC 
OR DESTINAZIONE.PARIVA <> SORGENTE.PARIVA;

go

-- FORNITORI --

-- AGGIUNGE UN CAMPO ALLA TABELLA CLIENTI CON IL VALORE DELL'ATTRIBUTO INSERITO NEI PARAMETRI DI INTERFACCIA COME SELEZIONE DEI CLIENTI DA ESPORTARE
-- MI SEMBRA L'UNICO MODO PER POTERLO FILTRARE NELLE SUCCESSIVE OPERAZIONI CONSIDERANDO CHE IN SQL NON CI SONO GLI ARRAY

ALTER TABLE AV_COL_TMP.dbo.AANFO1_01 ADD ATTSEL INTEGER;

go

-- SERVE PER NON AVERE IL VALORE NULL IN MODOC HE SE NEI PARAMTERI NON C'E' UN ATTRIBUTO IMPOSTATO INSERISCE TUTTI I SOGGETTI
UPDATE FORNITORI SET FORNITORI.ATTSEL = 0
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI

go 

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_1
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 1;

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_2
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 2;

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_3
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 3;

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_4
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 4;

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_5
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 5;

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_6
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 6;

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_7
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 7;

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_8
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 8;

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_9
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 9;

UPDATE FORNITORI SET FORNITORI.ATTSEL=FORNITORI.CODATT_10
FROM AV_COL_TMP.dbo.AANFO1_01 FORNITORI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON FORNITORI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.FNRATT = 10;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.SOGGETTI
(ID_AZI,
CODICE,
TIPSOG,
CODSOG,
RAGSOC,
PARIVA)
SELECT
SORGENTE.ID_AZI,
SORGENTE.CODICE,
'F',
'F'+REPLICATE('0',6-LEN(RTRIM(SORGENTE.CODICE))) + RTRIM(SORGENTE.CODICE),
SORGENTE.RAGSOC,
SORGENTE.PARIVA
FROM AV_COL_TMP.dbo.AANFO1_01 SORGENTE LEFT JOIN AV_COL.dbo.SOGGETTI DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.CODICE = DESTINAZIONE.CODICE
AND DESTINAZIONE.TIPSOG = 'F'
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON SORGENTE.ID_AZI = PARAMETRI.ID_AZI
WHERE DESTINAZIONE.CODICE IS NULL
AND SORGENTE.ATTSEL = PARAMETRI.FCDATT;

go

-- RIMOZIONE DEI FORNITORI CANCELLATI SU AV2000 (NON SI CANCELLANO MAI!) O CON ATTRIBUTO NO
DELETE AV_COL.dbo.SOGGETTI
FROM AV_COL.dbo.SOGGETTI 
LEFT JOIN AV_COL_TMP.dbo.AANFO1_01 ON AV_COL_TMP.dbo.AANFO1_01.ID_AZI = AV_COL.dbo.SOGGETTI.ID_AZI AND AV_COL_TMP.dbo.AANFO1_01.CODICE = AV_COL.dbo.SOGGETTI.CODICE
JOIN AV_COL_TMP.dbo.APICOL_01 ON AV_COL.dbo.SOGGETTI.ID_AZI = AV_COL_TMP.dbo.APICOL_01.ID_AZI
WHERE AV_COL.dbo.SOGGETTI.TIPSOG = 'F' AND (AV_COL_TMP.dbo.AANFO1_01.CODICE IS NULL OR AV_COL_TMP.dbo.AANFO1_01.ATTSEL <> AV_COL_TMP.dbo.APICOL_01.FCDATT);

go

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODICE=SORGENTE.CODICE,
DESTINAZIONE.TIPSOG='F',
DESTINAZIONE.CODSOG='F'+REPLICATE('0',6-LEN(RTRIM(SORGENTE.CODICE))) + RTRIM(SORGENTE.CODICE),
DESTINAZIONE.RAGSOC=SORGENTE.RAGSOC,
DESTINAZIONE.PARIVA=SORGENTE.PARIVA
FROM AV_COL.dbo.SOGGETTI DESTINAZIONE
JOIN AV_COL_TMP.dbo.AANFO1_01 SORGENTE
ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI
AND DESTINAZIONE.CODICE = SORGENTE.CODICE
AND DESTINAZIONE.TIPSOG = 'F'
WHERE DESTINAZIONE.RAGSOC <> SORGENTE.RAGSOC 
OR DESTINAZIONE.PARIVA <> SORGENTE.PARIVA;

go

-- SOCI-- 

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.SOGGETTI
(ID_AZI,
CODICE,
TIPSOG,
CODSOG,
RAGSOC,
PARIVA)
SELECT
SORGENTE.ID_AZI,
SORGENTE.CODSOC,
'S',
'S'+REPLICATE('0',6-LEN(RTRIM(SORGENTE.CODSOC))) + RTRIM(SORGENTE.CODSOC),
SORGENTE.RAGSOC,
SORGENTE.PARIVA
FROM AV_COL_TMP.dbo.ARUGBS_01 SORGENTE LEFT JOIN AV_COL.dbo.SOGGETTI DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.CODSOC = DESTINAZIONE.CODICE
AND DESTINAZIONE.TIPSOG = 'S'
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON SORGENTE.ID_AZI = PARAMETRI.ID_AZI
WHERE DESTINAZIONE.CODICE IS NULL
AND SORGENTE.CODVEN = PARAMETRI.CODVEN;

go

-- RIMOZIONE DEI SOCI CANCELLATI SU AV2000 NELLA VENDEMMIA CORRENTE 
DELETE DESTINAZIONE
FROM AV_COL.dbo.SOGGETTI DESTINAZIONE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
LEFT JOIN AV_COL_TMP.dbo.ARUGBS_01 SORGENTE ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI 
AND SORGENTE.CODSOC = DESTINAZIONE.CODICE
AND SORGENTE.CODVEN = PARAMETRI.CODVEN
WHERE DESTINAZIONE.TIPSOG = 'S' AND SORGENTE.CODSOC IS NULL

go

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODICE=SORGENTE.CODSOC,
DESTINAZIONE.TIPSOG='S',
DESTINAZIONE.CODSOG='S'+REPLICATE('0',6-LEN(RTRIM(SORGENTE.CODSOC))) + RTRIM(SORGENTE.CODSOC),
DESTINAZIONE.RAGSOC=SORGENTE.RAGSOC,
DESTINAZIONE.PARIVA=SORGENTE.PARIVA
FROM AV_COL.dbo.SOGGETTI DESTINAZIONE
LEFT JOIN AV_COL_TMP.dbo.ARUGBS_01 SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.CODICE = SORGENTE.CODSOC AND DESTINAZIONE.TIPSOG = 'S'
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
WHERE (DESTINAZIONE.RAGSOC <> SORGENTE.RAGSOC 
OR DESTINAZIONE.PARIVA <> SORGENTE.PARIVA)
AND SORGENTE.CODVEN = PARAMETRI.CODVEN;

go


-- ************
-- PRODOTTI RU --
-- ************

-- CANCELLA TABELLA STRUTTURA (SERVE PER FARE I TEST)
IF EXISTS (SELECT TABLE_NAME FROM AV_COL_TMP.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'STRUTTURA_PRODOTTI') DROP TABLE AV_COL_TMP.dbo.STRUTTURA_PRODOTTI;

go

-- CREA TABELLA STRUTTURA INSERENDO TUTTI I VALORI INQUESTO CASO, IN MODO DA AVERE UNA TABELLA PRONTAPER L'ALLINEAMENTO CON IL DB REALE

SELECT 
PRODOTTI.ID_AZI,
PRODOTTI.IDPROD,
PRODOTTI.IDFAMI,
FAMIGLIE.CODICE AS CODFAM,
FAMIGLIE.DESCRI,
PRODOTTI.ANNATA,
FAMIGLIE.CODCAT,
FAMIGLIE.CODATT,
FAMIGLIE.CODCLA,
FAMIGLIE.CODDOI,
FAMIGLIE.CODEBA,
FAMIGLIE.CODZON,
FAMIGLIE.CODSOT,
FAMIGLIE.CODVIG,
FAMIGLIE.CODCOL,
FAMIGLIE.CODBIO,
FAMIGLIE.CODSTF,
CAST(
     SUBSTRING(
        (   SELECT ','+TB1.CODMEN  AS [text()]
            FROM AV_COL_TMP.DBO.ARUFA1_01 TB1
            WHERE TB1.ID_AZI = FAMIGLIE.ID_AZI AND TB1.IDFAMI = FAMIGLIE.IDFAMI
            ORDER BY TB1.CODMEN
            FOR XML PATH ('')
        ), 2, 1000) AS VARCHAR(200)) DESMEN,
CAST(
  (CASE
      WHEN PRODOTTI.CODCOM <> 0 THEN PRODOTTI.TIPCOM+REPLICATE('0',6-LEN(RTRIM(PRODOTTI.CODCOM))) + RTRIM(PRODOTTI.CODCOM)
      ELSE NULL
   END) AS varchar(7)) CODCOM,
CAST(
  (CASE
      WHEN PRODOTTI.TIPCOM='C' THEN CLIENTI.RAGSOC
      WHEN PRODOTTI.TIPCOM='F' THEN FORNITORI.RAGSOC
      ELSE ' '
   END) AS varchar(40)) DESCOM,
CAST(
     SUBSTRING(
        (   SELECT ','+TB1.CODMAN  AS [text()]
            FROM AV_COL_TMP.DBO.ARUPR4_01 TB1
            WHERE TB1.ID_AZI = PRODOTTI.ID_AZI AND TB1.IDPROD = PRODOTTI.IDPROD
            ORDER BY TB1.CODMAN
            FOR XML PATH ('')
        ), 2, 1000) AS VARCHAR(200)) PRAENO,
PRODOTTI.MASSAV,        
PRODOTTI.NUMCER,        
PRODOTTI.DTACER,        
PRODOTTI.CODORU,
PRODOTTI.CODPRV,
CAST(
     SUBSTRING(
        (   SELECT ','+TB1.CODISO  AS [text()]
            FROM AV_COL_TMP.DBO.ARUPR2_01 TB1
            WHERE TB1.ID_AZI = PRODOTTI.ID_AZI AND TB1.IDPROD = PRODOTTI.IDPROD
            ORDER BY TB1.CODISO
            FOR XML PATH ('')
        ), 2, 1000) AS VARCHAR(200)) PAEPRV,
PRODOTTI.CODPAR,
CAST(
     SUBSTRING(
        (   SELECT ','+'TB1.CODVAR' AS [text()]
            FROM AV_COL_TMP.DBO.ARUPR3_01 TB1
            WHERE TB1.ID_AZI = PRODOTTI.ID_AZI AND TB1.IDPROD = PRODOTTI.IDPROD
            ORDER BY TB1.CODVAR
            FOR XML PATH ('')
        ), 2, 1000) AS VARCHAR(200)) DESVAR,
PRODOTTI.ALTVAR
INTO AV_COL_TMP.dbo.STRUTTURA_PRODOTTI
FROM AV_COL_TMP.dbo.ARUPR1_01 PRODOTTI
LEFT JOIN AV_COL_TMP.dbo.ARUFAM_01 FAMIGLIE ON PRODOTTI.ID_AZI = FAMIGLIE.ID_AZI AND PRODOTTI.IDFAMI = FAMIGLIE.IDFAMI
LEFT JOIN AV_COL_TMP.dbo.AANCL1_01 CLIENTI ON PRODOTTI.ID_AZI = CLIENTI.ID_AZI AND PRODOTTI.CODCOM = CLIENTI.CODICE AND PRODOTTI.TIPCOM = 'C'
LEFT JOIN AV_COL_TMP.dbo.AANFO1_01 FORNITORI ON PRODOTTI.ID_AZI = FORNITORI.ID_AZI AND PRODOTTI.CODCOM = FORNITORI.CODICE AND PRODOTTI.TIPCOM = 'F'
WHERE FAMIGLIE.CODSTF = 1;

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_PRODOTTI ALTER COLUMN ID_AZI VARCHAR(2) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_PRODOTTI ALTER COLUMN IDPROD DECIMAL(13,0) NOT NULL

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_PRODOTTI ADD PRIMARY KEY (
ID_AZI,
IDPROD);

go

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'PRODOTTI') 
SELECT * INTO AV_COL.dbo.PRODOTTI FROM AV_COL_TMP.dbo.STRUTTURA_PRODOTTI WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.PRODOTTI
(ID_AZI,
IDPROD,
IDFAMI,
CODFAM,
DESCRI,
ANNATA,
CODCAT,
CODATT,
CODCLA,
CODDOI,
CODEBA,
CODZON,
CODSOT,
CODVIG,
CODCOL,
CODBIO,
CODSTF,
DESMEN,
CODCOM,
DESCOM,
PRAENO,
MASSAV,        
NUMCER,        
DTACER,
CODORU,
CODPRV,
PAEPRV,
CODPAR,
DESVAR,
ALTVAR)
SELECT
SORGENTE.ID_AZI,
SORGENTE.IDPROD,
SORGENTE.IDFAMI,
SORGENTE.CODFAM,
SORGENTE.DESCRI,
SORGENTE.ANNATA,
SORGENTE.CODCAT,
SORGENTE.CODATT,
SORGENTE.CODCLA,
SORGENTE.CODDOI,
SORGENTE.CODEBA,
SORGENTE.CODZON,
SORGENTE.CODSOT,
SORGENTE.CODVIG,
SORGENTE.CODCOL,
SORGENTE.CODBIO,
SORGENTE.CODSTF,
SORGENTE.DESMEN,
SORGENTE.CODCOM,
SORGENTE.DESCOM,
SORGENTE.PRAENO,
SORGENTE.MASSAV,        
SORGENTE.NUMCER,        
SORGENTE.DTACER,
SORGENTE.CODORU,
SORGENTE.CODPRV,
SORGENTE.PAEPRV,
SORGENTE.CODPAR,
SORGENTE.DESVAR,
SORGENTE.ALTVAR
From AV_COL_TMP.dbo.STRUTTURA_PRODOTTI SORGENTE LEFT JOIN AV_COL.dbo.PRODOTTI DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.IDPROD = DESTINAZIONE.IDPROD
WHERE DESTINAZIONE.IDPROD IS NULL;

-- RIMOZIONE DEI PRODOTTI CANCELLATI SU AV2000 (NON SI CANCELLANO MAI!)
DELETE AV_COL.dbo.PRODOTTI
FROM AV_COL.dbo.PRODOTTI
LEFT JOIN AV_COL_TMP.dbo.STRUTTURA_PRODOTTI ON AV_COL_TMP.dbo.STRUTTURA_PRODOTTI.ID_AZI = AV_COL.dbo.PRODOTTI.ID_AZI AND AV_COL_TMP.dbo.STRUTTURA_PRODOTTI.IDPROD = AV_COL.dbo.PRODOTTI.IDPROD
WHERE AV_COL_TMP.dbo.STRUTTURA_PRODOTTI.IDPROD IS NULL;

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.IDPROD=SORGENTE.IDPROD,
DESTINAZIONE.IDFAMI=SORGENTE.IDFAMI,
DESTINAZIONE.CODFAM=SORGENTE.CODFAM,
DESTINAZIONE.DESCRI=SORGENTE.DESCRI,
DESTINAZIONE.ANNATA=SORGENTE.ANNATA,
DESTINAZIONE.CODCAT=SORGENTE.CODCAT,
DESTINAZIONE.CODATT=SORGENTE.CODATT,
DESTINAZIONE.CODCLA=SORGENTE.CODCLA,
DESTINAZIONE.CODDOI=SORGENTE.CODDOI,
DESTINAZIONE.CODEBA=SORGENTE.CODEBA,
DESTINAZIONE.CODZON=SORGENTE.CODZON,
DESTINAZIONE.CODSOT=SORGENTE.CODSOT,
DESTINAZIONE.CODVIG=SORGENTE.CODVIG,
DESTINAZIONE.CODCOL=SORGENTE.CODCOL,
DESTINAZIONE.CODBIO=SORGENTE.CODBIO,
DESTINAZIONE.CODSTF=SORGENTE.CODSTF,
DESTINAZIONE.DESMEN=SORGENTE.DESMEN,
DESTINAZIONE.CODCOM=SORGENTE.CODCOM,
DESTINAZIONE.DESCOM=SORGENTE.DESCOM,
DESTINAZIONE.PRAENO=SORGENTE.PRAENO,
DESTINAZIONE.MASSAV=SORGENTE.MASSAV,        
DESTINAZIONE.NUMCER=SORGENTE.NUMCER,      
DESTINAZIONE.DTACER=SORGENTE.DTACER,
DESTINAZIONE.CODORU=SORGENTE.CODORU,
DESTINAZIONE.CODPRV=SORGENTE.CODPRV,
DESTINAZIONE.PAEPRV=SORGENTE.PAEPRV,
DESTINAZIONE.CODPAR=SORGENTE.CODPAR,
DESTINAZIONE.DESVAR=SORGENTE.DESVAR,
DESTINAZIONE.ALTVAR=SORGENTE.ALTVAR
FROM AV_COL.dbo.PRODOTTI DESTINAZIONE
JOIN AV_COL_TMP.dbo.STRUTTURA_PRODOTTI SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.IDPROD = SORGENTE.IDPROD
JOIN AV_COL_TMP.dbo.ARUFAM_01 FAMIGLIA_SORGENTE ON FAMIGLIA_SORGENTE.ID_AZI = SORGENTE.ID_AZI AND FAMIGLIA_SORGENTE.IDFAMI = SORGENTE.IDFAMI
WHERE DESTINAZIONE.IDFAMI <> SORGENTE.IDFAMI
OR DESTINAZIONE.DESCRI <> SORGENTE.DESCRI
OR DESTINAZIONE.ANNATA <> SORGENTE.ANNATA;

go

--
-- ***********
-- GIACENZE RU --
-- ***********

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'GIACENZE') 
SELECT * INTO AV_COL.dbo.GIACENZE FROM AV_COL_TMP.dbo.ARUGBT_01 WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

-- LE GIACENZE PRESENTI IN ARUGBT SONO SOLO QUELLE DELLO SFUSO (VEDI NRUGBT)

INSERT INTO AV_COL.dbo.GIACENZE
(ID_AZI,
CODREG,
IDPROD,
QTAGIA)
SELECT
GIACENZE_SORGENTE.ID_AZI,
GIACENZE_SORGENTE.CODREG,
GIACENZE_SORGENTE.IDPROD,
GIACENZE_SORGENTE.QTAGIA
FROM AV_COL_TMP.dbo.ARUGBT_01 GIACENZE_SORGENTE 
LEFT JOIN AV_COL.dbo.GIACENZE DESTINAZIONE
ON GIACENZE_SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND GIACENZE_SORGENTE.CODREG = DESTINAZIONE.CODREG
AND GIACENZE_SORGENTE.IDPROD = DESTINAZIONE.IDPROD
WHERE DESTINAZIONE.IDPROD IS NULL
AND GIACENZE_SORGENTE.QTAGIA <> 0;

-- RIMOZIONE DELLE GIACENZE NON PIU' PRESENTI IN AV2000 
DELETE AV_COL.dbo.GIACENZE
FROM AV_COL.dbo.GIACENZE
LEFT JOIN AV_COL_TMP.dbo.ARUGBT_01 
ON AV_COL_TMP.dbo.ARUGBT_01.ID_AZI = AV_COL.dbo.GIACENZE.ID_AZI
AND AV_COL_TMP.dbo.ARUGBT_01.CODREG = AV_COL.dbo.GIACENZE.CODREG
AND AV_COL_TMP.dbo.ARUGBT_01.IDPROD = AV_COL.dbo.GIACENZE.IDPROD
WHERE AV_COL.dbo.GIACENZE.QTAGIA <> 0
AND (AV_COL_TMP.dbo.ARUGBT_01.QTAGIA = 0 OR AV_COL_TMP.dbo.ARUGBT_01.QTAGIA IS NULL);

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=GIACENZE_SORGENTE.ID_AZI,
DESTINAZIONE.CODREG=GIACENZE_SORGENTE.CODREG,
DESTINAZIONE.IDPROD=GIACENZE_SORGENTE.IDPROD,
DESTINAZIONE.QTAGIA=GIACENZE_SORGENTE.QTAGIA 
FROM AV_COL.dbo.GIACENZE DESTINAZIONE
JOIN AV_COL_TMP.dbo.ARUGBT_01 GIACENZE_SORGENTE
ON DESTINAZIONE.ID_AZI = GIACENZE_SORGENTE.ID_AZI
AND DESTINAZIONE.CODREG = GIACENZE_SORGENTE.CODREG
AND DESTINAZIONE.IDPROD = GIACENZE_SORGENTE.IDPROD
WHERE DESTINAZIONE.QTAGIA <> GIACENZE_SORGENTE.QTAGIA;

go

-- **************************
-- GIACENZE RU DETT.VASCHE --
-- **************************

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'GIACENZE_VASCHE') 
SELECT * INTO AV_COL.dbo.GIACENZE_VASCHE FROM AV_COL_TMP.dbo.ARUGBV_01 WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

-- LE GIACENZE PRESENTI IN ARUGBV SONO SOLO QUELLE DELLO SFUSO (VEDI NRUGBT)

INSERT INTO AV_COL.dbo.GIACENZE_VASCHE
(ID_AZI,
CODREG,
IDPROD,
CODVAS,
QTAGIA)
SELECT
GIACENZE_VASCHE_SORGENTE.ID_AZI,
GIACENZE_VASCHE_SORGENTE.CODREG,
GIACENZE_VASCHE_SORGENTE.IDPROD,
GIACENZE_VASCHE_SORGENTE.CODVAS,
GIACENZE_VASCHE_SORGENTE.QTAGIA
FROM AV_COL_TMP.dbo.ARUGBV_01 GIACENZE_VASCHE_SORGENTE 
LEFT JOIN AV_COL.dbo.GIACENZE_VASCHE DESTINAZIONE
ON GIACENZE_VASCHE_SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND GIACENZE_VASCHE_SORGENTE.CODREG = DESTINAZIONE.CODREG
AND GIACENZE_VASCHE_SORGENTE.IDPROD = DESTINAZIONE.IDPROD
AND GIACENZE_VASCHE_SORGENTE.CODVAS = DESTINAZIONE.CODVAS
WHERE (DESTINAZIONE.IDPROD IS NULL OR DESTINAZIONE.CODVAS IS NULL)
AND GIACENZE_VASCHE_SORGENTE.QTAGIA <> 0;

-- RIMOZIONE DELLE GIACENZE_VASCHE NON PIU' PRESENTI IN AV2000 
DELETE AV_COL.dbo.GIACENZE_VASCHE
FROM AV_COL.dbo.GIACENZE_VASCHE
LEFT JOIN AV_COL_TMP.dbo.ARUGBV_01 
ON AV_COL_TMP.dbo.ARUGBV_01.ID_AZI = AV_COL.dbo.GIACENZE_VASCHE.ID_AZI
AND AV_COL_TMP.dbo.ARUGBV_01.CODREG = AV_COL.dbo.GIACENZE_VASCHE.CODREG
AND AV_COL_TMP.dbo.ARUGBV_01.IDPROD = AV_COL.dbo.GIACENZE_VASCHE.IDPROD
AND AV_COL_TMP.dbo.ARUGBV_01.CODVAS = AV_COL.dbo.GIACENZE_VASCHE.CODVAS
WHERE AV_COL.dbo.GIACENZE_VASCHE.QTAGIA <> 0
AND (AV_COL_TMP.dbo.ARUGBV_01.QTAGIA = 0 OR AV_COL_TMP.dbo.ARUGBV_01.QTAGIA IS NULL);

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=GIACENZE_VASCHE_SORGENTE.ID_AZI,
DESTINAZIONE.CODREG=GIACENZE_VASCHE_SORGENTE.CODREG,
DESTINAZIONE.IDPROD=GIACENZE_VASCHE_SORGENTE.IDPROD,
DESTINAZIONE.CODVAS=GIACENZE_VASCHE_SORGENTE.CODVAS,
DESTINAZIONE.QTAGIA=GIACENZE_VASCHE_SORGENTE.QTAGIA 
FROM AV_COL.dbo.GIACENZE_VASCHE DESTINAZIONE
JOIN AV_COL_TMP.dbo.ARUGBV_01 GIACENZE_VASCHE_SORGENTE
ON DESTINAZIONE.ID_AZI = GIACENZE_VASCHE_SORGENTE.ID_AZI
AND DESTINAZIONE.CODREG = GIACENZE_VASCHE_SORGENTE.CODREG
AND DESTINAZIONE.IDPROD = GIACENZE_VASCHE_SORGENTE.IDPROD
AND DESTINAZIONE.CODVAS = GIACENZE_VASCHE_SORGENTE.CODVAS
WHERE DESTINAZIONE.QTAGIA <> GIACENZE_VASCHE_SORGENTE.QTAGIA;

go

-- *****************
-- BOLLE VENDITA --
-- *****************

-- CANCELLA TABELLA STRUTTURA (SERVE PER FARE I TEST)
IF EXISTS (SELECT TABLE_NAME FROM AV_COL_TMP.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'STRUTTURA_DOCUMENTI_V') DROP TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V;
go

-- CREA TABELLA STRUTTURA

SELECT 
TESTATA.ID_AZI,
REGISTRI.CODICE AS CODREG,
REGISTRI.DESCRI AS DESREG,
TESTATA.NUMBOL,
TESTATA.NUMDOC,
'C'+REPLICATE('0',6-LEN(RTRIM(CLIENTI.CODICE))) + RTRIM(CLIENTI.CODICE) AS CODSOG,
TESTATA.DTABOL,
RIGHE.NUMRIG+RIGHE.NUMCOM AS IDRIGA,
--RIGHE.NUMRIG AS IDRIGA,
ARTICOLI.DESCRI AS DESART,
RIGHE.QTAVEN,
TRASPORTATORI.RAGSOC AS DESTRA
INTO AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V
FROM AV_COL_TMP.dbo.ABOLL1_01 AS TESTATA
LEFT JOIN AV_COL_TMP.dbo.AANCL1_01 AS CLIENTI ON TESTATA.ID_AZI = CLIENTI.ID_AZI AND TESTATA.CODCLI = CLIENTI.CODICE 
LEFT JOIN AV_COL_TMP.dbo.ATBATR_01 AS TRASPORTATORI ON TESTATA.ID_AZI = TRASPORTATORI.ID_AZI AND TESTATA.CODTRA = TRASPORTATORI.CODICE 
LEFT JOIN AV_COL_TMP.dbo.ABOLLZ_01 AS RIGHE ON TESTATA.ID_AZI = RIGHE.ID_AZI AND TESTATA.NUMBOL = RIGHE.NUMBOL 
LEFT JOIN AV_COL_TMP.dbo.ATBADC_01 AS CAUSALI ON TESTATA.ID_AZI = CAUSALI.ID_AZI AND TESTATA.CAUBOL = CAUSALI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ATBAMA_01 AS MAGAZZINI ON TESTATA.ID_AZI = MAGAZZINI.ID_AZI AND TESTATA.CODMG1 = MAGAZZINI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ARUREG_01 AS REGISTRI ON MAGAZZINI.ID_AZI = REGISTRI.ID_AZI AND MAGAZZINI.REGVUN = REGISTRI.CODICE
LEFT JOIN AV_COL_TMP.dbo.AARTI1_01 AS ARTICOLI ON RIGHE.ID_AZI = ARTICOLI.ID_AZI AND RIGHE.CODART = ARTICOLI.CODICE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON TESTATA.ID_AZI = PARAMETRI.ID_AZI
WHERE (CAUSALI.TIPDOC = '1' OR CAUSALI.TIPDOC = '5')
AND TESTATA.NUMDOC <> ' '
AND (TESTATA.DTABOL >= PARAMETRI.DTAELA OR PARAMETRI.DTAELA IS NULL)

go

-- A soave hanno delle bolle senza righe....

DELETE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V 
FROM AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V 
WHERE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V.IDRIGA IS NULL 

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V ALTER COLUMN ID_AZI VARCHAR(2) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V ALTER COLUMN NUMBOL DECIMAL(10,0) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V ALTER COLUMN IDRIGA VARCHAR(18) NOT NULL
go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V ADD PRIMARY KEY (
ID_AZI,
NUMBOL,
IDRIGA)

go

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'DOCUMENTI_V') 
SELECT * INTO AV_COL.dbo.DOCUMENTI_V FROM AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.DOCUMENTI_V
(ID_AZI,
CODREG,
DESREG,
NUMBOL,
NUMDOC,
CODSOG,
DTABOL,
IDRIGA,
DESART,
QTAVEN,
DESTRA)
SELECT
SORGENTE.ID_AZI,
SORGENTE.CODREG,
SORGENTE.DESREG,
SORGENTE.NUMBOL,
SORGENTE.NUMDOC,
SORGENTE.CODSOG,
SORGENTE.DTABOL,
SORGENTE.IDRIGA,
SORGENTE.DESART,
SORGENTE.QTAVEN,
SORGENTE.DESTRA
From AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V SORGENTE LEFT JOIN AV_COL.dbo.DOCUMENTI_V DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.NUMBOL = DESTINAZIONE.NUMBOL
AND SORGENTE.IDRIGA = DESTINAZIONE.IDRIGA
WHERE DESTINAZIONE.IDRIGA IS NULL;

-- RIMOZIONE DEI DOCUMENTI CANCELLATI SU AV2000 (NON SI CANCELLANO MAI!) O SENZA SOGGETTO
DELETE AV_COL.dbo.DOCUMENTI_V
FROM AV_COL.dbo.DOCUMENTI_V
LEFT JOIN AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V ON AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V.ID_AZI = AV_COL.dbo.DOCUMENTI_V.ID_AZI 
AND AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V.NUMBOL = AV_COL.dbo.DOCUMENTI_V.NUMBOL
AND AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V.IDRIGA = AV_COL.dbo.DOCUMENTI_V.IDRIGA
LEFT JOIN AV_COL.dbo.SOGGETTI ON AV_COL.dbo.DOCUMENTI_V.ID_AZI = AV_COL.dbo.SOGGETTI.ID_AZI 
AND AV_COL.dbo.DOCUMENTI_V.CODSOG = AV_COL.dbo.SOGGETTI.CODSOG
WHERE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V.IDRIGA IS NULL
OR (AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V.IDRIGA IS NOT NULL and AV_COL.dbo.SOGGETTI.CODSOG IS NULL);

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODREG=SORGENTE.CODREG,
DESTINAZIONE.DESREG=SORGENTE.DESREG,
DESTINAZIONE.NUMBOL=SORGENTE.NUMBOL,
DESTINAZIONE.NUMDOC=SORGENTE.NUMDOC,
DESTINAZIONE.CODSOG=SORGENTE.CODSOG,
DESTINAZIONE.DTABOL=SORGENTE.DTABOL,
DESTINAZIONE.IDRIGA=SORGENTE.IDRIGA,
DESTINAZIONE.DESART=SORGENTE.DESART,
DESTINAZIONE.QTAVEN=SORGENTE.QTAVEN,
DESTINAZIONE.DESTRA=SORGENTE.DESTRA
FROM AV_COL.dbo.DOCUMENTI_V DESTINAZIONE
JOIN AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.NUMBOL = SORGENTE.NUMBOL AND DESTINAZIONE.IDRIGA = SORGENTE.IDRIGA
WHERE DESTINAZIONE.NUMDOC <> SORGENTE.NUMDOC
OR DESTINAZIONE.CODSOG <> SORGENTE.CODSOG
OR DESTINAZIONE.CODREG <> SORGENTE.CODREG
OR DESTINAZIONE.DTABOL <> SORGENTE.DTABOL
OR DESTINAZIONE.DESART <> SORGENTE.DESART
OR DESTINAZIONE.QTAVEN <> SORGENTE.QTAVEN
OR DESTINAZIONE.DESTRA <> SORGENTE.DESTRA;

go

-- ****************************
-- BOLLE VENDITA DETT.VASCHE --
-- ****************************

-- CANCELLA TABELLA STRUTTURA (SERVE PER FARE I TEST)
IF EXISTS (SELECT TABLE_NAME FROM AV_COL_TMP.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'STRUTTURA_DOCUMENTI_V_VASCHE') DROP TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE;
go

-- CREA TABELLA STRUTTURA

SELECT 
ID_AZI,
NUMBOL,
NUMRIG AS IDRIGA,
CODVAS,
QTAVAS
INTO AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE
FROM AV_COL_TMP.dbo.ABOLLQ_01 AS VASCHE_BOLLE
WHERE VASCHE_BOLLE.FLAGPA = 'P'

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE ALTER COLUMN ID_AZI VARCHAR(2) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE ALTER COLUMN NUMBOL DECIMAL(10,0) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE ALTER COLUMN IDRIGA VARCHAR(18) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE ALTER COLUMN CODVAS VARCHAR(8) NOT NULL
go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE ADD PRIMARY KEY (
ID_AZI,
NUMBOL,
IDRIGA,
CODVAS)

go

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'DOCUMENTI_V_VASCHE') 
SELECT * INTO AV_COL.dbo.DOCUMENTI_V_VASCHE FROM AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.DOCUMENTI_V_VASCHE
(ID_AZI,
NUMBOL,
IDRIGA,
CODVAS,
QTAVAS)
SELECT
SORGENTE.ID_AZI,
SORGENTE.NUMBOL,
SORGENTE.IDRIGA,
SORGENTE.CODVAS,
SORGENTE.QTAVAS
From AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE SORGENTE LEFT JOIN AV_COL.dbo.DOCUMENTI_V_VASCHE DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.NUMBOL = DESTINAZIONE.NUMBOL
AND SORGENTE.IDRIGA = DESTINAZIONE.IDRIGA
WHERE DESTINAZIONE.IDRIGA IS NULL;

go 

-- RIMOZIONE DEL DETTAGLIO VASCHE CANCELLATO SU AV2000 
DELETE AV_COL.dbo.DOCUMENTI_V_VASCHE
FROM AV_COL.dbo.DOCUMENTI_V_VASCHE
LEFT JOIN AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE ON AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE.ID_AZI = AV_COL.dbo.DOCUMENTI_V_VASCHE.ID_AZI 
AND AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE.NUMBOL = AV_COL.dbo.DOCUMENTI_V_VASCHE.NUMBOL
AND AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE.IDRIGA = AV_COL.dbo.DOCUMENTI_V_VASCHE.IDRIGA
WHERE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE.IDRIGA IS NULL;

go 

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.NUMBOL=SORGENTE.NUMBOL,
DESTINAZIONE.IDRIGA=SORGENTE.IDRIGA,
DESTINAZIONE.CODVAS=SORGENTE.CODVAS,
DESTINAZIONE.QTAVAS=SORGENTE.QTAVAS
FROM AV_COL.dbo.DOCUMENTI_V_VASCHE DESTINAZIONE
JOIN AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_V_VASCHE SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.NUMBOL = SORGENTE.NUMBOL AND DESTINAZIONE.IDRIGA = SORGENTE.IDRIGA
WHERE DESTINAZIONE.CODVAS <> SORGENTE.CODVAS
OR DESTINAZIONE.QTAVAS <> SORGENTE.QTAVAS;

go

-- *****************
-- BOLLE ACQUISTO --
-- *****************

-- CANCELLA TABELLA STRUTTURA (SERVE PER FARE I TEST)
IF EXISTS (SELECT TABLE_NAME FROM AV_COL_TMP.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'STRUTTURA_DOCUMENTI_A') DROP TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A;
go

-- CREA TABELLA STRUTTURA
SELECT 
TESTATA.ID_AZI,
REGISTRI.CODICE AS CODREG,
REGISTRI.DESCRI AS DESREG,
TESTATA.NUMBOL,
TESTATA.NUMDOC,
'F'+REPLICATE('0',6-LEN(RTRIM(FORNITORI.CODICE))) + RTRIM(FORNITORI.CODICE) AS CODSOG,
TESTATA.DTABOL,
RIGHE.NUMRIG AS IDRIGA,
ARTICOLI.DESCRI AS DESART,
RIGHE.QTABOL,
RIGHE.LOTTOS
INTO AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A
FROM AV_COL_TMP.dbo.AACQU1_01 AS TESTATA
LEFT JOIN AV_COL_TMP.dbo.AANFO1_01 AS FORNITORI ON TESTATA.ID_AZI = FORNITORI.ID_AZI AND TESTATA.CODFOR = FORNITORI.CODICE 
LEFT JOIN AV_COL_TMP.dbo.ATBAMA_01 AS MAGAZZINI ON TESTATA.ID_AZI = MAGAZZINI.ID_AZI AND TESTATA.CODMAG = MAGAZZINI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ARUREG_01 AS REGISTRI ON MAGAZZINI.ID_AZI = REGISTRI.ID_AZI AND MAGAZZINI.REGVUN = REGISTRI.CODICE
LEFT JOIN AV_COL_TMP.dbo.AACQUZ_01 AS RIGHE ON TESTATA.ID_AZI = RIGHE.ID_AZI AND TESTATA.NUMBOL = RIGHE.NUMBOL 
LEFT JOIN AV_COL_TMP.dbo.AARTI1_01 AS ARTICOLI ON RIGHE.ID_AZI = ARTICOLI.ID_AZI AND RIGHE.CODART = ARTICOLI.CODICE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON TESTATA.ID_AZI = PARAMETRI.ID_AZI
WHERE TESTATA.NUMDOC <> ' '
AND (TESTATA.DTABOL >= PARAMETRI.DTAELA OR PARAMETRI.DTAELA IS NULL)

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A ALTER COLUMN ID_AZI VARCHAR(2) NOT NULL
-- lungo 11 per mettere bolle trasferimento
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A ALTER COLUMN NUMBOL DECIMAL(11,0) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A ALTER COLUMN IDRIGA VARCHAR(18) NOT NULL

go

-- AGGIUNGE ALLE BOLLE DI ACQUISTO IL CARICO DELLE BOLLE DI TRASFERIMENTO
INSERT INTO AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A
(ID_AZI,
CODREG,
DESREG,
NUMBOL,
NUMDOC,
CODSOG,
DTABOL,
IDRIGA,
DESART,
QTABOL,
LOTTOS)
SELECT 
TESTATA.ID_AZI,
REGISTRI.CODICE AS CODREG,
REGISTRI.DESCRI AS DESREG,
'9'+REPLICATE('0',10-LEN(RTRIM(TESTATA.NUMBOL))) + RTRIM(TESTATA.NUMBOL),
TESTATA.NUMDOC,
'C'+REPLICATE('0',6-LEN(RTRIM(CLIENTI.CODICE))) + RTRIM(CLIENTI.CODICE),
TESTATA.DTABOL,
RIGHE.NUMRIG AS IDRIGA,
ARTICOLI.DESCRI AS DESART,
RIGHE.QTAVEN AS QTABOL,
' ' AS LOTTOS
FROM AV_COL_TMP.dbo.ABOLL1_01 AS TESTATA
LEFT JOIN AV_COL_TMP.dbo.AANCL1_01 AS CLIENTI ON TESTATA.ID_AZI = CLIENTI.ID_AZI AND TESTATA.CODCLI = CLIENTI.CODICE 
LEFT JOIN AV_COL_TMP.dbo.ABOLLZ_01 AS RIGHE ON TESTATA.ID_AZI = RIGHE.ID_AZI AND TESTATA.NUMBOL = RIGHE.NUMBOL 
LEFT JOIN AV_COL_TMP.dbo.ATBADC_01 AS CAUSALI ON TESTATA.ID_AZI = CAUSALI.ID_AZI AND TESTATA.CAUBOL = CAUSALI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ATBAMA_01 AS MAGAZZINI ON TESTATA.ID_AZI = MAGAZZINI.ID_AZI AND TESTATA.CODMG2 = MAGAZZINI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ARUREG_01 AS REGISTRI ON MAGAZZINI.ID_AZI = REGISTRI.ID_AZI AND MAGAZZINI.REGVUN = REGISTRI.CODICE
LEFT JOIN AV_COL_TMP.dbo.AARTI1_01 AS ARTICOLI ON RIGHE.ID_AZI = ARTICOLI.ID_AZI AND RIGHE.CODART = ARTICOLI.CODICE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON TESTATA.ID_AZI = PARAMETRI.ID_AZI
WHERE (CAUSALI.TIPDOC = '1' OR CAUSALI.TIPDOC = '5')
AND TESTATA.NUMDOC <> ' '
AND TESTATA.CODMG2 <> 0
AND (TESTATA.DTABOL >= PARAMETRI.DTAELA OR PARAMETRI.DTAELA IS NULL)

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A ADD PRIMARY KEY (
ID_AZI,
NUMBOL,
IDRIGA)

go

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'DOCUMENTI_A') 
SELECT * INTO AV_COL.dbo.DOCUMENTI_A FROM AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.DOCUMENTI_A
(ID_AZI,
CODREG,
DESREG,
NUMBOL,
NUMDOC,
CODSOG,
DTABOL,
IDRIGA,
DESART,
QTABOL,
LOTTOS)
SELECT
SORGENTE.ID_AZI,
SORGENTE.CODREG,
SORGENTE.DESREG,
SORGENTE.NUMBOL,
SORGENTE.NUMDOC,
SORGENTE.CODSOG,
SORGENTE.DTABOL,
SORGENTE.IDRIGA,
SORGENTE.DESART,
SORGENTE.QTABOL,
SORGENTE.LOTTOS
From AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A SORGENTE LEFT JOIN AV_COL.dbo.DOCUMENTI_A DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.NUMBOL = DESTINAZIONE.NUMBOL
AND SORGENTE.IDRIGA = DESTINAZIONE.IDRIGA
WHERE DESTINAZIONE.IDRIGA IS NULL;

-- RIMOZIONE DEI DOCUMENTI CANCELLATI SU AV2000 (NON SI CANCELLANO MAI!) O SENZA SOGGETTO (IMPORTANTE PER SCARTARE ACQUISTI DI MATERIALI)
DELETE AV_COL.dbo.DOCUMENTI_A
FROM AV_COL.dbo.DOCUMENTI_A
LEFT JOIN AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A ON AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A.ID_AZI = AV_COL.dbo.DOCUMENTI_A.ID_AZI 
AND AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A.NUMBOL = AV_COL.dbo.DOCUMENTI_A.NUMBOL
AND AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A.IDRIGA = AV_COL.dbo.DOCUMENTI_A.IDRIGA
LEFT JOIN AV_COL.dbo.SOGGETTI ON AV_COL.dbo.DOCUMENTI_A.ID_AZI = AV_COL.dbo.SOGGETTI.ID_AZI 
AND AV_COL.dbo.DOCUMENTI_A.CODSOG = AV_COL.dbo.SOGGETTI.CODSOG
WHERE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A.IDRIGA IS NULL
OR (AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A.IDRIGA IS NOT NULL and AV_COL.dbo.SOGGETTI.CODSOG IS NULL);

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODREG=SORGENTE.CODREG,
DESTINAZIONE.DESREG=SORGENTE.DESREG,
DESTINAZIONE.NUMBOL=SORGENTE.NUMBOL,
DESTINAZIONE.NUMDOC=SORGENTE.NUMDOC,
DESTINAZIONE.CODSOG=SORGENTE.CODSOG,
DESTINAZIONE.DTABOL=SORGENTE.DTABOL,
DESTINAZIONE.IDRIGA=SORGENTE.IDRIGA,
DESTINAZIONE.DESART=SORGENTE.DESART,
DESTINAZIONE.QTABOL=SORGENTE.QTABOL,
DESTINAZIONE.LOTTOS=SORGENTE.LOTTOS
FROM AV_COL.dbo.DOCUMENTI_A DESTINAZIONE
JOIN AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.NUMBOL = SORGENTE.NUMBOL AND DESTINAZIONE.IDRIGA = SORGENTE.IDRIGA
WHERE DESTINAZIONE.NUMDOC <> SORGENTE.NUMDOC
OR DESTINAZIONE.CODSOG <> SORGENTE.CODSOG
OR DESTINAZIONE.CODREG <> SORGENTE.CODREG
OR DESTINAZIONE.DTABOL <> SORGENTE.DTABOL
OR DESTINAZIONE.DESART <> SORGENTE.DESART
OR DESTINAZIONE.QTABOL <> SORGENTE.QTABOL
OR DESTINAZIONE.LOTTOS <> SORGENTE.LOTTOS;

go

-- *****************************
-- BOLLE ACQUISTO DETT.VASCHE --
-- *****************************

-- CANCELLA TABELLA STRUTTURA (SERVE PER FARE I TEST)
IF EXISTS (SELECT TABLE_NAME FROM AV_COL_TMP.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'STRUTTURA_DOCUMENTI_A_VASCHE') DROP TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE;
go

-- CREA TABELLA STRUTTURA

SELECT 
ID_AZI,
NUMBOL,
NUMRIG AS IDRIGA,
CODVAS,
QTAVAS
INTO AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE
FROM AV_COL_TMP.dbo.AACQUQ_01 AS VASCHE_BOLLE

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE ALTER COLUMN ID_AZI VARCHAR(2) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE ALTER COLUMN NUMBOL DECIMAL(11,0) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE ALTER COLUMN IDRIGA VARCHAR(18) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE ALTER COLUMN CODVAS VARCHAR(8) NOT NULL

go

-- AGGIUNGE ALLE BOLLE DI ACQUISTO IL CARICO DELLE BOLLE DI TRASFERIMENTO
INSERT INTO AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE
(ID_AZI,
NUMBOL,
IDRIGA,
CODVAS,
QTAVAS)
SELECT 
ID_AZI,
'9'+REPLICATE('0',10-LEN(RTRIM(VASCHE_BOLLE.NUMBOL))) + RTRIM(VASCHE_BOLLE.NUMBOL),
NUMRIG AS IDRIGA,
CODVAS,
QTAVAS
FROM AV_COL_TMP.dbo.ABOLLQ_01 AS VASCHE_BOLLE
WHERE VASCHE_BOLLE.FLAGPA = 'A'

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE ADD PRIMARY KEY (
ID_AZI,
NUMBOL,
IDRIGA,
CODVAS)

go

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'DOCUMENTI_A_VASCHE') 
SELECT * INTO AV_COL.dbo.DOCUMENTI_A_VASCHE FROM AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.DOCUMENTI_A_VASCHE
(ID_AZI,
NUMBOL,
IDRIGA,
CODVAS,
QTAVAS)
SELECT
SORGENTE.ID_AZI,
SORGENTE.NUMBOL,
SORGENTE.IDRIGA,
SORGENTE.CODVAS,
SORGENTE.QTAVAS
From AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE SORGENTE LEFT JOIN AV_COL.dbo.DOCUMENTI_A_VASCHE DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.NUMBOL = DESTINAZIONE.NUMBOL
AND SORGENTE.IDRIGA = DESTINAZIONE.IDRIGA
WHERE DESTINAZIONE.IDRIGA IS NULL;

go 

-- RIMOZIONE DEL DETTAGLIO VASCHE CANCELLATO SU AV2000 
DELETE AV_COL.dbo.DOCUMENTI_A_VASCHE
FROM AV_COL.dbo.DOCUMENTI_A_VASCHE
LEFT JOIN AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE ON AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE.ID_AZI = AV_COL.dbo.DOCUMENTI_A_VASCHE.ID_AZI 
AND AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE.NUMBOL = AV_COL.dbo.DOCUMENTI_A_VASCHE.NUMBOL
AND AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE.IDRIGA = AV_COL.dbo.DOCUMENTI_A_VASCHE.IDRIGA
WHERE AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE.IDRIGA IS NULL;

go 

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.NUMBOL=SORGENTE.NUMBOL,
DESTINAZIONE.IDRIGA=SORGENTE.IDRIGA,
DESTINAZIONE.CODVAS=SORGENTE.CODVAS,
DESTINAZIONE.QTAVAS=SORGENTE.QTAVAS
FROM AV_COL.dbo.DOCUMENTI_A_VASCHE DESTINAZIONE
JOIN AV_COL_TMP.dbo.STRUTTURA_DOCUMENTI_A_VASCHE SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.NUMBOL = SORGENTE.NUMBOL AND DESTINAZIONE.IDRIGA = SORGENTE.IDRIGA
WHERE DESTINAZIONE.CODVAS <> SORGENTE.CODVAS
OR DESTINAZIONE.QTAVAS <> SORGENTE.QTAVAS;
go

-- ***********
-- VITIGNI --
-- ***********

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'VITIGNI') 
SELECT ID_AZI, CODVIT AS CODICE, DESCRI INTO AV_COL.dbo.VITIGNI FROM AV_COL_TMP.dbo.ARUGBR_01 WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.VITIGNI
(ID_AZI,
CODICE,
DESCRI)
SELECT
SORGENTE.ID_AZI,
SORGENTE.CODVIT,
SORGENTE.DESCRI
FROM AV_COL_TMP.dbo.ARUGBR_01 SORGENTE 
LEFT JOIN AV_COL.dbo.VITIGNI DESTINAZIONE 
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI AND SORGENTE.CODVIT = DESTINAZIONE.CODICE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON SORGENTE.ID_AZI = PARAMETRI.ID_AZI
WHERE DESTINAZIONE.CODICE IS NULL AND SORGENTE.CODVEN = PARAMETRI.CODVEN;

go

-- RIMOZIONE DEI VITIGNI CANCELLATI SU AV2000 NELLA VENDEMMIA CORRENTE 
DELETE DESTINAZIONE
FROM AV_COL.dbo.VITIGNI DESTINAZIONE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
LEFT JOIN AV_COL_TMP.dbo.ARUGBR_01 SORGENTE ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI 
AND SORGENTE.CODVIT = DESTINAZIONE.CODICE
AND SORGENTE.CODVEN = PARAMETRI.CODVEN
WHERE SORGENTE.CODVIT IS NULL;

go

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODICE=SORGENTE.CODVIT,
DESTINAZIONE.DESCRI=SORGENTE.DESCRI
FROM AV_COL.dbo.VITIGNI DESTINAZIONE
LEFT JOIN AV_COL_TMP.dbo.ARUGBR_01 SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.CODICE = SORGENTE.CODVIT 
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
WHERE DESTINAZIONE.DESCRI <> SORGENTE.DESCRI 
AND SORGENTE.CODVEN = PARAMETRI.CODVEN;

go

-- ***************
-- CONFERIMENTI --
-- ***************

-- DECISO DI TENERE ALLINEATA SOLO LA VENDEMMIA CORRENTE --
-- LO STORICO E' IN AV_COL_TMP --

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'CONFERIMENTI') 
SELECT ID_AZI, CODREG, NUMCON, DTACON, CODVIT, CODSOG, QTAQLI, GRADOB, FLGOLT INTO AV_COL.dbo.CONFERIMENTI FROM AV_COL_TMP.dbo.ARUGBC_01 WHERE 1 = 0;
go

-- AGGIUNGE, SE NECESSARIO, I CAMPI SCELTE
IF COL_LENGTH('AV_COL.dbo.CONFERIMENTI', 'CODSC1') IS NULL
BEGIN
    ALTER TABLE AV_COL.dbo.CONFERIMENTI ADD [CODSC1] SMALLINT
    ALTER TABLE AV_COL.dbo.CONFERIMENTI ADD [DESSC1] VARCHAR(30)
END
IF COL_LENGTH('AV_COL.dbo.CONFERIMENTI', 'CODSC2') IS NULL
BEGIN
    ALTER TABLE AV_COL.dbo.CONFERIMENTI ADD [CODSC2] SMALLINT
    ALTER TABLE AV_COL.dbo.CONFERIMENTI ADD [DESSC2] VARCHAR(30)
END
IF COL_LENGTH('AV_COL.dbo.CONFERIMENTI', 'CODSC3') IS NULL
BEGIN
    ALTER TABLE AV_COL.dbo.CONFERIMENTI ADD [CODSC3] SMALLINT
    ALTER TABLE AV_COL.dbo.CONFERIMENTI ADD [DESSC3] VARCHAR(30)
END
go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

-- LE GIACENZE PRESENTI IN ARUGBT SONO SOLO QUELLE DELLO SFUSO (VEDI NRUGBT)

INSERT INTO AV_COL.dbo.CONFERIMENTI
(ID_AZI,
CODREG,
NUMCON,
DTACON,
CODVIT,
CODSOG,
QTAQLI,
GRADOB,
FLGOLT,
CODSC1,
DESSC1,
CODSC2,
DESSC2,
CODSC3,
DESSC3)
SELECT
CONFERIMENTI_SORGENTE.ID_AZI,
CONFERIMENTI_SORGENTE.CODREG,
CONFERIMENTI_SORGENTE.NUMCON,
CONFERIMENTI_SORGENTE.DTACON,
CONFERIMENTI_SORGENTE.CODVIT,
CONFERIMENTI_SORGENTE.CODSOG,
CONFERIMENTI_SORGENTE.QTAQLI,
CONFERIMENTI_SORGENTE.GRADOB,
CONFERIMENTI_SORGENTE.FLGOLT,
CONFERIMENTI_SORGENTE.CODSC1,
CONFERIMENTI_SORGENTE.DESSC1,
CONFERIMENTI_SORGENTE.CODSC2,
CONFERIMENTI_SORGENTE.DESSC2,
CONFERIMENTI_SORGENTE.CODSC3,
CONFERIMENTI_SORGENTE.DESSC3
FROM AV_COL_TMP.dbo.ARUGBC_01 CONFERIMENTI_SORGENTE 
LEFT JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON CONFERIMENTI_SORGENTE.ID_AZI = PARAMETRI.ID_AZI
LEFT JOIN AV_COL.dbo.CONFERIMENTI DESTINAZIONE
ON CONFERIMENTI_SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND CONFERIMENTI_SORGENTE.CODREG = DESTINAZIONE.CODREG
AND CONFERIMENTI_SORGENTE.NUMCON = DESTINAZIONE.NUMCON
AND CONFERIMENTI_SORGENTE.CODVIT = DESTINAZIONE.CODVIT
WHERE CONFERIMENTI_SORGENTE.QTAQLI <> 0
AND CONFERIMENTI_SORGENTE.CODVEN = PARAMETRI.CODVEN
AND DESTINAZIONE.NUMCON IS NULL;

go

-- RIMOZIONE DELLE CONFERIMENTI NON PIU' PRESENTI IN AV2000 
DELETE DESTINAZIONE
FROM AV_COL.dbo.CONFERIMENTI DESTINAZIONE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
LEFT JOIN AV_COL_TMP.dbo.ARUGBC_01 SORGENTE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.CODREG = DESTINAZIONE.CODREG
AND SORGENTE.NUMCON = DESTINAZIONE.NUMCON
AND SORGENTE.CODVIT = DESTINAZIONE.CODVIT
AND SORGENTE.CODVEN = PARAMETRI.CODVEN
WHERE SORGENTE.QTAQLI IS NULL;

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODREG=SORGENTE.CODREG,
DESTINAZIONE.NUMCON=SORGENTE.NUMCON,
DESTINAZIONE.DTACON=SORGENTE.DTACON,
DESTINAZIONE.CODVIT=SORGENTE.CODVIT,
DESTINAZIONE.CODSOG=SORGENTE.CODSOG,
DESTINAZIONE.QTAQLI=SORGENTE.QTAQLI,
DESTINAZIONE.GRADOB=SORGENTE.GRADOB,
DESTINAZIONE.FLGOLT=SORGENTE.FLGOLT,
DESTINAZIONE.CODSC1=SORGENTE.CODSC1,
DESTINAZIONE.DESSC1=SORGENTE.DESSC1,
DESTINAZIONE.CODSC2=SORGENTE.CODSC2,
DESTINAZIONE.DESSC2=SORGENTE.DESSC2,
DESTINAZIONE.CODSC3=SORGENTE.CODSC3,
DESTINAZIONE.DESSC3=SORGENTE.DESSC3 
FROM AV_COL.dbo.CONFERIMENTI DESTINAZIONE
LEFT JOIN AV_COL_TMP.dbo.ARUGBC_01 SORGENTE 
ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI 
AND DESTINAZIONE.CODREG = SORGENTE.CODREG 
AND DESTINAZIONE.NUMCON = SORGENTE.NUMCON 
AND DESTINAZIONE.CODVIT = SORGENTE.CODVIT
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
WHERE (DESTINAZIONE.DTACON <> SORGENTE.DTACON 
OR DESTINAZIONE.CODSOG <> SORGENTE.CODSOG
OR DESTINAZIONE.QTAQLI <> SORGENTE.QTAQLI 
OR DESTINAZIONE.GRADOB <> SORGENTE.GRADOB 
OR DESTINAZIONE.FLGOLT <> SORGENTE.FLGOLT
OR DESTINAZIONE.CODSC1 <> SORGENTE.CODSC1 OR DESTINAZIONE.CODSC1 IS NULL
OR DESTINAZIONE.CODSC2 <> SORGENTE.CODSC2 OR DESTINAZIONE.CODSC2 IS NULL
OR DESTINAZIONE.CODSC3 <> SORGENTE.CODSC3 OR DESTINAZIONE.CODSC3 IS NULL)
AND SORGENTE.CODVEN = PARAMETRI.CODVEN;

go

-- **************
-- RAGGRUPPAMENTI --
-- **************

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'RAGGRUPPAMENTI') 
SELECT ID_AZI, CODICE AS CODICE, DESCRI INTO AV_COL.dbo.RAGGRUPPAMENTI FROM AV_COL_TMP.dbo.ARUGBQ_01 WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.RAGGRUPPAMENTI
(ID_AZI,
CODICE,
DESCRI)
SELECT
SORGENTE.ID_AZI,
SORGENTE.CODICE,
SORGENTE.DESCRI
FROM AV_COL_TMP.dbo.ARUGBQ_01 SORGENTE 
LEFT JOIN AV_COL.dbo.RAGGRUPPAMENTI DESTINAZIONE 
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI AND SORGENTE.CODICE = DESTINAZIONE.CODICE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON SORGENTE.ID_AZI = PARAMETRI.ID_AZI
WHERE DESTINAZIONE.CODICE IS NULL;

go

-- RIMOZIONE DEI RAGGRUPPAMENTI CANCELLATI SU AV2000 NELLA VENDEMMIA CORRENTE 
DELETE DESTINAZIONE
FROM AV_COL.dbo.RAGGRUPPAMENTI DESTINAZIONE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
LEFT JOIN AV_COL_TMP.dbo.ARUGBQ_01 SORGENTE ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI 
AND SORGENTE.CODICE = DESTINAZIONE.CODICE
WHERE SORGENTE.CODICE IS NULL;

go

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODICE=SORGENTE.CODICE,
DESTINAZIONE.DESCRI=SORGENTE.DESCRI
FROM AV_COL.dbo.RAGGRUPPAMENTI DESTINAZIONE
LEFT JOIN AV_COL_TMP.dbo.ARUGBQ_01 SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.CODICE = SORGENTE.CODICE 
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
WHERE DESTINAZIONE.DESCRI <> SORGENTE.DESCRI;

go

-- ***************
-- CARICHI_UVE --
-- ***************

-- DECISO DI TENERE ALLINEATA SOLO LA VENDEMMIA CORRENTE --
-- LO STORICO E' IN AV_COL_TMP --

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'CARICHI_UVE') 
SELECT ID_AZI, CODREG, NUMCON, DTACON, CODRAG, CODSOG, QTAQLI, GRADOB, FLGOLT, CODSC1, DESSC1, CODSC2, DESSC2, CODSC3, DESSC3 INTO AV_COL.dbo.CARICHI_UVE FROM AV_COL_TMP.dbo.ARUGBP_01 WHERE 1 = 0;
go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

-- LE GIACENZE PRESENTI IN ARUGBT SONO SOLO QUELLE DELLO SFUSO (VEDI NRUGBT)

INSERT INTO AV_COL.dbo.CARICHI_UVE
(ID_AZI,
CODREG,
NUMCON,
DTACON,
CODRAG,
CODSOG,
QTAQLI,
GRADOB,
FLGOLT,
CODSC1,
DESSC1,
CODSC2,
DESSC2,
CODSC3,
DESSC3)
SELECT
CARICHI_UVE_SORGENTE.ID_AZI,
CARICHI_UVE_SORGENTE.CODREG,
CARICHI_UVE_SORGENTE.NUMCON,
CARICHI_UVE_SORGENTE.DTACON,
CARICHI_UVE_SORGENTE.CODRAG,
CARICHI_UVE_SORGENTE.CODSOG,
CARICHI_UVE_SORGENTE.QTAQLI,
CARICHI_UVE_SORGENTE.GRADOB,
CARICHI_UVE_SORGENTE.FLGOLT,
CARICHI_UVE_SORGENTE.CODSC1,
CARICHI_UVE_SORGENTE.DESSC1,
CARICHI_UVE_SORGENTE.CODSC2,
CARICHI_UVE_SORGENTE.DESSC2,
CARICHI_UVE_SORGENTE.CODSC3,
CARICHI_UVE_SORGENTE.DESSC3
FROM AV_COL_TMP.dbo.ARUGBP_01 CARICHI_UVE_SORGENTE 
LEFT JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON CARICHI_UVE_SORGENTE.ID_AZI = PARAMETRI.ID_AZI
LEFT JOIN AV_COL.dbo.CARICHI_UVE DESTINAZIONE
ON CARICHI_UVE_SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND CARICHI_UVE_SORGENTE.CODREG = DESTINAZIONE.CODREG
AND CARICHI_UVE_SORGENTE.NUMCON = DESTINAZIONE.NUMCON
AND CARICHI_UVE_SORGENTE.CODRAG = DESTINAZIONE.CODRAG
WHERE CARICHI_UVE_SORGENTE.QTAQLI <> 0
AND CARICHI_UVE_SORGENTE.CODVEN = PARAMETRI.CODVEN
AND DESTINAZIONE.NUMCON IS NULL;

go

-- RIMOZIONE DELLE CARICHI_UVE NON PIU' PRESENTI IN AV2000 
DELETE DESTINAZIONE
FROM AV_COL.dbo.CARICHI_UVE DESTINAZIONE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
LEFT JOIN AV_COL_TMP.dbo.ARUGBP_01 SORGENTE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.CODREG = DESTINAZIONE.CODREG
AND SORGENTE.NUMCON = DESTINAZIONE.NUMCON
AND SORGENTE.CODRAG = DESTINAZIONE.CODRAG
AND SORGENTE.CODVEN = PARAMETRI.CODVEN
WHERE SORGENTE.QTAQLI IS NULL;

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODREG=SORGENTE.CODREG,
DESTINAZIONE.NUMCON=SORGENTE.NUMCON,
DESTINAZIONE.DTACON=SORGENTE.DTACON,
DESTINAZIONE.CODRAG=SORGENTE.CODRAG,
DESTINAZIONE.CODSOG=SORGENTE.CODSOG,
DESTINAZIONE.QTAQLI=SORGENTE.QTAQLI,
DESTINAZIONE.GRADOB=SORGENTE.GRADOB,
DESTINAZIONE.FLGOLT=SORGENTE.FLGOLT,
DESTINAZIONE.CODSC1=SORGENTE.CODSC1,
DESTINAZIONE.DESSC1=SORGENTE.DESSC1,
DESTINAZIONE.CODSC2=SORGENTE.CODSC2,
DESTINAZIONE.DESSC2=SORGENTE.DESSC2,
DESTINAZIONE.CODSC3=SORGENTE.CODSC3,
DESTINAZIONE.DESSC3=SORGENTE.DESSC3 
FROM AV_COL.dbo.CARICHI_UVE DESTINAZIONE
LEFT JOIN AV_COL_TMP.dbo.ARUGBP_01 SORGENTE 
ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI 
AND DESTINAZIONE.CODREG = SORGENTE.CODREG 
AND DESTINAZIONE.NUMCON = SORGENTE.NUMCON 
AND DESTINAZIONE.CODRAG = SORGENTE.CODRAG
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON DESTINAZIONE.ID_AZI = PARAMETRI.ID_AZI
WHERE (DESTINAZIONE.DTACON <> SORGENTE.DTACON 
OR DESTINAZIONE.CODSOG <> SORGENTE.CODSOG
OR DESTINAZIONE.QTAQLI <> SORGENTE.QTAQLI 
OR DESTINAZIONE.GRADOB <> SORGENTE.GRADOB 
OR DESTINAZIONE.FLGOLT <> SORGENTE.FLGOLT
OR DESTINAZIONE.CODSC1 <> SORGENTE.CODSC1 OR DESTINAZIONE.CODSC1 IS NULL
OR DESTINAZIONE.CODSC2 <> SORGENTE.CODSC2 OR DESTINAZIONE.CODSC2 IS NULL
OR DESTINAZIONE.CODSC3 <> SORGENTE.CODSC3 OR DESTINAZIONE.CODSC3 IS NULL)
AND SORGENTE.CODVEN = PARAMETRI.CODVEN;

go

-- ******************
-- PRODOTTI ENOLOGICI --
-- ******************

-- CANCELLA TABELLA STRUTTURA (SERVE PER FARE I TEST)
IF EXISTS (SELECT TABLE_NAME FROM AV_COL_TMP.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'STRUTTURA_ANAG_PRODOTTI_ENO') DROP TABLE AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO;

go

-- AGGIUNGE UN CAMPO ALLA TABELLA ARTICOLI CON IL VALORE DELL'ATTRIBUTO INSERITO NEI PARAMETRI DI INTERFACCIA COME SELEZIONE DEI PRODOTTI ENOLOGICI
-- MI SEMBRA L'UNICO MODO PER POTERLO FILTRARE NELLE SUCCESSIVE OPERAZIONI CONSIDERANDO CHE IN SQL NON CI SONO GLI ARRAY

ALTER TABLE AV_COL_TMP.dbo.AARTI1_01 ADD ATTENO INTEGER;

go

-- SERVE PER NON AVERE IL VALORE NULL IN MODO CHE SE NEI PARAMTERI NON C'E' UN ATTRIBUTO IMPOSTATO NON INSERISCE NIENTE
UPDATE ARTICOLI SET ARTICOLI.ATTENO = 0
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI;

go 

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_1
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 1;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_2
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 2;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_3
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 3;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_4
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 4;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_5
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 5;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_6
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 6;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_7
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 7;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_8
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 8;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_9
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 9;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_10
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 10;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_11 
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 11;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_12
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 12;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_13
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 13;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_14
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 14;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_15
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 15;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_16
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 16;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_17
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 17;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_18
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 18;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_19
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 19;

UPDATE ARTICOLI SET ARTICOLI.ATTENO=ARTICOLI.CODATT_20
FROM AV_COL_TMP.dbo.AARTI1_01 ARTICOLI
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI
ON ARTICOLI.ID_AZI = PARAMETRI.ID_AZI
WHERE PARAMETRI.PNRATT = 20;

go

-- CREA TABELLA STRUTTURA INSERENDO TUTTI I VALORI IN QUESTO CASO, IN MODO DA AVERE UNA TABELLA PRONTAPER L'ALLINEAMENTO CON IL DB REALE

SELECT 
ANAG_PRODOTTI_ENO.ID_AZI,
ANAG_PRODOTTI_ENO.CODICE,
ANAG_PRODOTTI_ENO.DESCRI,
' ' AS CATEGORIA,
UDM.SIGUDM AS UM
INTO AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO
FROM AV_COL_TMP.dbo.AARTI1_01 ANAG_PRODOTTI_ENO
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON ANAG_PRODOTTI_ENO.ID_AZI = PARAMETRI.ID_AZI
LEFT JOIN AV_COL_TMP.dbo.ATBAUM_01 UDM ON ANAG_PRODOTTI_ENO.ID_AZI = UDM.ID_AZI AND ANAG_PRODOTTI_ENO.CODUDM = UDM.CODICE
WHERE ANAG_PRODOTTI_ENO.ATTENO = PARAMETRI.PCDATT AND ANAG_PRODOTTI_ENO.ATTENO <> 0;

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO ALTER COLUMN ID_AZI VARCHAR(2) NOT NULL

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO ADD PRIMARY KEY (
ID_AZI,
CODICE);

go

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'ANAG_PRODOTTI_ENO') 
SELECT * INTO AV_COL.dbo.ANAG_PRODOTTI_ENO FROM AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.ANAG_PRODOTTI_ENO
(ID_AZI,
CODICE,
DESCRI,
CATEGORIA,
UM)
SELECT
SORGENTE.ID_AZI,
SORGENTE.CODICE,
SORGENTE.DESCRI,
SORGENTE.CATEGORIA,
SORGENTE.UM
FROM AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO SORGENTE LEFT JOIN AV_COL.dbo.ANAG_PRODOTTI_ENO DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.CODICE = DESTINAZIONE.CODICE
WHERE DESTINAZIONE.CODICE IS NULL;

-- RIMOZIONE DEI ANAG_PRODOTTI_ENO CANCELLATI SU AV2000 (NON SI CANCELLANO MAI!)
DELETE AV_COL.dbo.ANAG_PRODOTTI_ENO
FROM AV_COL.dbo.ANAG_PRODOTTI_ENO
LEFT JOIN AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO ON AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO.ID_AZI = AV_COL.dbo.ANAG_PRODOTTI_ENO.ID_AZI AND AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO.CODICE = AV_COL.dbo.ANAG_PRODOTTI_ENO.CODICE
WHERE AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO.CODICE IS NULL;

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODICE=SORGENTE.CODICE,
DESTINAZIONE.DESCRI=SORGENTE.DESCRI,
DESTINAZIONE.CATEGORIA=SORGENTE.CATEGORIA,
DESTINAZIONE.UM=SORGENTE.UM
FROM AV_COL.dbo.ANAG_PRODOTTI_ENO DESTINAZIONE
JOIN AV_COL_TMP.dbo.STRUTTURA_ANAG_PRODOTTI_ENO SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.CODICE = SORGENTE.CODICE
WHERE DESTINAZIONE.DESCRI <> SORGENTE.DESCRI
OR DESTINAZIONE.CATEGORIA <> SORGENTE.CATEGORIA
OR DESTINAZIONE.UM <> SORGENTE.UM;

go

-- ************************************
-- MOVIMENTI CARICO PRODOTTI ENOLOGICI --
-- ************************************

-- CANCELLA TABELLA STRUTTURA (SERVE PER FARE I TEST)
IF EXISTS (SELECT TABLE_NAME FROM AV_COL_TMP.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'STRUTTURA_CARICO_PRODOTTI_ENO') DROP TABLE AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO;
go

-- CREA TABELLA STRUTTURA
SELECT 
TESTATA.ID_AZI,
REGISTRI.CODICE AS CODREG,
REGISTRI.DESCRI AS DESREG,
TESTATA.DTABOL,
TESTATA.NUMBOL,
TESTATA.NUMDOC,
'F'+REPLICATE('0',6-LEN(RTRIM(FORNITORI.CODICE))) + RTRIM(FORNITORI.CODICE) AS CODSOG,
RIGHE.NUMRIG AS IDRIGA,
RIGHE.CODART AS PROENO,
RIGHE.QTABOL,
RIGHE.PREZZO,
RIGHE.LOTTOS
INTO AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO
FROM AV_COL_TMP.dbo.AACQU1_01 AS TESTATA
LEFT JOIN AV_COL_TMP.dbo.AANFO1_01 AS FORNITORI ON TESTATA.ID_AZI = FORNITORI.ID_AZI AND TESTATA.CODFOR = FORNITORI.CODICE 
LEFT JOIN AV_COL_TMP.dbo.ATBAMA_01 AS MAGAZZINI ON TESTATA.ID_AZI = MAGAZZINI.ID_AZI AND TESTATA.CODMAG = MAGAZZINI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ARUREG_01 AS REGISTRI ON MAGAZZINI.ID_AZI = REGISTRI.ID_AZI AND MAGAZZINI.REGVUN = REGISTRI.CODICE
LEFT JOIN AV_COL_TMP.dbo.AACQUZ_01 AS RIGHE ON TESTATA.ID_AZI = RIGHE.ID_AZI AND TESTATA.NUMBOL = RIGHE.NUMBOL 
LEFT JOIN AV_COL_TMP.dbo.AARTI1_01 AS ARTICOLI ON RIGHE.ID_AZI = ARTICOLI.ID_AZI AND RIGHE.CODART = ARTICOLI.CODICE
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON TESTATA.ID_AZI = PARAMETRI.ID_AZI
WHERE TESTATA.NUMDOC <> ' '
AND (TESTATA.DTABOL >= PARAMETRI.DTAELA OR PARAMETRI.DTAELA IS NULL)
AND ARTICOLI.ATTENO = PARAMETRI.PCDATT;

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO ALTER COLUMN ID_AZI VARCHAR(2) NOT NULL

-- lungo 11 per mettere bolle trasferimento
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO ALTER COLUMN NUMBOL DECIMAL(11,0) NOT NULL
ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO ALTER COLUMN IDRIGA VARCHAR(18) NOT NULL

go

-- AGGIUNGE ALLE BOLLE DI ACQUISTO IL CARICO DELLE BOLLE DI TRASFERIMENTO (GESTISCE SOLO 1 LOTTO PER RIGA) 
-- PER OGNI TRASFERIMENTO FA DUE RIGHE, UNA DI SCARICO CON QTA NEGATIVA E UNA DI CARICO CON QTA POSITIVA

-- INSERISCE RIGHE CARICO TRASFERIMENTI CON IL NUMERO BOLLA ADDIZIONATO DI 90000000000
INSERT INTO AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO
(ID_AZI,
CODREG,
DESREG,
DTABOL,
NUMBOL,
NUMDOC,
CODSOG,
IDRIGA,
PROENO,
QTABOL,
PREZZO,
LOTTOS)
SELECT 
TESTATA.ID_AZI,
REGISTRI.CODICE AS CODREG,
REGISTRI.DESCRI AS DESREG,
TESTATA.DTABOL,
'9'+REPLICATE('0',10-LEN(RTRIM(TESTATA.NUMBOL))) + RTRIM(TESTATA.NUMBOL),
TESTATA.NUMDOC,
'C'+REPLICATE('0',6-LEN(RTRIM(CLIENTI.CODICE))) + RTRIM(CLIENTI.CODICE),
RIGHE.NUMRIG AS IDRIGA,
RIGHE.CODART AS PROENO,
IIF(LOTTI.QTALOT IS NULL, RIGHE.QTABOL, LOTTI.QTALOT) AS QTABOL,
RIGHE.PREZZO,
LOTTI.LOTTOS
FROM AV_COL_TMP.dbo.ABOLL1_01 AS TESTATA
LEFT JOIN AV_COL_TMP.dbo.AANCL1_01 AS CLIENTI ON TESTATA.ID_AZI = CLIENTI.ID_AZI AND TESTATA.CODCLI = CLIENTI.CODICE 
LEFT JOIN AV_COL_TMP.dbo.ABOLLZ_01 AS RIGHE ON TESTATA.ID_AZI = RIGHE.ID_AZI AND TESTATA.NUMBOL = RIGHE.NUMBOL 
LEFT JOIN AV_COL_TMP.dbo.ATBADC_01 AS CAUSALI ON TESTATA.ID_AZI = CAUSALI.ID_AZI AND TESTATA.CAUBOL = CAUSALI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ATBAMA_01 AS MAGAZZINI ON TESTATA.ID_AZI = MAGAZZINI.ID_AZI AND TESTATA.CODMG2 = MAGAZZINI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ARUREG_01 AS REGISTRI ON MAGAZZINI.ID_AZI = REGISTRI.ID_AZI AND MAGAZZINI.REGVUN = REGISTRI.CODICE
LEFT JOIN AV_COL_TMP.dbo.AARTI1_01 AS ARTICOLI ON RIGHE.ID_AZI = ARTICOLI.ID_AZI AND RIGHE.CODART = ARTICOLI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ABOLL9_01 AS LOTTI ON RIGHE.ID_AZI = LOTTI.ID_AZI AND RIGHE.NUMBOL = LOTTI.NUMBOL AND RIGHE.NUMRIG = LOTTI.NUMRIG AND RIGHE.NUMCOM = LOTTI.NUMCOM 
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON TESTATA.ID_AZI = PARAMETRI.ID_AZI
WHERE (CAUSALI.TIPDOC = '2')
AND TESTATA.NUMDOC <> ' '
AND (TESTATA.DTABOL >= PARAMETRI.DTAELA OR PARAMETRI.DTAELA IS NULL)
AND TESTATA.CODMG2 <> 0
AND ARTICOLI.ATTENO = PARAMETRI.PCDATT;

go

-- INSERISCE RIGHE SCARICO TRASFERIMENTI CON IL NUMERO BOLLA ADDIZIONATO DI 80000000000 PER NON SOVRAPPORSI AI CARICHI
INSERT INTO AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO
(ID_AZI,
CODREG,
DESREG,
DTABOL,
NUMBOL,
NUMDOC,
CODSOG,
IDRIGA,
PROENO,
QTABOL,
PREZZO,
LOTTOS)
SELECT 
TESTATA.ID_AZI,
REGISTRI.CODICE AS CODREG,
REGISTRI.DESCRI AS DESREG,
TESTATA.DTABOL,
'8'+REPLICATE('0',10-LEN(RTRIM(TESTATA.NUMBOL))) + RTRIM(TESTATA.NUMBOL),
TESTATA.NUMDOC,
'C'+REPLICATE('0',6-LEN(RTRIM(CLIENTI.CODICE))) + RTRIM(CLIENTI.CODICE),
RIGHE.NUMRIG AS IDRIGA,
RIGHE.CODART AS PROENO,
IIF(LOTTI.QTALOT IS NULL, (RIGHE.QTABOL * -1), (LOTTI.QTALOT * -1)) AS QTABOL,
RIGHE.PREZZO,
LOTTI.LOTTOS
FROM AV_COL_TMP.dbo.ABOLL1_01 AS TESTATA
LEFT JOIN AV_COL_TMP.dbo.AANCL1_01 AS CLIENTI ON TESTATA.ID_AZI = CLIENTI.ID_AZI AND TESTATA.CODCLI = CLIENTI.CODICE 
LEFT JOIN AV_COL_TMP.dbo.ABOLLZ_01 AS RIGHE ON TESTATA.ID_AZI = RIGHE.ID_AZI AND TESTATA.NUMBOL = RIGHE.NUMBOL 
LEFT JOIN AV_COL_TMP.dbo.ATBADC_01 AS CAUSALI ON TESTATA.ID_AZI = CAUSALI.ID_AZI AND TESTATA.CAUBOL = CAUSALI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ATBAMA_01 AS MAGAZZINI ON TESTATA.ID_AZI = MAGAZZINI.ID_AZI AND TESTATA.CODMG1 = MAGAZZINI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ARUREG_01 AS REGISTRI ON MAGAZZINI.ID_AZI = REGISTRI.ID_AZI AND MAGAZZINI.REGVUN = REGISTRI.CODICE
LEFT JOIN AV_COL_TMP.dbo.AARTI1_01 AS ARTICOLI ON RIGHE.ID_AZI = ARTICOLI.ID_AZI AND RIGHE.CODART = ARTICOLI.CODICE
LEFT JOIN AV_COL_TMP.dbo.ABOLL9_01 AS LOTTI ON RIGHE.ID_AZI = LOTTI.ID_AZI AND RIGHE.NUMBOL = LOTTI.NUMBOL AND RIGHE.NUMRIG = LOTTI.NUMRIG AND RIGHE.NUMCOM = LOTTI.NUMCOM 
JOIN AV_COL_TMP.dbo.APICOL_01 PARAMETRI ON TESTATA.ID_AZI = PARAMETRI.ID_AZI
WHERE (CAUSALI.TIPDOC = '2')
AND TESTATA.NUMDOC <> ' '
AND (TESTATA.DTABOL >= PARAMETRI.DTAELA OR PARAMETRI.DTAELA IS NULL)
AND TESTATA.CODMG2 <> 0
AND ARTICOLI.ATTENO = PARAMETRI.PCDATT;

go

UPDATE AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO
SET
LOTTOS= ' '
WHERE LOTTOS IS NULL

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO ALTER COLUMN LOTTOS VARCHAR(30) NOT NULL

go

ALTER TABLE AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO ADD PRIMARY KEY (
ID_AZI,
NUMBOL,
IDRIGA,
LOTTOS)

go

-- CREA TABELLA SU DATABASE REALE CON CONDIZIONE IF EXISTS
IF NOT EXISTS (SELECT TABLE_NAME FROM AV_COL.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'CARICO_PRODOTTI_ENO') 
SELECT * INTO AV_COL.dbo.CARICO_PRODOTTI_ENO FROM AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO WHERE 1 = 0;

go

-- NELLA INSERT VENGONO SPECIFICATI TUTTI I CAMPI PER EVITARE CHE CI SIA UN
-- MOMENTO IN CUI LA TABELLA E' INCOMPLETA (IN REALTA' L'UPDATE SUCCESSIVA LI
-- INSERIREBBE COMUNQUE)

INSERT INTO AV_COL.dbo.CARICO_PRODOTTI_ENO
(ID_AZI,
CODREG,
DESREG,
DTABOL,
NUMBOL,
NUMDOC,
CODSOG,
IDRIGA,
PROENO,
QTABOL,
PREZZO,
LOTTOS)
SELECT
SORGENTE.ID_AZI,
SORGENTE.CODREG,
SORGENTE.DESREG,
SORGENTE.DTABOL,
SORGENTE.NUMBOL,
SORGENTE.NUMDOC,
SORGENTE.CODSOG,
SORGENTE.IDRIGA,
SORGENTE.PROENO,
SORGENTE.QTABOL,
SORGENTE.PREZZO,
SORGENTE.LOTTOS
From AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO SORGENTE LEFT JOIN AV_COL.dbo.CARICO_PRODOTTI_ENO DESTINAZIONE
ON SORGENTE.ID_AZI = DESTINAZIONE.ID_AZI
AND SORGENTE.NUMBOL = DESTINAZIONE.NUMBOL
AND SORGENTE.IDRIGA = DESTINAZIONE.IDRIGA
WHERE DESTINAZIONE.IDRIGA IS NULL;

-- RIMOZIONE DEI DOCUMENTI CANCELLATI SU AV2000 (NON SI CANCELLANO MAI!) O SENZA SOGGETTO (IMPORTANTE PER SCARTARE ACQUISTI DI MATERIALI)
DELETE AV_COL.dbo.CARICO_PRODOTTI_ENO
FROM AV_COL.dbo.CARICO_PRODOTTI_ENO
LEFT JOIN AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO ON AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO.ID_AZI = AV_COL.dbo.CARICO_PRODOTTI_ENO.ID_AZI 
AND AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO.NUMBOL = AV_COL.dbo.CARICO_PRODOTTI_ENO.NUMBOL
AND AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO.IDRIGA = AV_COL.dbo.CARICO_PRODOTTI_ENO.IDRIGA
LEFT JOIN AV_COL.dbo.SOGGETTI ON AV_COL.dbo.CARICO_PRODOTTI_ENO.ID_AZI = AV_COL.dbo.SOGGETTI.ID_AZI AND AV_COL.dbo.CARICO_PRODOTTI_ENO.CODSOG = AV_COL.dbo.SOGGETTI.CODSOG
WHERE AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO.IDRIGA IS NULL
OR (AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO.IDRIGA IS NOT NULL and AV_COL.dbo.SOGGETTI.CODSOG IS NULL);

-- AGGIORNAMENTO 
UPDATE DESTINAZIONE
SET
DESTINAZIONE.ID_AZI=SORGENTE.ID_AZI,
DESTINAZIONE.CODREG=SORGENTE.CODREG,
DESTINAZIONE.DESREG=SORGENTE.DESREG,
DESTINAZIONE.DTABOL=SORGENTE.DTABOL,
DESTINAZIONE.NUMBOL=SORGENTE.NUMBOL,
DESTINAZIONE.NUMDOC=SORGENTE.NUMDOC,
DESTINAZIONE.CODSOG=SORGENTE.CODSOG,
DESTINAZIONE.IDRIGA=SORGENTE.IDRIGA,
DESTINAZIONE.PROENO=SORGENTE.PROENO,
DESTINAZIONE.QTABOL=SORGENTE.QTABOL,
DESTINAZIONE.PREZZO=SORGENTE.PREZZO,
DESTINAZIONE.LOTTOS=SORGENTE.LOTTOS
FROM AV_COL.dbo.CARICO_PRODOTTI_ENO DESTINAZIONE
JOIN AV_COL_TMP.dbo.STRUTTURA_CARICO_PRODOTTI_ENO SORGENTE ON DESTINAZIONE.ID_AZI = SORGENTE.ID_AZI AND DESTINAZIONE.NUMBOL = SORGENTE.NUMBOL AND DESTINAZIONE.IDRIGA = SORGENTE.IDRIGA
WHERE DESTINAZIONE.NUMDOC <> SORGENTE.NUMDOC
OR DESTINAZIONE.CODSOG <> SORGENTE.CODSOG
OR DESTINAZIONE.CODREG <> SORGENTE.CODREG
OR DESTINAZIONE.DTABOL <> SORGENTE.DTABOL
OR DESTINAZIONE.NUMDOC <> SORGENTE.NUMDOC
OR DESTINAZIONE.PROENO <> SORGENTE.PROENO
OR DESTINAZIONE.QTABOL <> SORGENTE.QTABOL
OR DESTINAZIONE.PREZZO <> SORGENTE.PREZZO OR DESTINAZIONE.PREZZO IS NULL
OR DESTINAZIONE.LOTTOS <> SORGENTE.LOTTOS;

go

