Files
roaimob/Programe/Vechi/calcamortm.prg

83 lines
2.6 KiB
Plaintext

LOCAL cond,c
lnValRez = m.valrez
IF VAL(m.an) >= 2004
m.valrez = 0 && din 2004 trece ca si valoare amortizata
ENDIF
cond='month(m.datapif)=val(m.nl) and year(m.datapif)=val(m.an) and m.uzuraprec=0'
m.normaan=ROUND(m.normat/12,3)
IF m.valramasa = 0 AND m.dataeval = m.datapif
m.valramasa = m.valin - m.valrez
ENDIF
IF m.normat2=0
m.normat2=m.normaan
ENDIF
IF m.normat2lun=0
m.normat2lun=m.normat
ENDIF
DO CASE
CASE UPPER(LEFT(m.tipamort,1))='L' &&LINIARA
DO amortlin
m.amortan=ROUND(m.amortlun*12,gnZ)
CASE UPPER(LEFT(m.tipamort,1))='A' &&ACCELERATA
IF (m.P>0 AND m.P<=0.5) AND m.UZURA<=12
m.amortlun = IIF(m.UZURA>m.normat OR &cond ,0,IIF(M.UZURA=M.normat,M.valin-m.valrez-M.AMORTprec,ROUND((m.valin-m.valrez)*m.P/12,gnZ)))
ELSE
m.amortlun = IIF(m.UZURA>m.normat OR &cond ,0,IIF(M.UZURA=M.normat,M.valin-m.valrez-M.AMORTprec,ROUND(((m.valin-m.valrez)*(1-m.P))/(m.normat-12),gnZ)))
ENDIF
m.amortan=ROUND(m.amortlun*12,gnZ)
CASE UPPER(LEFT(m.tipamort,1))='D' &&DEGRESIVA
IF MOD(m.UZURA,12)=1
c=12*m.k/m.normat
m.amortan = IIF(m.UZURA>m.normat,0,ROUND((m.valin-m.valrez-m.AMORTprec)*c,gnZ))
IF m.amortan<ROUND(12*(m.valin-m.valrez)/m.normat,gnZ)
m.amortan = ROUND((m.valin-m.valrez-m.AMORTprec)/(ROUND(m.normat2lun/12,3)-ROUND(m.UZURA/12,3)),gnZ)
ENDIF
ENDIF
m.amortlun = IIF(m.UZURA>m.normat OR &cond ,0,IIF(m.UZURA=m.normat,M.valin-m.valrez-M.AMORTprec,ROUND(m.amortan/12,gnZ)))
ENDCASE
m.amorttot=m.amortlun+m.AMORTprec
m.valrez = lnValRez
RETURN
***------------------------------------------------------------------------------------------
PROCEDURE amortlin
LOCAL cond,c,cond2
cond='(month(m.datapif)=val(m.nl) and year(m.datapif)=val(m.an) and m.uzuraprec=0)' && in luna punerii in functiune
IF ROUND(12*VAL(m.an)+VAL(m.nl),0)>12*YEAR(m.dataeval)+MONTH(m.dataeval)+m.normat2lun
cond2='(M.AMORTPREC>=M.valin-m.valrez)' && total amortizare din luna precedenta a ajuns la valoare-valoarea reziduala
ELSE
cond2 = '.f.'
ENDIF
IF &cond OR &cond2
m.amortlun =0
ELSE
IF ROUND(12*VAL(m.an)+VAL(m.nl),0)=12*YEAR(m.dataeval)+MONTH(m.dataeval)+m.normat2lun AND m.cota <> 0
m.amortlun = M.valin - m.valrez - M.AMORTprec
IF m.amortlun<0
m.amortlun=0
ENDIF
ELSE
m.amortlun = ROUND(m.valramasa*m.cota/12/100,gnZ)
ENDIF
ENDIF
IF M.AMORTprec+M.amortlun>m.valin-m.valrez AND m.valin = m.valoare && cele care nu au fost reevaluate
m.amortlun=M.valin-m.valrez-M.AMORTprec
IF M.amortlun<0
m.amortlun=0
ENDIF
ENDIF
***------------------------------------------------------------------------------------------------