SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
ALTER PROCEDURE [dbo].[taTaxEngine]
@I_vMSTRTAXSLID CHAR(15) = '',
@I_vMASKTAXSLID CHAR(15) = '',
@I_vFREITAXDSLID CHAR(15) = '',
@I_vMISCAMTTAXSLID CHAR(15) = '',
@I_vDETAILTYPE INT = 0,
@I_vTRXSOURCE CHAR(5) = '',
@I_vDOCTYPE SMALLINT = 0,
@I_vDOCNUMBE CHAR(30) = '',
@I_vCUSTNMBR CHAR(15) = '',
@I_vLINENUMBR NUMERIC(19, 5) = 0,
@I_vCOST NUMERIC(19, 5) = 0,
@I_vSALES NUMERIC(19, 5) = 0 OUTPUT,
@I_vTRADE NUMERIC(19, 9) = 0,
@I_vTRADEPCT NUMERIC(19, 5) = 0,
@I_vFRTAMT NUMERIC(19, 5) = 0,
@I_vMISCAMTAMT NUMERIC(19, 5) = 0,
@I_vNUMUNITS NUMERIC(19, 5) = 0,
@I_vINVOICETOTAL NUMERIC(19, 5) = 0,
@I_vINVOICETOTTAXABLE NUMERIC(19, 5) = 0,
@I_vDAVSALES NUMERIC(19, 5) = 0,
@I_vDAFRTAMT NUMERIC(19, 5) = 0,
@I_vDAMISCAMT NUMERIC(19, 5) = 0,
@I_vITEMNMBR CHAR(30) = '',
@I_vSLAMDUNK INT = 0,
@I_vVATENABLED INT = 0,
@I_vDECIMALPLACES INT = 2,
@I_vRTCLCMTD SMALLINT = -1,
@I_vXCHGRATE NUMERIC(19, 7) = 0,
@I_vBACKOSALES NUMERIC(19, 5) = 0 OUTPUT,
@I_vBACKOFREHT NUMERIC(19, 5) = 0 OUTPUT,
@I_vBACKOMISC NUMERIC(19, 5) = 0 OUTPUT,
@I_vBackoutTradeDisc NUMERIC(19, 5) = 0 OUTPUT,
@I_vRECALC INT = 0 OUTPUT,
@I_vTAXAMNT NUMERIC(19, 5) = 0 OUTPUT,
@I_vFUTOTAMT NUMERIC(19, 5) = 0 OUTPUT,
@I_vFRTTXAMT NUMERIC(19, 5) = 0 OUTPUT,
@I_vMSCTXAMT NUMERIC(19, 5) = 0 OUTPUT,
@O_iErrorState INT = NULL OUTPUT,
@oErrString VARCHAR(255) OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;
DECLARE @TAXSUM NUMERIC(19, 5),
@TAXAMNT NUMERIC(19, 7),
@SALES NUMERIC(19, 7),
@iStatus INT,
@oErrorDesc CHAR(255),
@O_oErrorState INT,
@TAXDTLID CHAR(15),
@ACTINDX INT,
@TXDTLBSE SMALLINT,
@TXDTLPCT NUMERIC(19, 5),
@TXDTLAMT NUMERIC(19, 7),
@TDTLRNDG SMALLINT,
@TXDBODTL CHAR(15),
@TDTABMIN NUMERIC(21, 7),
@TDTABMAX NUMERIC(21, 7),
@TDTAXMIN NUMERIC(21, 7),
@TDTAXMAX NUMERIC(21, 7),
@TDRNGTYP SMALLINT,
@TXDTQUAL SMALLINT,
@TDTAXTAX TINYINT,
@TDTABPCT NUMERIC(19, 5),
@TradeTax NUMERIC(19, 7),
@TaxableTotal NUMERIC(19, 7),
@BKTSLSAM NUMERIC(19, 7),
@rnd NUMERIC(19, 6),
@pow SMALLINT,
@dec SMALLINT,
@fun TINYINT,
@TaxableBase NUMERIC(19, 7),
@TaxableBaseTemp NUMERIC(19, 7),
@FINDBOTAX NUMERIC(19, 7),
@TXDTOTTX NUMERIC(19, 7),
@unitAmt NUMERIC(19, 5),
@TaxableSum NUMERIC(19, 7),
@COST NUMERIC(19, 7),
@TaxableBaseNeg NUMERIC(19, 7),
@TaxableBaseTempBO NUMERIC(19, 7),
@unitAmtTotal NUMERIC(19, 7);
SELECT @TAXSUM = 0,
@TAXAMNT = 0,
@SALES = 0,
@iStatus = 0,
@O_oErrorState = 0,
@TAXDTLID = '',
@ACTINDX = 0,
@TXDTLBSE = 0,
@TXDTLPCT = 0,
@TXDTLAMT = 0,
@TDTLRNDG = 0,
@TXDBODTL = '',
@TDTABMIN = 0,
@TDTABMAX = 0,
@TDTAXMIN = 0,
@TDTAXMAX = 0,
@TDRNGTYP = 0,
@TXDTQUAL = 0,
@TDTAXTAX = 0,
@TDTABPCT = 0,
@TradeTax = 0,
@TaxableTotal = 0,
@BKTSLSAM = 0,
@rnd = 0,
@pow = 0,
@dec = 0,
@fun = 0,
@TaxableBase = 0,
@TaxableBaseTemp = 0,
@FINDBOTAX = 0,
@TXDTOTTX = 0,
@unitAmt = 0,
@TaxableSum = 0,
@COST = 0,
@TaxableBaseNeg = 0,
@TaxableBaseTempBO = 0,
@unitAmtTotal = 0;
IF (@oErrString IS NULL)
BEGIN
SELECT @oErrString = '';
END;
IF (
@I_vMSTRTAXSLID IS NULL
OR @I_vMASKTAXSLID IS NULL
OR @I_vFREITAXDSLID IS NULL
OR @I_vMISCAMTTAXSLID IS NULL
OR @I_vDETAILTYPE IS NULL
OR @I_vTRXSOURCE IS NULL
OR @I_vDOCTYPE IS NULL
OR @I_vDOCNUMBE IS NULL
OR @I_vCUSTNMBR IS NULL
OR @I_vLINENUMBR IS NULL
OR @I_vRECALC IS NULL
OR @I_vCOST IS NULL
OR @I_vSALES IS NULL
OR @I_vTRADE IS NULL
OR @I_vTRADEPCT IS NULL
OR @I_vFRTAMT IS NULL
OR @I_vMISCAMTAMT IS NULL
OR @I_vTAXAMNT IS NULL
OR @I_vFUTOTAMT IS NULL
OR @I_vNUMUNITS IS NULL
OR @I_vINVOICETOTAL IS NULL
OR @I_vINVOICETOTTAXABLE IS NULL
OR @I_vBACKOSALES IS NULL
OR @I_vBACKOFREHT IS NULL
OR @I_vBACKOMISC IS NULL
OR @I_vBackoutTradeDisc IS NULL
OR @I_vDAVSALES IS NULL
OR @I_vDAFRTAMT IS NULL
OR @I_vDAMISCAMT IS NULL
OR @I_vITEMNMBR IS NULL
OR @I_vDECIMALPLACES IS NULL
OR @I_vVATENABLED IS NULL
OR @I_vSLAMDUNK IS NULL
)
BEGIN
SELECT @O_iErrorState = 800;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrString,
@oErrString OUTPUT,
@O_oErrorState OUTPUT;
RETURN (@O_iErrorState);
END;
IF (
@I_vMSTRTAXSLID = ''
AND @I_vMASKTAXSLID = ''
AND @I_vFREITAXDSLID = ''
AND @I_vMISCAMTTAXSLID = ''
)
BEGIN
RETURN (@O_iErrorState);
END;
IF (@oErrorDesc IS NULL)
SELECT @oErrorDesc = '';
SELECT @I_vDOCNUMBE = UPPER(@I_vDOCNUMBE),
@I_vCUSTNMBR = UPPER(@I_vCUSTNMBR),
@I_vMSTRTAXSLID = UPPER(@I_vMSTRTAXSLID),
@I_vMASKTAXSLID = UPPER(@I_vMASKTAXSLID),
@I_vFREITAXDSLID = UPPER(@I_vFREITAXDSLID),
@I_vMISCAMTTAXSLID = UPPER(@I_vMISCAMTTAXSLID),
@I_vITEMNMBR = UPPER(@I_vITEMNMBR);
IF (@I_vMASKTAXSLID <> '')
BEGIN
DECLARE Line_Taxes INSENSITIVE CURSOR FOR
SELECT a.TAXDTLID,
a.ACTINDX,
a.TXDTLBSE,
a.TXDTLPCT,
a.TXDTLAMT,
a.TDTLRNDG,
a.TXDBODTL,
a.TDTABMIN,
a.TDTABMAX,
a.TDTAXMIN,
a.TDTAXMAX,
a.TDRNGTYP,
a.TXDTQUAL,
a.TDTAXTAX,
a.TDTABPCT
FROM TX00102 b (NOLOCK),
TX00201 a (NOLOCK),
TX00201 c (NOLOCK),
TX00102 d (NOLOCK)
WHERE b.TAXSCHID = @I_vMASKTAXSLID
AND b.TAXDTLID = a.TAXDTLID
AND a.TXDTLTYP = @I_vDETAILTYPE
AND d.TAXSCHID = @I_vMSTRTAXSLID
AND d.TAXDTLID = c.TAXDTLID
AND a.TAXDTLID = c.TAXDTLID
ORDER BY a.TXDTLBSE,
a.TDTAXTAX,
a.TAXDTLID;
OPEN Line_Taxes;
IF (@@cursor_rows > 0)
BEGIN
FETCH NEXT FROM Line_Taxes
INTO @TAXDTLID,
@ACTINDX,
@TXDTLBSE,
@TXDTLPCT,
@TXDTLAMT,
@TDTLRNDG,
@TXDBODTL,
@TDTABMIN,
@TDTABMAX,
@TDTAXMIN,
@TDTAXMAX,
@TDRNGTYP,
@TXDTQUAL,
@TDTAXTAX,
@TDTABPCT;
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status = -2)
BEGIN
SELECT @O_iErrorState = 810;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrorDesc,
@oErrorDesc OUTPUT,
@O_oErrorState OUTPUT;
BREAK;
END;
SELECT @rnd = CASE @TDTLRNDG
WHEN 1 THEN
.5
WHEN 2 THEN
0
WHEN 3 THEN
-.5
WHEN 4 THEN
1
WHEN 5 THEN
1
WHEN 6 THEN
-.000001
ELSE
1
END;
SELECT @pow = CASE @TDTLRNDG
WHEN 1 THEN
@I_vDECIMALPLACES
WHEN 2 THEN
@I_vDECIMALPLACES
WHEN 3 THEN
@I_vDECIMALPLACES
WHEN 4 THEN
0
WHEN 5 THEN
1
WHEN 6 THEN
0
ELSE
0
END;
SELECT @dec = CASE @TDTLRNDG
WHEN 1 THEN
@I_vDECIMALPLACES
WHEN 2 THEN
@I_vDECIMALPLACES
WHEN 3 THEN
@I_vDECIMALPLACES
WHEN 4 THEN
0
WHEN 5 THEN
0
WHEN 6 THEN
0
ELSE
@I_vDECIMALPLACES
END;
SELECT @fun = CASE @TDTLRNDG
WHEN 1 THEN
0
WHEN 2 THEN
0
WHEN 3 THEN
0
WHEN 4 THEN
1
WHEN 5 THEN
0
WHEN 6 THEN
1
ELSE
0
END;
IF ((@I_vXCHGRATE <> 0) AND (@I_vRTCLCMTD <> -1))
BEGIN
IF (@I_vRTCLCMTD = 1)
BEGIN
SELECT @TDTABMIN = CASE
WHEN @TDTABMIN > 0 THEN
ROUND(@TDTABMIN * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTABMAX = CASE
WHEN @TDTABMAX > 0 THEN
ROUND(@TDTABMAX * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMIN = CASE
WHEN @TDTAXMIN > 0 THEN
ROUND(@TDTAXMIN * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMAX = CASE
WHEN @TDTAXMAX > 0 THEN
ROUND(@TDTAXMAX * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TXDTLAMT = CASE
WHEN @TXDTLAMT > 0 THEN
ROUND(@TXDTLAMT * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END;
END;
ELSE
BEGIN
SELECT @TDTABMIN = CASE
WHEN @TDTABMIN > 0 THEN
ROUND(@TDTABMIN / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTABMAX = CASE
WHEN @TDTABMAX > 0 THEN
ROUND(@TDTABMAX / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMIN = CASE
WHEN @TDTAXMIN > 0 THEN
ROUND(@TDTAXMIN / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMAX = CASE
WHEN @TDTAXMAX > 0 THEN
ROUND(@TDTAXMAX / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TXDTLAMT = CASE
WHEN @TXDTLAMT > 0 THEN
ROUND(@TXDTLAMT / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END;
END;
END;
SELECT @TaxableBase = 0,
@TaxableBaseTemp = 0,
@TaxableBaseNeg = 0,
@SALES = 0;
IF (@TXDTLBSE = 5)
BEGIN
SELECT @FINDBOTAX = 0;
SELECT @FINDBOTAX = ISNULL(ORSLSTAX, 0)
FROM SOP10105 (NOLOCK)
WHERE SOPTYPE = @I_vDOCTYPE
AND SOPNUMBE = @I_vDOCNUMBE
AND LNITMSEQ = @I_vLINENUMBR
AND TAXDTLID = @TXDBODTL;
SELECT @TaxableBase = @FINDBOTAX;
END;
ELSE IF (@TXDTLBSE = 4)
BEGIN
SELECT @TaxableBase = ROUND(@I_vCOST * @I_vNUMUNITS, @I_vDECIMALPLACES);
END;
ELSE
BEGIN
SELECT @TaxableBase = @I_vSALES;
END;
IF (@TDTABPCT > 0)
BEGIN
SELECT @TaxableBase = ROUND(@TaxableBase * (@TDTABPCT / 100), @I_vDECIMALPLACES);
END;
SELECT @TaxableBaseTemp = ABS(@TaxableBase);
SELECT @unitAmt = 0;
SELECT @unitAmtTotal = @TaxableBaseTemp;
IF ((@TDTABMIN > 0) OR (@TDTABMAX > 0))
BEGIN
IF (@TXDTQUAL = 1)
BEGIN
IF (@I_vNUMUNITS <> 0)
BEGIN
SELECT @unitAmt = @TaxableBaseTemp / @I_vNUMUNITS;
END;
IF (ABS(@unitAmt) < @TDTABMIN)
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@TDRNGTYP = 1)
BEGIN
IF (@TDTABMAX > 0)
AND (ABS(@unitAmt) > @TDTABMAX)
BEGIN
SELECT @unitAmt = @TDTABMAX;
SELECT @TaxableBaseTemp = ROUND(@unitAmt * ABS(@I_vNUMUNITS), @I_vDECIMALPLACES);
END;
END;
ELSE
BEGIN
IF (@TDTABMAX > 0)
AND (ABS(@unitAmt) > @TDTABMAX)
BEGIN
SELECT @unitAmt = @TDTABMAX - @TDTABMIN;
END;
ELSE
BEGIN
SELECT @unitAmt = ABS(@unitAmt) - @TDTABMIN;
END;
SELECT @TaxableBaseTemp = ROUND(@unitAmt * ABS(@I_vNUMUNITS), @I_vDECIMALPLACES);
END;
END;
END;
ELSE
BEGIN
IF (@TXDTQUAL = 2)
BEGIN
IF (@TaxableBaseTemp < @TDTABMIN)
BEGIN
IF (@TaxableBase < 0)
BEGIN
SELECT @TaxableBaseNeg = @TaxableBase;
END;
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@TDRNGTYP = 1)
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseNeg = @TaxableBase;
SELECT @TaxableBaseTemp = @TDTABMAX;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseTemp = @TDTABMAX - @TDTABMIN;
END;
ELSE
BEGIN
SELECT @TaxableBaseTemp = @TaxableBaseTemp - @TDTABMIN;
END;
END;
END;
END;
ELSE
BEGIN
IF (@TXDTQUAL = 3)
BEGIN
SELECT @TaxableSum = ISNULL(SUM(ORTXSLS), 0)
FROM SOP10105 (NOLOCK)
WHERE SOPTYPE = @I_vDOCTYPE
AND SOPNUMBE = @I_vDOCNUMBE
AND LNITMSEQ <> 0
AND TAXDTLID = @TAXDTLID;
IF (ABS(@I_vINVOICETOTAL) < @TDTABMIN)
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@I_vINVOICETOTAL >= 0)
BEGIN
IF (@TaxableBase < 0)
BEGIN
IF (@TaxableBase < 0)
AND (@TDTABMAX > 0)
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBase + @TaxableSum > @TDTABMAX))
BEGIN
IF ((@TDTABMAX - @TaxableSum) > 0)
SELECT @TaxableBaseTemp = (@TDTABMAX - @TaxableSum);
ELSE
SELECT @TaxableBaseTemp = 0;
END;
IF ((@TDTABMAX > 0) AND (@I_vINVOICETOTAL < 0))
BEGIN
IF ((@TaxableBaseTemp + @TaxableSum) > @I_vINVOICETOTAL)
BEGIN
IF ((@I_vINVOICETOTAL - @TaxableSum) > 0)
SELECT @TaxableBaseTemp = (@I_vINVOICETOTAL - @TaxableSum);
ELSE
SELECT @TaxableBaseTemp = 0;
END;
END;
END;
END;
ELSE
BEGIN
IF (@TaxableBase > 0)
BEGIN
IF ((@TaxableBase > 0) AND (@TDTABMAX > 0))
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (ABS(@TaxableSum + @TaxableBase) > @TDTABMAX))
BEGIN
IF ((@TDTABMAX - ABS(@TaxableSum)) > 0)
SELECT @TaxableBaseTemp = (@TDTABMAX - ABS(@TaxableSum));
ELSE
SELECT @TaxableBaseTemp = 0;
END;
IF ((@TDTABMAX > 0) AND (@I_vINVOICETOTAL < 0))
BEGIN
IF ((@TaxableBaseTemp + ABS(@TaxableSum)) > ABS(@I_vINVOICETOTAL))
BEGIN
IF ((ABS(@I_vINVOICETOTAL) - ABS(@TaxableSum)) > 0)
SELECT @TaxableBaseTemp
= (ABS(@I_vINVOICETOTAL) - ABS(@TaxableSum));
ELSE
SELECT @TaxableBaseTemp = 0;
END;
END;
END;
END;
END;
END;
ELSE
BEGIN
IF (@TaxableBaseTemp < @TDTABMIN)
BEGIN
IF (@TXDTLBSE = 5)
BEGIN
SELECT @TaxableBaseTempBO = @TaxableBaseTemp;
END;
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@TDRNGTYP = 1)
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseTemp = @TDTABMAX;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseTemp = @TDTABMAX - @TDTABMIN;
END;
ELSE
BEGIN
SELECT @TaxableBaseTemp = @TaxableBaseTemp - @TDTABMIN;
END;
END;
END;
END;
END;
END;
END;
IF (@TaxableBase < 0)
BEGIN
SELECT @TaxableBase = @TaxableBaseTemp * -1,
@TaxableBaseTempBO = @TaxableBaseTempBO * -1;
END;
ELSE
BEGIN
SELECT @TaxableBase = @TaxableBaseTemp;
END;
IF (@TXDTLBSE = 1)
BEGIN
SELECT @SALES = @TaxableBase;
SELECT @TaxableBase = ROUND(@TaxableBase / (@TXDTLPCT * .01 + 1), 7);
SELECT @TradeTax = (@I_vTRADE / (@TXDTLPCT * .01 + 1)) * (@TXDTLPCT * .01);
IF (@TradeTax <> ROUND(@TradeTax, @I_vDECIMALPLACES, 1))
BEGIN
SELECT @TradeTax = CASE
WHEN (@TradeTax < (.5 / POWER(10, @I_vDECIMALPLACES))) THEN
0
ELSE
ROUND(@TradeTax + (@rnd / POWER(10, @pow)), @dec, @fun)
END;
END;
SELECT @I_vBackoutTradeDisc = ROUND(@I_vTRADE - @TradeTax, @I_vDECIMALPLACES);
SELECT @I_vTRADE = @I_vBackoutTradeDisc;
SELECT @TAXAMNT = (@TaxableBase * (@TXDTLPCT * .01));
IF (@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES, 1))
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
SELECT @SALES = ROUND(@SALES - @TAXAMNT, @I_vDECIMALPLACES);
SELECT @TaxableBase = @SALES;
SELECT @TaxableBaseTemp = @TaxableBase;
SELECT @I_vSALES = @I_vSALES - @TAXAMNT;
END;
ELSE IF (@TXDTLBSE = 2)
BEGIN
SELECT @TAXAMNT = ROUND(@I_vNUMUNITS * @TXDTLAMT, 7);
SELECT @SALES = @TaxableBase;
END;
ELSE IF (@TXDTLBSE = 3)
BEGIN
SELECT @TAXAMNT = ROUND(@TaxableBase * @TXDTLPCT * .01, 7);
SELECT @SALES = @TaxableBase;
END;
ELSE IF (@TXDTLBSE = 4)
BEGIN
SELECT @TAXAMNT = ROUND(@TaxableBase * @TXDTLPCT * .01, 7);
SELECT @SALES = @TaxableBase;
IF (
@TAXAMNT <> ROUND(@TAXAMNT, 0, 1)
AND @TDTLRNDG IN ( 2, 4, 5, 6 )
OR
(
@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES)
AND @TDTLRNDG NOT IN ( 4, 5, 6 )
)
)
BEGIN
IF (@TAXAMNT >= 0)
BEGIN
SELECT @TXDTOTTX = ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
ELSE
BEGIN
SELECT @TXDTOTTX = ROUND(@TAXAMNT - (@rnd / POWER(10, @pow)), @dec, @fun);
END;
END;
ELSE
BEGIN
SELECT @TXDTOTTX = @TAXAMNT;
END;
IF (@TAXAMNT < 0)
AND (ABS(@TAXAMNT) <= @TDTAXMIN)
AND (@I_vINVOICETOTAL > 0)
BEGIN
SELECT @TAXAMNT = 0;
END;
END;
ELSE IF (@TXDTLBSE = 5)
BEGIN
SELECT @TAXAMNT = @TaxableBase * @TXDTLPCT * .01;
IF (@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES, 1))
BEGIN
IF (@TAXAMNT >= 0)
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
ELSE
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT - (@rnd / POWER(10, @pow)), @dec, @fun);
END;
END;
SELECT @SALES = @TaxableBase;
END;
IF (@TDTAXTAX = 1)
BEGIN
IF (
@TAXAMNT <> ROUND(@TAXAMNT, 0, 1)
AND @TDTLRNDG IN ( 2, 4, 5, 6 )
OR
(
@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES)
AND @TDTLRNDG NOT IN ( 4, 5, 6 )
)
)
BEGIN
IF (@TaxableTotal >= 0)
BEGIN
SELECT @TaxableTotal = @TaxableTotal + ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
ELSE
BEGIN
SELECT @TaxableTotal = @TaxableTotal + ROUND(@TAXAMNT - (@rnd / POWER(10, @pow)), @dec, @fun);
END;
END;
ELSE
BEGIN
SELECT @TaxableTotal = @TaxableTotal + @TAXAMNT;
END;
END;
IF (@TXDTLBSE = 6)
BEGIN
IF (@TaxableBase >= 0)
BEGIN
SELECT @TaxableBaseTemp = ROUND(@TaxableTotal + @TaxableBaseTemp, @I_vDECIMALPLACES);
END;
ELSE
BEGIN
IF (@TaxableBase < 0 AND @I_vSALES < 0)
BEGIN
SELECT @TaxableBaseTemp = ROUND((@TaxableBaseTemp * -1) + @TaxableTotal, @I_vDECIMALPLACES);
END;
ELSE
BEGIN
SELECT @TaxableBaseTemp = ROUND(@TaxableBaseTemp - @TaxableTotal, @I_vDECIMALPLACES);
END;
END;
IF (@TaxableBase <> @SALES)
AND
(
@TDTABMAX = @TaxableBase
OR @TaxableBase <= @TDTABMAX - @TDTABMIN
)
BEGIN
IF (@TaxableBase = @TDTABMAX OR (@TaxableBase + @TaxableSum) = @TDTABMAX)
BEGIN
SELECT @SALES = @TaxableBase;
END;
ELSE
BEGIN
SELECT @SALES = @TaxableBaseTemp;
SELECT @TaxableBase = @SALES;
END;
END;
ELSE
BEGIN
IF (
@SALES = 0
AND @TaxableBase = 0
AND @TXDTQUAL = 3
AND @TDRNGTYP = 2
AND ((@TaxableSum + @TaxableTotal) >= @TDTABMAX)
)
BEGIN
SELECT @SALES = 0,
@TaxableBase = 0;
END;
ELSE
BEGIN
SELECT @SALES = ROUND(@TaxableTotal + @TaxableBase, 7);
SELECT @TaxableBase = ROUND(@TaxableTotal + @TaxableBase, @I_vDECIMALPLACES);
END;
END;
SELECT @TAXAMNT = ROUND((@SALES * @TXDTLPCT * .01), 7);
SELECT @SALES = ROUND(@SALES, @I_vDECIMALPLACES);
END;
IF (@TXDTLBSE = 6)
BEGIN
IF (
(
(
@TXDTQUAL = 3
AND ABS(@I_vINVOICETOTAL) < @TDTABMIN
)
)
OR
(
(@TXDTQUAL = 2)
AND (ABS(@SALES) < @TDTABMIN)
)
OR
(
(
@TXDTQUAL = 1
AND @TDRNGTYP = 2
)
AND (ABS(@unitAmtTotal) < @TDTABMIN)
)
OR
(
(
@TXDTQUAL = 1
AND @TDRNGTYP = 1
)
AND (ABS(@unitAmt) < @TDTABMIN)
)
)
BEGIN
SELECT @TAXAMNT = 0;
SELECT @TaxableBase = 0;
END;
END;
IF (
@TAXAMNT <> ROUND(@TAXAMNT, 0, 1)
AND @TDTLRNDG IN ( 4, 5, 6 )
OR
(
@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES)
AND @TDTLRNDG NOT IN ( 4, 5, 6 )
)
)
BEGIN
IF @TAXAMNT > 0
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
ELSE
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT - (@rnd / POWER(10, @pow)), @dec, @fun);
END;
END;
IF (@TXDTLBSE <> 4)
BEGIN
SELECT @TXDTOTTX = @TAXAMNT;
END;
SELECT @TAXSUM = ISNULL(TAXSUM, 0)
FROM #minmax
WHERE TAXDTLID = @TAXDTLID;
IF (
(@TDTAXMAX < (ABS(@TAXAMNT) + @TAXSUM))
AND (@TDTAXMAX <> 0)
AND (@TaxableBase <> 0)
)
BEGIN
SELECT @TAXAMNT = CASE
WHEN @TAXAMNT < 0 THEN
(@TDTAXMAX - @TAXSUM) * -1
ELSE
@TDTAXMAX - @TAXSUM
END;
END;
IF (ABS(@TAXAMNT) > ABS(@TXDTOTTX))
BEGIN
SELECT @TAXAMNT = @TXDTOTTX;
END;
IF ((@TDTAXMAX > 0) OR (@TDTAXMIN > 0))
BEGIN
IF NOT EXISTS (SELECT TAXDTLID FROM #minmax WHERE TAXDTLID = @TAXDTLID)
BEGIN
INSERT #minmax
SELECT @TAXDTLID,
@TAXAMNT,
@TDTAXMAX,
@TDTAXMIN,
@TAXAMNT;
END;
ELSE
BEGIN
UPDATE #minmax
SET TAXSUM = TAXSUM + @TAXAMNT,
LINESUM = LINESUM + @TAXAMNT
WHERE TAXDTLID = @TAXDTLID;
END;
END;
IF (@TXDTLBSE = 1)
BEGIN
SELECT @I_vBACKOSALES = @I_vBACKOSALES + @TAXAMNT;
END;
ELSE
BEGIN
SELECT @I_vTAXAMNT = @I_vTAXAMNT + @TAXAMNT;
END;
IF (@I_vTRADE > 0)
BEGIN
IF (@BKTSLSAM > 0)
AND (@I_vBackoutTradeDisc = 0)
BEGIN
SELECT @I_vBackoutTradeDisc = @BKTSLSAM - @TaxableBase;
END;
END;
ELSE
BEGIN
SELECT @BKTSLSAM = @TaxableBase;
END;
IF ((@TaxableBaseTemp > 0) AND (@TXDTLBSE <> 4))
BEGIN
IF (@TaxableBase < 0)
BEGIN
SELECT @SALES = @TaxableBaseTemp * -1;
END;
ELSE
BEGIN
SELECT @SALES = @TaxableBaseTemp;
END;
END;
IF (@TaxableBaseNeg < 0)
BEGIN
SELECT @SALES = @TaxableBaseNeg;
END;
IF ((@TXDTOTTX < 0) AND (@TaxableBaseNeg = 0))
BEGIN
IF (@SALES > 0)
BEGIN
SELECT @SALES = @SALES * -1;
END;
END;
IF (((@TDTABMAX > 0) OR (@TDTABMIN > 0)) AND (@TXDTLBSE <> 5))
BEGIN
IF (@TXDTLBSE = 4)
BEGIN
SELECT @SALES = ROUND(@I_vCOST * @I_vNUMUNITS, @I_vDECIMALPLACES);
END;
ELSE
BEGIN
IF (@TXDTLBSE <> 6)
BEGIN
SELECT @SALES = @I_vSALES;
END;
ELSE
BEGIN
SELECT @SALES = @I_vSALES + @TaxableTotal;
END;
END;
END;
ELSE
BEGIN
IF (((@TDTABMAX > 0) OR (@TDTABMIN > 0)) AND (@TXDTLBSE = 5))
BEGIN
SELECT @SALES = @FINDBOTAX;
END;
END;
IF (@TaxableBaseTempBO <> 0)
BEGIN
SELECT @SALES = @TaxableBaseTempBO;
END;
SELECT @TaxableBaseNeg = 0,
@TaxableBaseTempBO = 0;
IF (@I_vTRXSOURCE = 'SLSTE')
BEGIN
IF (@ACTINDX = 0)
BEGIN
SELECT @ACTINDX = ACTINDX
FROM SY01100 (NOLOCK)
WHERE SERIES = 3
AND SEQNUMBR = 2000;
END;
EXEC @iStatus = taSopLineIvcTaxInsert @I_vSOPTYPE = @I_vDOCTYPE,
@I_vTAXTYPE = 0,
@I_vSOPNUMBE = @I_vDOCNUMBE,
@I_vCUSTNMBR = @I_vCUSTNMBR,
@I_vLNITMSEQ = @I_vLINENUMBR,
@I_vSALESAMT = @SALES,
@I_vFRTTXAMT = 0,
@I_vMSCTXAMT = 0,
@I_vFREIGHT = 0,
@I_vMISCAMNT = 0,
@I_vTDTTXSLS = @TaxableBase,
@I_vTAXDTLID = @TAXDTLID,
@I_vACTINDX = @ACTINDX,
@I_vACTNUMST = '',
@I_vSTAXAMNT = @TAXAMNT,
@I_vTXDTOTTX = @TXDTOTTX,
@O_iErrorState = @O_iErrorState OUTPUT,
@oErrString = @oErrString OUTPUT;
IF ((@@error <> 0) OR (@iStatus <> 0) OR (@O_iErrorState <> 0))
BEGIN
SELECT @O_iErrorState = 820;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrString,
@oErrString OUTPUT,
@O_oErrorState OUTPUT;
BREAK;
END;
END;
IF (@I_vTRXSOURCE = 'CMRCE')
BEGIN
EXEC @iStatus = taCommerceTaxInsert @I_vSOPTYPE = @I_vDOCTYPE,
@I_vTAXTYPE = 0,
@I_vSOPNUMBE = @I_vDOCNUMBE,
@I_vCUSTNMBR = @I_vCUSTNMBR,
@I_vLNITMSEQ = @I_vLINENUMBR,
@I_vSALESAMT = @SALES,
@I_vFRTTXAMT = 0,
@I_vMSCTXAMT = 0,
@I_vFREIGHT = 0,
@I_vMISCAMNT = 0,
@I_vTDTTXSLS = @TaxableBase,
@I_vTAXDTLID = @TAXDTLID,
@I_vACTINDX = @ACTINDX,
@I_vACTNUMST = '',
@I_vSTAXAMNT = @TAXAMNT,
@I_vTXDTOTTX = @TXDTOTTX,
@O_iErrorState = @O_iErrorState OUTPUT,
@oErrString = @oErrString OUTPUT;
IF ((@@error <> 0) OR (@iStatus <> 0) OR (@O_iErrorState <> 0))
BEGIN
SELECT @O_iErrorState = 9382;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrString,
@oErrString OUTPUT,
@O_oErrorState OUTPUT;
BREAK;
END;
END;
FETCH NEXT FROM Line_Taxes
INTO @TAXDTLID,
@ACTINDX,
@TXDTLBSE,
@TXDTLPCT,
@TXDTLAMT,
@TDTLRNDG,
@TXDBODTL,
@TDTABMIN,
@TDTABMAX,
@TDTAXMIN,
@TDTAXMAX,
@TDRNGTYP,
@TXDTQUAL,
@TDTAXTAX,
@TDTABPCT;
END;
END;
DEALLOCATE Line_Taxes;
END;
IF (@I_vMISCAMTTAXSLID <> '')
BEGIN
DECLARE Misc_Taxes INSENSITIVE CURSOR FOR
SELECT a.TAXDTLID,
a.ACTINDX,
a.TXDTLBSE,
a.TXDTLPCT,
a.TXDTLAMT,
a.TDTLRNDG,
a.TXDBODTL,
a.TDTABMIN,
a.TDTABMAX,
a.TDTAXMIN,
a.TDTAXMAX,
a.TDRNGTYP,
a.TXDTQUAL,
a.TDTAXTAX,
a.TDTABPCT
FROM TX00102 b (NOLOCK),
TX00201 a (NOLOCK),
TX00201 c (NOLOCK),
TX00102 d (NOLOCK)
WHERE b.TAXSCHID = @I_vMISCAMTTAXSLID
AND b.TAXDTLID = a.TAXDTLID
AND a.TXDTLTYP = @I_vDETAILTYPE
AND @I_vMISCAMTTAXSLID <> ''
AND d.TAXSCHID = @I_vMSTRTAXSLID
AND d.TAXDTLID = c.TAXDTLID
AND a.TAXDTLID = c.TAXDTLID
ORDER BY a.TXDTLBSE,
a.TDTAXTAX,
a.TAXDTLID;
OPEN Misc_Taxes;
IF (@@cursor_rows > 0)
BEGIN
FETCH NEXT FROM Misc_Taxes
INTO @TAXDTLID,
@ACTINDX,
@TXDTLBSE,
@TXDTLPCT,
@TXDTLAMT,
@TDTLRNDG,
@TXDBODTL,
@TDTABMIN,
@TDTABMAX,
@TDTAXMIN,
@TDTAXMAX,
@TDRNGTYP,
@TXDTQUAL,
@TDTAXTAX,
@TDTABPCT;
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status = -2)
BEGIN
SELECT @O_iErrorState = 822;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrorDesc,
@oErrorDesc OUTPUT,
@O_oErrorState OUTPUT;
BREAK;
END;
SELECT @rnd = CASE @TDTLRNDG
WHEN 1 THEN
.5
WHEN 2 THEN
0
WHEN 3 THEN
-.5
WHEN 4 THEN
1
WHEN 5 THEN
1
WHEN 6 THEN
-.000001
ELSE
1
END;
SELECT @pow = CASE @TDTLRNDG
WHEN 1 THEN
@I_vDECIMALPLACES
WHEN 2 THEN
@I_vDECIMALPLACES
WHEN 3 THEN
@I_vDECIMALPLACES
WHEN 4 THEN
0
WHEN 5 THEN
1
WHEN 6 THEN
0
ELSE
0
END;
SELECT @dec = CASE @TDTLRNDG
WHEN 1 THEN
@I_vDECIMALPLACES
WHEN 2 THEN
@I_vDECIMALPLACES
WHEN 3 THEN
@I_vDECIMALPLACES
WHEN 4 THEN
0
WHEN 5 THEN
0
WHEN 6 THEN
0
ELSE
@I_vDECIMALPLACES
END;
SELECT @fun = CASE @TDTLRNDG
WHEN 1 THEN
0
WHEN 2 THEN
0
WHEN 3 THEN
0
WHEN 4 THEN
1
WHEN 5 THEN
0
WHEN 6 THEN
1
ELSE
0
END;
IF ((@I_vXCHGRATE <> 0) AND (@I_vRTCLCMTD <> -1))
BEGIN
IF (@I_vRTCLCMTD = 1)
BEGIN
SELECT @TDTABMIN = CASE
WHEN @TDTABMIN > 0 THEN
ROUND(@TDTABMIN * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTABMAX = CASE
WHEN @TDTABMAX > 0 THEN
ROUND(@TDTABMAX * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMIN = CASE
WHEN @TDTAXMIN > 0 THEN
ROUND(@TDTAXMIN * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMAX = CASE
WHEN @TDTAXMAX > 0 THEN
ROUND(@TDTAXMAX * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TXDTLAMT = CASE
WHEN @TXDTLAMT > 0 THEN
ROUND(@TXDTLAMT * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END;
END;
ELSE
BEGIN
SELECT @TDTABMIN = CASE
WHEN @TDTABMIN > 0 THEN
ROUND(@TDTABMIN / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTABMAX = CASE
WHEN @TDTABMAX > 0 THEN
ROUND(@TDTABMAX / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMIN = CASE
WHEN @TDTAXMIN > 0 THEN
ROUND(@TDTAXMIN / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMAX = CASE
WHEN @TDTAXMAX > 0 THEN
ROUND(@TDTAXMAX / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TXDTLAMT = CASE
WHEN @TXDTLAMT > 0 THEN
ROUND(@TXDTLAMT / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END;
END;
END;
SELECT @TaxableBase = 0,
@TaxableBaseTemp = 0,
@SALES = 0;
IF (@TXDTLBSE = 5)
BEGIN
SELECT @FINDBOTAX = 0;
SELECT @FINDBOTAX = ISNULL(ORMSCTAX, 0)
FROM SOP10105 (NOLOCK)
WHERE SOPTYPE = @I_vDOCTYPE
AND SOPNUMBE = @I_vDOCNUMBE
AND LNITMSEQ = 2147483645
AND TAXDTLID = @TXDBODTL;
SELECT @TaxableBase = @FINDBOTAX;
END;
ELSE IF (@TXDTLBSE = 4)
BEGIN
SELECT @TaxableBase = 0;
END;
ELSE
BEGIN
SELECT @TaxableBase = @I_vMISCAMTAMT;
END;
IF (@TDTABPCT > 0)
BEGIN
SELECT @TaxableBase = ROUND(@TaxableBase * (@TDTABPCT / 100), @I_vDECIMALPLACES);
END;
SELECT @TaxableBaseTemp = ABS(@TaxableBase);
SELECT @unitAmt = 0;
IF ((@TDTABMIN > 0) OR (@TDTABMAX > 0))
BEGIN
IF (@TXDTQUAL = 1)
BEGIN
IF (@I_vNUMUNITS <> 0)
BEGIN
SELECT @unitAmt = @TaxableBaseTemp / @I_vNUMUNITS;
END;
IF (ABS(@unitAmt) < @TDTABMIN)
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@TDRNGTYP = 1)
BEGIN
IF (@TDTABMAX > 0)
AND (ABS(@unitAmt) > @TDTABMAX)
BEGIN
SELECT @unitAmt = @TDTABMAX;
SELECT @TaxableBaseTemp = ROUND(@unitAmt * ABS(@I_vNUMUNITS), @I_vDECIMALPLACES);
END;
END;
ELSE
BEGIN
IF (@TDTABMAX > 0)
AND (ABS(@unitAmt) > @TDTABMAX)
BEGIN
SELECT @unitAmt = @TDTABMAX - @TDTABMIN;
END;
ELSE
BEGIN
SELECT @unitAmt = ABS(@unitAmt) - @TDTABMIN;
END;
SELECT @TaxableBaseTemp = ROUND(@unitAmt * ABS(@I_vNUMUNITS), @I_vDECIMALPLACES);
END;
END;
END;
ELSE
BEGIN
IF (@TXDTQUAL = 2)
BEGIN
IF (@TaxableBaseTemp < @TDTABMIN)
BEGIN
IF (@TaxableBase < 0)
BEGIN
SELECT @TaxableBaseNeg = @TaxableBase;
END;
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@TDRNGTYP = 1)
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseNeg = @TaxableBase;
SELECT @TaxableBaseTemp = @TDTABMAX;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseTemp = @TDTABMAX - @TDTABMIN;
END;
ELSE
BEGIN
SELECT @TaxableBaseTemp = @TaxableBaseTemp - @TDTABMIN;
END;
END;
END;
END;
ELSE
BEGIN
IF (@TXDTQUAL = 3)
BEGIN
SELECT @TaxableSum = ISNULL(SUM(ORTXSLS), 0)
FROM SOP10105 (NOLOCK)
WHERE SOPTYPE = @I_vDOCTYPE
AND SOPNUMBE = @I_vDOCNUMBE
AND LNITMSEQ <> 0
AND TAXDTLID = @TAXDTLID;
IF (ABS(@I_vINVOICETOTAL) < @TDTABMIN)
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@I_vINVOICETOTAL >= 0)
BEGIN
IF (@TaxableBase < 0)
BEGIN
IF (@TaxableBase < 0)
AND (@TDTABMAX > 0)
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBase + @TaxableSum > @TDTABMAX))
BEGIN
IF ((@TDTABMAX - @TaxableSum) > 0)
SELECT @TaxableBaseTemp = (@TDTABMAX - @TaxableSum);
ELSE
SELECT @TaxableBaseTemp = 0;
END;
IF ((@TDTABMAX > 0) AND (@I_vINVOICETOTAL < 0))
BEGIN
IF ((@TaxableBaseTemp + @TaxableSum) > @I_vINVOICETOTAL)
BEGIN
IF ((@I_vINVOICETOTAL - @TaxableSum) > 0)
SELECT @TaxableBaseTemp = (@I_vINVOICETOTAL - @TaxableSum);
ELSE
SELECT @TaxableBaseTemp = 0;
END;
END;
END;
END;
ELSE
BEGIN
IF (@TaxableBase > 0)
BEGIN
IF ((@TaxableBase > 0) AND (@TDTABMAX > 0))
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (ABS(@TaxableSum + @TaxableBase) > @TDTABMAX))
BEGIN
IF ((@TDTABMAX - ABS(@TaxableSum)) > 0)
SELECT @TaxableBaseTemp = (@TDTABMAX - ABS(@TaxableSum));
ELSE
SELECT @TaxableBaseTemp = 0;
END;
IF ((@TDTABMAX > 0) AND (@I_vINVOICETOTAL < 0))
BEGIN
IF ((@TaxableBaseTemp + ABS(@TaxableSum)) > ABS(@I_vINVOICETOTAL))
BEGIN
IF ((ABS(@I_vINVOICETOTAL) - ABS(@TaxableSum)) > 0)
SELECT @TaxableBaseTemp
= (ABS(@I_vINVOICETOTAL) - ABS(@TaxableSum));
ELSE
SELECT @TaxableBaseTemp = 0;
END;
END;
END;
END;
END;
END;
ELSE
BEGIN
IF (@TaxableBaseTemp < @TDTABMIN)
BEGIN
IF (@TXDTLBSE = 5)
BEGIN
SELECT @TaxableBaseTempBO = @TaxableBaseTemp;
END;
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@TDRNGTYP = 1)
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseTemp = @TDTABMAX;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseTemp = @TDTABMAX - @TDTABMIN;
END;
ELSE
BEGIN
SELECT @TaxableBaseTemp = @TaxableBaseTemp - @TDTABMIN;
END;
END;
END;
END;
END;
END;
END;
IF (@TaxableBase < 0)
BEGIN
SELECT @TaxableBase = @TaxableBaseTemp * -1,
@TaxableBaseTempBO = @TaxableBaseTempBO * -1;
END;
ELSE
BEGIN
SELECT @TaxableBase = @TaxableBaseTemp;
END;
IF (@TXDTLBSE = 1)
BEGIN
SELECT @SALES = @TaxableBase;
SELECT @TaxableBase = ROUND(@TaxableBase / (@TXDTLPCT * .01 + 1), 7);
SELECT @TAXAMNT = (@TaxableBase * (@TXDTLPCT * .01));
IF (@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES, 1))
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
SELECT @TaxableBase = ROUND(@TaxableBase, @I_vDECIMALPLACES);
SELECT @SALES = ROUND(@SALES - @TAXAMNT, @I_vDECIMALPLACES);
IF (@TDTAXTAX <> 1)
BEGIN
SELECT @I_vMISCAMTAMT = @I_vMISCAMTAMT - @TAXAMNT;
SELECT @I_vBACKOMISC = @I_vMISCAMTAMT;
END;
SELECT @TaxableBase = @SALES;
SELECT @TaxableBaseTemp = @TaxableBase;
END;
ELSE IF (@TXDTLBSE = 2)
BEGIN
SELECT @TAXAMNT = 0;
SELECT @SALES = 0;
SELECT @TaxableBase = 0,
@TaxableBaseTemp = 0;
END;
ELSE IF (@TXDTLBSE = 3)
BEGIN
SELECT @TAXAMNT = ROUND(@TaxableBase * @TXDTLPCT * .01, 7);
SELECT @SALES = @TaxableBase;
END;
ELSE IF (@TXDTLBSE = 4)
BEGIN
SELECT @TAXAMNT = 0;
SELECT @SALES = 0;
SELECT @TaxableBase = 0;
END;
ELSE IF (@TXDTLBSE = 5)
BEGIN
SELECT @TAXAMNT = ROUND(@TaxableBase * @TXDTLPCT * .01, 7);
SELECT @SALES = @TaxableBase;
END;
IF (@TDTAXTAX = 1)
BEGIN
IF (
@TAXAMNT <> ROUND(@TAXAMNT, 0, 1)
AND @TDTLRNDG IN ( 2, 4, 5, 6 )
OR
(
@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES)
AND @TDTLRNDG NOT IN ( 4, 5, 6 )
)
)
BEGIN
SELECT @TaxableTotal = @TaxableTotal + ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
ELSE
BEGIN
SELECT @TaxableTotal = @TaxableTotal + @TAXAMNT;
END;
END;
IF (@TXDTLBSE = 6)
BEGIN
IF (@TaxableBase >= 0)
BEGIN
SELECT @TaxableBaseTemp = ROUND(@TaxableTotal + @TaxableBaseTemp, @I_vDECIMALPLACES);
END;
ELSE
BEGIN
SELECT @TaxableBaseTemp = ROUND(@TaxableBaseTemp - @TaxableTotal, @I_vDECIMALPLACES);
END;
IF (@TaxableBase <> @SALES)
AND
(
@TDTABMAX = @TaxableBase
OR @TaxableBase <= @TDTABMAX - @TDTABMIN
)
BEGIN
IF (@TaxableBase > 0)
SELECT @SALES = @TaxableBase;
ELSE
SELECT @SALES = 0;
END;
ELSE
BEGIN
IF (@TaxableBase > 0)
BEGIN
SELECT @SALES = ROUND(@TaxableTotal + @TaxableBase, 7);
SELECT @TaxableBase = ROUND(@TaxableTotal + @TaxableBase, @I_vDECIMALPLACES);
END;
ELSE
BEGIN
SELECT @SALES = 0,
@TaxableBase = 0;
END;
END;
SELECT @TAXAMNT = ROUND((@SALES * @TXDTLPCT * .01), 7);
SELECT @SALES = ROUND(@SALES, @I_vDECIMALPLACES);
END;
IF (
@TAXAMNT <> ROUND(@TAXAMNT, 0, 1)
AND @TDTLRNDG IN ( 4, 5, 6 )
OR
(
@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES)
AND @TDTLRNDG NOT IN ( 4, 5, 6 )
)
)
BEGIN
IF @TAXAMNT > 0
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
ELSE
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT - (@rnd / POWER(10, @pow)), @dec, @fun);
END;
END;
SELECT @TXDTOTTX = @TAXAMNT;
IF (@TXDTLBSE <> 2)
BEGIN
SELECT @TAXSUM = ISNULL(TAXSUM, 0)
FROM #minmax
WHERE TAXDTLID = @TAXDTLID;
IF (
(@TDTAXMAX < (ABS(@TAXAMNT) + @TAXSUM))
AND (@TDTAXMAX <> 0)
AND (@TaxableBase <> 0)
)
BEGIN
SELECT @TAXAMNT = CASE
WHEN @TAXAMNT < 0 THEN
(@TDTAXMAX - @TAXSUM) * -1
ELSE
@TDTAXMAX - @TAXSUM
END;
END;
IF (ABS(@TAXAMNT) > ABS(@TXDTOTTX))
BEGIN
SELECT @TAXAMNT = @TXDTOTTX;
END;
IF ((@TDTAXMAX > 0) OR (@TDTAXMIN > 0))
BEGIN
IF NOT EXISTS (SELECT TAXDTLID FROM #minmax WHERE TAXDTLID = @TAXDTLID)
BEGIN
INSERT #minmax
SELECT @TAXDTLID,
@TAXAMNT,
@TDTAXMAX,
@TDTAXMIN,
@TAXAMNT;
END;
ELSE
BEGIN
UPDATE #minmax
SET TAXSUM = TAXSUM + @TAXAMNT,
LINESUM = LINESUM + @TAXAMNT
WHERE TAXDTLID = @TAXDTLID;
END;
END;
END;
IF (@TXDTLBSE = 1)
BEGIN
SELECT @I_vBACKOSALES = @I_vBACKOSALES + @TAXAMNT;
END;
ELSE
BEGIN
SELECT @I_vMSCTXAMT = @I_vMSCTXAMT + @TAXAMNT;
END;
IF ((@TaxableBaseTemp > 0) AND (@TXDTLBSE <> 4))
BEGIN
SELECT @SALES = @TaxableBaseTemp;
END;
IF ((@TXDTOTTX < 0) AND (@TaxableBaseNeg = 0))
BEGIN
IF (@SALES > 0)
BEGIN
SELECT @SALES = @SALES * -1;
END;
END;
IF (((@TDTABMAX > 0) OR (@TDTABMIN > 0)) AND (@TXDTLBSE <> 5))
BEGIN
IF ((@I_vMISCAMTAMT < @TDTABMIN) OR (@TXDTLBSE = 4))
BEGIN
SELECT @SALES = 0;
END;
ELSE
BEGIN
SELECT @SALES = @I_vMISCAMTAMT;
END;
END;
IF (@TaxableBaseTempBO <> 0)
BEGIN
SELECT @SALES = @TaxableBaseTempBO;
END;
SELECT @TaxableBaseNeg = 0,
@TaxableBaseTempBO = 0;
IF (@I_vTRXSOURCE = 'SLSTE')
BEGIN
IF (@ACTINDX = 0)
BEGIN
SELECT @ACTINDX = ACTINDX
FROM SY01100 (NOLOCK)
WHERE SERIES = 3
AND SEQNUMBR = 2000;
END;
EXEC @iStatus = taSopLineIvcTaxInsert @I_vSOPTYPE = @I_vDOCTYPE,
@I_vTAXTYPE = 2,
@I_vSOPNUMBE = @I_vDOCNUMBE,
@I_vCUSTNMBR = @I_vCUSTNMBR,
@I_vLNITMSEQ = @I_vLINENUMBR,
@I_vSALESAMT = 0,
@I_vFRTTXAMT = 0,
@I_vMSCTXAMT = @TAXAMNT,
@I_vFREIGHT = 0,
@I_vMISCAMNT = @SALES,
@I_vTDTTXSLS = @TaxableBase,
@I_vTAXDTLID = @TAXDTLID,
@I_vACTINDX = @ACTINDX,
@I_vACTNUMST = '',
@I_vSTAXAMNT = 0,
@I_vTXDTOTTX = @TXDTOTTX,
@O_iErrorState = @O_iErrorState OUTPUT,
@oErrString = @oErrString OUTPUT;
IF ((@@error <> 0) OR (@iStatus <> 0) OR (@O_iErrorState <> 0))
BEGIN
SELECT @O_iErrorState = 824;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrString,
@oErrString OUTPUT,
@O_oErrorState OUTPUT;
BREAK;
END;
END;
IF (@I_vTRXSOURCE = 'CMRCE')
BEGIN
EXEC @iStatus = taCommerceTaxInsert @I_vSOPTYPE = @I_vDOCTYPE,
@I_vTAXTYPE = 2,
@I_vSOPNUMBE = @I_vDOCNUMBE,
@I_vCUSTNMBR = @I_vCUSTNMBR,
@I_vLNITMSEQ = @I_vLINENUMBR,
@I_vSALESAMT = 0,
@I_vFRTTXAMT = 0,
@I_vMSCTXAMT = @TAXAMNT,
@I_vFREIGHT = 0,
@I_vMISCAMNT = @SALES,
@I_vTDTTXSLS = @TaxableBase,
@I_vTAXDTLID = @TAXDTLID,
@I_vACTINDX = @ACTINDX,
@I_vACTNUMST = '',
@I_vSTAXAMNT = 0,
@I_vTXDTOTTX = @TXDTOTTX,
@O_iErrorState = @O_iErrorState OUTPUT,
@oErrString = @oErrString OUTPUT;
IF ((@@error <> 0) OR (@iStatus <> 0) OR (@O_iErrorState <> 0))
BEGIN
SELECT @O_iErrorState = 9383;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrString,
@oErrString OUTPUT,
@O_oErrorState OUTPUT;
BREAK;
END;
END;
FETCH NEXT FROM Misc_Taxes
INTO @TAXDTLID,
@ACTINDX,
@TXDTLBSE,
@TXDTLPCT,
@TXDTLAMT,
@TDTLRNDG,
@TXDBODTL,
@TDTABMIN,
@TDTABMAX,
@TDTAXMIN,
@TDTAXMAX,
@TDRNGTYP,
@TXDTQUAL,
@TDTAXTAX,
@TDTABPCT;
END;
END;
DEALLOCATE Misc_Taxes;
END;
IF (@I_vFREITAXDSLID <> '')
BEGIN
DECLARE Frght_Taxes INSENSITIVE CURSOR FOR
SELECT a.TAXDTLID,
a.ACTINDX,
a.TXDTLBSE,
a.TXDTLPCT,
a.TXDTLAMT,
a.TDTLRNDG,
a.TXDBODTL,
a.TDTABMIN,
a.TDTABMAX,
a.TDTAXMIN,
a.TDTAXMAX,
a.TDRNGTYP,
a.TXDTQUAL,
a.TDTAXTAX,
a.TDTABPCT
FROM TX00102 b (NOLOCK),
TX00201 a (NOLOCK),
TX00201 c (NOLOCK),
TX00102 d (NOLOCK)
WHERE b.TAXSCHID = @I_vFREITAXDSLID
AND b.TAXDTLID = a.TAXDTLID
AND a.TXDTLTYP = @I_vDETAILTYPE
AND @I_vFREITAXDSLID <> ''
AND d.TAXSCHID = @I_vMSTRTAXSLID
AND d.TAXDTLID = c.TAXDTLID
AND a.TAXDTLID = c.TAXDTLID
ORDER BY a.TXDTLBSE,
a.TDTAXTAX,
a.TAXDTLID;
OPEN Frght_Taxes;
IF (@@cursor_rows > 0)
BEGIN
FETCH NEXT FROM Frght_Taxes
INTO @TAXDTLID,
@ACTINDX,
@TXDTLBSE,
@TXDTLPCT,
@TXDTLAMT,
@TDTLRNDG,
@TXDBODTL,
@TDTABMIN,
@TDTABMAX,
@TDTAXMIN,
@TDTAXMAX,
@TDRNGTYP,
@TXDTQUAL,
@TDTAXTAX,
@TDTABPCT;
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status = -2)
BEGIN
SELECT @O_iErrorState = 826;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrorDesc,
@oErrorDesc OUTPUT,
@O_oErrorState OUTPUT;
BREAK;
END;
SELECT @rnd = CASE @TDTLRNDG
WHEN 1 THEN
.5
WHEN 2 THEN
0
WHEN 3 THEN
-.5
WHEN 4 THEN
1
WHEN 5 THEN
1
WHEN 6 THEN
-.000001
ELSE
1
END;
SELECT @pow = CASE @TDTLRNDG
WHEN 1 THEN
@I_vDECIMALPLACES
WHEN 2 THEN
@I_vDECIMALPLACES
WHEN 3 THEN
@I_vDECIMALPLACES
WHEN 4 THEN
0
WHEN 5 THEN
1
WHEN 6 THEN
0
ELSE
0
END;
SELECT @dec = CASE @TDTLRNDG
WHEN 1 THEN
@I_vDECIMALPLACES
WHEN 2 THEN
@I_vDECIMALPLACES
WHEN 3 THEN
@I_vDECIMALPLACES
WHEN 4 THEN
0
WHEN 5 THEN
0
WHEN 6 THEN
0
ELSE
@I_vDECIMALPLACES
END;
SELECT @fun = CASE @TDTLRNDG
WHEN 1 THEN
0
WHEN 2 THEN
0
WHEN 3 THEN
0
WHEN 4 THEN
1
WHEN 5 THEN
0
WHEN 6 THEN
1
ELSE
0
END;
IF ((@I_vXCHGRATE <> 0) AND (@I_vRTCLCMTD <> -1))
BEGIN
IF (@I_vRTCLCMTD = 1)
BEGIN
SELECT @TDTABMIN = CASE
WHEN @TDTABMIN > 0 THEN
ROUND(@TDTABMIN * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTABMAX = CASE
WHEN @TDTABMAX > 0 THEN
ROUND(@TDTABMAX * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMIN = CASE
WHEN @TDTAXMIN > 0 THEN
ROUND(@TDTAXMIN * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMAX = CASE
WHEN @TDTAXMAX > 0 THEN
ROUND(@TDTAXMAX * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TXDTLAMT = CASE
WHEN @TXDTLAMT > 0 THEN
ROUND(@TXDTLAMT * @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END;
END;
ELSE
BEGIN
SELECT @TDTABMIN = CASE
WHEN @TDTABMIN > 0 THEN
ROUND(@TDTABMIN / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTABMAX = CASE
WHEN @TDTABMAX > 0 THEN
ROUND(@TDTABMAX / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMIN = CASE
WHEN @TDTAXMIN > 0 THEN
ROUND(@TDTAXMIN / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TDTAXMAX = CASE
WHEN @TDTAXMAX > 0 THEN
ROUND(@TDTAXMAX / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END,
@TXDTLAMT = CASE
WHEN @TXDTLAMT > 0 THEN
ROUND(@TXDTLAMT / @I_vXCHGRATE, @I_vDECIMALPLACES)
ELSE
0
END;
END;
END;
SELECT @TaxableBase = 0,
@TaxableBaseTemp = 0,
@SALES = 0;
IF (@TXDTLBSE = 5)
BEGIN
SELECT @FINDBOTAX = 0;
SELECT @FINDBOTAX = ISNULL(FRTTXAMT, 0)
FROM SOP10105 (NOLOCK)
WHERE SOPTYPE = @I_vDOCTYPE
AND SOPNUMBE = @I_vDOCNUMBE
AND LNITMSEQ = 2147483646
AND TAXDTLID = @TXDBODTL;
SELECT @TaxableBase = @FINDBOTAX;
END;
ELSE IF (@TXDTLBSE = 4)
BEGIN
SELECT @TaxableBase = 0;
END;
ELSE
BEGIN
SELECT @TaxableBase = @I_vFRTAMT;
END;
IF (@TDTABPCT > 0)
BEGIN
SELECT @TaxableBase = ROUND(@TaxableBase * (@TDTABPCT / 100), @I_vDECIMALPLACES);
END;
SELECT @TaxableBaseTemp = ABS(@TaxableBase);
SELECT @unitAmt = 0;
IF ((@TDTABMIN > 0) OR (@TDTABMAX > 0))
BEGIN
IF (@TXDTQUAL = 1)
BEGIN
IF (@I_vNUMUNITS <> 0)
BEGIN
SELECT @unitAmt = @TaxableBaseTemp / @I_vNUMUNITS;
END;
IF (ABS(@unitAmt) < @TDTABMIN)
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@TDRNGTYP = 1)
BEGIN
IF (@TDTABMAX > 0)
AND (ABS(@unitAmt) > @TDTABMAX)
BEGIN
SELECT @unitAmt = @TDTABMAX;
SELECT @TaxableBaseTemp = ROUND(@unitAmt * ABS(@I_vNUMUNITS), @I_vDECIMALPLACES);
END;
END;
ELSE
BEGIN
IF (@TDTABMAX > 0)
AND (ABS(@unitAmt) > @TDTABMAX)
BEGIN
SELECT @unitAmt = @TDTABMAX - @TDTABMIN;
END;
ELSE
BEGIN
SELECT @unitAmt = ABS(@unitAmt) - @TDTABMIN;
END;
SELECT @TaxableBaseTemp = ROUND(@unitAmt * ABS(@I_vNUMUNITS), @I_vDECIMALPLACES);
END;
END;
END;
ELSE
BEGIN
IF (@TXDTQUAL = 2)
BEGIN
IF (@TaxableBaseTemp < @TDTABMIN)
BEGIN
IF (@TaxableBase < 0)
BEGIN
SELECT @TaxableBaseNeg = @TaxableBase;
END;
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@TDRNGTYP = 1)
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseNeg = @TaxableBase;
SELECT @TaxableBaseTemp = @TDTABMAX;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseTemp = @TDTABMAX - @TDTABMIN;
END;
ELSE
BEGIN
SELECT @TaxableBaseTemp = @TaxableBaseTemp - @TDTABMIN;
END;
END;
END;
END;
ELSE
BEGIN
IF (@TXDTQUAL = 3)
BEGIN
SELECT @TaxableSum = ISNULL(SUM(ORTXSLS), 0)
FROM SOP10105 (NOLOCK)
WHERE SOPTYPE = @I_vDOCTYPE
AND SOPNUMBE = @I_vDOCNUMBE
AND LNITMSEQ <> 0
AND TAXDTLID = @TAXDTLID;
IF (ABS(@I_vINVOICETOTAL) < @TDTABMIN)
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@I_vINVOICETOTAL >= 0)
BEGIN
IF (@TaxableBase < 0)
BEGIN
IF (@TaxableBase < 0)
AND (@TDTABMAX > 0)
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBase + @TaxableSum > @TDTABMAX))
BEGIN
IF ((@TDTABMAX - @TaxableSum) > 0)
SELECT @TaxableBaseTemp = (@TDTABMAX - @TaxableSum);
ELSE
SELECT @TaxableBaseTemp = 0;
END;
IF ((@TDTABMAX > 0) AND (@I_vINVOICETOTAL < 0))
BEGIN
IF ((@TaxableBaseTemp + @TaxableSum) > @I_vINVOICETOTAL)
BEGIN
IF ((@I_vINVOICETOTAL - @TaxableSum) > 0)
SELECT @TaxableBaseTemp = (@I_vINVOICETOTAL - @TaxableSum);
ELSE
SELECT @TaxableBaseTemp = 0;
END;
END;
END;
END;
ELSE
BEGIN
IF (@TaxableBase > 0)
BEGIN
IF ((@TaxableBase > 0) AND (@TDTABMAX > 0))
BEGIN
SELECT @TaxableBaseTemp = 0;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (ABS(@TaxableSum + @TaxableBase) > @TDTABMAX))
BEGIN
IF ((@TDTABMAX - ABS(@TaxableSum)) > 0)
SELECT @TaxableBaseTemp = (@TDTABMAX - ABS(@TaxableSum));
ELSE
SELECT @TaxableBaseTemp = 0;
END;
IF ((@TDTABMAX > 0) AND (@I_vINVOICETOTAL < 0))
BEGIN
IF ((@TaxableBaseTemp + ABS(@TaxableSum)) > ABS(@I_vINVOICETOTAL))
BEGIN
IF ((ABS(@I_vINVOICETOTAL) - ABS(@TaxableSum)) > 0)
SELECT @TaxableBaseTemp
= (ABS(@I_vINVOICETOTAL) - ABS(@TaxableSum));
ELSE
SELECT @TaxableBaseTemp = 0;
END;
END;
END;
END;
END;
END;
ELSE
BEGIN
IF (@TaxableBaseTemp < @TDTABMIN)
BEGIN
IF (@TXDTLBSE = 5)
BEGIN
SELECT @TaxableBaseTempBO = @TaxableBaseTemp;
END;
SELECT @TaxableBaseTemp = 0;
END;
ELSE
BEGIN
IF (@TDRNGTYP = 1)
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseTemp = @TDTABMAX;
END;
END;
ELSE
BEGIN
IF ((@TDTABMAX > 0) AND (@TaxableBaseTemp > @TDTABMAX))
BEGIN
SELECT @TaxableBaseTemp = @TDTABMAX - @TDTABMIN;
END;
ELSE
BEGIN
SELECT @TaxableBaseTemp = @TaxableBaseTemp - @TDTABMIN;
END;
END;
END;
END;
END;
END;
END;
IF (@TaxableBase < 0)
BEGIN
SELECT @TaxableBase = @TaxableBaseTemp * -1,
@TaxableBaseTempBO = @TaxableBaseTempBO * -1;
END;
ELSE
BEGIN
SELECT @TaxableBase = @TaxableBaseTemp;
END;
IF (@TXDTLBSE = 1)
BEGIN
SELECT @SALES = @TaxableBase;
SELECT @TaxableBase = ROUND(@TaxableBase / (@TXDTLPCT * .01 + 1), 7);
SELECT @TAXAMNT = (@TaxableBase * (@TXDTLPCT * .01));
IF (@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES, 1))
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
SELECT @TaxableBase = ROUND(@TaxableBase, @I_vDECIMALPLACES);
SELECT @SALES = ROUND(@SALES - @TAXAMNT, @I_vDECIMALPLACES);
IF (@TDTAXTAX <> 1)
BEGIN
SELECT @I_vFRTAMT = @I_vFRTAMT - @TAXAMNT;
SELECT @I_vBACKOFREHT = @I_vFRTAMT;
END;
SELECT @TaxableBase = @SALES;
SELECT @TaxableBaseTemp = @TaxableBase;
END;
ELSE IF (@TXDTLBSE = 2)
BEGIN
SELECT @TAXAMNT = 0;
SELECT @SALES = 0;
SELECT @TaxableBase = 0,
@TaxableBaseTemp = 0;
END;
ELSE IF (@TXDTLBSE = 3)
BEGIN
SELECT @TAXAMNT = ROUND(@TaxableBase * @TXDTLPCT * .01, 7);
SELECT @SALES = @TaxableBase;
END;
ELSE IF (@TXDTLBSE = 4)
BEGIN
SELECT @TAXAMNT = 0;
SELECT @SALES = 0;
SELECT @TaxableBase = 0;
END;
ELSE IF (@TXDTLBSE = 5)
BEGIN
SELECT @TAXAMNT = ROUND(@TaxableBase * @TXDTLPCT * .01, 7);
SELECT @SALES = @TaxableBase;
END;
IF (@TDTAXTAX = 1)
BEGIN
IF (
@TAXAMNT <> ROUND(@TAXAMNT, 0, 1)
AND @TDTLRNDG IN ( 2, 4, 5, 6 )
OR
(
@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES)
AND @TDTLRNDG NOT IN ( 4, 5, 6 )
)
)
BEGIN
SELECT @TaxableTotal = @TaxableTotal + ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
ELSE
BEGIN
SELECT @TaxableTotal = @TaxableTotal + @TAXAMNT;
END;
END;
IF (@TXDTLBSE = 6)
BEGIN
IF (@TaxableBase >= 0)
BEGIN
SELECT @TaxableBaseTemp = ROUND(@TaxableTotal + @TaxableBaseTemp, @I_vDECIMALPLACES);
END;
ELSE
BEGIN
SELECT @TaxableBaseTemp = ROUND(@TaxableBaseTemp - @TaxableTotal, @I_vDECIMALPLACES);
END;
IF (@TaxableBase <> @SALES)
AND
(
@TDTABMAX = @TaxableBase
OR @TaxableBase <= @TDTABMAX - @TDTABMIN
)
BEGIN
IF (@TaxableBase > 0)
SELECT @SALES = @TaxableBase;
ELSE
SELECT @SALES = 0;
END;
ELSE
BEGIN
IF (@TaxableBase > 0)
BEGIN
SELECT @SALES = ROUND(@TaxableTotal + @TaxableBase, 7);
SELECT @TaxableBase = ROUND(@TaxableTotal + @TaxableBase, @I_vDECIMALPLACES);
END;
ELSE
BEGIN
SELECT @SALES = 0,
@TaxableBase = 0;
END;
END;
SELECT @TAXAMNT = ROUND((@SALES * @TXDTLPCT * .01), 7);
SELECT @SALES = ROUND(@SALES, @I_vDECIMALPLACES);
END;
IF (
@TAXAMNT <> ROUND(@TAXAMNT, 0, 1)
AND @TDTLRNDG IN ( 4, 5, 6 )
OR
(
@TAXAMNT <> ROUND(@TAXAMNT, @I_vDECIMALPLACES)
AND @TDTLRNDG NOT IN ( 4, 5, 6 )
)
)
BEGIN
IF @TAXAMNT > 0
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT + (@rnd / POWER(10, @pow)), @dec, @fun);
END;
ELSE
BEGIN
SELECT @TAXAMNT = ROUND(@TAXAMNT - (@rnd / POWER(10, @pow)), @dec, @fun);
END;
END;
SELECT @TXDTOTTX = @TAXAMNT;
IF (@TXDTLBSE <> 2)
BEGIN
SELECT @TAXSUM = ISNULL(TAXSUM, 0)
FROM #minmax
WHERE TAXDTLID = @TAXDTLID;
IF (
(@TDTAXMAX < (ABS(@TAXAMNT) + @TAXSUM))
AND (@TDTAXMAX <> 0)
AND (@TaxableBase <> 0)
)
BEGIN
SELECT @TAXAMNT = CASE
WHEN @TAXAMNT < 0 THEN
(@TDTAXMAX - @TAXSUM) * -1
ELSE
@TDTAXMAX - @TAXSUM
END;
END;
IF (ABS(@TAXAMNT) > ABS(@TXDTOTTX))
BEGIN
SELECT @TAXAMNT = @TXDTOTTX;
END;
IF ((@TDTAXMAX > 0) OR (@TDTAXMIN > 0))
BEGIN
IF NOT EXISTS (SELECT TAXDTLID FROM #minmax WHERE TAXDTLID = @TAXDTLID)
BEGIN
INSERT #minmax
SELECT @TAXDTLID,
@TAXAMNT,
@TDTAXMAX,
@TDTAXMIN,
@TAXAMNT;
END;
ELSE
BEGIN
UPDATE #minmax
SET TAXSUM = TAXSUM + @TAXAMNT,
LINESUM = LINESUM + @TAXAMNT
WHERE TAXDTLID = @TAXDTLID;
END;
END;
END;
IF (@TXDTLBSE = 1)
BEGIN
SELECT @I_vBACKOSALES = @I_vBACKOSALES + @TAXAMNT;
END;
ELSE
BEGIN
SELECT @I_vFRTTXAMT = @I_vFRTTXAMT + @TAXAMNT;
END;
IF ((@TaxableBaseTemp > 0) AND (@TXDTLBSE <> 4))
BEGIN
SELECT @SALES = @TaxableBaseTemp;
END;
IF ((@TXDTOTTX < 0) AND (@TaxableBaseNeg = 0))
BEGIN
IF (@SALES > 0)
BEGIN
SELECT @SALES = @SALES * -1;
END;
END;
IF (((@TDTABMAX > 0) OR (@TDTABMIN > 0)) AND (@TXDTLBSE <> 5))
BEGIN
IF ((@I_vFRTAMT < @TDTABMIN) OR (@TXDTLBSE = 4))
BEGIN
SELECT @SALES = 0;
END;
ELSE
BEGIN
SELECT @SALES = @I_vFRTAMT;
END;
END;
IF (@TaxableBaseTempBO <> 0)
BEGIN
SELECT @SALES = @TaxableBaseTempBO;
END;
SELECT @TaxableBaseNeg = 0,
@TaxableBaseTempBO = 0;
IF (@I_vTRXSOURCE = 'SLSTE')
BEGIN
IF (@ACTINDX = 0)
BEGIN
SELECT @ACTINDX = ACTINDX
FROM SY01100 (NOLOCK)
WHERE SERIES = 3
AND SEQNUMBR = 2000;
END;
EXEC @iStatus = taSopLineIvcTaxInsert @I_vSOPTYPE = @I_vDOCTYPE,
@I_vTAXTYPE = 1,
@I_vSOPNUMBE = @I_vDOCNUMBE,
@I_vCUSTNMBR = @I_vCUSTNMBR,
@I_vLNITMSEQ = @I_vLINENUMBR,
@I_vSALESAMT = 0,
@I_vFRTTXAMT = @TAXAMNT,
@I_vMSCTXAMT = 0,
@I_vFREIGHT = @SALES,
@I_vMISCAMNT = 0,
@I_vTDTTXSLS = @TaxableBase,
@I_vTAXDTLID = @TAXDTLID,
@I_vACTINDX = @ACTINDX,
@I_vACTNUMST = '',
@I_vSTAXAMNT = 0,
@I_vTXDTOTTX = @TXDTOTTX,
@O_iErrorState = @O_iErrorState OUTPUT,
@oErrString = @oErrString OUTPUT;
IF ((@@error <> 0) OR (@iStatus <> 0) OR (@O_iErrorState <> 0))
BEGIN
SELECT @O_iErrorState = 828;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrString,
@oErrString OUTPUT,
@O_oErrorState OUTPUT;
BREAK;
END;
END;
IF (@I_vTRXSOURCE = 'CMRCE')
BEGIN
EXEC @iStatus = taCommerceTaxInsert @I_vSOPTYPE = @I_vDOCTYPE,
@I_vTAXTYPE = 1,
@I_vSOPNUMBE = @I_vDOCNUMBE,
@I_vCUSTNMBR = @I_vCUSTNMBR,
@I_vLNITMSEQ = @I_vLINENUMBR,
@I_vSALESAMT = 0,
@I_vFRTTXAMT = @TAXAMNT,
@I_vMSCTXAMT = 0,
@I_vFREIGHT = @SALES,
@I_vMISCAMNT = 0,
@I_vTDTTXSLS = @TaxableBase,
@I_vTAXDTLID = @TAXDTLID,
@I_vACTINDX = @ACTINDX,
@I_vACTNUMST = '',
@I_vSTAXAMNT = 0,
@I_vTXDTOTTX = @TXDTOTTX,
@O_iErrorState = @O_iErrorState OUTPUT,
@oErrString = @oErrString OUTPUT;
IF ((@@error <> 0) OR (@iStatus <> 0) OR (@O_iErrorState <> 0))
BEGIN
SELECT @O_iErrorState = 9384;
EXEC @iStatus = taUpdateString @O_iErrorState,
@oErrString,
@oErrString OUTPUT,
@O_oErrorState OUTPUT;
BREAK;
END;
END;
FETCH NEXT FROM Frght_Taxes
INTO @TAXDTLID,
@ACTINDX,
@TXDTLBSE,
@TXDTLPCT,
@TXDTLAMT,
@TDTLRNDG,
@TXDBODTL,
@TDTABMIN,
@TDTABMAX,
@TDTAXMIN,
@TDTAXMAX,
@TDRNGTYP,
@TXDTQUAL,
@TDTAXTAX,
@TDTABPCT;
END;
END;
DEALLOCATE Frght_Taxes;
END;
SELECT @I_vFUTOTAMT = @I_vTAXAMNT;
RETURN (@O_iErrorState);