COOPENOMICS  v1
Кооперативная Экономика
results.hpp
См. документацию.
1#pragma once
2
3
4#include "../../../lib/core/ram_payer.hpp"
5using namespace eosio;
6using std::string;
7
8namespace Capital::Results {
15 namespace Status {
16 const eosio::name CREATED = "created"_n;
17 const eosio::name APPROVED = "approved"_n;
18 const eosio::name AUTHORIZED = "authorized"_n;
19 const eosio::name ACT1 = "act1"_n;
20 const eosio::name ACT2 = "act2"_n;
21 const eosio::name DECLINED = "declined"_n;
22 }
23}
24
25namespace Capital {
26
35 struct [[eosio::table, eosio::contract(CAPITAL)]] result {
36 uint64_t id;
37 checksum256 project_hash;
38 checksum256 result_hash;
39
40 eosio::name coopname;
41 eosio::name username;
42
43 eosio::name status = Capital::Results::Status::CREATED;
44 time_point_sec created_at = current_time_point();
45
46 eosio::asset debt_amount = asset(0, _root_govern_symbol);
47 eosio::asset total_amount = asset(0, _root_govern_symbol);
48
52
53 uint64_t primary_key() const { return id; }
54 uint64_t by_username() const { return username.value; }
55 checksum256 by_hash() const { return result_hash; }
56 checksum256 by_project_hash() const { return project_hash; }
57
58 uint128_t by_project_user() const {
59 return combine_checksum_ids(project_hash, username);
60 }
61 };
62
63typedef eosio::multi_index<"results"_n, result,
64 indexed_by<"byusername"_n, const_mem_fun<result, uint64_t, &result::by_username>>,
65 indexed_by<"byhash"_n, const_mem_fun<result, checksum256, &result::by_hash>>,
66 indexed_by<"byprojecthash"_n, const_mem_fun<result, checksum256, &result::by_project_hash>>,
67 indexed_by<"byprojuser"_n, const_mem_fun<result, uint128_t, &result::by_project_user>>
69
70
71namespace Results {
72
73inline std::optional<result> get_result(eosio::name coopname, const checksum256 &result_hash) {
74 result_index results(_capital, coopname.value);
75 auto idx = results.get_index<"byhash"_n>();
76
77 auto it = idx.find(result_hash);
78 if (it == idx.end()) {
79 return std::nullopt;
80 }
81 return result(*it);
82}
83
84inline std::optional<result> get_result_by_project_and_username(eosio::name coopname, const checksum256 &project_hash, eosio::name username) {
85 result_index results(_capital, coopname.value);
86 auto idx = results.get_index<"byprojuser"_n>();
87 auto rkey = combine_checksum_ids(project_hash, username);
88
89 auto it = idx.find(rkey);
90 if (it == idx.end()) {
91 return std::nullopt;
92 }
93 return result(*it);
94}
95
96inline result get_result_by_project_and_username_or_fail(eosio::name coopname, const checksum256 &project_hash, eosio::name username, const char* msg) {
97 auto c = get_result_by_project_and_username(coopname, project_hash, username);
98 eosio::check(c.has_value(), msg);
99 return c.value();
100}
101
105inline void create_result_for_participant(eosio::name coopname, const checksum256 &project_hash,
106 eosio::name username, const checksum256 &result_hash,
107 eosio::asset segment_cost, eosio::asset debt_amount, const document2 &statement) {
108 result_index results(_capital, coopname.value);
109
110 results.emplace(RamPayer::of(results, coopname), [&](auto &r) {
111 r.id = get_global_id_in_scope(_capital, coopname, "results"_n);
112 r.project_hash = project_hash;
113 r.result_hash = result_hash;
114 r.coopname = coopname;
115 r.username = username;
117 r.total_amount = segment_cost;
118 r.debt_amount = debt_amount;
119 r.statement = statement;
120 r.created_at = current_time_point();
121 });
122}
123
124
128inline void delete_result(eosio::name coopname, uint64_t result_id) {
129 result_index results(_capital, coopname.value);
130 auto result = results.find(result_id);
131 eosio::check(result != results.end(), "Объект результата не найден");
132
133 results.erase(result);
134}
135
139inline void update_result_status(eosio::name coopname, uint64_t result_id, eosio::name new_status) {
140 result_index results(_capital, coopname.value);
141 auto result = results.find(result_id);
142 eosio::check(result != results.end(), "Объект результата не найден");
143
144 results.modify(result, RamPayer::of(results, coopname), [&](auto &r){
145 r.status = new_status;
146 });
147}
148
152inline void set_result_authorization(eosio::name coopname, uint64_t result_id, const document2 &authorization) {
153 result_index results(_capital, coopname.value);
154 auto result = results.find(result_id);
155 eosio::check(result != results.end(), "Объект результата не найден");
156
157 results.modify(result, RamPayer::of(results, coopname), [&](auto &r){
158 r.authorization = authorization;
159 });
160}
161
165inline void set_result_approved_statement(eosio::name coopname, uint64_t result_id, const document2 &approved_statement) {
166 result_index results(_capital, coopname.value);
167 auto result = results.find(result_id);
168 eosio::check(result != results.end(), "Объект результата не найден");
169
170 results.modify(result, RamPayer::of(results, coopname), [&](auto &r){
171 r.statement = approved_statement;
172 });
173}
174
178inline void set_result_act1(eosio::name coopname, uint64_t result_id, const document2 &act) {
179 result_index results(_capital, coopname.value);
180 auto result = results.find(result_id);
181 eosio::check(result != results.end(), "Объект результата не найден");
182
183 results.modify(result, RamPayer::of(results, coopname), [&](auto &r){
184 r.act = act;
185 });
186}
187
191inline void set_result_act2(eosio::name coopname, uint64_t result_id, const document2 &act) {
192 result_index results(_capital, coopname.value);
193 auto result = results.find(result_id);
194 eosio::check(result != results.end(), "Объект результата не найден");
195
196 results.modify(result, RamPayer::of(results, coopname), [&](auto &r){
197 r.act = act;
198 });
199}
200
204inline void send_result_to_soviet(eosio::name coopname, eosio::name username, const checksum256 &result_hash, const document2 &approved_statement) {
206 _capital,
207 coopname,
208 username,
210 result_hash,
211 _capital,
214 approved_statement,
215 std::string("")
216 );
217}
218
222inline void send_result_for_approval(eosio::name coopname, eosio::name username, const checksum256 &result_hash, const document2 &statement) {
224 _capital,
225 coopname,
226 username,
227 statement,
229 result_hash,
230 _capital,
233 std::string("")
234 );
235}
236
237} // namespace Results
238
239} // namespace Capital
240
241// Плательщик за оперативную память строк таблицы — правило в lib/core/ram_payer.hpp.
static constexpr eosio::name _capital
Definition: consts.hpp:171
static constexpr eosio::symbol _root_govern_symbol
Definition: consts.hpp:236
contract
Definition: eosio.msig_tests.cpp:977
action act
Definition: eosio.msig_tests.cpp:974
const eosio::name ACT2
Акт приёма подписан
Definition: results.hpp:20
const eosio::name ACT1
Акт передачи подписан
Definition: results.hpp:19
const eosio::name CREATED
Заявление подано
Definition: results.hpp:16
const eosio::name AUTHORIZED
Авторизовано советом
Definition: results.hpp:18
const eosio::name APPROVED
Одобрено председателем
Definition: results.hpp:17
const eosio::name DECLINED
Отклонено советом
Definition: results.hpp:21
Definition: results.hpp:8
result get_result_by_project_and_username_or_fail(eosio::name coopname, const checksum256 &project_hash, eosio::name username, const char *msg)
Definition: results.hpp:96
std::optional< result > get_result(eosio::name coopname, const checksum256 &result_hash)
Definition: results.hpp:73
void send_result_for_approval(eosio::name coopname, eosio::name username, const checksum256 &result_hash, const document2 &statement)
Отправляет результат на одобрение председателем
Definition: results.hpp:222
void set_result_act1(eosio::name coopname, uint64_t result_id, const document2 &act)
Устанавливает первый акт результата
Definition: results.hpp:178
std::optional< result > get_result_by_project_and_username(eosio::name coopname, const checksum256 &project_hash, eosio::name username)
Definition: results.hpp:84
void send_result_to_soviet(eosio::name coopname, eosio::name username, const checksum256 &result_hash, const document2 &approved_statement)
Отправляет результат на рассмотрение в совет
Definition: results.hpp:204
void set_result_approved_statement(eosio::name coopname, uint64_t result_id, const document2 &approved_statement)
Устанавливает одобренное заявление результата
Definition: results.hpp:165
void create_result_for_participant(eosio::name coopname, const checksum256 &project_hash, eosio::name username, const checksum256 &result_hash, eosio::asset segment_cost, eosio::asset debt_amount, const document2 &statement)
Создает результат для конкретного участника
Definition: results.hpp:105
void set_result_authorization(eosio::name coopname, uint64_t result_id, const document2 &authorization)
Устанавливает документ авторизации результата
Definition: results.hpp:152
void delete_result(eosio::name coopname, uint64_t result_id)
Удаляет объект результата
Definition: results.hpp:128
void update_result_status(eosio::name coopname, uint64_t result_id, eosio::name new_status)
Обновляет статус результата
Definition: results.hpp:139
void set_result_act2(eosio::name coopname, uint64_t result_id, const document2 &act)
Устанавливает второй акт результата
Definition: results.hpp:191
Definition: balances.cpp:6
eosio::multi_index<"results"_n, result, indexed_by<"byusername"_n, const_mem_fun< result, uint64_t, &result::by_username > >, indexed_by<"byhash"_n, const_mem_fun< result, checksum256, &result::by_hash > >, indexed_by<"byprojecthash"_n, const_mem_fun< result, checksum256, &result::by_project_hash > >, indexed_by<"byprojuser"_n, const_mem_fun< result, uint128_t, &result::by_project_user > > > result_index
Definition: results.hpp:68
constexpr eosio::name AUTHORIZE_RESULT
Definition: names.hpp:64
constexpr eosio::name DECLINE_RESULT
Definition: names.hpp:65
constexpr eosio::name CREATE_RESULT
Definition: names.hpp:142
constexpr eosio::name APPROVE_RESULT
Definition: names.hpp:66
constexpr eosio::name CREATE_RESULT
Definition: names.hpp:108
eosio::name of(const Table &table, eosio::name coopname)
Definition: ram_payer.hpp:78
void create_agenda(name calling_contract, CREATEAGENDA_SIGNATURE)
Definition: soviet.hpp:60
void create_approval(name calling_contract, CREATEAPPRV_SIGNATURE)
Definition: soviet.hpp:66
Definition: eosio.msig.hpp:34
RAM_PAYER_CLASS(Capital::result, cooperative)
Таблица результатов хранит данные о результатах участников проектов.
Definition: results.hpp:35
eosio::name username
Имя пользователя
Definition: results.hpp:41
uint64_t primary_key() const
Первичный ключ (1)
Definition: results.hpp:53
checksum256 by_project_hash() const
Индекс по хэшу проекта (4)
Definition: results.hpp:56
document2 authorization
Решение совета
Definition: results.hpp:50
uint128_t by_project_user() const
Definition: results.hpp:58
document2 act
Акт
Definition: results.hpp:51
uint64_t id
ID результата (внутренний ключ)
Definition: results.hpp:36
eosio::name coopname
Имя кооператива
Definition: results.hpp:40
checksum256 result_hash
Хэш результата
Definition: results.hpp:38
uint64_t by_username() const
Индекс по имени пользователя (2)
Definition: results.hpp:54
checksum256 project_hash
Хэш проекта
Definition: results.hpp:37
document2 statement
Заявление
Definition: results.hpp:49
checksum256 by_hash() const
Индекс по хэшу результата (3)
Definition: results.hpp:55
Definition: table_registrator_orgs.hpp:17
Definition: document_core.hpp:27
uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key)
Definition: table_counts.hpp:62
static uint128_t combine_checksum_ids(const checksum256 &hash, eosio::name username)
Definition: utils.hpp:11