set xact_abort on
go

begin transaction
go

alter table RigheListePrelievo_AS add
  DataBatch datetime
go

exec sp_addextendedproperty 'MS_Description', 'dataora di caricamento batch verso AS', 'SCHEMA', 'dbo', 'TABLE', 'RigheListePrelievo_AS', 'COLUMN', 'DataBatch'
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_processaCodaMovimPackList
*
* Processa la coda delle packing list e chiama procedura x salvataggio dato su AS400
*
* Steamware, S.E.L.
* mod: 2010.10.22
*
****************************************/
alter PROCEDURE BatchQueue.stp_processaCodaMovimPackList
AS

	-- BOZZA DA VERIFICARE E COMPLETARE A CURA MAZZUCCONI!!!
	
	-- campi x cursore e valorizzazione riga a riga
	DECLARE @IdxRiga INT
	DECLARE @CodLista NVARCHAR(12)
	DECLARE @CodListaPre NVARCHAR(12)
	DECLARE @CodStab CHAR(2)
	DECLARE @UDC NVARCHAR(15)
	DECLARE @Particolare NVARCHAR(15)
	DECLARE @CodImb NVARCHAR(15)
	DECLARE @Matr INT	
	DECLARE @Tipo NVARCHAR(2)
	DECLARE @Dest NVARCHAR(10)
	DECLARE @Qta INT
	DECLARE @PesoNet NUMERIC(7,3)
	DECLARE @PesoLor NUMERIC(7,3)	
	DECLARE @Stato CHAR(1)
	DECLARE @Data NVARCHAR(8)
    
    DECLARE @ScritturaRigaOK AS INT  -- Flag errore su riga ritornato da Stored che va su As400 0 = Ok
    SET @ScritturaRigaOK = 0;

    DECLARE @ScritturaASOK AS INT   -- Flag errore Packing generale su Stored che va su As400 0 = Ok
    SET @ScritturaASOK = 0;
	
	-- qui è meglio usare una tabella temporanea o ancor meglio una variabile tabella x pochi 
	-- record per non bloccare le tabelle sottostanti
	-- query con un cursore x processare tutte le righe di Packing che sono ancora da inviare ad AS400 ( DataBatch IS NULL )
	DECLARE RigaPackList CURSOR LOCAL FOR
		SELECT IdxRiga, CodLista FROM v_datiPackingList ORDER BY CodLista

	-- setto il codice stabilimento da inviare ad AS... VERIFICARE!!!
	SET @CodStab = '05';

	-- imposto prima codListaPre a vuoto...
	SET	@CodListaPre = '';
	
	-- inizio cursore caricando le righe
	OPEN RigaPackList
	FETCH NEXT FROM RigaPackList
	INTO @IdxRiga , @CodLista

    SET @CodListaPre = @CodLista
	
	WHILE @@FETCH_STATUS = 0
	BEGIN
	  -- controllo ci sia almento una riga di Packing ( PER ME NON SERVE )
	  IF (SELECT COUNT(IdxRiga) FROM v_datiPackingList WHERE IdxRiga = @IdxRiga) > 0
		BEGIN
			-- carico valori che mi servono
			SELECT	@Particolare=pl.Particolare, @UDC=UDC, @CodImb=pl.CodImballo, @Matr = pl.matrUdc, @Tipo=pl.tipo, @Dest=pl.Destinatario, 
					@Qta=ABS(pl.Qta), @PesoNet=pl.PesoNetto, @PesoLor=pl.PesoTot, @Stato=pl.Stato, @Data=dbo.dateToAsFormat(pl.data), 
					@CodLista=pl.CodLista
					FROM v_datiPackingList pl
					WHERE IdxRiga = @IdxRiga
					
			-- Eseguo la stored che registra la Packing List con le righe sue righe
			EXECUTE @ScritturaRigaOK = BatchQueue.stp_registraPackList @CodStab,  @UDC, @Particolare , @CodImb , @Matr , @Tipo , @Dest , @Qta , @PesoNet  , @PesoLor , @Stato , @Data
            			
			-- se scrittura riga è ok allora salvo sulla riga la data di invio... così poi non la rivedo tra quelle da processare...
			IF @ScritturaRigaOK = 0
				 UPDATE RigheListePrelievo_AS SET DataBatch = GETDATE() WHERE IdxRiga = @IdxRiga;				 
				 
				 	
			-- Se scrittura Riga Packing non ok metto Flag Packing list non Ok
			IF @ScritturaRigaOK <> 0 SET @ScritturaASOK = @ScritturaRigaOK
			
			FETCH NEXT FROM RigaPackList 
            INTO @IdxRiga , @CodLista
			
			-- controllo: se la lista precedente è diversa dall'attuale la indico come scaricata (precedente)
			IF(@CodListaPre <> @CodLista)
			BEGIN
				-- ATTENZIONE!!! Qui è da controllare perchè lo faccio una sola volta per la
				-- lista e non per riga prelievo ... boh non so se ok ... se UDC già presente in As400 errore 7343
				IF @ScritturaASOK = 0
				 UPDATE ElencoListePrelievo_AS SET DataBatch = GETDATE() WHERE CodLista = @CodListaPre;
				ELSE 
				 SET @ScritturaASOK = 0;   -- resetto il flag di controllo 
				
				-- cambio il cod pre da confrontare
				SET @CodListaPre = @CodLista
			END
		END
        
	END
	
    -- Aggiorno anche l'ultima lista prelievo
    -- **** è corretto ???  se poi ricarico tutto il Packing list che succede???
    -- x gli UDC già in AS400 da errore 7343
    IF @ScritturaASOK = 0  -- OR @ScritturaASOK = 7343 ??? 
	 UPDATE ElencoListePrelievo_AS SET DataBatch = GETDATE() WHERE CodLista = @CodLista
     -- registro la data del movimento BATCH dell'ultima lista processata 
	
	-- se c'è un errore mi rimane aperto il cursore? nn dovrebbe perchè LOCAL
	CLOSE RigaPackList
	DEALLOCATE RigaPackList

RETURN
go

alter VIEW v_datiPackingList
AS
SELECT        dbo.ElencoListePrelievo_AS.CodLista, dbo.RigheListePrelievo_AS.IdxRiga, dbo.ElencoCartellini.UDC, dbo.ElencoListePrelievo_AS.Particolare, 
                         dbo.ElencoCartellini.CodImballo, CAST(RIGHT(LTRIM(dbo.RigheListePrelievo_AS.UDC), 6) AS INT) AS matrUdc, 
                         CASE WHEN (dbo.ElencoListePrelievo_AS.CodTipoLista = '03-TerWip') THEN 'FO' ELSE 'CL' END AS tipo, dbo.ElencoListePrelievo_AS.Destinatario, 
                         dbo.ElencoCartellini.Qta, ROUND(dbo.ElencoCartellini.PesoTot - dbo.ElencoCartellini.Tara, 3) AS PesoNetto, ROUND(dbo.ElencoCartellini.PesoTot, 3) AS PesoTot, 
                         'P' AS Stato, GETDATE() AS data, dbo.RigheListePrelievo_AS.DataBatch
FROM            dbo.ElencoListePrelievo_AS INNER JOIN
                         dbo.RigheListePrelievo_AS ON dbo.ElencoListePrelievo_AS.CodLista = dbo.RigheListePrelievo_AS.CodLista INNER JOIN
                         dbo.ElencoCartellini ON dbo.RigheListePrelievo_AS.UDC = dbo.ElencoCartellini.UDC
WHERE        (dbo.RigheListePrelievo_AS.DataBatch IS NULL)
go

exec sp_updateextendedproperty 'MS_DiagramPane1', '[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties = 
   Begin PaneConfigurations = 
      Begin PaneConfiguration = 0
         NumPanes = 4
         Configuration = "(H (1[40] 4[20] 2[20] 3) )"
      End
      Begin PaneConfiguration = 1
         NumPanes = 3
         Configuration = "(H (1 [50] 4 [25] 3))"
      End
      Begin PaneConfiguration = 2
         NumPanes = 3
         Configuration = "(H (1 [50] 2 [25] 3))"
      End
      Begin PaneConfiguration = 3
         NumPanes = 3
         Configuration = "(H (4 [30] 2 [40] 3))"
      End
      Begin PaneConfiguration = 4
         NumPanes = 2
         Configuration = "(H (1 [56] 3))"
      End
      Begin PaneConfiguration = 5
         NumPanes = 2
         Configuration = "(H (2 [66] 3))"
      End
      Begin PaneConfiguration = 6
         NumPanes = 2
         Configuration = "(H (4 [50] 3))"
      End
      Begin PaneConfiguration = 7
         NumPanes = 1
         Configuration = "(V (3))"
      End
      Begin PaneConfiguration = 8
         NumPanes = 3
         Configuration = "(H (1[56] 4[18] 2) )"
      End
      Begin PaneConfiguration = 9
         NumPanes = 2
         Configuration = "(H (1 [75] 4))"
      End
      Begin PaneConfiguration = 10
         NumPanes = 2
         Configuration = "(H (1[66] 2) )"
      End
      Begin PaneConfiguration = 11
         NumPanes = 2
         Configuration = "(H (4 [60] 2))"
      End
      Begin PaneConfiguration = 12
         NumPanes = 1
         Configuration = "(H (1) )"
      End
      Begin PaneConfiguration = 13
         NumPanes = 1
         Configuration = "(V (4))"
      End
      Begin PaneConfiguration = 14
         NumPanes = 1
         Configuration = "(V (2))"
      End
      ActivePaneConfig = 0
   End
   Begin DiagramPane = 
      Begin Origin = 
         Top = 0
         Left = 0
      End
      Begin Tables = 
         Begin Table = "ElencoListePrelievo_AS"
            Begin Extent = 
               Top = 6
               Left = 38
               Bottom = 367
               Right = 238
            End
            DisplayFlags = 280
            TopColumn = 0
         End
         Begin Table = "ElencoCartellini"
            Begin Extent = 
               Top = 14
               Left = 658
               Bottom = 376
               Right = 828
            End
            DisplayFlags = 280
            TopColumn = 0
         End
         Begin Table = "RigheListePrelievo_AS"
            Begin Extent = 
               Top = 5
               Left = 353
               Bottom = 200
               Right = 557
            End
            DisplayFlags = 280
            TopColumn = 0
         End
      End
   End
   Begin SQLPane = 
   End
   Begin DataPane = 
      Begin ParameterDefaults = ""
      End
      Begin ColumnWidths = 15
         Width = 284
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
         Width = 1500
      End
   End
   Begin CriteriaPane = 
      Begin ColumnWidths = 11
         Column = 1440
         Alias = 900
         Table = 1170
         Output = 720
         Append = 1400
         NewValue = 1170
         SortType = 1350
         SortOrder = 1410
         GroupBy = 1350
         Filter = 1350
         Or = 1350
         Or = 1350
         Or = 1350
      End
   End
End
', 'SCHEMA', 'dbo', 'VIEW', 'v_datiPackingList'
go

commit
go





-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(291, GETDATE())
GO
