]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/rpcconfig/tariffs_methods.cpp
Merge branch 'master' into full-month-stats
[stg.git] / projects / stargazer / plugins / configuration / rpcconfig / tariffs_methods.cpp
1 #include "tariffs_methods.h"
2 #include "rpcconfig.h"
3 #include "tariff_helper.h"
4 #include "stg/tariffs.h"
5 #include "stg/users.h"
6 #include "stg/admins.h"
7 #include "stg/admin.h"
8
9 void METHOD_TARIFF_GET::execute(xmlrpc_c::paramList const & paramList,
10                                 xmlrpc_c::value *   const   retvalPtr)
11 {
12 std::string cookie = paramList.getString(0);
13 std::string name = paramList.getString(1);
14 paramList.verifyEnd(2);
15
16 std::map<std::string, xmlrpc_c::value> structVal;
17 ADMIN_INFO adminInfo;
18
19 if (config->GetAdminInfo(cookie, &adminInfo))
20     {
21     structVal["result"] = xmlrpc_c::value_boolean(false);
22     *retvalPtr = xmlrpc_c::value_struct(structVal);
23     return;
24     }
25
26 const TARIFF * tariff = tariffs->FindByName(name);
27
28 if (!tariff)
29     {
30     structVal["result"] = xmlrpc_c::value_boolean(false);
31     *retvalPtr = xmlrpc_c::value_struct(structVal);
32     return;
33     }
34
35 TARIFF_DATA td(tariff->GetTariffData());
36
37 TARIFF_HELPER helper(td);
38
39 helper.GetTariffInfo(retvalPtr);
40 }
41
42 void METHOD_TARIFF_CHG::execute(xmlrpc_c::paramList const & paramList,
43                                 xmlrpc_c::value *   const   retvalPtr)
44 {
45 std::string cookie = paramList.getString(0);
46 std::string name = paramList.getString(1);
47 xmlrpc_c::value_struct info(paramList.getStruct(2));
48 paramList.verifyEnd(3);
49
50 ADMIN_INFO adminInfo;
51
52 if (config->GetAdminInfo(cookie, &adminInfo))
53     {
54     *retvalPtr = xmlrpc_c::value_boolean(false);
55     return;
56     }
57
58 ADMIN * admin;
59
60 if (admins->FindAdmin(adminInfo.admin, &admin))
61     {
62     *retvalPtr = xmlrpc_c::value_boolean(false);
63     return;
64     }
65
66 const TARIFF * tariff = tariffs->FindByName(name);
67
68 if (!tariff)
69     {
70     *retvalPtr = xmlrpc_c::value_boolean(false);
71     return;
72     }
73
74 TARIFF_DATA td(tariff->GetTariffData());
75
76 TARIFF_HELPER helper(td);
77
78 helper.SetTariffInfo(info);
79
80 if (tariffs->Chg(td, admin))
81     {
82     *retvalPtr = xmlrpc_c::value_boolean(false);
83     return;
84     }
85
86 *retvalPtr = xmlrpc_c::value_boolean(true);
87 }
88
89 void METHOD_TARIFFS_GET::execute(xmlrpc_c::paramList const & paramList,
90                                  xmlrpc_c::value *   const   retvalPtr)
91 {
92 std::string cookie = paramList.getString(0);
93 paramList.verifyEnd(1);
94
95 std::map<std::string, xmlrpc_c::value> structVal;
96 ADMIN_INFO adminInfo;
97
98 if (config->GetAdminInfo(cookie, &adminInfo))
99     {
100     structVal["result"] = xmlrpc_c::value_boolean(false);
101     *retvalPtr = xmlrpc_c::value_struct(structVal);
102     return;
103     }
104
105 std::vector<xmlrpc_c::value> tariffsInfo;
106
107
108 std::list<TARIFF_DATA> dataList;
109 tariffs->GetTariffsData(&dataList);
110 std::list<TARIFF_DATA>::const_iterator it = dataList.begin();
111 for (; it != dataList.end(); ++it)
112     {
113     xmlrpc_c::value info;
114     TARIFF_DATA td(*it); // 'cause TARIFF_HELPER work in both ways and take not const referense
115     TARIFF_HELPER helper(td);
116     helper.GetTariffInfo(&info);
117     tariffsInfo.push_back(info);
118     }
119
120 *retvalPtr = xmlrpc_c::value_array(tariffsInfo);
121 }
122
123 void METHOD_TARIFF_ADD::execute(xmlrpc_c::paramList const & paramList,
124                                 xmlrpc_c::value *   const   retvalPtr)
125 {
126 std::string cookie = paramList.getString(0);
127 std::string tariff = paramList.getString(1);
128 std::string enc;
129 paramList.verifyEnd(2);
130
131 ADMIN_INFO adminInfo;
132
133 if (config->GetAdminInfo(cookie, &adminInfo))
134     {
135     *retvalPtr = xmlrpc_c::value_boolean(false);
136     return;
137     }
138
139 ADMIN * admin;
140
141 if (admins->FindAdmin(adminInfo.admin, &admin))
142     {
143     *retvalPtr = xmlrpc_c::value_boolean(false);
144     return;
145     }
146
147 if (tariffs->Add(tariff, admin))
148     {
149     *retvalPtr = xmlrpc_c::value_boolean(false);
150     return;
151     }
152
153 *retvalPtr = xmlrpc_c::value_boolean(true);
154 }
155
156 void METHOD_TARIFF_DEL::execute(xmlrpc_c::paramList const & paramList,
157                                 xmlrpc_c::value *   const   retvalPtr)
158 {
159 std::string cookie = paramList.getString(0);
160 std::string tariff = paramList.getString(1);
161 paramList.verifyEnd(2);
162
163 ADMIN_INFO adminInfo;
164
165 if (config->GetAdminInfo(cookie, &adminInfo))
166     {
167     *retvalPtr = xmlrpc_c::value_boolean(false);
168     return;
169     }
170
171 ADMIN * admin;
172
173 if (admins->FindAdmin(adminInfo.admin, &admin))
174     {
175     *retvalPtr = xmlrpc_c::value_boolean(false);
176     return;
177     }
178
179 if (users->TariffInUse(tariff))
180     {
181     *retvalPtr = xmlrpc_c::value_boolean(false);
182     return;
183     }
184
185 if (tariffs->Del(tariff, admin))
186     {
187     *retvalPtr = xmlrpc_c::value_boolean(false);
188     return;
189     }
190
191 *retvalPtr = xmlrpc_c::value_boolean(true);
192 }