COOPENOMICS  v1
Кооперативная Экономика
expenses.hpp
См. документацию.
1#pragma once
2
3#include <eosio/eosio.hpp>
4#include <eosio/asset.hpp>
5
6using namespace eosio;
7using std::string;
8
16 namespace Status {
17 const eosio::name CREATED = "created"_n;
18 const eosio::name APPROVED = "approved"_n;
19 const eosio::name AUTHORIZED = "authorized"_n;
20 const eosio::name PAID = "paid"_n;
21 const eosio::name DECLINED = "declined"_n;
22 }
23}
24
25namespace Capital {
26
35 struct [[eosio::table, eosio::contract(CAPITAL)]] expense {
36 uint64_t id;
37 name coopname;
38 name username;
39
41 checksum256 project_hash;
42 checksum256 expense_hash;
43 uint64_t fund_id;
44 eosio::asset amount;
45 std::string description;
46
50
51 time_point_sec spended_at = current_time_point();
52
53 uint64_t primary_key() const { return id; }
54 uint64_t by_username() const { return username.value; }
55 checksum256 by_expense_hash() const { return expense_hash; }
56 checksum256 by_project_hash() const { return project_hash; }
57 };
58
59 typedef eosio::multi_index<
60 "expenses"_n, expense,
61 indexed_by<"byusername"_n, const_mem_fun<expense, uint64_t, &expense::by_username>>,
62 indexed_by<"byhash"_n, const_mem_fun<expense, checksum256, &expense::by_expense_hash>>,
63 indexed_by<"byprojhash"_n, const_mem_fun<expense, checksum256, &expense::by_project_hash>>
65
66
73 inline std::optional<expense> get_expense(eosio::name coopname, const checksum256 &hash) {
74 expense_index expenses(_capital, coopname.value);
75 auto expense_index = expenses.get_index<"byhash"_n>();
76
77 auto itr = expense_index.find(hash);
78 if (itr == expense_index.end()) {
79 return std::nullopt;
80 }
81
82 return *itr;
83}
84
85} // namespace Capital
86
87namespace Capital::Expenses {
88
89
96 inline expense get_expense_or_fail(eosio::name coopname, const checksum256 &expense_hash) {
97 auto expense = Capital::get_expense(coopname, expense_hash);
98 eosio::check(expense.has_value(), "Расход с указанным хэшем не найден");
99 return *expense;
100 }
101
112 inline void create_expense(eosio::name coopname, const checksum256 &project_hash,
113 const checksum256 &expense_hash, eosio::name username,
114 const eosio::asset &amount,
115 const std::string &description, const document2 &statement) {
116
117 Capital::expense_index expenses(_capital, coopname.value);
118 uint64_t expense_id = get_global_id_in_scope(_capital, coopname, "expenses"_n);
119
120 expenses.emplace(coopname, [&](auto &e) {
121 e.id = expense_id;
122 e.coopname = coopname;
123 e.username = username;
124 e.project_hash = project_hash;
125 e.expense_hash = expense_hash;
127 e.status = Expenses::Status::CREATED;
128 e.spended_at = current_time_point();
129 e.expense_statement = statement;
130 e.amount = amount;
131 e.description = description;
132 });
133 }
134
141 inline void update_status(eosio::name coopname, const checksum256 &expense_hash, eosio::name new_status) {
142 auto exist_expense = get_expense_or_fail(coopname, expense_hash);
143
144 Capital::expense_index expenses(_capital, coopname.value);
145 auto expense = expenses.find(exist_expense.id);
146
147 expenses.modify(expense, coopname, [&](auto &e) {
148 e.status = new_status;
149 });
150 }
151
158 inline void set_approved(eosio::name coopname, const checksum256 &expense_hash,
159 const document2 &approved_statement) {
160 auto exist_expense = get_expense_or_fail(coopname, expense_hash);
161
162 Capital::expense_index expenses(_capital, coopname.value);
163 auto expense = expenses.find(exist_expense.id);
164
165 expenses.modify(expense, coopname, [&](auto &e) {
167 e.approved_statement = approved_statement;
168 });
169 }
170
177 inline void set_authorized(eosio::name coopname, const checksum256 &expense_hash,
178 const document2 &authorization) {
179 auto exist_expense = get_expense_or_fail(coopname, expense_hash);
180
181 Capital::expense_index expenses(_capital, coopname.value);
182 auto expense = expenses.find(exist_expense.id);
183
184 expenses.modify(expense, coopname, [&](auto &e) {
186 e.authorization = authorization;
187 });
188 }
189
195 inline void delete_expense(eosio::name coopname, const checksum256 &expense_hash) {
196 auto exist_expense = get_expense_or_fail(coopname, expense_hash);
197
198 Capital::expense_index expenses(_capital, coopname.value);
199 auto expense = expenses.find(exist_expense.id);
200 expenses.erase(expense);
201 }
202
203} // namespace Capital::Expenses
static constexpr eosio::name _capital
Definition: consts.hpp:150
contract
Definition: eosio.msig_tests.cpp:977
share_type amount
Definition: eosio.token_tests.cpp:174
uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key)
Definition: counts.hpp:61
const eosio::name AUTHORIZED
Расход авторизован советом
Definition: expenses.hpp:19
const eosio::name DECLINED
Расход отклонен
Definition: expenses.hpp:21
const eosio::name PAID
Расход оплачен
Definition: expenses.hpp:20
const eosio::name APPROVED
Расход одобрен председателем
Definition: expenses.hpp:18
const eosio::name CREATED
Расход создан
Definition: expenses.hpp:17
Definition: expenses.hpp:9
void delete_expense(eosio::name coopname, const checksum256 &expense_hash)
Удаляет запись расхода из таблицы.
Definition: expenses.hpp:195
expense get_expense_or_fail(eosio::name coopname, const checksum256 &expense_hash)
Получает расход по хэшу или вызывает ошибку.
Definition: expenses.hpp:96
void create_expense(eosio::name coopname, const checksum256 &project_hash, const checksum256 &expense_hash, eosio::name username, const eosio::asset &amount, const std::string &description, const document2 &statement)
Создает запись расхода в таблице.
Definition: expenses.hpp:112
void update_status(eosio::name coopname, const checksum256 &expense_hash, eosio::name new_status)
Обновляет статус расхода.
Definition: expenses.hpp:141
void set_approved(eosio::name coopname, const checksum256 &expense_hash, const document2 &approved_statement)
Обновляет статус и одобренную записку расхода.
Definition: expenses.hpp:158
void set_authorized(eosio::name coopname, const checksum256 &expense_hash, const document2 &authorization)
Обновляет статус и авторизацию расхода.
Definition: expenses.hpp:177
Definition: balances.cpp:6
std::optional< expense > get_expense(eosio::name coopname, const checksum256 &hash)
Получает расход по хэшу.
Definition: expenses.hpp:73
eosio::multi_index< "expenses"_n, expense, indexed_by<"byusername"_n, const_mem_fun< expense, uint64_t, &expense::by_username > >, indexed_by<"byhash"_n, const_mem_fun< expense, checksum256, &expense::by_expense_hash > >, indexed_by<"byprojhash"_n, const_mem_fun< expense, checksum256, &expense::by_project_hash > > > expense_index
Definition: expenses.hpp:64
Definition: eosio.msig.hpp:34
Таблица расходов хранит информацию о расходах проектов кооператива.
Definition: expenses.hpp:35
checksum256 by_project_hash() const
Индекс по хэшу проекта (4)
Definition: expenses.hpp:56
uint64_t by_username() const
Индекс по имени пользователя (2)
Definition: expenses.hpp:54
eosio::asset amount
Сумма расхода
Definition: expenses.hpp:44
name coopname
Имя кооператива
Definition: expenses.hpp:37
std::string description
Публичное описание расхода
Definition: expenses.hpp:45
uint64_t id
ID расхода (внутренний ключ)
Definition: expenses.hpp:36
document2 expense_statement
Служебная записка
Definition: expenses.hpp:47
document2 approved_statement
Принятая записка председателем или доверенным
Definition: expenses.hpp:48
uint64_t fund_id
Идентификатор фонда списания (expfunds в контакте fund)
Definition: expenses.hpp:43
checksum256 expense_hash
Хэш расхода
Definition: expenses.hpp:42
checksum256 by_expense_hash() const
Индекс по хэшу расхода (3)
Definition: expenses.hpp:55
uint64_t primary_key() const
Первичный ключ (1)
Definition: expenses.hpp:53
document2 authorization
Утвержденная записка советом
Definition: expenses.hpp:49
name username
Имя пользователя, создавшего расход
Definition: expenses.hpp:38
checksum256 project_hash
Хэш проекта, связанного с расходом
Definition: expenses.hpp:41
name status
Статус расхода (created | approved | authorized | paid | declined)
Definition: expenses.hpp:40
static constexpr uint64_t ECONOMIC_ACTIVITY_FUND
Фонд обеспечения хозяйственной деятельности
Definition: shared_ledger.hpp:191
Definition: drafts.hpp:28