COOPENOMICS  v1
Кооперативная Экономика
debts.hpp
См. документацию.
1#pragma once
2
3
4#include "../../../lib/core/ram_payer.hpp"
5#include <eosio/eosio.hpp>
6#include <eosio/asset.hpp>
7
8using namespace eosio;
9using std::string;
10
11namespace Capital::Debts {
12
19namespace Status {
20 constexpr name CREATED = "created"_n;
21 constexpr name APPROVED = "approved"_n;
22 constexpr name AUTHORIZED = "authorized"_n;
23 constexpr name PAID = "paid"_n;
24}
25
34struct [[eosio::table, eosio::contract(CAPITAL)]] debt {
35 uint64_t id;
36 eosio::name coopname;
37 eosio::name username;
38 eosio::name status = Status::CREATED;
39 checksum256 debt_hash;
40 checksum256 project_hash;
41 time_point_sec repaid_at;
42 asset amount;
46 std::string memo;
47
48 uint64_t primary_key() const { return id; }
49
50 uint64_t by_username() const { return username.value; }
51 checksum256 by_debt_hash() const { return debt_hash; }
52 checksum256 by_project_hash() const { return project_hash; }
53};
54
55typedef eosio::multi_index<
56 "debts"_n,
57 debt,
58 indexed_by<"byusername"_n, const_mem_fun<debt, uint64_t, &debt::by_username>>,
59 indexed_by<"bydebthash"_n, const_mem_fun<debt, checksum256, &debt::by_debt_hash>>,
60 indexed_by<"byprojhash"_n, const_mem_fun<debt, checksum256, &debt::by_project_hash>>
62
66inline std::optional<debt> get_debt(eosio::name coopname, const checksum256 &debt_hash) {
67 debts_index debts(_capital, coopname.value);
68 auto hash_index = debts.get_index<"bydebthash"_n>();
69
70 auto itr = hash_index.find(debt_hash);
71 if (itr == hash_index.end()) {
72 return std::nullopt;
73 }
74
75 return debt(*itr);
76}
77
81inline debt get_debt_or_fail(eosio::name coopname, const checksum256 &debt_hash, const char* msg = "Долг не найден") {
82 auto maybe_debt = get_debt(coopname, debt_hash);
83 eosio::check(maybe_debt.has_value(), msg);
84 return maybe_debt.value();
85}
86
90inline void create_debt(
91 eosio::name coopname,
92 eosio::name username,
93 const checksum256 &project_hash,
94 const checksum256 &debt_hash,
95 const asset &amount,
96 const time_point_sec &repaid_at,
97 const document2 &statement,
98 eosio::name payer = name{}
99) {
100 if (payer == name{}) payer = coopname;
101
102 debts_index debts(_capital, coopname.value);
103 auto debt_id = get_global_id_in_scope(_capital, coopname, "debts"_n);
104
105 debts.emplace(RamPayer::of(debts, coopname), [&](auto &d){
106 d.id = debt_id;
107 d.coopname = coopname;
108 d.username = username;
109 d.status = Status::CREATED;
110 d.debt_hash = debt_hash;
111 d.project_hash = project_hash;
112 d.amount = amount;
113 d.statement = statement;
114 d.repaid_at = repaid_at;
115 });
116}
117
122 eosio::name coopname,
123 uint64_t debt_id,
124 eosio::name new_status,
125 eosio::name payer = name{},
126 const document2 &document = document2{},
127 const std::string &memo = ""
128) {
129 if (payer == name{}) payer = coopname;
130
131 debts_index debts(_capital, coopname.value);
132 auto debt = debts.find(debt_id);
133 eosio::check(debt != debts.end(), "Долг не найден");
134
135 debts.modify(debt, RamPayer::of(debts, coopname), [&](auto &d) {
136 d.status = new_status;
137
138 if (new_status == Status::APPROVED) {
139 d.approved_statement = document;
140 } else if (new_status == Status::AUTHORIZED) {
141 d.authorization = document;
142 }
143
144 if (!memo.empty()) {
145 d.memo = memo;
146 }
147 });
148}
149
153inline void delete_debt(eosio::name coopname, uint64_t debt_id) {
154 debts_index debts(_capital, coopname.value);
155 auto debt = debts.find(debt_id);
156
157 eosio::check(debt != debts.end(), "Долг не найден");
158
159 debts.erase(debt);
160}
161
166 eosio::name coopname,
167 eosio::name username,
168 const checksum256 &debt_hash,
169 const document2 &statement
170) {
172 _capital,
173 coopname,
174 username,
175 statement,
177 debt_hash,
178 _capital,
179 "approvedebt"_n,
180 "declinedebt"_n,
181 std::string("")
182 );
183}
184
189 eosio::name coopname,
190 eosio::name username,
191 const checksum256 &debt_hash,
192 const document2 &statement
193) {
195 _capital,
196 coopname,
197 username,
199 debt_hash,
200 _capital,
203 statement,
204 std::string("")
205 );
206}
207
208
209
210
211} // namespace Capital::Debts
212
213// Плательщик за оперативную память строк таблицы — правило в lib/core/ram_payer.hpp.
static constexpr eosio::name _capital
Definition: consts.hpp:171
RAM_PAYER_CLASS(Capital::Debts::debt, cooperative)
contract
Definition: eosio.msig_tests.cpp:977
share_type amount
Definition: eosio.token_tests.cpp:174
constexpr name PAID
Долг выплачен (готов к использованию)
Definition: debts.hpp:23
constexpr name AUTHORIZED
Долг авторизован советом
Definition: debts.hpp:22
constexpr name APPROVED
Долг одобрен
Definition: debts.hpp:21
constexpr name CREATED
Долг создан
Definition: debts.hpp:20
Definition: debts.hpp:11
void create_debt_agenda(eosio::name coopname, eosio::name username, const checksum256 &debt_hash, const document2 &statement)
Создает агенду в совете для долга
Definition: debts.hpp:188
std::optional< debt > get_debt(eosio::name coopname, const checksum256 &debt_hash)
Получает долг по хэшу
Definition: debts.hpp:66
void update_debt_status(eosio::name coopname, uint64_t debt_id, eosio::name new_status, eosio::name payer=name{}, const document2 &document=document2{}, const std::string &memo="")
Обновляет статус долга
Definition: debts.hpp:121
void create_debt(eosio::name coopname, eosio::name username, const checksum256 &project_hash, const checksum256 &debt_hash, const asset &amount, const time_point_sec &repaid_at, const document2 &statement, eosio::name payer=name{})
Создает долг в таблице
Definition: debts.hpp:90
debt get_debt_or_fail(eosio::name coopname, const checksum256 &debt_hash, const char *msg="Долг не найден")
Получает долг по хэшу или падает с ошибкой
Definition: debts.hpp:81
eosio::multi_index< "debts"_n, debt, indexed_by<"byusername"_n, const_mem_fun< debt, uint64_t, &debt::by_username > >, indexed_by<"bydebthash"_n, const_mem_fun< debt, checksum256, &debt::by_debt_hash > >, indexed_by<"byprojhash"_n, const_mem_fun< debt, checksum256, &debt::by_project_hash > > > debts_index
Definition: debts.hpp:61
void delete_debt(eosio::name coopname, uint64_t debt_id)
Удаляет долг
Definition: debts.hpp:153
void create_debt_approval(eosio::name coopname, eosio::name username, const checksum256 &debt_hash, const document2 &statement)
Создает аппрув для долга
Definition: debts.hpp:165
constexpr eosio::name CREATE_DEBT
Definition: names.hpp:130
constexpr eosio::name AUTHORIZE_DEBT
Definition: names.hpp:59
constexpr eosio::name DECLINE_DEBT
Definition: names.hpp:61
constexpr eosio::name CREATE_DEBT
Definition: names.hpp:109
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
Таблица долгов хранит данные о ссудах участников проектов.
Definition: debts.hpp:34
uint64_t primary_key() const
Первичный ключ (1)
Definition: debts.hpp:48
uint64_t by_username() const
Индекс по имени пользователя (2)
Definition: debts.hpp:50
eosio::name username
Имя пользователя
Definition: debts.hpp:37
asset amount
Сумма долга
Definition: debts.hpp:42
time_point_sec repaid_at
Дата погашения долга
Definition: debts.hpp:41
checksum256 project_hash
Хэш проекта
Definition: debts.hpp:40
checksum256 by_project_hash() const
Индекс по хэшу проекта (4)
Definition: debts.hpp:52
uint64_t id
ID долга (внутренний ключ)
Definition: debts.hpp:35
document2 statement
Заявление на ссуду
Definition: debts.hpp:43
checksum256 debt_hash
Хэш долга
Definition: debts.hpp:39
document2 approved_statement
Одобренное заявление
Definition: debts.hpp:44
document2 authorization
Авторизация совета
Definition: debts.hpp:45
std::string memo
Примечание
Definition: debts.hpp:46
checksum256 by_debt_hash() const
Индекс по хэшу долга (3)
Definition: debts.hpp:51
eosio::name coopname
Имя кооператива
Definition: debts.hpp:36
Definition: table_registrator_orgs.hpp:17
Definition: table_capital_debts.hpp:14
Definition: document_core.hpp:27
Definition: document_core.hpp:10
eosio::multi_index< "debts"_n, debt, indexed_by<"byusername"_n, const_mem_fun< debt, uint64_t, &debt::by_username > >, indexed_by<"bydebthash"_n, const_mem_fun< debt, checksum256, &debt::by_debt_hash > >, indexed_by<"byprojhash"_n, const_mem_fun< debt, checksum256, &debt::by_project_hash > > > debts_index
Definition: table_capital_debts.hpp:40
uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key)
Definition: table_counts.hpp:62