]> git.stg.codes - stg.git/commitdiff
Fee charge rule selector added with 3 different charge rules
authorMaxim Mamontov <faust@gts.dp.ua>
Thu, 26 May 2011 11:53:50 +0000 (14:53 +0300)
committerMaxim Mamontov <faust@gts.dp.ua>
Thu, 26 May 2011 11:53:50 +0000 (14:53 +0300)
projects/stargazer/inst/freebsd/etc/stargazer/stargazer.conf
projects/stargazer/inst/linux/etc/stargazer/stargazer.conf
projects/stargazer/settings_impl.cpp
projects/stargazer/settings_impl.h
projects/stargazer/user_impl.cpp

index 004ced0e44e62950825db0ceaf423524b6c20601..55efa6ac4a7f0b0ad28fb1fbf029d5017f0b2ca4 100644 (file)
@@ -156,6 +156,15 @@ ModulesPath = /usr/lib/stg
 # Default: 0 (day)
 # MessagesTimeout = 0
 
+# Defines fee charging rules.
+# 0 - classic rules, allow fee charge even cash is negative;
+# 1 - disallow fee charge if cash value is negative;
+# 2 - disallow fee charge if there is not enought cash (cash < fee).
+# Parameter: optional
+# Value: 0 - 2
+# Default: 0 (classic)
+# FeeChargeType = 0
+
 ################################################################################
 # Store module
 # Configure the module that works with the database server
index 004ced0e44e62950825db0ceaf423524b6c20601..55efa6ac4a7f0b0ad28fb1fbf029d5017f0b2ca4 100644 (file)
@@ -156,6 +156,15 @@ ModulesPath = /usr/lib/stg
 # Default: 0 (day)
 # MessagesTimeout = 0
 
+# Defines fee charging rules.
+# 0 - classic rules, allow fee charge even cash is negative;
+# 1 - disallow fee charge if cash value is negative;
+# 2 - disallow fee charge if there is not enought cash (cash < fee).
+# Parameter: optional
+# Value: 0 - 2
+# Default: 0 (classic)
+# FeeChargeType = 0
+
 ################################################################################
 # Store module
 # Configure the module that works with the database server
index d5fb2dad0b6366369ddcf672ab6696b20386fcb2..33b3e840c2ac7437de49bbe81b048848d2fdc768 100644 (file)
@@ -63,6 +63,7 @@ SETTINGS_IMPL::SETTINGS_IMPL()
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
+      feeChargeType(0),
       modulesSettings(),
       storeModuleSettings(),
       logger(GetStgLogger())
@@ -93,6 +94,7 @@ SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
       writeFreeMbTraffCost(false),
       showFeeInCash(true),
       messageTimeout(0),
+      feeChargeType(0),
       modulesSettings(),
       storeModuleSettings(),
       logger(GetStgLogger())
@@ -123,6 +125,7 @@ SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
       writeFreeMbTraffCost(rval.writeFreeMbTraffCost),
       showFeeInCash(rval.showFeeInCash),
       messageTimeout(rval.messageTimeout),
+      feeChargeType(rval.feeChargeType),
       modulesSettings(rval.modulesSettings),
       storeModuleSettings(rval.storeModuleSettings),
       logger(GetStgLogger())
@@ -429,6 +432,15 @@ while (node)
             }
         }
 
+    if (strcasecmp(node->getName(), "FeeChargeType") == 0)
+        {
+        if (ParseUnsignedInRange(node->getValue(0), 0, 2, &feeChargeType) != 0)
+            {
+            strError = "Incorrect FeeChargeType value: \'" + string(node->getValue(0)) + "\'";
+            return -1;
+            }
+        }
+
     if (strcasecmp(node->getName(), "DirNames") == 0)
         {
         const DOTCONFDocumentNode * child = node->getChildNode();
index c7829b274be1f35912f897b5012bca0e0dd07a90..97990d3243170d38cc974e7ade52ee3632e6a3bd 100644 (file)
@@ -90,6 +90,7 @@ public:
     const std::string & GetMonitorDir() const { return monitorDir; }
     bool                GetMonitoring() const { return monitoring; }
     unsigned            GetMessageTimeout() const { return messageTimeout * 3600 * 24; }
+    unsigned            GetFeeChargeType() const { return feeChargeType; }
 
     const std::string & GetModulesPath() const { return modulesPath; }
     const MODULE_SETTINGS & GetStoreModuleSettings() const
@@ -135,6 +136,7 @@ private:
     bool        writeFreeMbTraffCost;
     bool        showFeeInCash;
     unsigned    messageTimeout;
+    unsigned    feeChargeType;
 
     std::vector<MODULE_SETTINGS> modulesSettings;
     MODULE_SETTINGS storeModuleSettings;
index 34c922b2a8aaf8b318f1629d23e64081001f54e2..5abbeef703bab23b30d99cf1bd117eedfd6e00f1 100644 (file)
@@ -1120,13 +1120,26 @@ STG_LOCKER lock(&mutex, __FILE__, __LINE__);
 if (passive.ConstData())
     return;
 
-double f = tariff->GetFee() / DaysInCurrentMonth();
+double fee = tariff->GetFee() / DaysInCurrentMonth();
 
-if (f == 0.0)
+if (fee == 0.0)
     return;
 
 double c = cash;
-property.cash.Set(c - f, sysAdmin, login, store, "Subscriber fee charge");
+switch (settings->GetFeeChargeType())
+    {
+    case 0:
+        property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+        break;
+    case 1:
+        if (c > 0)
+            property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+        break;
+    case 2:
+        if (c > fee)
+            property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+        break;
+    }
 ResetPassiveTime();
 }
 //-----------------------------------------------------------------------------
@@ -1147,11 +1160,11 @@ else
         return;
         }
     }
-double f = tariff->GetFee() * passiveTimePart;
+double fee = tariff->GetFee() * passiveTimePart;
 
 ResetPassiveTime();
 
-if (f == 0.0)
+if (fee == 0.0)
     return;
 
 double c = cash;
@@ -1159,8 +1172,21 @@ printfd(__FILE__, "login: %8s   Fee=%f PassiveTimePart=%f fee=%f\n",
         login.c_str(),
         tariff->GetFee(),
         passiveTimePart,
-        f);
-property.cash.Set(c - f, sysAdmin, login, store, "Subscriber fee charge");
+        fee);
+switch (settings->GetFeeChargeType())
+    {
+    case 0:
+        property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+        break;
+    case 1:
+        if (c > 0)
+            property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+        break;
+    case 2:
+        if (c > fee)
+            property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
+        break;
+    }
 }
 //-----------------------------------------------------------------------------
 void USER_IMPL::SetPrepaidTraff()