30 #include "../utils.hpp"
31 #include "rapidjson/include/rapidjson/document.h"
32 #include "rapidjson/include/rapidjson/rapidjson.h"
34 namespace kiteconnect {
37 namespace rj = rapidjson;
38 namespace kc = kiteconnect;
39 namespace utils = kc::internal::utils;
46 GENERATE_FLUENT_METHOD(
50 std::optional<int> quantity;
51 std::optional<double> amount;
53 string transactionType;
54 std::optional<string> tag;
60 GENERATE_FLUENT_METHOD(
63 GENERATE_FLUENT_METHOD(
66 GENERATE_FLUENT_METHOD(
71 std::optional<int> installmentDay;
73 std::optional<double> initialAmount;
76 std::optional<string> tag;
84 void parse(
const rj::Value::Object& val) {
85 orderId = utils::json::get<string>(val,
"order_id");
86 sipId = utils::json::get<string>(val,
"sip_id");
96 GENERATE_FLUENT_METHOD(
101 GENERATE_FLUENT_METHOD(
104 std::optional<int> installmentDay;
105 std::optional<int> installments;
106 std::optional<double> amount;
108 std::optional<string> status;
109 std::optional<string> frequency;
115 explicit mfOrder(
const rj::Value::Object& val) { parse(val); };
117 void parse(
const rj::Value::Object& val) {
118 orderID = utils::json::get<string>(val,
"order_id");
119 exchangeOrderID = utils::json::get<string>(val,
"exchange_order_id");
120 tradingsymbol = utils::json::get<string>(val,
"tradingsymbol");
121 status = utils::json::get<string>(val,
"status");
122 statusMessage = utils::json::get<string>(val,
"status_message");
123 folio = utils::json::get<string>(val,
"folio");
124 fund = utils::json::get<string>(val,
"fund");
125 orderTimestamp = utils::json::get<string>(val,
"order_timestamp");
126 exchangeTimestamp = utils::json::get<string>(val,
"exchange_timestamp");
127 settlementID = utils::json::get<string>(val,
"settlement_id");
128 transactionType = utils::json::get<string>(val,
"transaction_type");
129 variety = utils::json::get<string>(val,
"variety");
130 purchaseType = utils::json::get<string>(val,
"purchase_type");
131 quantity = utils::json::get<double>(val,
"quantity");
132 amount = utils::json::get<double>(val,
"amount");
133 lastPrice = utils::json::get<double>(val,
"last_price");
134 averagePrice = utils::json::get<double>(val,
"average_price");
135 placedBy = utils::json::get<string>(val,
"placed_by");
136 tag = utils::json::get<string>(val,
"tag");
139 double quantity = -1;
141 double lastPrice = -1;
142 double averagePrice = -1;
144 string exchangeOrderID;
145 string tradingsymbol;
147 string statusMessage;
150 string orderTimestamp;
151 string exchangeTimestamp;
153 string transactionType;
164 explicit mfHolding(
const rj::Value::Object& val) { parse(val); };
166 void parse(
const rj::Value::Object& val) {
167 folio = utils::json::get<string>(val,
"folio");
168 fund = utils::json::get<string>(val,
"fund");
169 tradingsymbol = utils::json::get<string>(val,
"tradingsymbol");
170 averagePrice = utils::json::get<double>(val,
"average_price");
171 lastPrice = utils::json::get<double>(val,
"last_price");
172 lastPriceDate = utils::json::get<string>(val,
"last_price_date");
173 Pnl = utils::json::get<double>(val,
"pnl");
174 quantity = utils::json::get<double>(val,
"quantity");
177 double averagePrice = -1;
178 double lastPrice = -1;
180 double quantity = -1;
183 string tradingsymbol;
184 string lastPriceDate;
190 explicit mfSip(
const rj::Value::Object& val) { parse(val); };
192 void parse(
const rj::Value::Object& val) {
193 ID = utils::json::get<string>(val,
"sip_id");
194 tradingsymbol = utils::json::get<string>(val,
"tradingsymbol");
195 fundName = utils::json::get<string>(val,
"fund");
196 dividendType = utils::json::get<string>(val,
"dividend_type");
197 transactionType = utils::json::get<string>(val,
"transaction_type");
198 status = utils::json::get<string>(val,
"status");
199 SIPType = utils::json::get<string>(val,
"sip_type");
200 created = utils::json::get<string>(val,
"created");
201 frequency = utils::json::get<string>(val,
"frequency");
202 instalmentAmount = utils::json::get<double>(val,
"instalment_amount");
203 instalments = utils::json::get<int>(val,
"instalments");
204 lastInstalment = utils::json::get<string>(val,
"last_instalment");
205 pendingInstalments = utils::json::get<int>(val,
"pending_instalments");
206 instalmentDay = utils::json::get<int>(val,
"instalment_day");
207 completedInstalments =
208 utils::json::get<int>(val,
"completed_instalments");
209 nextInstalment = utils::json::get<string>(val,
"next_instalment");
210 triggerPrice = utils::json::get<double>(val,
"trigger_price");
211 tag = utils::json::get<string>(val,
"tag");
214 int pendingInstalments = -1;
215 int instalmentDay = -1;
216 int completedInstalments = -1;
217 int instalments = -1;
218 double instalmentAmount = -1;
219 double triggerPrice = -1;
221 string tradingsymbol;
224 string transactionType;
229 string lastInstalment;
230 string nextInstalment;
237 explicit mfInstrument(
const std::vector<string>& row) { parse(row); };
239 void parse(
const std::vector<string>& tokens) {
240 static const auto toDouble = [](
const string& str) ->
double {
241 return (str.empty()) ? 0.0 : std::stod(str);
244 tradingsymbol = tokens[TRADINGSYMBOL_IDX];
245 amc = tokens[AMC_IDX];
246 name = tokens[NAME_IDX];
248 static_cast<bool>(std::stoi(tokens[PURCHASE_ALLOWED_IDX]));
250 static_cast<bool>(std::stoi(tokens[REDEMPTION_ALLOWED_IDX]));
251 minimumPurchaseAmount = toDouble(tokens[MIN_PURCHASE_AMOUNT_IDX]);
252 purchaseAmountMultiplier = toDouble(tokens[PURCHASE_AMOUNT_MUL_IDX]);
253 minimumAdditionalPurchaseAmount =
254 toDouble(tokens[MIN_ADDITIONAL_PURCHASE_AMOUNT_IDX]);
255 minimumRedemptionQuantity =
256 toDouble(tokens[MIN_REDEMPTION_QUANTITY_IDX]);
257 redemptionQuantityMultiplier =
258 toDouble(tokens[REDEMPTION_QUANTITY_MUL_IDX]);
259 dividendType = tokens[DIVIDEND_TYPE_IDX];
260 schemeType = tokens[SCHEME_TYPE_IDX];
261 plan = tokens[PLAN_IDX];
262 settlementType = tokens[SETTLEMENT_TYPE_IDX];
263 lastPrice = toDouble(tokens[LAST_PRICE_IDX]);
264 lastPriceDate = tokens[LAST_PRICE_DATE_IDX];
267 double minimumPurchaseAmount = -1;
268 double purchaseAmountMultiplier = -1;
269 double minimumAdditionalPurchaseAmount = -1;
270 double minimumRedemptionQuantity = -1;
271 double redemptionQuantityMultiplier = -1;
272 double lastPrice = -1;
273 bool purchaseAllowed =
false;
274 bool redemptionAllowed =
false;
275 string tradingsymbol;
281 string settlementType;
282 string lastPriceDate;
284 static constexpr uint8_t TRADINGSYMBOL_IDX = 0;
285 static constexpr uint8_t AMC_IDX = 1;
286 static constexpr uint8_t NAME_IDX = 2;
287 static constexpr uint8_t PURCHASE_ALLOWED_IDX = 3;
288 static constexpr uint8_t REDEMPTION_ALLOWED_IDX = 4;
289 static constexpr uint8_t MIN_PURCHASE_AMOUNT_IDX = 5;
290 static constexpr uint8_t PURCHASE_AMOUNT_MUL_IDX = 6;
291 static constexpr uint8_t MIN_ADDITIONAL_PURCHASE_AMOUNT_IDX = 7;
292 static constexpr uint8_t MIN_REDEMPTION_QUANTITY_IDX = 8;
293 static constexpr uint8_t REDEMPTION_QUANTITY_MUL_IDX = 9;
294 static constexpr uint8_t DIVIDEND_TYPE_IDX = 10;
295 static constexpr uint8_t SCHEME_TYPE_IDX = 11;
296 static constexpr uint8_t PLAN_IDX = 12;
297 static constexpr uint8_t SETTLEMENT_TYPE_IDX = 13;
298 static constexpr uint8_t LAST_PRICE_IDX = 14;
299 static constexpr uint8_t LAST_PRICE_DATE_IDX = 15;