From 477aa660aac26aeb8dfede1e439f023dbaba41c9 Mon Sep 17 00:00:00 2001 From: Maxim Mamontov Date: Sat, 18 Oct 2014 23:08:01 +0300 Subject: [PATCH] Implemented charges for services. --- projects/stargazer/user_impl.cpp | 78 +++++++++++++++++++++++++++++++- projects/stargazer/user_impl.h | 9 +++- 2 files changed, 83 insertions(+), 4 deletions(-) diff --git a/projects/stargazer/user_impl.cpp b/projects/stargazer/user_impl.cpp index e832c669..51f49ff1 100644 --- a/projects/stargazer/user_impl.cpp +++ b/projects/stargazer/user_impl.cpp @@ -77,7 +77,8 @@ USER_IMPL::USER_IMPL(const SETTINGS * s, const STORE * st, const TARIFFS * t, const ADMIN * a, - const USERS * u) + const USERS * u, + const SERVICES & svcs) : users(u), property(s->GetScriptsDir()), WriteServLog(GetStgLogger()), @@ -93,6 +94,7 @@ USER_IMPL::USER_IMPL(const SETTINGS * s, store(st), tariffs(t), tariff(NULL), + m_services(svcs), settings(s), authorizedModificationTime(0), deleted(false), @@ -145,7 +147,8 @@ USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s, const STORE * st, const TARIFFS * t, const ADMIN * a, - const USERS * u) + const USERS * u, + const SERVICES & svcs) : users(u), property(s->GetScriptsDir()), WriteServLog(GetStgLogger()), @@ -161,6 +164,7 @@ USER_IMPL::USER_IMPL(const SETTINGS_IMPL * s, store(st), tariffs(t), tariff(NULL), + m_services(svcs), settings(s), authorizedModificationTime(0), deleted(false), @@ -249,6 +253,7 @@ USER_IMPL::USER_IMPL(const USER_IMPL & u) store(u.store), tariffs(u.tariffs), tariff(u.tariff), + m_services(u.m_services), traffStat(u.traffStat), traffStatSaved(u.traffStatSaved), settings(u.settings), @@ -1321,6 +1326,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) diff --git a/projects/stargazer/user_impl.h b/projects/stargazer/user_impl.h index 30b6aa78..75f02a0e 100644 --- a/projects/stargazer/user_impl.h +++ b/projects/stargazer/user_impl.h @@ -125,13 +125,15 @@ public: const STORE * store, const TARIFFS * tariffs, const ADMIN * sysAdmin, - const USERS * u); + const USERS * u, + const SERVICES & svcs); #else USER_IMPL(const SETTINGS_IMPL * settings, const STORE * store, const TARIFFS * tariffs, const ADMIN * sysAdmin, - const USERS * u); + const USERS * u, + const SERVICES & svcs); #endif USER_IMPL(const USER_IMPL & u); virtual ~USER_IMPL(); @@ -217,6 +219,7 @@ public: void ProcessDayFeeSpread(); void ProcessNewMonth(); void ProcessDailyFee(); + void ProcessServices(); bool IsInetable(); std::string GetEnabledDirs() const; @@ -269,6 +272,8 @@ private: const TARIFFS * tariffs; const TARIFF * tariff; + const SERVICES & m_services; + TRAFF_STAT traffStat; std::pair traffStatSaved; -- 2.43.2