Files
Samuele E. Locatelli 2b1479f315 spostamento update SQL
2018-05-03 15:06:47 +02:00

194 lines
5.6 KiB
Transact-SQL

set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
/*************************************
* STORED PROCEDURE stp_MSE_getByIdxMacchina
* ottiene riga stato x macchina indicata
*
* modif.: S.E.L. - 2013.03.15
**************************************/
create PROCEDURE stp_MSE_getByIdxMacchina
(
@IdxMacchina nvarchar(50)
)
AS
SET NOCOUNT ON;
SELECT RowNum, lastUpdate, IdxMacchina, CodMacchina, Nome, url, idxODL, CodArticolo, NumPezzi, TCAssegnato, DataInizioODL, Semaforo, idxStato, DescrizioneStato, durata, PezziProd, PezziConf, TempoOn, TempoAuto, TempoRun, TCMedio, TCLav, TCEff, TCMedioRT, TCLavRT, TCEffRT
FROM dbo.MappaStatoExpl
WHERE IdxMacchina=@IdxMacchina
go
commit;
go
set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
/*************************************
* STORED PROCEDURE stp_MSE_refresh
* AGGIORNA tabella stato attuale macchine x macchina indicata
*
* modif.: S.E.L. - 2013.02.28
**************************************/
alter PROCEDURE stp_MSE_refresh
(
@IdxMacchina NVARCHAR(50) -- macchina da aggiornare
)
AS
--init variabili!
DECLARE @adesso DATETIME = GETDATE()
DECLARE @trovate INT = 0
DECLARE @tvStato TABLE (
idxStato INT NULL,
DescrizioneStato NVARCHAR(50),
Semaforo NVARCHAR(50),
Minuti INT NULL
)
DECLARE @tvODL TABLE (
IdxODL INT NULL,
CodArticolo NVARCHAR(50),
DescArticolo NVARCHAR(50),
IdxMacchina INT NULL,
CodMacchina NVARCHAR(50),
Nome NVARCHAR(50),
NumPezzi INT NULL,
TCAssegnato DECIMAL(18,8),
DataInizio DATETIME,
DataFine DATETIME
)
DECLARE @tvProd TABLE (
CodArticolo NVARCHAR(50),
PezziLanciati INT NULL,
PezziProd INT NULL,
PezziConf INT NULL,
TCAssegnato DECIMAL(18,8),
CodOperatore INT NULL,
TempoOn DECIMAL(18,8),
TempoAuto DECIMAL(18,8),
TempoRun DECIMAL(18,8),
TCMedio DECIMAL(18,8),
TCLav DECIMAL(18,8),
TCEff DECIMAL(18,8),
TCMedioRT DECIMAL(18,8),
TCLavRT DECIMAL(18,8),
TCEffRT DECIMAL(18,8)
)
BEGIN
-- controllo: se c'è riga macchina richiesta...
SELECT @trovate=COUNT(*) FROM MappaStatoExpl WHERE IdxMacchina = @IdxMacchina
-- se NON c'è la creo...
IF(@trovate = 0)
BEGIN
-- calcolo ODL
;WITH cteODL AS
(
SELECT top 1 * FROM ODL
WHERE IdxODL IN
(
SELECT IdxODL
FROM ODL
WHERE DataFine IS NULL
AND (IdxMacchina = @IdxMacchina)
UNION
SELECT MAX(IdxODL)
FROM ODL
WHERE IdxMacchina = @IdxMacchina
)
)
-- inserisco i nuovi dati
INSERT INTO MappaStatoExpl(lastUpdate, IdxMacchina, CodMacchina, Nome, url, IdxODL, CodArticolo, NumPezzi, TCAssegnato, DataInizioODL)
SELECT @adesso, ma.IdxMacchina, ma.CodMacchina, ma.Nome, url, ISNULL(o.IdxODL,0), ISNULL(o.CodArticolo,'-'), ISNULL(o.NumPezzi,0), ISNULL(o.TCAssegnato,0), ISNULL(o.DataInizio,'2000/01/01')
FROM Macchine ma LEFT OUTER JOIN cteODL o ON ma.IdxMacchina=o.IdxMacchina
WHERE ma.IdxMacchina = @IdxMacchina
AND NOT (locazione IS NULL)
--AND ( (ISNULL(o.IdxODL,0) = 0) OR ((o.DataFine IS NULL) AND NOT (o.DataInizio IS NULL)) )
ORDER BY ma.locazione
END
-- popolo tab stati
INSERT @tvStato(idxStato, Minuti)
EXEC stp_repDonati_getLastStatoDurataMacchina @IdxMacchina, 0.1
-- fix dati mancanti
UPDATE tvs
SET tvs.Semaforo = s.Semaforo
,tvs.DescrizioneStato = s.Descrizione
FROM @tvStato tvs INNER JOIN AnagraficaStati s ON tvs.idxStato=s.IdxStato
-- popolo tab ODL
INSERT @tvODL
EXEC stp_ODL_getByMacchina @IdxMacchina
-- popolo tab pezzi/tempi
INSERT @tvProd(CodArticolo,PezziLanciati,PezziProd,PezziConf,TCAssegnato,CodOperatore,TempoOn,TempoAuto,TempoRun,TCMedio,TCLav,TCEff,TCMedioRT,TCLavRT,TCEffRT )
EXEC stp_repDonati_getDatiProdMacchina @IdxMacchina
-- aggiorno in blocco i valori
UPDATE mse
SET mse.lastUpdate = @adesso
,mse.idxStato = ISNULL(tvs.idxStato,0)
,mse.durata = ISNULL(tvs.Minuti,0)
,mse.Semaforo = ISNULL(tvs.Semaforo,'')
,mse.DescrizioneStato = ISNULL(tvs.DescrizioneStato,'')
,mse.IdxODL = ISNULL(tvo.IdxODL,0)
,mse.CodArticolo = ISNULL(tvo.CodArticolo,0)
,mse.TCAssegnato = ISNULL(tvo.TCAssegnato,0)
,mse.NumPezzi = ISNULL(tvo.NumPezzi,0)
,mse.DataInizioODL = ISNULL(tvo.DataInizio,'2000/01/01')
,mse.PezziProd = ISNULL(tvp.PezziProd,0)
,mse.PezziConf = ISNULL(tvp.PezziConf,0)
,mse.TempoOn = ISNULL(tvp.TempoOn,0)
,mse.TempoAuto = ISNULL(tvp.TempoAuto,0)
,mse.TempoRun = ISNULL(tvp.TempoRun,0)
,mse.TCMedio = ISNULL(tvp.TCMedio,0)
,mse.TCLav = ISNULL(tvp.TCLav,0)
,mse.TCEff = ISNULL(tvp.TCEff,0)
,mse.TCMedioRT = ISNULL(tvp.TCMedioRT,0)
,mse.TCLavRT = ISNULL(tvp.TCLavRT,0)
,mse.TCEffRT = ISNULL(tvp.TCEffRT,0)
FROM MappaStatoExpl mse
CROSS JOIN @tvStato tvs
CROSS JOIN @tvODL tvo
CROSS JOIN @tvProd tvp
WHERE mse.Idxmacchina = @IdxMacchina
END
RETURN
go
commit;
go
-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(385, GETDATE())
GO
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
GO