]> git.stg.codes - stg.git/commitdiff
Merge branch 'stg-2.409'
authorMaxim Mamontov <faust.madf@gmail.com>
Sat, 20 Aug 2016 10:25:24 +0000 (13:25 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Sat, 20 Aug 2016 10:25:24 +0000 (13:25 +0300)
1  2 
projects/stargazer/user_impl.cpp

index 11f4385b505a853f2bb75a4f34dd62679b4a95a3,d7bc8ea254bd37a6308b6f26a897d1a5a9259193..fe197cc5f9bec5c29d4d175ba21f08856b51e7d8
@@@ -1328,75 -1328,6 +1328,75 @@@ switch (settings->GetFeeChargeType()
  ResetPassiveTime();
  }
  //-----------------------------------------------------------------------------
 +void USER_IMPL::ProcessServices()
 +{
 +struct tm tms;
 +time_t t = stgTime;
 +localtime_r(&t, &tms);
 +
 +double passiveTimePart = 1.0;
 +if (!settings->GetFullFee())
 +    {
 +    passiveTimePart = GetPassiveTimePart();
 +    }
 +else
 +    {
 +    if (passive.ConstData())
 +        {
 +        printfd(__FILE__, "Don't charge fee `cause we are passive\n");
 +        return;
 +        }
 +    }
 +
 +for (size_t i = 0; i < property.Conf().services.size(); ++i)
 +    {
 +    SERVICE_CONF conf;
 +    if (m_services.Find(property.Conf().services[i], &conf))
 +        continue;
 +    if (conf.payDay == tms.tm_mday ||
 +        (conf.payDay == 0 && tms.tm_mday == DaysInCurrentMonth()))
 +        {
 +        double c = cash;
 +        double fee = conf.cost * passiveTimePart;
 +        printfd(__FILE__, "Service fee. login: %8s Cash=%f Credit=%f  Fee=%f PassiveTimePart=%f fee=%f\n",
 +                login.c_str(),
 +                cash.ConstData(),
 +                credit.ConstData(),
 +                tariff->GetFee(),
 +                passiveTimePart,
 +                fee);
 +        switch (settings->GetFeeChargeType())
 +            {
 +            case 0:
 +                property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
 +                SetPrepaidTraff();
 +                break;
 +            case 1:
 +                if (c + credit >= 0)
 +                    {
 +                    property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
 +                    SetPrepaidTraff();
 +                    }
 +                break;
 +            case 2:
 +                if (c + credit >= fee)
 +                    {
 +                    property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
 +                    SetPrepaidTraff();
 +                    }
 +                break;
 +            case 3:
 +                if (c >= 0)
 +                    {
 +                    property.cash.Set(c - fee, sysAdmin, login, store, "Subscriber fee charge");
 +                    SetPrepaidTraff();
 +                    }
 +                break;
 +            }
 +        }
 +    }
 +}
 +//-----------------------------------------------------------------------------
  void USER_IMPL::SetPrepaidTraff()
  {
  if (tariff != NULL)
@@@ -1563,13 -1494,18 +1563,18 @@@ else if (!oldValue && newValue && user-
  //-----------------------------------------------------------------------------
  void CHG_TARIFF_NOTIFIER::Notify(const std::string &, const std::string & newTariff)
  {
+ STG_LOCKER lock(&user->mutex);
  if (user->settings->GetReconnectOnTariffChange() && user->connected)
      user->Disconnect(false, "Change tariff");
  user->tariff = user->tariffs->FindByName(newTariff);
  if (user->settings->GetReconnectOnTariffChange() &&
      !user->authorizedBy.empty() &&
      user->IsInetable())
+     {
+     // This notifier gets called *before* changing the tariff, and in Connect we want to see new tariff name.
+     user->property.Conf().tariffName = newTariff;
      user->Connect(false);
+     }
  }
  //-----------------------------------------------------------------------------
  void CHG_CASH_NOTIFIER::Notify(const double & oldCash, const double & newCash)