import at.clockwork.calculation.CalculationData import at.clockwork.calculation.data.* import at.clockwork.calculation.GeneralCalculationData import at.clockwork.time.service.DateTimeService import at.clockwork.calculation.RestartCalculationException class Calc99992Service { static transactional = false def run(CalculationData calculationData, GeneralCalculationData generalCalculationData, boolean saving, Map parameters) throws RestartCalculationException { double akZusN1Ori = _cd.getAdditionalData( _cd.timeTimePlan, "ZUSN1" ) ?: 0 double akZusN1 = akZusN1Ori if ( akZusN1 == 0 ) akZusN1 = 173 _setV( [ "X99", "X100" ], akZusN1 * 60 ) boolean aliquotieren = false Date startDate = _dts.getStartOfMonth( _cd.getDate() ) Date endDate = _cd.getDate() Date lastInitialDate = _cd.getLastInitialDate( _dts.getStartOfMonth( _cd.getDate() ), _cd.getDate() ) if ( lastInitialDate ) { // Ausgangssaldo wurde dieses Monat gesetzt aliquotieren = true startDate = lastInitialDate } // TODO: weiterrechnen bis EndeMonat muss noch implementiert werden if ( _cd.getSeparation() ) { if ( _cd.getSeparation().getYear() == _cd.getDate().getYear() && _cd.getSeparation().getMonth() == _cd.getDate().getMonth() ) { endDate = _cd.getSeparation() aliquotieren = true } } if ( aliquotieren && startDate <= endDate ) { int days = ( endDate - startDate ) + 1 if ( days > 30 ) days = 30 _setV( "X99", _getV( "X99" ) * ((double) days) / 30.0 ) double rest = _roundedRest( _getV( "X99" ), 60.0 ) if ( rest >= 30.0 ) { _setV( "X99", _rounded( _getV( "X99" ), 60.0 ) + 60 ) } else { _setV( "X99", _rounded( _getV( "X99" ), 60.0 ) ) } _setV( "X100", _getV( "X99" ) ) } _setV( "X6", _cd.getSummedValuesThisMonth( "6" ) ) _setV( "X13", _cd.getSummedValuesThisMonth( "13" ) ) _setV( "X14", _cd.getSummedValuesThisMonth( "14" ) ) _setV( "X99", _caps( "X99", "X6" ) ) if ( _getV( "X99" ) > 0 && _getV( "X13" ) > 0 ) _addV( [ "P6", "X6" ], [ "X99", "P13" ], _min( "X99", "X13" ) ) if ( _getV( "X99" ) > 0 && _getV( "X14" ) > 0 ) _addV( [ "P6", "X6" ], [ "X99", "P14" ], _min( "X99", "X14" ) ) if ( akZusN1Ori != 0 ) _setV( "P9", -_getV( "X99" ) ) _addV( "P13", "P6", _caps( "X6", "X100" ) ) return } } /* ::1:: IF VAR_AK-ZUSN1 = NW_0 UND NW_0 > NW_1 FUNC RETURN_ DO ; ::2:: IF FUNC VAR_AK-ZUSN1 * NW_60 DO =_XVAR_99 =_XVAR_100 ; ::3:: IF VAR_AK-ZUSN1 = NW_0 FUNC ZT_173:00 DO =_XVAR_99 =_XVAR_100 ; ::4:: IF FUNC FOXPRO_{..} DO =_DP_201 =_DP_202 ; ::5:: IF FOXPRO_MONTH(Arbeitne.Ausgangssal-ESC-D-O-) = VAR_MONAT UND FOXPRO_YEAR(Arbeitne.Ausgangssal-ESC-D-O-) = VAR_JAHR FUNC FOXPRO_Arbeitne.Ausgangssal-ESC-D-O- DO =_DP_201 ; ::6:: IF FOXPRO_MONTH(Arbeitne.Austritt) = VAR_MONAT UND FOXPRO_YEAR(Arbeitne.Austritt) = VAR_JAHR FUNC FOXPRO_Arbeitne.Austritt DO =_DP_202 ; ::7:: IF FOXPRO_EMPTY(m.datumspunkt(201)) UND FOXPRO_EMPTY(m.datumspunkt(202)) FUNC GOTO_WEITER DO ; ::8:: IF FOXPRO_EMPTY(m.datumspunkt(201)) = FOXPRO_.T. FUNC DP_ANFANGMONAT DO =_DP_201 ; ::9:: IF FOXPRO_EMPTY(m.datumspunkt(202)) = FOXPRO_.T. FUNC DP_ENDEMONAT DO =_DP_202 ; ::10:: IF FUNC DP_202 - DP_201 DO =_ZA_99 ; ::11:: IF FUNC NW_1 DO +_ZA_99 ; ::11:: IF ZA_99 > NW_30 FUNC NW_30 DO =_ZA_99 ; ::12:: IF FUNC XVAR_99 * ZA_99 DO =_XVAR_99 ; ::13:: IF FUNC XVAR_99 / NW_30 DO =_XVAR_99 ; ::13:: // kaufmännisch runden IF FUNC XVAR_99 R ZT_1:00 DO =_XVAR_200 ; ::13:: IF XVAR_200 >= ZT_0:30 FUNC ZT_1:00 - XVAR_200 DO +_XVAR_99 ; ::13:: IF XVAR_200 < ZT_0:30 FUNC XVAR_200 DO -_XVAR_99 ; ::13:: // XVAR_100 wird später noch benötigt IF FUNC XVAR_99 DO =_XVAR_100 ; ::WEITER:: IF FUNC MS_13 DO =_XVAR_13 ; ::14:: IF FUNC MS_14 DO =_XVAR_14 ; ::15:: IF FUNC XVAR_99 K MS_6 DO =_XVAR_99 ; ::16:: IF XVAR_99 > ZT_0:00 UND XVAR_13 > ZT_0:00 FUNC XVAR_99 MIN XVAR_13 DO -_XVAR_99 -_PZA_13 +_PZA_6 ; ::17:: IF XVAR_99 > ZT_0:00 UND XVAR_14 > ZT_0:00 FUNC XVAR_99 MIN XVAR_14 DO -_XVAR_99 -_PZA_14 +_PZA_6 ; ::18:: IF VAR_AK-ZUSN1 != NW_0 FUNC XVAR_99 DO -_PZA_9 ; ::19:: // Änderung am 5.2.2018: +_ZA_13 auf +_PZA_13 -> da sonst die Durchschnittsberechnung nicht stimmt IF FUNC MS_6 K XVAR_100 DO -_PZA_6 +_PZA_13 ; ::20:: IF FUNC RETURN_ DO ; */