1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
CREATE PROCEDURE [dbo].[GET_PRIX_TOTAL]
@REF as varchar(100),
@PRIX_TOTAL as decimal OUTPUT
AS
DECLARE @REFORIGINE as varchar(100)
DECLARE @CURREF as varchar(100)
DECLARE @CURQTEOPTION as integer
DECLARE @CUROPTION as varchar(2)
DECLARE @PRIX_OPTION as decimal
IF dbo.FCN_COUNTSTR('%', @REF)=0
BEGIN
IF (SELECT AR_GAMME1 FROM F_ARTICLE WHERE AR_REF=@REF) = 0
BEGIN
SELECT @PRIX_TOTAL=AR_PRIXVEN FROM F_ARTICLE
END
ELSE
BEGIN
SELECT @PRIX_TOTAL=T.TG_PRIX FROM F_TARIFGAM T LEFT OUTER JOIN F_ARTGAMME G ON T.AG_NO=G.AG_NO1 WHERE G.AR_REF=@REF AND G.EG_ENUMERE = '*'
END
END
ELSE
BEGIN
-- référence article
SET @REFORIGINE=SUBSTRING(@REF,0,LEN(SUBSTRING(@REF,0,CHARINDEX('%',@REF))-1)
-- chaine courante de traitement = sous chaine de la référence article à partir du premier %
SET @CURREF=SUBSTRING(@REF,CHARINDEX('%',@REF)+1,LEN(@REF)-1)
WHILE (LEN(@CURREF))>0
BEGIN
-- quantité de l'option courante = sous chaine de @CURREF à partir du début jusqu'au prochain %
SET @CURQTEOPTION = cast(SUBSTRING(@CURREF,0,LEN(SUBSTRING(@CURREF,0,CHARINDEX('%',@CURREF)))-1) as int)
-- on décale @CURREF vers la droite juste après le % de la quantité de l'option
SET @CURREF=SUBSTRING(@CURREF,CHARINDEX('%',@CURREF)+1,LEN(@CURREF)-1)
-- option courante = sous chaine de @CURREF à partir du début jusqu'au prochain %
SET @CUROPTION = SUBSTRING(@CURREF,0,LEN(SUBSTRING(@CURREF,0,CHARINDEX('%',@CURREF))-1)
--on récupère le prix de l'option
SELECT @PRIX_OPTION=T.TG_PRIX FROM F_TARIFGAM T LEFT OUTER JOIN F_ARTGAMME G ON T.AG_NO=G.AG_NO1 WHERE G.AR_REF=@REFORIGINE AND G.EG_ENUMERE = @CUROPTION
--on ajoute le prix de l'option x quantité de l'option dans le prix_total
SET @PRIX_TOTAL = @PRIX_TOTAL + (@CURQTEOPTION * @PRIX_OPTION)
SET @CURREF=SUBSTRING(@CURREF,CHARINDEX('%',@CURREF)+1,LEN(@CURREF)-1)
END
END
RETURN @PRIX_TOTAL
GO |
Partager