Untitled

 avatar
unknown
plain_text
a year ago
12 kB
6
Indexable
CREATE FUNCTION [dbo].[fn_B_RS_MovMagTes_AbbinaGaranzia]
/*
00 Procedure : fn_B_RS_MovMagTes_AbbinaGaranzia
01 Class     : 1000000000
02 Level     : **
03 Author    : IDEA INFORMATICA - Giorgio Cappi
04 Date      : Jan 20, 2015
05 Version   : 3.1.1
06 Purpose   :
07 Input     :
08
09 Returns   : Resultset
10 Remarks   :
10             GG - 02/04/24: Utilizzato mmrPrezzoFatturaIvaT al posto del prezzoNetto poiche' il prezzo netto non tiene conto degli sconti di testata
10             GG - 02/05/24: In caso di MovMagRigheSave il campo mmrPrezzoFatturaIvaT non e' sempre valorizzato correttamente, 
10                            quindi torno a prendere in considerazione anche il mmrPrezzoNetto.
*/
(
/*PINI*/
@MovIdSelezione char(9),
@MovIdCorrente  char(9),
@TipoGaranzia   smallint
/*PEND*/
)
/*END*/
RETURNS  TABLE
AS
RETURN
(SELECT
 mmtMovId
,MovMagRighe.mmrArticolo
,MovMagRighe.mmrID
,MovMagRighe.mmrDescrizione
,MovMagRighe.mmrCodLungo
,Descrizione = ARTSel.artCodLungo + ' ' + ARTSel.artCodCommerciale + ' ' + MovMagRighe.mmrDescrizione + ' ' + ARTSel.artMarchio
,mmtCausale
,mmtRifDoc
,mmtDataReg
,mmtMmtId
/*,PrezzoArticolo = IsNull(AA.Prz, CASE WHEN MovMagRighe.mmrPrezzoFatturaIvaT = 0 THEN MovMagRighe.mmrPrezzoImposto ELSE MovMagRighe.mmrPrezzoFatturaIvaT END)*/
/*,PrezzoArticolo = IsNull(AA.Prz, CASE WHEN MovMagRighe.mmrPScontiBase >= 99 THEN MovMagRighe.mmrPrezzoUn ELSE CASE WHEN MovMagRighe.mmrPrezzoNetto = 0 THEN MovMagRighe.mmrPrezzoImposto ELSE MovMagRighe.mmrPrezzoNetto END END)*/
,PrezzoArticolo = IsNull(AA.Prz, CASE WHEN MovMagRighe.mmrPScontiBase >= 99 THEN MovMagRighe.mmrPrezzoUn ELSE CASE WHEN MovMagRighe.mmrPrezzoFatturaIvaT = 0 THEN MovMagRighe.mmrPrezzoImposto ELSE MovMagRighe.mmrPrezzoFatturaIvaT END END)
,DescrizioneGaranzia = IsNull(GAR.mmrDescrizione, '')
FROM MovMagTes                          WITH(nolock)
INNER JOIN MovMagRighe                  WITH(nolock) ON MovMagRighe.mmrMovId = MovmagTes.mmtMovId
LEFT OUTER JOIN MovMagRigheSave  SAVXXX WITH(nolock) ON MovMagRighe.mmrID = SAVXXX.mmrID
LEFT OUTER JOIN MovMagRighe MMRPADRE    WITH(nolock) ON MovMagRighe.mmrIdRifLink = MMRPADRE.mmrID
INNER JOIN Articoli ARTSel              WITH(nolock) ON MovMagRighe.mmrArticolo = ARTSel.artCodice
INNER JOIN TipiArticolo                 WITH(nolock) ON artTipo = tarCodice
INNER JOIN Sottofamiglie                WITH(nolock) ON artSottofamiglia = sotCodice
/*
 LEFT OUTER JOIN MovMagRighe        GAR ON MovMagRighe.mmrIdRif =    GAR.mmrIdInGaranzia
*/
 /*LEFT OUTER JOIN MovMagRighe        GAR WITH(nolock) ON (     MovMagRighe.mmrIdRif =    GAR.mmrIdInGaranzia
                                                          AND @MovIdSelezione <> ''
                                                          AND MovMagRighe.mmrIdRif <> '')
                                                     OR (     MovMagRighe.mmrId =    GAR.mmrIdInGaranzia
                                                          AND @MovIdCorrente <> ''
                                                          AND MovMagRighe.mmrId <> '')  

 GG 03/05/2023 - Modificato in OUTER APPLY per migliorare le prestazioni 
 */ 
 OUTER APPLY (SELECT mmrDescrizione
                FROM MovMagRighe GAR WITH(NOLOCK)  
               WHERE (     MovMagRighe.mmrIdRif =    GAR.mmrIdInGaranzia
                 AND @MovIdSelezione <> ''
                 AND MovMagRighe.mmrIdRif <> '')
            OR (     MovMagRighe.mmrId =    GAR.mmrIdInGaranzia
                 AND @MovIdCorrente <> ''
                 AND MovMagRighe.mmrId <> '')) GAR
 
 /* Sostituito con una IF NOT EXISTS CHE ESCLUDE TUTTI I COMPONENTI */
 /*
 LEFT OUTER JOIN MovMagRigheSave SAVGAR WITH(nolock) ON MovMagRighe.mmrId = SAVGAR.mmrIdInGaranzia
                                                    AND SAVGAR.mmrMovId   = @MovIdCorrente
 
 */
 LEFT OUTER JOIN (SELECT Mov = mmrIdriflink
                        ,Prz = SUM(CASE WHEN MovMagRighe.mmrPScontiBase >= 99 THEN MovMagRighe.mmrPrezzoUn ELSE MovMagRighe.mmrPrezzoFatturaIvaT END * mmrQuantita)
                    FROM MovMagRighe WITH(nolock)
                   WHERE mmrLegami LIKE 'DBR=R-F%'
                   GROUP BY mmrIdriflink ) AS aa ON MovMagRighe.mmrID = aa.Mov
INNER JOIN (SELECT dbo.fn_XIsModuloAttivo('', '', 'G_EGES') AS Att1) AS ModAtt1 ON 1=1
INNER JOIN (SELECT dbo.fn_XIsModuloAttivo('', '', 'G_EGIN') AS Att3) AS ModAtt3 ON 1=1
LEFT OUTER JOIN (SELECT tgrNrGGDaVend=MAX(tgrNrGGDaVend) FROM TipiGaranzia WITH(nolock)) AS TGR ON 1=1
INNER JOIN Parametri WITH(NOLOCK) ON parCodice = 'XELIMTRA'
WHERE (    mmtMovID = @MovIdSelezione
        OR mmtMovID = @MovIdCorrente
      )
  AND (tarEscludoVal <> 1 OR ModAtt3.Att3 = 1)
  AND artTipoGaranzia = ''
  AND MovMagRighe.mmrQuantita = 1
  --AND IsNull(MMRPADRE.mmrTipoRiga, '') <> '4'
  AND DateDiff(day , MovMagTes.mmtDataReg, Getdate()) < IsNull(TGR.tgrNrGGDaVend, 365)

/*  AND    GAR.mmrMovId IS NULL  */
  -----------------------------------AND SAVGAR.mmrMovId IS NULL
  AND SAVXXX.mmrMovId IS NULL
  AND ((sotModuloGaranzia > -9 AND ModAtt1.Att1 = 1) OR ModAtt1.Att1 = 0 OR ModAtt3.Att3 = 1)
  AND (  /* caso SGM - deve esistere abbinamento */
          EXISTS (SELECT  1 FROM dbo.fn_B_RS_GaranzieRaggr(ARTSel.artCodice, -999999,''))
       OR
         /* caso ESTENDO - deve essere abilitata la sottofamiglia */
          (      ModAtt1.Att1 = 1
            AND @TipoGaranzia = 1
          )
       OR
         /* caso INTERNO - qualsiasi articolo */
          (      ModAtt3.Att3 = 1
            AND @TipoGaranzia = 2) 
            AND EXISTS (SELECT  1 FROM dbo.fn_B_RS_GaranzieRaggr (ARTSel.artCodice, IsNull(AA.Prz, CASE WHEN MovMagRighe.mmrPScontiBase >= 99 THEN MovMagRighe.mmrPrezzoUn ELSE CASE WHEN MovMagRighe.mmrPrezzoFatturaIvaT = 0 THEN MovMagRighe.mmrPrezzoImposto ELSE MovMagRighe.mmrPrezzoFatturaIvaT END END), '')
          )  
      )
  AND (
         parValnumerico = 0 
      OR 
         artTipo NOT IN ('55', '56')
      )
  AND NOT EXISTS (SELECT 1 FROM dbo.fn_B_RS_MovMagTes_KitInGaranzia (@MovIdCorrente, 0) WHERE mmrID = MovMagRighe.mmrId)

UNION
SELECT
 MovMagRigheSave.mmrMovId
,MovMagRigheSave.mmrArticolo
,MovMagRigheSave.mmrID
,MovMagRigheSave.mmrDescrizione
,MovMagRigheSave.mmrCodLungo
,Descrizione = ARTcor.artCodLungo + ' ' + ARTcor.artCodCommerciale + ' ' + MovMagRigheSave.mmrDescrizione + ' ' + ARTcor.artMarchio
,MovMagRigheSave.mmrCausale
,'' AS mmtRifDoc
,MovMagRigheSave.mmrDataReg
,'' AS mmtMmtId
,PrezzoArticolo = IsNull(AA.Prz,CASE WHEN MovMagRigheSave.mmrPScontiBase >= 99 
                                            THEN MovMagRigheSave.mmrPrezzoUn 
                                            ELSE CASE WHEN MovMagRigheSave.mmrPrezzoFatturaIvaT = 0 
                                                          THEN CASE WHEN MovMagRigheSave.mmrPrezzoNetto = 0 
                                                                         THEN MovMagRigheSave.mmrPrezzoImposto
                                                                         ELSE MovMagRigheSave.mmrPrezzoNetto
                                                               END
                                                          ELSE MovMagRigheSave.mmrPrezzoFatturaIvaT 
                                                 END 
                                    END)
,DescrizioneGaranzia = ''
 FROM MovMagRigheSave                    WITH(nolock)
 LEFT OUTER JOIN MovMagRighe      MMRXXX WITH(nolock) ON MovMagRigheSave.mmrID = MMRXXX.mmrID
LEFT OUTER JOIN MovMagRigheSave MMRPADRE WITH(nolock) ON MovMagRigheSave.mmrIdRifLink = MMRPADRE.mmrID
INNER JOIN Articoli ARTcor               WITH(nolock) ON MovMagRigheSave.mmrArticolo = ARTcor.artCodice
INNER JOIN TipiArticolo                  WITH(nolock) ON ARTcor.artTipo = tarCodice
INNER JOIN Sottofamiglie                 WITH(nolock) ON artSottofamiglia = sotCodice
 LEFT OUTER JOIN MovMagRighe         GAR WITH(nolock) ON MovMagRigheSave.mmrId =    GAR.mmrIdInGaranzia
 
 /* Sostituito con una IF NOT EXISTS CHE ESCLUDE TUTTI I COPONENTI */
 /*
 LEFT OUTER JOIN MovMagRigheSave  SAVGAR WITH(nolock) ON MovMagRigheSave.mmrId = SAVGAR.mmrIdInGaranzia
                                                     AND SAVGAR.mmrMovId       = @MovIdCorrente
*/ 
 
 
 LEFT OUTER JOIN (SELECT Mov = mmrIdRifLink
                        ,Prz = SUM(CASE WHEN MovMagRigheSave.mmrPScontiBase >= 99 
                                            THEN MovMagRigheSave.mmrPrezzoUn 
                                            ELSE CASE WHEN MovMagRigheSave.mmrPrezzoFatturaIvaT = 0 
                                                          THEN CASE WHEN MovMagRigheSave.mmrPrezzoNetto = 0 
                                                                         THEN MovMagRigheSave.mmrPrezzoImposto
                                                                         ELSE MovMagRigheSave.mmrPrezzoNetto
                                                               END
                                                          ELSE MovMagRigheSave.mmrPrezzoFatturaIvaT 
                                                 END 
                                    END * mmrQuantita)
                    FROM MovMagRigheSave WITH(nolock)
                   WHERE mmrLegami LIKE 'DBR=R-F%'
                   GROUP BY mmrIdRifLink ) AS aa ON MovMagRigheSave.mmrID = aa.Mov
INNER JOIN (SELECT dbo.fn_XIsModuloAttivo('', '', 'G_EGES') AS Att2) AS ModAtt2 ON 1=1
INNER JOIN (SELECT dbo.fn_XIsModuloAttivo('', '', 'G_EGIN') AS Att4) AS ModAtt4 ON 1=1
INNER JOIN Parametri WITH(NOLOCK) ON parCodice = 'XELIMTRA'
WHERE MovMagRigheSave.mmrMovID = @MovIdCorrente
  AND (tarEscludoVal <> 1 OR ModAtt4.Att4 = 1)
  AND artTipoGaranzia = ''
  AND MovMagRigheSave.mmrQuantita = 1
--  AND IsNull(MMRPADRE.mmrTipoRiga, '') <> '4'
  AND    GAR.mmrMovId IS NULL
  -------------------------AND SAVGAR.mmrMovId IS NULL
  AND MMRXXX.mmrMovId IS NULL
  AND ((sotModuloGaranzia > -9 AND ModAtt2.Att2 = 1) OR ModAtt2.Att2 = 0 OR ModAtt4.Att4 = 1)
  AND (  /* caso SGM - deve esistere abbinamento */
          EXISTS (SELECT  1 FROM dbo.fn_B_RS_GaranzieRaggr ( ARTcor.artCodice, -999999,''))
       OR
         /* caso ESTENDO - deve essere abilitata la sottofamiglia */
          (      ModAtt2.Att2 = 1 
            AND @TipoGaranzia = 1
          ) 
       OR
         /* caso INTERNO - qualsiasi articolo */
          (      ModAtt4.Att4 = 1 
            AND @TipoGaranzia = 2
            AND  EXISTS (SELECT  1 FROM dbo.fn_B_RS_GaranzieRaggr ( ARTcor.artCodice, IsNull(AA.Prz, CASE WHEN MovMagRigheSave.mmrPScontiBase >= 99 
                                                                                                             THEN MovMagRigheSave.mmrPrezzoUn 
                                                                                                             ELSE CASE WHEN MovMagRigheSave.mmrPrezzoFatturaIvaT = 0 
                                                                                                                           THEN CASE WHEN MovMagRigheSave.mmrPrezzoNetto = 0 
                                                                                                                                          THEN MovMagRigheSave.mmrPrezzoImposto
                                                                                                                                          ELSE MovMagRigheSave.mmrPrezzoNetto
                                                                                                                                END
                                                                                                                           ELSE MovMagRigheSave.mmrPrezzoFatturaIvaT 
                                                                                                                  END 
                                                                                                     END),'')
          )
       )

      )
  AND (
       parValnumerico = '0' 
    OR 
       artTipo NOT IN ('55', '56')
    )
  AND NOT EXISTS ( SELECT 1 FROM dbo.fn_B_RS_MovMagTes_KitInGaranzia (@MovIdCorrente, 1) WHERE mmrID = MovMagRigheSave.mmrId)
)

   

Editor is loading...
Leave a Comment