Вы находитесь на странице: 1из 28

SET SQL_MODE='PIPES_AS_CONCAT';

DROP FUNCTION IF EXISTS `sfpph21_sfgoNew`;

CREATE FUNCTION `sfpph21_sfgoNew`(


`taxstatus` VARCHAR(2),
`numdep` INT,
`taxfilenum` VARCHAR(255),
`otherptkp` DECIMAL(38,20),
`fixnetytd` DECIMAL(38,20),
`fixgrosytd` DECIMAL(38,20),
`varnetytd` DECIMAL(38,20),
`vargrosytd` DECIMAL(38,20),
`ytd_tax` DECIMAL(38,20),
`ytd_taxallow` DECIMAL(38,20),
`ytd_taxpen` DECIMAL(38,20),
`curperiod` DECIMAL(5,2),
`startperiod` DECIMAL(5,2),
`endperiod` DECIMAL(5,2),
`taxtype` VARCHAR(5),
`resigncode` VARCHAR(1),
`taxyear` INT,
`prevnetincome` DECIMAL(38,20),
`prevtax` DECIMAL(38,20),
`prevtaxpen` DECIMAL(38,20),
`prevperiod` DECIMAL(5,2),
`empid` VARCHAR(50),
`companyid` INT,
`curprocmid` VARCHAR(50),
`periodfreq` VARCHAR(50),
`fixgros` DECIMAL(38,20),
`kptkp` DECIMAL(38,20),
`fixnet` DECIMAL(38,20),
`cfsecurepath` VARCHAR(25),
`sfpubq` VARCHAR(25),
`lookupperiod` VARCHAR(50),
`wo_bonus` VARCHAR(1)
,
`fixgrossotytd` DECIMAL(38,20),
`vargrossotytd` DECIMAL(38,20),
`fixgrossot` DECIMAL(38,20)
,
`fixborneytd` DECIMAL(38,20),
`varborneytd` DECIMAL(38,20),
`fixborne` DECIMAL(38,20),
`ytd_borne` DECIMAL(38,20)
,
`method` VARCHAR(50)
) RETURNS text CHARSET latin1
DETERMINISTIC
BEGIN

DECLARE starttaxgovnpwp DATETIME;


DECLARE paramyear INT;
DECLARE taxcountry VARCHAR(10);
DECLARE ismonthly INT;
DECLARE CANL, IANL, CEXP, IEXP, CYAD, CSTH DECIMAL(38,20);
DECLARE bjbt INT;
DECLARE taxminusbep VARCHAR(1);
DECLARE jmltang INT;
DECLARE paramcode VARCHAR(25);
DECLARE paramvalue VARCHAR(50);
DECLARE ptkpstatusl, ptkpstatusm, ptkpstatust DECIMAL(38,20);
DECLARE mptkp DECIMAL(25,2);
DECLARE maxbjbt, vmaxbjbt, mfgrossth DECIMAL(38,20);
DECLARE pbjbt, percentbjbt FLOAT;
DECLARE valuebjbt DECIMAL(38,20);
DECLARE vtotal DECIMAL(25,2);
DECLARE pkp, pphak, kptkpsth DECIMAL(38,20);
DECLARE pkpyear INT;
DECLARE npkp DECIMAL(38,20);
DECLARE ppkp FLOAT;
DECLARE tmpnpkp, prevnpkp, pfgrossth DECIMAL(38,20);
DECLARE pfgrosyad, mmgros, pmgrossth, mfnettsth, vgrnet, mamount, gfnettsth,
tmppmgrossth DECIMAL(38,20);
DECLARE gfnettyad, mmnett, gmnett, gmnettsth, pphsth, pph, taxpenalty
DECIMAL(38,20);
DECLARE percent_taxpen FLOAT;
DECLARE refundtax VARCHAR(1);
DECLARE vtotalsth, bjbtsth, vtotalytd, bjbtytd, proratebjbt DECIMAL(38,20);
DECLARE temp DECIMAL(38,20);
DECLARE percent_taxpen_net FLOAT;
DECLARE grossuptaxpen VARCHAR(1);

DECLARE varnet, vargros, dumfixgros, dumfixnet, ptkpLain DECIMAL(38,20);


DECLARE calcTAXALLOW INT;
DECLARE varnetP, vargrosP DECIMAL(38,20);
declare gdxyear year;
DECLARE pphsth1, tmpGMNETT, tmpPPH, gmnettsth1, tmpPPHSTH,pjkVar,pjkFix
DECIMAL(38,20);
DECLARE mprevtax, mprevtaxpenalty, mprevtaxbornebygov, mprevtaxallow
DECIMAL(38,20);

DECLARE pmgrossotsth,pfgrossotyad,
mmgrossot,mfgrossotsth,tmpgmnettsth,pmgrossot DECIMAL(38,20);
DECLARE pmbornesth,pfborneyad, mmborne,mfbornesth,pmborne DECIMAL(38,20);
DECLARE pphborne, pphbornesth,dumfixborne, dumfixgrossot DECIMAL(38,20);
DECLARE vargrossotP,varborneP,tmpPPHBORNE, pphgot DECIMAL(38,20);
DECLARE done INT DEFAULT FALSE;
DECLARE tempresult TEXT;
DECLARE tempdebug TEXT;
DECLARE QPPH21SET CURSOR FOR
SELECT tpymtaxparam.Param_Code, tpymtaxparam.Value
FROM tpymtaxparam,teomcompany
WHERE tpymtaxparam.TaxCountry = teomcompany.taxcountry
AND teomcompany.Company_ID = companyid
AND tpymtaxparam.TaxYear IN (
SELECT MAX(A.TaxYear)
FROM tpymtaxparam A,teomcompany B
WHERE A.TaxCountry = B.taxcountry
AND A.TaxYear <= taxyear
AND B.Company_ID = companyid
ORDER BY A.TAXYEAR DESC
)
AND UPPER(tpymtaxparam.Param_Code) IN
('TAXMINUSBEP','NUMDEPENDENT','PTKPSTATUSL','PTKPSTATUSM','PTKPSTATUST','MAXBJBT','
ANNUALIZEDMETHOD','PBJBT','TAXPENALTYPERCENT','REFUNDTAXPENALTY','GROSSUPTAXPENALTY
');
DECLARE QPPH21PKP CURSOR FOR
SELECT tpymtaxpct.toplimit AS NPKP, tpymtaxpct.Percentage AS PPKP
FROM tpymtaxpct,teomcompany
WHERE tpymtaxpct.TaxCountry = teomcompany.taxcountry
AND teomcompany.Company_ID = companyid
AND tpymtaxpct.TAXARTICLE = 'PPH21'
AND tpymtaxpct.TAXYEAR = (
SELECT MAX(A.TaxYear)
FROM tpymtaxpct A,teomcompany B
WHERE A.TaxArticle = 'PPH21'
AND A.TaxYear <= taxyear
AND A.TaxCountry = B.taxcountry
AND B.Company_ID = companyid
ORDER BY A.TAXYEAR DESC
)
ORDER BY tpymtaxpct.PERCENTAGE;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

SET wo_bonus = IFNULL(wo_bonus,'N');


SET prevperiod = IFNULL(prevperiod,0);

SET starttaxgovnpwp = '2009-07-01 00:00:00.000';


SET ismonthly = 0;
SET bjbt = 1;
SET mptkp = 0;
SET valuebjbt = 0;
SET vtotal = 0;
SET pkp = 0;
SET pmgrossth = 0;
SET pfgrosyad = 0;
SET gfnettyad = 0;
SET gmnettsth = 0;
SET gmnett = 0;
SET tmppmgrossth = 0;

SET pmgrossotsth = 0;
SET pfgrossotyad = 0;
SET pmbornesth = 0;
SET pfborneyad = 0;
SET pphgot = 0;

IF taxtype = 'I' OR taxtype = 'CP' THEN


SET bjbt = 0;
END IF;
SELECT teomcompany.TaxCountry INTO taxcountry
FROM teomcompany
WHERE teomcompany.Company_ID = companyid;

OPEN QPPH21SET;
read_loop: LOOP
FETCH QPPH21SET INTO paramcode, paramvalue;
IF done THEN
LEAVE read_loop;
END IF;
IF paramcode = 'TAXMINUSBEP' THEN
SET taxminusbep = paramvalue;
ELSE
IF paramcode = 'NUMDEPENDENT' THEN
SET jmltang = CONVERT(paramvalue,INT);
ELSE
IF paramcode = 'PTKPSTATUSL' THEN
SET ptkpstatusl = CONVERT(paramvalue,DECIMAL(38,20));
ELSE
IF paramcode = 'PTKPSTATUSM' THEN
SET ptkpstatusm = CONVERT(paramvalue,DECIMAL(38,20));
ELSE
IF paramcode = 'PTKPSTATUST' THEN
SET ptkpstatust =
CONVERT(paramvalue,DECIMAL(38,20));
ELSE
IF paramcode = 'MAXBJBT' THEN
SET maxbjbt = CONVERT(paramvalue,DECIMAL(38,20));
ELSE
IF paramcode = 'ANNUALIZEDMETHOD' THEN
SET method = IFNULL(method,paramvalue);
ELSE
IF paramcode = 'PBJBT' THEN
SET pbjbt =
CONVERT(paramvalue,DECIMAL(38,20));
ELSE
IF paramcode = 'TAXPENALTYPERCENT'
THEN
SET percent_taxpen =
CONVERT(paramvalue,INT);
ELSE
IF paramcode = 'REFUNDTAXPENALTY' THEN
SET refundtax = paramvalue;
ELSE
IF paramcode =
'GROSSUPTAXPENALTY' THEN
SET grossuptaxpen = paramvalue;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END LOOP;
CLOSE QPPH21SET;
insert into tpydfreqtemp(FREQ) values ('valueees');
insert into tpydfreqtemp(FREQ) values (taxminusbep);

SET percent_taxpen_net = 100;

SET taxfilenum = IFNULL(taxfilenum,'');


IF (LENGTH(taxfilenum) = 0 OR taxfilenum IS NULL) AND grossuptaxpen = 'Y'
THEN
SET percent_taxpen_net = percent_taxpen_net + percent_taxpen;
SET percent_taxpen = 0;
END IF;

SET maxbjbt = maxbjbt * (endperiod - startperiod + 1) / 12;


IF bjbt = 1 THEN
SET percentbjbt = pbjbt / 100;
ELSE
SET percentbjbt = 0;
END IF;
IF method = '' THEN
SET method = 'AVERAGE';
END IF;
IF curperiod > endperiod THEN
SET curperiod = endperiod;
END IF;

IF method = 'CURRENT' AND curperiod <> endperiod THEN


SET tempresult = sfcalcincome_sfgoNew(empid, companyid, curperiod,
taxyear,curprocmid,cfsecurepath, sfpubq);
SET fixnet =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',1),'|',-1),DECIMAL(38,20));
SET varnet =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',2),'|',-1),DECIMAL(38,20));
SET fixgros =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',3),'|',-1),DECIMAL(38,20));
SET vargros =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',4),'|',-1),DECIMAL(38,20));
SET dumfixnet =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',5),'|',-1),DECIMAL(38,20));
SET dumfixgros =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',6),'|',-1),DECIMAL(38,20));
SET calcTAXALLOW =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',7),'|',-1),DECIMAL(38,20));
SET otherptkp =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',8),'|',-1),DECIMAL(38,20));
SET varnetp =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',9),'|',-1),DECIMAL(38,20));
SET vargrosP =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',10),'|',-1),DECIMAL(38,20));
SET fixborne =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',11),'|',-1),DECIMAL(38,20));
SET varborneytd =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',12),'|',-1),DECIMAL(38,20));
SET varborneP =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',13),'|',-1),DECIMAL(38,20));
SET fixgrossot =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',14),'|',-1),DECIMAL(38,20));
SET vargrossotytd =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',15),'|',-1),DECIMAL(38,20));
SET vargrossotP =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',16),'|',-1),DECIMAL(38,20));
SET dumfixborne =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',17),'|',-1),DECIMAL(38,20));
SET dumfixgrossot =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',18),'|',-1),DECIMAL(38,20));
SET tempdebug = REPLACE(tempresult,'|',',');
IF empid = '' THEN
SET ismonthly = 0;
ELSE
SET ismonthly = 0;
END IF;
SET fixgros = fixgros + dumfixgros;
SET fixnet = fixnet + dumfixnet;
SET fixborne = fixborne + dumfixborne;
SET fixgrossot = fixgrossot + dumfixgrossot;
ELSE
SET ismonthly = 0;
END IF;

SET CANL = 1.000000000000000000 * 12 / (curperiod - startperiod + 1 +


prevperiod);
SET IANL = 1.000000000000000000 * (curperiod - startperiod + 1 +
prevperiod) / 12;
SET CEXP = 1.000000000000000000 * 12 / (12 - startperiod + 1 + prevperiod);
SET IEXP = 1.000000000000000000 * (12 - startperiod + 1 + prevperiod) / 12;
SET CYAD = 1.000000000000000000 * (endperiod - curperiod) / (endperiod -
startperiod + 1);
SET CSTH = 1.000000000000000000 * (endperiod - startperiod + 1) /
(curperiod - startperiod + 1);

IF numdep > jmltang THEN


SET numdep = jmltang;
END IF;

IF taxtype = 'CP' THEN


SET mptkp = 0;
ELSE
IF taxstatus = 'K' THEN
SET mptkp = ptkpstatusl + ptkpstatusm + (ptkpstatust * numdep);
ELSE
SET mptkp = ptkpstatusl + (ptkpstatust * numdep);
END IF;
END IF;

INSERT INTO tpydfreqtemp(FREQ) VALUES ('endperiod');


INSERT INTO tpydfreqtemp(FREQ) VALUES (endperiod);
INSERT INTO tpydfreqtemp(FREQ) VALUES ('startperiod');
INSERT INTO tpydfreqtemp(FREQ) VALUES (startperiod);

INSERT INTO tpydfreqtemp(FREQ) VALUES ('maxbjbt');


INSERT INTO tpydfreqtemp(FREQ) VALUES (maxbjbt);

SET vmaxbjbt = maxbjbt * (endperiod - startperiod + 1) / 12;


INSERT INTO tpydfreqtemp2(FREQ) VALUES ('fixgrosytd');
INSERT INTO tpydfreqtemp2(FREQ) VALUES (fixgrosytd);
IF taxtype = 'E' OR resigncode = 'M' THEN
SET fixgrosytd = fixgrosytd + vargrosytd;
SET vargrosytd = 0;
SET fixnetytd = fixnetytd + varnetytd;
SET varnetytd = 0;

SET fixgrossotytd = fixgrossotytd + vargrossotytd;


SET vargrossotytd = 0;
SET fixborneytd = fixborneytd + varborneytd;
SET varborneytd = 0;
END IF;

IF method = 'LASTPAY' THEN


SET mfgrossth = fixgrosytd + fixgros * (endperiod - curperiod);
ELSE
SET mfgrossth = fixgrosytd * CSTH;
END IF;

INSERT INTO tpydfreqtemp2(FREQ) VALUES ('mfgrossth');


INSERT INTO tpydfreqtemp2(FREQ) VALUES (mfgrossth);

IF method = 'LASTPAY' THEN


SET kptkpsth = otherptkp + kptkp * (endperiod - curperiod);
ELSE
SET kptkpsth = otherptkp * CSTH;
END IF;

#delete from tpydfreqtemp3;

IF mfgrossth > 0 AND method = 'AVERAGE' AND resigncode = '' THEN


-- SET valuebjbt = ROUND((percentbjbt * mfgrossth),0);
-- SET valuebjbt = CONVERT(FLOOR((percentbjbt * mfgrossth) /
1000),DECIMAL(38,20)) * 1000;
-- SET valuebjbt = percentbjbt * mfgrossth;
SET valuebjbt = ROUND((percentbjbt * mfgrossth),0);
INSERT INTO tpydfreqtemp(FREQ) VALUES ('valuebjbt 291');
INSERT INTO tpydfreqtemp(FREQ) VALUES (valuebjbt);
INSERT INTO tpydfreqtemp(FREQ) VALUES ('maxbjbt 291');
INSERT INTO tpydfreqtemp(FREQ) VALUES (maxbjbt);
IF valuebjbt > maxbjbt THEN
SET valuebjbt = maxbjbt;
END IF;

INSERT INTO tpydfreqtemp(FREQ) VALUES ('maxbjbt');


INSERT INTO tpydfreqtemp(FREQ) VALUES (maxbjbt);
INSERT INTO tpydfreqtemp(FREQ) VALUES ('valuebjbt');
INSERT INTO tpydfreqtemp(FREQ) VALUES (valuebjbt);

SET vtotal = mfgrossth - valuebjbt - kptkpsth;

INSERT INTO tpydfreqtemp(FREQ) VALUES ('vtotal');


INSERT INTO tpydfreqtemp(FREQ) VALUES (vtotal);
IF taxtype = 'E' THEN
SET vtotal = (vtotal + prevnetincome) * CEXP;
ELSE
SET vtotal = vtotal + prevnetincome;
END IF;

SET pkp = CONVERT(FLOOR((vtotal - mptkp) / 1000),DECIMAL(38,20)) *


1000;

SET pphak = 0;
SET tmpnpkp = 0;
SET prevnpkp = 0;
IF pkp > 0 THEN
SET done = FALSE;
OPEN QPPH21PKP;
read_loop: LOOP
FETCH QPPH21PKP INTO npkp, ppkp;
IF done THEN
LEAVE read_loop;
END IF;
IF PKP > npkp THEN
SET PPHAK = PPHAK + (npkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
ELSE
SET PPHAK = PPHAK + (pkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
LEAVE read_loop;
END IF;
SET prevnpkp = npkp;
END LOOP;
CLOSE QPPH21PKP;
END IF;

IF taxtype = 'E' THEN


SET pfgrossth = pphak * IEXP;
ELSE
SET pfgrossth = pphak;
END IF;

SET pfgrossth = pfgrossth - prevtax;


IF pfgrossth < 0 THEN
SET pfgrossth = 0;
END IF;
SET pfgrosyad = pfgrossth * CYAD;
SET pfgrosyad = ROUND(pfgrosyad, 2);
END IF;

SET mmgros = mfgrossth + vargrosytd;

IF mmgros > 0 THEN


-- SET valuebjbt = ROUND((percentbjbt * mmgros),0);
-- SET valuebjbt = CONVERT(FLOOR((percentbjbt * mmgros) /
1000),DECIMAL(38,20)) * 1000;
INSERT INTO tpydfreqtemp(FREQ) VALUES ('mmgros');
INSERT INTO tpydfreqtemp(FREQ) VALUES (mmgros);

SET valuebjbt = ROUND((percentbjbt * mmgros),0);


INSERT INTO tpydfreqtemp(FREQ) VALUES ('valuebjbt');
INSERT INTO tpydfreqtemp(FREQ) VALUES (valuebjbt);

IF valuebjbt > maxbjbt THEN


SET valuebjbt = maxbjbt;
END IF;
SET vtotal = mmgros - valuebjbt - kptkpsth;

IF (taxtype = 'E' AND resigncode <> '') OR resigncode = 'M' THEN


SET vtotal = (vtotal + prevnetincome) * CANL;
ELSE
IF taxtype = 'E' THEN
SET vtotal = (vtotal + prevnetincome) * CEXP;
ELSE
SET vtotal = vtotal + prevnetincome;
END IF;
END IF;

SET pkp = CONVERT(FLOOR((vtotal - mptkp) / 1000),DECIMAL(38,20)) *


1000;
SET pphak = 0;
SET tmpnpkp = 0;
SET prevnpkp = 0;

IFpkp > 0 THEN


SET done = FALSE;
OPEN QPPH21PKP;
read_loop: LOOP
FETCH QPPH21PKP INTO npkp, ppkp;
IF done THEN
LEAVE read_loop;
END IF;
IF PKP > npkp THEN
SET PPHAK = PPHAK + (npkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
ELSE
SET PPHAK = PPHAK + (pkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
LEAVE read_loop;
END IF;
SET prevnpkp = npkp;
END LOOP;
CLOSE QPPH21PKP;
END IF;

IF (taxtype = 'E' AND resigncode <> '') OR resigncode = 'M' THEN


SET pmgrossth = pphak * IANL;
ELSE
IF taxtype = 'E' THEN
SET pmgrossth = pphak * IEXP;
ELSE
SET pmgrossth = pphak;
END IF;
END IF;

SET pmgrossth = ROUND(pmgrossth - prevtax,0);


END IF;

IF method = 'LASTPAY' THEN


SET mfbornesth = fixborneytd + fixborne * (endperiod - curperiod);
ELSE
SET mfbornesth = fixborneytd * CSTH;
END IF;

IF mfbornesth > 0 AND method = 'AVERAGE' AND resigncode = '' THEN


SET mamount = mfbornesth + mfgrossth;
-- SET valuebjbt = ROUND((percentbjbt * mamount),0);
-- SET valuebjbt = CONVERT(FLOOR((percentbjbt * mamount) /
1000),DECIMAL(38,20)) * 1000;
SET valuebjbt = percentbjbt * mamount;
IF valuebjbt > maxbjbt THEN
SET valuebjbt = maxbjbt;
END IF;

SET vtotal = mamount - valuebjbt - kptkpsth;

IF taxtype = 'E' THEN


SET vtotal = (vtotal + prevnetincome) * CEXP;
ELSE
SET vtotal = vtotal + prevnetincome;
END IF;

SET pkp = CONVERT(FLOOR((vtotal - mptkp) / 1000),DECIMAL(38,20)) *


1000;
SET pphak = 0;
SET tmpnpkp = 0;
SET prevnpkp = 0;
IF pkp > 0 THEN
SET done = FALSE;
OPEN QPPH21PKP;
read_loop: LOOP
FETCH QPPH21PKP INTO npkp, ppkp;
IF done THEN
LEAVE read_loop;
END IF;
IF PKP > npkp THEN
SET PPHAK = PPHAK + (npkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
ELSE
SET PPHAK = PPHAK + (pkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
LEAVE read_loop;
END IF;
SET prevnpkp = npkp;
END LOOP;
CLOSE QPPH21PKP;
END IF;

IF taxtype = 'E' THEN


SET pmbornesth = pphak * IEXP;
ELSE
SET pmbornesth = pphak;
END IF;

SET pmbornesth = pmbornesth - prevtax;


IF pmbornesth < 0 THEN
SET pmbornesth = 0;
END IF;
SET pfborneyad = pmbornesth * CYAD;
SET pfborneyad = ROUND(pfborneyad, 2);
END IF;

SET mmborne = mfbornesth + varborneytd;


IF mmborne > 0 THEN
SET mamount = mmborne + mmgros;
-- SET valuebjbt = ROUND((percentbjbt * mamount),0);
-- SET valuebjbt = CONVERT(FLOOR((percentbjbt * mamount) /
1000),DECIMAL(38,20)) * 1000;
SET valuebjbt = percentbjbt * mamount;

IF valuebjbt > maxbjbt THEN


SET valuebjbt = maxbjbt;
END IF;
SET vtotal = mamount - valuebjbt - kptkpsth;

IF (taxtype = 'E' AND resigncode <> '') OR resigncode = 'M' THEN


SET vtotal = (vtotal + prevnetincome) * CANL;
ELSE
IF taxtype = 'E' THEN
SET vtotal = (vtotal + prevnetincome) * CEXP;
ELSE
SET vtotal = vtotal + prevnetincome;
END IF;
END IF;

SET pkp = CONVERT(FLOOR((vtotal - mptkp) / 1000),DECIMAL(38,20)) *


1000;
SET pphak = 0;
SET tmpnpkp = 0;
SET prevnpkp = 0;

IF pkp > 0 THEN


SET done = FALSE;
OPEN QPPH21PKP;
read_loop: LOOP
FETCH QPPH21PKP INTO npkp, ppkp;
IF done THEN
LEAVE read_loop;
END IF;
IF PKP > npkp THEN
SET PPHAK = PPHAK + (npkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
ELSE
SET PPHAK = PPHAK + (pkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
LEAVE read_loop;
END IF;
SET prevnpkp = npkp;
END LOOP;
CLOSE QPPH21PKP;
END IF;
IF (taxtype = 'E' AND resigncode <> '') OR resigncode = 'M' THEN
SET pmbornesth = pphak * IANL;
ELSE
IF taxtype = 'E' THEN
SET pmbornesth = pphak * IEXP;
ELSE
SET pmbornesth = pphak;
END IF;
END IF;
SET pmbornesth = ROUND(pmbornesth - prevtax,0);

IF method = 'LASTPAY' THEN


SET pphborne = ROUND(pmbornesth - pmgrossth - ytd_borne,0) /
(endperiod - curperiod + 1);
ELSE
SET pphborne = ROUND((pmbornesth - pmgrossth) - (pfborneyad -
pfgrosyad) - ytd_borne,0);
END IF;

SET pphbornesth = pmbornesth - pmgrossth;


SET pmgrossth = pmbornesth;
SET pfgrosyad = pfborneyad;
END IF;

SET mmgros = mmgros + mmborne;

INSERT INTO tpydfreqtemp2 (freq) VALUES ('fixnetytd');


INSERT INTO tpydfreqtemp2 (freq) VALUES (fixnetytd);

INSERT INTO tpydfreqtemp2 (freq) VALUES ('CSTH');


INSERT INTO tpydfreqtemp2 (freq) VALUES (CSTH);
IF method = 'LASTPAY' THEN
SET mfnettsth = fixnetytd + fixnet * (endperiod - curperiod);
ELSE
SET mfnettsth = fixnetytd * CSTH;
END IF;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('mfnettsth');
INSERT INTO tpydfreqtemp2 (freq) VALUES (mfnettsth);

SET vgrnet = 0;

IF mfnettsth > 0 AND method = 'AVERAGE' AND resigncode = '' THEN


SET mamount = mfnettsth + mmgros;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('mamount');
INSERT INTO tpydfreqtemp2 (freq) VALUES (mamount);

SET vgrnet = sfpph21grossup(mamount, taxtype, resigncode,


prevnetincome, prevtax, taxyear, taxcountry, percentbjbt, maxbjbt,

kptkpsth, mptkp, pmgrossth,CANL, CEXP, IANL, IEXP,percent_taxpen_net);


SET mamount = mamount + vgrnet;
-- SET valuebjbt = ROUND((percentbjbt * mamount), 0);
-- SET valuebjbt = CONVERT(FLOOR((percentbjbt * mamount) /
1000),DECIMAL(38,20)) * 1000;
SET valuebjbt = percentbjbt * mamount;

IF valuebjbt > maxbjbt THEN


SET valuebjbt = maxbjbt;
END IF;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('mamount');
INSERT INTO tpydfreqtemp2 (freq) VALUES (mamount);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('valuebjbt');
INSERT INTO tpydfreqtemp2 (freq) VALUES (valuebjbt);

INSERT INTO tpydfreqtemp2 (freq) VALUES ('kptkpsth');


INSERT INTO tpydfreqtemp2 (freq) VALUES (kptkpsth);

SET vtotal = mamount - valuebjbt - kptkpsth;

INSERT INTO tpydfreqtemp2 (freq) VALUES ('vtotal');


INSERT INTO tpydfreqtemp2 (freq) VALUES (vtotal);
IF taxtype = 'E' THEN
SET vtotal = (vtotal + prevnetincome) * CEXP;
ELSE
SET vtotal = vtotal + prevnetincome;
END IF;

SET pkp = CONVERT(FLOOR((vtotal - mptkp) / 1000),DECIMAL(38,20)) *


1000;
SET pphak = 0;
SET tmpnpkp = 0;
SET prevnpkp = 0;
IF pkp > 0 THEN
SET done = FALSE;
OPEN QPPH21PKP;
read_loop: LOOP
FETCH QPPH21PKP INTO npkp, ppkp;
IF done THEN
LEAVE read_loop;
END IF;
IF PKP > npkp THEN
SET PPHAK = PPHAK + (npkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
ELSE
SET PPHAK = PPHAK + (pkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
LEAVE read_loop;
END IF;
SET prevnpkp = npkp;
END LOOP;
CLOSE QPPH21PKP;
END IF;

IF taxtype = 'E' THEN


SET gfnettsth = pphak * IEXP;
ELSE
SET gfnettsth = pphak;
END IF;

IF pmgrossth < 0 THEN


SET tmppmgrossth = 0;
ELSE
SET tmppmgrossth = pmgrossth;
END IF;

SET gfnettsth = gfnettsth - tmppmgrossth - prevtax;


SET gfnettyad = gfnettsth * CYAD;
END IF;

SET mmnett = mfnettsth + varnetytd;


SET vgrnet = 0;
IF mmnett > 0 THEN
SET mamount = mmnett + mmgros;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('mamount 638');
INSERT INTO tpydfreqtemp2 (freq) VALUES (mamount);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('mmnett 638');
INSERT INTO tpydfreqtemp2 (freq) VALUES (mmnett);
SET vgrnet = sfpph21grossup(mamount, taxtype, resigncode, prevnetincome,
prevtax, taxyear, taxcountry, percentbjbt, maxbjbt,
kptkpsth, mptkp,
pmgrossth,CANL, CEXP, IANL, IEXP,percent_taxpen_net);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('vgrnet 638');
INSERT INTO tpydfreqtemp2 (freq) VALUES (vgrnet);

INSERT INTO tpydfreqtemp2 (freq) VALUES ('mamount');


INSERT INTO tpydfreqtemp2 (freq) VALUES (mamount);
SET mamount = mamount + vgrnet;

INSERT INTO tpydfreqtemp2 (freq) VALUES ('mamount');


INSERT INTO tpydfreqtemp2 (freq) VALUES (mamount);

-- SET valuebjbt = ROUND((percentbjbt * mamount),0);


-- SET valuebjbt = CONVERT(FLOOR((percentbjbt * mamount) /
1000),DECIMAL(38,20)) * 1000;
SET valuebjbt = percentbjbt * mamount;
IF valuebjbt > maxbjbt THEN
SET valuebjbt = maxbjbt;
END IF;
SET vtotal = mamount - valuebjbt - kptkpsth ;
IF (taxtype = 'E' AND resigncode <> '') OR resigncode = 'M' THEN
SET vtotal = (vtotal + prevnetincome) * CANL;
SET vtotal = (vtotal + prevnetincome);
ELSE
IF taxtype = 'E' THEN
SET vtotal = (vtotal + prevnetincome) * CEXP;
SET vtotal = (vtotal + prevnetincome);
ELSE
SET vtotal = vtotal + prevnetincome;
END IF;
END IF;
#DELETE FROM tpydfreqtemp2;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('vtotal');
INSERT INTO tpydfreqtemp2 (freq) VALUES (vtotal);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('prevnetincome');
INSERT INTO tpydfreqtemp2 (freq) VALUES (prevnetincome);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('CEXP');
INSERT INTO tpydfreqtemp2 (freq) VALUES (CEXP);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('mptkp');
INSERT INTO tpydfreqtemp2 (freq) VALUES (mptkp);
SET pkp = CONVERT(FLOOR((vtotal - mptkp) / 1000),DECIMAL(38,20)) * 1000;
SET pphak = 0;
SET tmpnpkp = 0;
SET prevnpkp = 0;
IF pkp > 0 THEN
SET done = FALSE;
OPEN QPPH21PKP;
read_loop: LOOP
FETCH QPPH21PKP INTO npkp, ppkp;
IF done THEN
LEAVE read_loop;
END IF;
IF PKP > npkp THEN
SET PPHAK = PPHAK + (npkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
ELSE
SET PPHAK = PPHAK + (pkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
LEAVE read_loop;
END IF;
SET prevnpkp = npkp;
END LOOP;
CLOSE QPPH21PKP;
END IF;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('PPHAK');
INSERT INTO tpydfreqtemp2 (freq) VALUES (PPHAK);
IF (taxtype = 'E' AND resigncode <> '') OR resigncode = 'M' THEN
#SET gmnettsth = pphak * IANL;
SET gmnettsth = pphak;
ELSE
IF taxtype = 'E' THEN
#SET gmnettsth = pphak * IEXP;
SET gmnettsth = pphak;
ELSE
SET gmnettsth = pphak;
END IF;
END IF;
IF pmgrossth < 0 THEN
SET tmppmgrossth = 0;
ELSE
SET tmppmgrossth = pmgrossth;
END IF;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('gmnettsth 722');
INSERT INTO tpydfreqtemp2 (freq) VALUES (gmnettsth);
SET gmnettsth = ROUND(gmnettsth - tmppmgrossth - prevtax,0);
IF method = 'LASTPAY' THEN
SET gmnett = ROUND(gmnettsth - ytd_taxallow,0) / (endperiod - curperiod
+ 1);
ELSE
SET gmnett = ROUND(gmnettsth - ytd_taxallow - gfnettyad,0);
END IF;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('gmnettsth 730');
INSERT INTO tpydfreqtemp2 (freq) VALUES (gmnettsth);
END IF;

IF method = 'LASTPAY' THEN


SET mfgrossotsth = fixgrossotytd + fixgrossot * (endperiod -
curperiod);
ELSE
SET mfgrossotsth = fixgrossotytd * CSTH;
END IF;

SET vgrnet = gmnettsth;

IF mfgrossotsth > 0 AND method = 'AVERAGE' AND resigncode = '' THEN


SET mamount = mfgrossotsth + mmnett + mmgros;
SET mamount = mamount + vgrnet;
-- SET valuebjbt = ROUND((percentbjbt * mamount),0);
-- SET valuebjbt = CONVERT(FLOOR((percentbjbt * mamount) /
1000),DECIMAL(38,20)) * 1000;
SET valuebjbt = percentbjbt * mamount;
IF valuebjbt > maxbjbt THEN
SET valuebjbt = maxbjbt;
END IF;
SET vtotal = mamount - valuebjbt - kptkpsth;

IF taxtype = 'E' THEN


SET vtotal = (vtotal + prevnetincome) * CEXP;
ELSE
SET vtotal = vtotal + prevnetincome;
END IF;

SET pkp = CONVERT(FLOOR((vtotal - mptkp) / 1000),DECIMAL(38,20)) *


1000;
SET pphak = 0;
SET tmpnpkp = 0;
SET prevnpkp = 0;
IF pkp > 0 THEN
SET done = FALSE;
OPEN QPPH21PKP;
read_loop: LOOP
FETCH QPPH21PKP INTO npkp, ppkp;
IF done THEN
LEAVE read_loop;
END IF;
IF PKP > npkp THEN
SET PPHAK = PPHAK + (npkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
ELSE
SET PPHAK = PPHAK + (pkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
LEAVE read_loop;
END IF;
SET prevnpkp = npkp;
END LOOP;
CLOSE QPPH21PKP;
END IF;

IF taxtype = 'E' THEN


SET pmgrossotsth = pphak * IEXP;
ELSE
SET pmgrossotsth = pphak;
END IF;

IF pmgrossth < 0 THEN


SET tmppmgrossth = 0;
ELSE
SET tmppmgrossth = pmgrossth;
END IF;

IF gmnettsth < 0 THEN


SET tmpgmnettsth = 0;
ELSE
SET tmpgmnettsth = gmnettsth;
END IF;

SET pmgrossotsth = pmgrossotsth - tmpgmnettsth - tmppmgrossth -


prevtax;
SET pfgrossotyad = pmgrossotsth * CYAD;
END IF;

SET mmgrossot = mfgrossotsth + vargrossotytd;


SET vgrnet = gmnettsth;
IF mmgrossot > 0 THEN
SET mamount = mmgrossot + mmnett + mmgros;
SET mamount = mamount + vgrnet;
-- SET valuebjbt = ROUND((percentbjbt * mamount),0);
-- SET valuebjbt = CONVERT(FLOOR((percentbjbt * mamount) /
1000),DECIMAL(38,20)) * 1000;
SET valuebjbt = percentbjbt * mamount;
IF valuebjbt > maxbjbt THEN
SET valuebjbt = maxbjbt;
END IF;
SET vtotal = mamount - valuebjbt - kptkpsth ;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('vtotal 817');
INSERT INTO tpydfreqtemp2 (freq) VALUES (vtotal);
IF (taxtype = 'E' AND resigncode <> '') OR resigncode = 'M' THEN
SET vtotal = (vtotal + prevnetincome) * CANL;
ELSE
IF taxtype = 'E' THEN
SET vtotal = (vtotal + prevnetincome) * CEXP;
ELSE
SET vtotal = vtotal + prevnetincome;
END IF;
END IF;
SET pkp = CONVERT(FLOOR((vtotal - mptkp) / 1000),DECIMAL(38,20)) *
1000;
SET pphak = 0;
SET tmpnpkp = 0;
SET prevnpkp = 0;
IF pkp > 0 THEN
SET done = FALSE;
OPEN QPPH21PKP;
read_loop: LOOP
FETCH QPPH21PKP INTO npkp, ppkp;
IF done THEN
LEAVE read_loop;
END IF;
IF PKP > npkp THEN
SET PPHAK = PPHAK + (npkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
ELSE
SET PPHAK = PPHAK + (pkp - prevnpkp) * ppkp / 100 *
percent_taxpen_net / 100;
LEAVE read_loop;
END IF;
SET prevnpkp = npkp;
END LOOP;
CLOSE QPPH21PKP;
END IF;
IF (taxtype = 'E' AND resigncode <> '') OR resigncode = 'M' THEN
SET pmgrossotsth = pphak * IANL;
ELSE
IF taxtype = 'E' THEN
SET pmgrossotsth = pphak * IEXP;
ELSE
SET pmgrossotsth = pphak;
END IF;
END IF;
IF pmgrossth < 0 THEN
SET tmppmgrossth = 0;
ELSE
SET tmppmgrossth = pmgrossth;
END IF;
IF gmnettsth < 0 THEN
SET tmpgmnettsth = 0;
ELSE
SET tmpgmnettsth = gmnettsth;
END IF;
SET pmgrossotsth = ROUND(pmgrossotsth - tmpgmnettsth - tmppmgrossth -
prevtax,0);
IF method = 'LASTPAY' THEN
SET pphgot = ROUND(pmgrossotsth - (ytd_tax - ytd_borne -
ytd_taxallow),0) / (endperiod - curperiod + 1);
ELSE
SET pphgot = ROUND(pmgrossotsth - (ytd_tax - ytd_borne -
ytd_taxallow) - pfgrossotyad,0);
END IF;
END IF;

IF pmgrossth < 0 THEN


SET tmppmgrossth = 0;
ELSE
SET tmppmgrossth = pmgrossth;
END IF;

SET pphsth = tmppmgrossth + gmnettsth + pmgrossotsth;

IF method = 'LASTPAY' THEN


SET pph = ROUND(pphsth - ytd_tax,0) / (endperiod - curperiod + 1);
ELSE
DELETE FROM tpydfreqtemp2;
INSERT INTO tpydfreqtemp2 (freq) VALUES ('pphsth');
INSERT INTO tpydfreqtemp2 (freq) VALUES (pphsth);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('ytd_tax');
INSERT INTO tpydfreqtemp2 (freq) VALUES (ytd_tax);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('pfgrosyad');
INSERT INTO tpydfreqtemp2 (freq) VALUES (pfgrosyad);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('gfnettyad');
INSERT INTO tpydfreqtemp2 (freq) VALUES (gfnettyad);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('pfgrossotyad');
INSERT INTO tpydfreqtemp2 (freq) VALUES (pfgrossotyad);
SET pph = ROUND(pphsth - ytd_tax - pfgrosyad - gfnettyad -
pfgrossotyad,0);

END IF;

IF gmnett < 1000 AND gmnett > -1000 AND curperiod <> endperiod AND
resigncode = '' AND fixnet = 0 THEN
SET pph = pph - gmnett;
SET gmnett = 0;

END IF;

IF pphborne < 1000 AND pphborne > -1000 AND curperiod <> endperiod AND
resigncode = '' AND fixborne = 0 THEN
SET pph = pph - pphborne;
SET pphborne = 0;

END IF;
IF pphgot < 1000 AND pphgot > -1000 AND curperiod <> endperiod AND
resigncode = '' AND fixgrossot = 0 THEN
SET pph = pph - pphgot;
END IF;

IF LENGTH(taxfilenum) = 0 OR taxfilenum IS NULL THEN


SET taxpenalty = ROUND(percent_taxpen / 100 * pph, 0);
ELSE
IF refundtax = 'Y' THEN
SET taxpenalty = 0 - ytd_taxpen - prevtaxpen;
ELSE
SET taxpenalty = 0;
END IF;
END IF;
SET vtotalsth = mmgros + mmnett + mmgrossot + gmnettsth;
SET proratebjbt = maxbjbt;
SET bjbtsth = ROUND(percentbjbt * vtotalsth, 0);
IF proratebjbt < bjbtsth THEN
SET bjbtsth = proratebjbt;
END IF;
SET vtotalytd = fixgrosytd + vargrosytd + fixnetytd + varnetytd +
ytd_taxallow + gmnett + fixgrossotytd + vargrossotytd;

IF proratebjbt < bjbtytd THEN


SET bjbtytd = proratebjbt;
END IF;

IF ismonthly = 1 AND resigncode = '' THEN

SET ismonthly = 1;
ELSE
IF method = 'CURRENT' AND curperiod <> endperiod THEN
IF wo_bonus = 'N' THEN

SET tempresult = sfpph21monthly(fixgros,vargros,fixnet,varnet,


vargrosP, varnetP,
otherptkp, mptkp, percentbjbt,maxbjbt, taxfilenum, percent_taxpen,
refundtax,
curperiod,startperiod,endperiod, taxyear, ytd_taxpen, prevtaxpen,
cfsecurepath, sfpubq , companyid, taxcountry, curprocmid, empid,0,'N',
percent_taxpen_net,
fixborne,varborneytd ,fixgrossot, vargrossotytd,
varborneP,vargrossotP,taxtype,prevperiod
);
INSERT INTO tpydfreqtemp (freq) VALUES ('tempresult 1012');
INSERT INTO tpydfreqtemp (freq) VALUES (tempresult);

SET pph =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',1),'|',-1),DECIMAL(38,20));
SET
gmnett=CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',2),'|',-
1),DECIMAL(38,20));
SET taxpenalty =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',3),'|',-1),DECIMAL(38,20));
SET pphsth =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',7),'|',-1),DECIMAL(38,20));
SET gmnettsth =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',8),'|',-1),DECIMAL(38,20));
SET pphborne =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',9),'|',-1),DECIMAL(38,20));
SET pphbornesth =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',10),'|',-1),DECIMAL(38,20));
SET
temp=CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',11),'|',-
1),DECIMAL(38,20));

IF periodfreq = 'ANNUALLY' THEN


SET pph = pph;
SET gmnett = gmnett;
SET pphborne = pphborne;
END IF;
END IF;

IF periodfreq = 'ANNUALLY' AND wo_bonus = 'Y' THEN


IF lookupperiod IS NOT NULL THEN
SET tempresult =
sfpph21monthly(fixgros,vargros,fixnet,varnet, 0, 0,
otherptkp, mptkp,
percentbjbt,maxbjbt, taxfilenum, percent_taxpen, refundtax,
curperiod,startperiod,endperiod,
taxyear, ytd_taxpen, prevtaxpen, cfsecurepath, sfpubq , companyid, taxcountry,
curprocmid, empid,0,'N', percent_taxpen_net,
fixborne,varborneytd ,fixgrossot,
vargrossotytd, 0,0,0,0);
SET pph =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',1),'|',-1),DECIMAL(38,20));
SET
gmnett=CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',2),'|',-
1),DECIMAL(38,20));
SET taxpenalty =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',3),'|',-1),DECIMAL(38,20));
SET pphsth =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',7),'|',-1),DECIMAL(38,20));
SET gmnettsth =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',8),'|',-1),DECIMAL(38,20));
SET pphborne =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',9),'|',-1),DECIMAL(38,20));
SET pphbornesth =
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',10),'|',-1),DECIMAL(38,20));
SET
temp=CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(tempresult,'|',11),'|',-
1),DECIMAL(38,20));
IF LENGTH(taxfilenum) = 0 OR taxfilenum IS NULL THEN
SET taxpenalty = ROUND( (percent_taxpen/100) * tmpPPH, 0);
ELSE
IF refundtax = 'Y' THEN
SET taxpenalty = 0 - ytd_taxpen - prevtaxpen;
ELSE
SET taxpenalty = 0;
END IF;
END IF;
SET pph = pph;
SET gmnett = gmnett;
SET pphborne = pphborne;
SET taxpenalty = taxpenalty;
ELSE
IF LENGTH(taxfilenum) = 0 OR taxfilenum IS NULL THEN

SET taxpenalty = ROUND(percent_taxpen /100 * tmpPPH,0);


ELSE
IF refundtax = 'Y' THEN
SET taxpenalty = 0 - ytd_taxpen - prevtaxpen;
ELSE
SET taxpenalty = 0;
END IF;
END IF;

SET pph = pph;


SET gmnett = gmnett;
SET pphborne = pphborne;
SET taxpenalty = taxpenalty;
END IF;
END IF;
ELSE
IF pph < 0 AND curperiod <> endperiod AND resigncode = '' AND
taxminusbep = 'N' THEN
SET pph = 0;
END IF;
IF gmnett < 0 AND curperiod <> endperiod AND resigncode = '' AND
taxminusbep = 'N' THEN
SET gmnett = 0;
END IF;
IF taxpenalty < 0 AND curperiod <> endperiod AND resigncode = '' AND
taxminusbep = 'N' THEN
SET taxpenalty = 0;
END IF;
IF pphborne < 0 AND curperiod <> endperiod AND resigncode = '' AND
taxminusbep = 'N' THEN
SET pphborne = 0;
END IF;
END IF;
END IF;

INSERT INTO tpydfreqtemp2 (freq) VALUES ('maxbjbt');


INSERT INTO tpydfreqtemp2 (freq) VALUES (maxbjbt);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('curperiod');
INSERT INTO tpydfreqtemp2 (freq) VALUES (curperiod);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('startperiod');
INSERT INTO tpydfreqtemp2 (freq) VALUES (startperiod);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('endperiod');
INSERT INTO tpydfreqtemp2 (freq) VALUES (endperiod);

SET proratebjbt = maxbjbt * (curperiod - startperiod + 1) / (endperiod -


startperiod + 1);

IF bjbtytd > proratebjbt THEN


SET bjbtytd = proratebjbt;
END IF;

INSERT INTO tpydfreqtemp2 (freq) VALUES ('fixnet');


INSERT INTO tpydfreqtemp2 (freq) VALUES (fixnet);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('fixnetytd');
INSERT INTO tpydfreqtemp2 (freq) VALUES (fixnetytd);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('varnet');
INSERT INTO tpydfreqtemp2 (freq) VALUES (varnet);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('varnetytd');
INSERT INTO tpydfreqtemp2 (freq) VALUES (varnetytd);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('fixgros');
INSERT INTO tpydfreqtemp2 (freq) VALUES (fixgros);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('fixgrosytd');
INSERT INTO tpydfreqtemp2 (freq) VALUES (fixgrosytd);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('vargros');
INSERT INTO tpydfreqtemp2 (freq) VALUES (vargros);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('vargrosytd');
INSERT INTO tpydfreqtemp2 (freq) VALUES (vargrosytd);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('pphsth');
INSERT INTO tpydfreqtemp2 (freq) VALUES (pphsth);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('pphsth');
INSERT INTO tpydfreqtemp2 (freq) VALUES (pphsth);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('gmnettsth');
INSERT INTO tpydfreqtemp2 (freq) VALUES (gmnettsth);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('mmnett');
INSERT INTO tpydfreqtemp2 (freq) VALUES (mmnett);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('mmgros');
INSERT INTO tpydfreqtemp2 (freq) VALUES (mmgros);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('vtotalytd');
INSERT INTO tpydfreqtemp2 (freq) VALUES (vtotalytd);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('bjbtytd');
INSERT INTO tpydfreqtemp2 (freq) VALUES (bjbtytd);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('vtotalsth');
INSERT INTO tpydfreqtemp2 (freq) VALUES (vtotalsth);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('bjbtsth');
INSERT INTO tpydfreqtemp2 (freq) VALUES (bjbtsth);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('pph');
INSERT INTO tpydfreqtemp2 (freq) VALUES (pph);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('gmnett');
INSERT INTO tpydfreqtemp2 (freq) VALUES (gmnett);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('taxpenalty');
INSERT INTO tpydfreqtemp2 (freq) VALUES (taxpenalty);

INSERT INTO tpydfreqtemp2 (freq) VALUES ('mptkp');


INSERT INTO tpydfreqtemp2 (freq) VALUES (mptkp);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('pkp');
INSERT INTO tpydfreqtemp2 (freq) VALUES (pkp);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('method');
INSERT INTO tpydfreqtemp2 (freq) VALUES (method);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('kptkpsth');
INSERT INTO tpydfreqtemp2 (freq) VALUES (kptkpsth);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('pphborne');
INSERT INTO tpydfreqtemp2 (freq) VALUES (pphborne);

INSERT INTO tpydfreqtemp2 (freq) VALUES ('pphbornesth');


INSERT INTO tpydfreqtemp2 (freq) VALUES (pphbornesth);
INSERT INTO tpydfreqtemp2 (freq) VALUES ('tempdebug');
INSERT INTO tpydfreqtemp2 (freq) VALUES (tempdebug);

RETURN
CONCAT_WS('|',IFNULL(pphsth,0),IFNULL( gmnettsth,0),IFNULL( mmnett,0),IFNULL( mmgro
s,0),IFNULL( vtotalytd,0),
IFNULL( bjbtytd,0),IFNULL( vtotalsth,0),IFNULL( bjbtsth,0),
IFNULL( pph,0),IFNULL( gmnett,0),IFNULL( taxpenalty,0),
IFNULL( mptkp,0),IFNULL( pkp,0),IFNULL( method,'
'),IFNULL( kptkpsth,0),IFNULL(pphborne,0),
IFNULL( pphbornesth,0),IFNULL(tempdebug,0));
END;

DROP FUNCTION IF EXISTS `sfcalcincome_sfgoNew`;

CREATE FUNCTION `sfcalcincome_sfgoNew`(


`empid` VARCHAR(50),
`companyid` INT,
`curprd` INT,
`taxyear` INT,
`curmtdhid` VARCHAR(50),
`CFSECUREPATH` VARCHAR(25),
`SFPUBQ` VARCHAR(25)
) RETURNS text CHARSET latin1
DETERMINISTIC
BEGIN

DECLARE fixnet, varnet, fixgros, vargros, dumfixnet, dumfixgros, ptkplain,


varnetp, vargrosp, salarytaxmonth, compvalue, empsalary DECIMAL(38,20);
DECLARE temp TEXT;
DECLARE isnet TINYINT;
DECLARE cntmtdh INT;
DECLARE periodcode VARCHAR(50);
DECLARE periodfreq VARCHAR(20);
DECLARE salnet, compnet, taxclass, comptype VARCHAR(1);
DECLARE period_freq VARCHAR(15);
DECLARE taxcurrency, compcurrency VARCHAR(4);
DECLARE periodtaxdate DATETIME;
DECLARE fixborne, varborne, varbornep, fixgot, vargot, vargotp, dumfixborne,
dumfixgot DECIMAL(38,20);
DECLARE done BOOL;

DECLARE qMComp CURSOR FOR


SELECT tpydprocmtdd.Net , tpydprocmtdd.TaxClass,
tpydprocmtdd.AllowDeductType,

SUM(SF2356896(tpydprocmtdd.Comp_value_tax,CFSecurePath,SFPUBQ,tpydprocmtdh.EMP_ID))
Comp_Value,
tpympayperiod.period_freq
FROM tpydprocmtdh, tpydprocmtdd, tpympayperiod
WHERE tpydprocmtdh.ProcMTDh_ID = tpydprocmtdd.ProcMTDh_ID
AND tpydprocmtdh.period_code = tpympayperiod.period_code
AND tpydprocmtdh.Emp_ID = EMPID
AND tpydprocmtdh.Company_ID = COMPANYID
AND MONTH(tpydprocmtdh.TaxDate) = CURPRD
AND YEAR(tpydprocmtdh.TaxDate) = TAXYEAR
AND tpydprocmtdd.Taxed = 'Y'
GROUP BY tpydprocmtdd.Net, tpydprocmtdd.TaxClass,
tpydprocmtdd.AllowDeductType,tpympayperiod.period_freq;

DECLARE qFixComp CURSOR FOR


SELECT

SF2356896(tpydempallowdeduct.AllowDeduct_Value,CFSecurePath,SFPUBQ,tpydempallowdedu
ct.EMP_ID) allowdeduct_value,
tpydempallowdeduct.Net,tpydempallowdeduct.currency_code
FROM tpydempallowdeduct, tpympayallowdeduct
WHERE tpydempallowdeduct.allowdeduct_code =
tpympayallowdeduct.allowdeduct_code
AND tpydempallowdeduct.company_id = tpympayallowdeduct.company_id
AND tpydempallowdeduct.emp_id = empid
AND tpydempallowdeduct.company_id = companyid
AND tpydempallowdeduct.taxclass = 'F'
AND tpydempallowdeduct.taxed = 'Y' AND
tpympayallowdeduct.AllowdeductType = 'A';

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

SET fixnet = 0;
SET varnet = 0;
SET fixgros = 0;
SET vargros = 0;
SET dumfixnet = 0;
SET dumfixgros = 0;
SET ptkplain = 0;
SET varnetP = 0;
SET vargrosP = 0;

SET fixborne = 0;
SET varborne = 0;
SET varbornep = 0;
SET fixgot = 0;
SET vargot = 0;
SET vargotp = 0;
SET dumfixborne = 0;
SET dumfixgot = 0;

SELECT currency_code INTO taxcurrency FROM tpymtaxcountry


WHERE CODE = (SELECT teomcompany.taxcountry
FROM teomcompany
WHERE teomcompany.Company_ID = companyid);

SELECT
SUM(SF2356896(Salary_Tax,CFSecurePath,SFPUBQ,tpydprocmtdh.EMP_ID)) INTO
salarytaxmonth
FROM tpydprocmtdh
WHERE Emp_ID = EMPID AND company_id = COMPANYID
AND MONTH(tpydprocmtdh.TaxDate) = CURPRD
AND YEAR(tpydprocmtdh.TaxDate) = TAXYEAR;

SELECT tpydprocytdh.SalNet, tpydprocmtdh.Period_Code INTO


salnet,periodcode
FROM tpydprocytdh, tpydprocmtdh
WHERE tpydprocytdh.Emp_ID = EMPID
AND tpydprocytdh.ProcYTDh_ID = tpydprocmtdh.ProcYTDh_ID
AND tpydprocytdh.Company_ID = COMPANYID

AND tpydprocytdh.CurrentYear = TAXYEAR


AND tpydprocmtdh.ProcMTDh_ID = CURMTDHID;

SELECT tpympayperiod.period_freq, tpympayperiod.taxdate INTO periodfreq,


periodtaxdate
FROM tpympayperiod
WHERE period_code = periodcode
AND company_id = COMPANYID;

IF periodfreq = 'ANNUALLY' THEN


SELECT COUNT(procmtdh_id) INTO cntmtdh FROM tpydprocmtdh
WHERE emp_id = EMPID
AND company_id = COMPANYID
AND MONTH(taxdate) = CURPRD AND YEAR(taxdate) = TAXYEAR
AND salused = 'Y';

IF cntmtdh = 0 THEN
SELECT currency_code,
SF2356896(Salary,CFSecurePath,SFPUBQ,TPYDEMPSALARYPARAM.EMP_ID) INTO compcurrency,
empsalary
FROM TPYDEMPSALARYPARAM
WHERE emp_id = EMPID AND company_id = COMPANYID;

IF compcurrency <> taxcurrency THEN


SET empsalary =
CONVERT(SUBSTRING_INDEX(sfconvertcurrency(empsalary,
compcurrency,taxcurrency,companyid, periodtaxdate,'TAX'), '|', 1),DECIMAL(38,20));
SET empsalary = sfround(empsalary,taxcurrency,companyid);
END IF;

IF salnet = '1' THEN


SET dumfixnet = dumfixnet + empsalary;
ELSEIF salnet = '0' THEN
SET dumfixgros = dumfixgros + empsalary;
ELSEIF salnet = '2' THEN
SET dumfixborne = dumfixborne + empsalary;
ELSEIF salnet = '3' THEN
SET dumfixgot = dumfixgot + empsalary;
END IF;
OPEN qFixComp;
read_loop: LOOP
FETCH qFixComp INTO compvalue, compnet, compcurrency;
IF done THEN
LEAVE read_loop;
END IF;

IF compcurrency <> taxcurrency THEN


SET compvalue =
CONVERT(SUBSTRING_INDEX(sfconvertcurrency(compvalue,
compcurrency,taxcurrency,companyid, periodtaxdate,'TAX'), '|', 1),DECIMAL(38,20));
SET compvalue =
sfround(compvalue,taxcurrency,companyid);
END IF;
IF compnet = '1' THEN
SET dumfixnet = dumfixnet + compvalue;
ELSEIF compnet = '0' THEN
SET dumfixgros = dumfixgros + compvalue;
ELSEIF compnet = '2' THEN
SET dumfixborne = dumfixborne + compvalue;
ELSEIF compnet = '3' THEN
SET dumfixgot = dumfixgot + compvalue;
END IF;
END LOOP;
CLOSE qFixComp;
END IF;

END IF;
IF (salnet = '1') THEN
SET fixnet = fixnet + salarytaxmonth;
ELSEIF (salnet = '0') THEN
SET fixgros = fixgros + salarytaxmonth;
ELSEIF (salnet = '2') THEN
SET fixborne = fixborne + salarytaxmonth;
ELSEIF (salnet = '3') THEN
SET fixgot = fixgot + salarytaxmonth;
END IF;
SET done = FALSE;

OPEN qMComp;
read_loop: LOOP
FETCH qMComp INTO compnet, taxclass, comptype, compvalue, period_freq;
IF done THEN
LEAVE read_loop;
END IF;
IF period_freq = 'ANNUALLY' THEN
IF comptype = 'A' THEN
IF compnet = '1' THEN
SET varnetP = varnetP + compvalue;
ELSEIF compnet = '0' THEN
SET vargrosP = vargrosP + compvalue;
ELSEIF compnet = '2' THEN
SET varborneP = varborneP + compvalue;
ELSEIF compnet = '3' THEN
SET vargotP = vargotP + compvalue;
END IF;
ELSE
IF comptype = 'D' AND taxclass = 'P' THEN
SET ptkplain = ptkplain + compvalue;
ELSE
IF comptype = 'D' THEN
IF compnet = '1' THEN
SET varnet = varnet - compvalue;
ELSEIF compnet = '0' THEN
SET vargros = vargros - compvalue;
ELSEIF compnet = '2' THEN
SET varborne = varborne - compvalue;
ELSEIF compnet = '3' THEN
SET vargot = vargot - compvalue;
END IF;
END IF;
END IF;
END IF;
ELSE
IF comptype = 'A' THEN
IF compnet = '1' THEN
IF taxclass = 'F' THEN
SET fixnet = fixnet + compvalue;
ELSE
IF taxclass = 'V' THEN
SET varnet = varnet + compvalue;
END IF;
END IF;
ELSEIF compnet = '0' THEN
IF taxclass = 'F' THEN
SET fixgros = fixgros + compvalue;
ELSE
IF taxclass = 'V' THEN
SET vargros = vargros + compvalue;
END IF;
END IF;
ELSEIF compnet = '2' THEN
IF taxclass = 'F' THEN
SET fixborne = fixborne + compvalue;
ELSE
IF taxclass = 'V' THEN
SET varborne = varborne + compvalue;
END IF;
END IF;
ELSEIF compnet = '3' THEN
IF taxclass = 'F' THEN
SET fixgot = fixgot + compvalue;
ELSE
IF taxclass = 'V' THEN
SET vargot = vargot + compvalue;
END IF;
END IF;
END IF;
ELSE
IF comptype = 'D' AND taxclass = 'P' THEN
SET ptkplain = ptkplain + compvalue;
ELSE
IF comptype = 'D' THEN
IF compnet = '1' THEN
IF taxclass = 'F' THEN
SET fixnet = fixnet -
compvalue;
ELSE
IF taxclass = 'V' THEN
SET varnet = varnet -
compvalue;
END IF;
END IF;
ELSEIF compnet = '0' THEN
IF taxclass = 'F' THEN
SET fixgros = fixgros - compvalue;
ELSE
IF taxclass = 'V' THEN
SET vargros = vargros -
compvalue;
END IF;
END IF;
ELSEIF compnet = '2' THEN
IF taxclass = 'F' THEN
SET fixborne = fixborne -
compvalue;
ELSE
IF taxclass = 'V' THEN
SET varborne = varborne -
compvalue;
END IF;
END IF;
ELSEIF compnet = '3' THEN
IF taxclass = 'F' THEN
SET fixgot = fixgot - compvalue;
ELSE
IF taxclass = 'V' THEN
SET vargot = vargot -
compvalue;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END LOOP;
CLOSE qMComp;

IF fixnet = 0 AND varnet = 0 THEN


SET isnet = 0;
ELSE
SET isnet = 1;
END IF;

RETURN CONCAT_WS('|',IFNULL(fixnet,0), IFNULL(varnet,0), IFNULL(fixgros,0),


IFNULL(vargros,0), IFNULL(dumfixnet,0), IFNULL(dumfixgros,0), IFNULL(isnet,0),
IFNULL(ptkplain,0),IFNULL(varnetp,0), IFNULL(vargrosp,0), IFNULL(fixborne,0),
IFNULL(varborne,0),IFNULL(varbornep,0),IFNULL(fixgot,0), IFNULL(vargot,0),
IFNULL(vargotp,0), IFNULL(dumfixborne,0), IFNULL(dumfixgot,0),IFNULL(temp,0));
END;

Вам также может понравиться