EN · DE · RU · FR · ES

#1374: CurrencyHelper.kt

projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt Класс Kotlin, projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt 84 строки · 44 кода · 35 комментариев · 5 пустых
Назначение: Исходный файл: projectforge/framework/utils/CurrencyHelper.kt. CurrencyHelper.kt является частью приложения для управления проектами с открытым исходным кодом ProjectForge.

Исходный код (первые 100 строк)

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge распространяется по двойной лицензии.
//
// Данная редакция для сообщества является бесплатным программным обеспечением;
// вы можете распространять её и/или модифицировать в соответствии с условиями
// Стандартной общественной лицензии GNU (GNU General Public License) версии 3,
// опубликованной Фондом свободного программного обеспечения (Free Software Foundation).
//
// Эта редакция распространяется в надежде, что она будет полезной,
// но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий
// КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ.
// Подробнее см. в Стандартной общественной лицензии GNU.
//
// Вы должны были получить копию Стандартной общественной лицензии GNU
// вместе с этой программой; если нет, см. http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.framework.utils

import java.math.BigDecimal
import java.math.RoundingMode

object CurrencyHelper {
    /**
     * @param net Если null, возвращается ноль.
     * @param vat
     * @return Сумма брутто или нетто, если vat равен null или нулю.
     */
    @JvmStatic
    fun getGrossAmount(net: BigDecimal?, vat: BigDecimal?): BigDecimal {
        if (net == null) {
            return BigDecimal.ZERO
        }
        return if (NumberHelper.isZeroOrNull(vat)) {
            net
        } else {
            net.multiply(BigDecimal.ONE.add(vat))
        }
    }

    /**
     * Вычисляет сумму нетто из суммы брутто и ставки НДС.
     * Формула: Нетто = Брутто / (1 + НДС)
     *
     * @param gross Если null, возвращается ноль.
     * @param vat Ставка НДС в виде десятичной дроби (например, 0.19 для 19%)
     * @return Сумма нетто (округлённая до 2 знаков после запятой) или gross, если vat равен null или нулю.
     */
    @JvmStatic
    fun getNetAmount(gross: BigDecimal?, vat: BigDecimal?): BigDecimal {
        if (gross == null) {
            return BigDecimal.ZERO
        }
        return if (NumberHelper.isZeroOrNull(vat)) {
            gross
        } else {
            val divisor = BigDecimal.ONE.add(vat)
            gross.divide(divisor, 2, RoundingMode.HALF_UP)
        }
    }

    @JvmOverloads
    @JvmStatic
    fun multiply(val1: BigDecimal?, val2: BigDecimal?, round: Boolean = false): BigDecimal {
        val ret = if (val1 == null) {
            val2 ?: BigDecimal.ZERO
        } else if (val2 == null) {
            val1
        } else {
            val1.multiply(val2)
        }
        return if (round) {
            ret.setScale(2, RoundingMode.HALF_UP)
        } else {
            ret
        }
    }
}

История Git

868d6abb7 2025 -> 2026
7a88efc65 WIP: Импорт счетов кредиторов
63081666f Заголовки исходных файлов: 2024 -> 2025.
ba2479571 Работа над миграцией в процессе...
b6092df09 Авторские права 2023 -> 2024

868d6abb7

2025 -> 2026
868d6abb75cd191a892911ac8e45058932cf9074
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
index 10a199366..e30c6198c 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge is dual-licensed.
 //

7a88efc65

WIP: Импорт счетов кредиторов
7a88efc65e53c291d88df1f29f6b5b88eec85581
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
index f110c7828..10a199366 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
@@ -44,6 +44,27 @@ object CurrencyHelper {
         }
     }
 
+    /**
+     * Вычисляет сумму нетто из суммы брутто и ставки НДС.
+     * Формула: Нетто = Брутто / (1 + НДС)
+     *
+     * @param gross Если null, возвращается ноль.
+     * @param vat Ставка НДС в виде десятичной дроби (например, 0.19 для 19%)
+     * @return Сумма нетто (округлённая до 2 знаков после запятой) или gross, если vat равен null или нулю.
+     */
+    @JvmStatic
+    fun getNetAmount(gross: BigDecimal?, vat: BigDecimal?): BigDecimal {
+        if (gross == null) {
+            return BigDecimal.ZERO
+        }
+        return if (NumberHelper.isZeroOrNull(vat)) {
+            gross
+        } else {
+            val divisor = BigDecimal.ONE.add(vat)
+            gross.divide(divisor, 2, RoundingMode.HALF_UP)
+        }
+    }
+
     @JvmOverloads
     @JvmStatic
     fun multiply(val1: BigDecimal?, val2: BigDecimal?, round: Boolean = false): BigDecimal {

63081666f

Заголовки исходных файлов: 2024 -> 2025.
63081666f620fb87315f01b817e560e0b2f6a33a
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
index bbc012701..f110c7828 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2024 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge is dual-licensed.
 //

ba2479571

Работа над миграцией в процессе...
ba2479571a8408c62933df2d28125748a7a56383
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
index fe18fa69a..bbc012701 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
@@ -24,6 +24,7 @@
 package org.projectforge.framework.utils
 
 import java.math.BigDecimal
+import java.math.RoundingMode
 
 object CurrencyHelper {
     /**
@@ -43,14 +44,20 @@ object CurrencyHelper {
         }
     }
 
+    @JvmOverloads
     @JvmStatic
-    fun multiply(val1: BigDecimal?, val2: BigDecimal?): BigDecimal {
-        return if (val1 == null) {
+    fun multiply(val1: BigDecimal?, val2: BigDecimal?, round: Boolean = false): BigDecimal {
+        val ret = if (val1 == null) {
             val2 ?: BigDecimal.ZERO
         } else if (val2 == null) {
             val1
         } else {
             val1.multiply(val2)
         }
+        return if (round) {
+            ret.setScale(2, RoundingMode.HALF_UP)
+        } else {
+            ret
+        }
     }
 }

b6092df09

Авторские права 2023 -> 2024
b6092df0927c4a3b161e888445f31dcab57493f2
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
index 8004b052d..fe18fa69a 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/framework/utils/CurrencyHelper.kt
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2023 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2024 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge is dual-licensed.
 //