COOPENOMICS  v1
Кооперативная Экономика
program_properties.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
18 namespace Status {
19 constexpr eosio::name CREATED = "created"_n;
20 constexpr eosio::name APPROVED = "approved"_n;
21 constexpr eosio::name AUTHORIZED = "authorized"_n;
22 constexpr eosio::name ACT1 = "act1"_n;
23 constexpr eosio::name ACT2 = "act2"_n;
24 }
25}
26
28
37 struct [[eosio::table, eosio::contract(CAPITAL)]] program_property {
38 uint64_t id;
39 name coopname;
40 name username;
41 name status;
42 checksum256 property_hash;
43 eosio::asset property_amount;
48 time_point_sec created_at;
49
50 uint64_t primary_key() const { return id; }
51 uint64_t by_username() const { return username.value; }
52 checksum256 by_property_hash() const { return property_hash; }
53 };
54
55typedef eosio::multi_index<
56 "pgproperties"_n, program_property,
57 indexed_by<"byusername"_n, const_mem_fun<program_property, uint64_t, &program_property::by_username>>,
58 indexed_by<"byhash"_n, const_mem_fun<program_property, checksum256, &program_property::by_property_hash>>
60
67 inline std::optional<program_property> get_program_property(eosio::name coopname, const checksum256 &hash) {
68 program_property_index properties(_capital, coopname.value);
69 auto property_hash_index = properties.get_index<"byhash"_n>();
70
71 auto itr = property_hash_index.find(hash);
72 if (itr == property_hash_index.end()) {
73 return std::nullopt;
74 }
75
76 return program_property(*itr);
77}
78
85 inline program_property get_program_property_or_fail(eosio::name coopname, const checksum256 &hash) {
86 auto property = get_program_property(coopname, hash);
87 eosio::check(property.has_value(), "Предложение по программному имущественному взносу не найдено");
88
89 return property.value();
90}
91
97inline void delete_program_property(eosio::name coopname, uint64_t property_id) {
98 program_property_index properties(_capital, coopname.value);
99 auto property = properties.find(property_id);
100 eosio::check(property != properties.end(), "Предложение по программному имущественному взносу не найдено");
101
102 properties.erase(property);
103}
104
115 eosio::name coopname,
116 eosio::name username,
117 checksum256 property_hash,
118 const eosio::asset &property_amount,
119 const std::string &property_description,
120 const document2 &statement
121) {
122 // Создаем предложение
123 program_property_index properties(_capital, coopname.value);
124 auto property_id = get_global_id_in_scope(_capital, coopname, "pgproperties"_n);
125
126 // Создаем предложение в таблице pgproperties
127 properties.emplace(RamPayer::of(properties, coopname), [&](auto &p) {
128 p.id = property_id;
130 p.coopname = coopname;
131 p.username = username;
132 p.property_hash = property_hash;
133 p.property_amount = property_amount;
134 p.property_description = property_description;
135 p.statement = statement;
136 p.created_at = current_time_point();
137 });
138
139 // Отправляем на approve председателю
141 _capital,
142 coopname,
143 username,
144 statement,
146 property_hash,
147 _capital,
150 std::string("")
151 );
152}
153
160inline void update_program_property_status(eosio::name coopname, uint64_t property_id, eosio::name new_status) {
161 program_property_index properties(_capital, coopname.value);
162 auto property = properties.find(property_id);
163 eosio::check(property != properties.end(), "Предложение по программному имущественному взносу не найдено");
164
165 properties.modify(property, RamPayer::of(properties, coopname), [&](auto &p) {
166 p.status = new_status;
167 });
168}
169
173inline void set_program_property_approved_statement(eosio::name coopname, uint64_t property_id, const document2 &approved_statement) {
174 program_property_index properties(_capital, coopname.value);
175 auto property = properties.find(property_id);
176
177 eosio::check(property != properties.end(), "Предложение по программному имущественному взносу не найдено");
178
179 properties.modify(property, RamPayer::of(properties, coopname), [&](auto &p) {
180 p.statement = approved_statement;
181 });
182}
183
187inline void set_program_property_authorization(eosio::name coopname, uint64_t property_id, const document2 &authorization) {
188 program_property_index properties(_capital, coopname.value);
189 auto property = properties.find(property_id);
190 eosio::check(property != properties.end(), "Предложение по программному имущественному взносу не найдено");
191
192 properties.modify(property, RamPayer::of(properties, coopname), [&](auto &p) {
193 p.authorization = authorization;
194 });
195}
196
200inline void set_program_property_act1(eosio::name coopname, uint64_t property_id, const document2 &act1) {
201 program_property_index properties(_capital, coopname.value);
202 auto property = properties.find(property_id);
203 eosio::check(property != properties.end(), "Предложение по программному имущественному взносу не найдено");
204
205 properties.modify(property, RamPayer::of(properties, coopname), [&](auto &p) {
206 p.act = act1;
207 });
208}
209
213inline void set_program_property_act2(eosio::name coopname, uint64_t property_id, const document2 &act2) {
214 program_property_index properties(_capital, coopname.value);
215 auto property = properties.find(property_id);
216 eosio::check(property != properties.end(), "Предложение по программному имущественному взносу не найдено");
217
218 properties.modify(property, RamPayer::of(properties, coopname), [&](auto &p) {
219 p.act = act2;
220 });
221}
222
223} // namespace Capital::ProgramProperties
224
225// Плательщик за оперативную память строк таблицы — правило в lib/core/ram_payer.hpp.
static constexpr eosio::name _capital
Definition: consts.hpp:171
contract
Definition: eosio.msig_tests.cpp:977
constexpr eosio::name AUTHORIZED
Программный имущественный взнос авторизован
Definition: program_properties.hpp:21
constexpr eosio::name ACT2
Второй акт подписан
Definition: program_properties.hpp:23
constexpr eosio::name CREATED
Программный имущественный взнос создан
Definition: program_properties.hpp:19
constexpr eosio::name APPROVED
Программный имущественный взнос одобрен
Definition: program_properties.hpp:20
constexpr eosio::name ACT1
Первый акт подписан
Definition: program_properties.hpp:22
Definition: program_properties.hpp:11
std::optional< program_property > get_program_property(eosio::name coopname, const checksum256 &hash)
Получает программное предложение по хэшу.
Definition: program_properties.hpp:67
void create_program_property_with_approve(eosio::name coopname, eosio::name username, checksum256 property_hash, const eosio::asset &property_amount, const std::string &property_description, const document2 &statement)
Создает предложение по программному имущественному взносу и отправляет его на утверждение.
Definition: program_properties.hpp:114
program_property get_program_property_or_fail(eosio::name coopname, const checksum256 &hash)
Получает программное предложение по хэшу или падает с ошибкой.
Definition: program_properties.hpp:85
eosio::multi_index< "pgproperties"_n, program_property, indexed_by<"byusername"_n, const_mem_fun< program_property, uint64_t, &program_property::by_username > >, indexed_by<"byhash"_n, const_mem_fun< program_property, checksum256, &program_property::by_property_hash > > > program_property_index
Definition: program_properties.hpp:59
void set_program_property_act2(eosio::name coopname, uint64_t property_id, const document2 &act2)
Устанавливает второй акт
Definition: program_properties.hpp:213
void update_program_property_status(eosio::name coopname, uint64_t property_id, eosio::name new_status)
Обновляет статус программного предложения
Definition: program_properties.hpp:160
void set_program_property_authorization(eosio::name coopname, uint64_t property_id, const document2 &authorization)
Устанавливает решение совета
Definition: program_properties.hpp:187
void set_program_property_act1(eosio::name coopname, uint64_t property_id, const document2 &act1)
Устанавливает первый акт
Definition: program_properties.hpp:200
void set_program_property_approved_statement(eosio::name coopname, uint64_t property_id, const document2 &approved_statement)
Устанавливает одобренное заявление
Definition: program_properties.hpp:173
void delete_program_property(eosio::name coopname, uint64_t property_id)
Удаляет программное предложение по ID.
Definition: program_properties.hpp:97
constexpr eosio::name CREATE_PROGRAM_PROPERTY
Definition: names.hpp:133
constexpr eosio::name DECLINE_PROGRAM_PROPERTY
Definition: names.hpp:25
constexpr eosio::name APPROVE_PROGRAM_PROPERTY
Definition: names.hpp:24
eosio::name of(const Table &table, eosio::name coopname)
Definition: ram_payer.hpp:78
void create_approval(name calling_contract, CREATEAPPRV_SIGNATURE)
Definition: soviet.hpp:66
Definition: eosio.msig.hpp:34
RAM_PAYER_CLASS(Capital::ProgramProperties::program_property, cooperative)
Таблица программных имущественных взносов хранит данные о предложениях по имущественным взносам в про...
Definition: program_properties.hpp:37
document2 statement
Заявление о внесении имущества
Definition: program_properties.hpp:45
uint64_t primary_key() const
Первичный ключ (1)
Definition: program_properties.hpp:50
document2 act
Акт
Definition: program_properties.hpp:47
time_point_sec created_at
Время создания предложения
Definition: program_properties.hpp:48
checksum256 by_property_hash() const
Индекс по хэшу предложения (3)
Definition: program_properties.hpp:52
checksum256 property_hash
Хэш предложения
Definition: program_properties.hpp:42
uint64_t id
ID программного имущественного взноса (внутренний ключ)
Definition: program_properties.hpp:38
document2 authorization
Решение совета
Definition: program_properties.hpp:46
eosio::asset property_amount
Оценочная стоимость имущества
Definition: program_properties.hpp:43
name status
Статус предложения (created | approved | authorized | act1 | act2)
Definition: program_properties.hpp:41
name username
Имя пользователя, подающего предложение
Definition: program_properties.hpp:40
uint64_t by_username() const
Индекс по имени пользователя (2)
Definition: program_properties.hpp:51
std::string property_description
Описание имущества
Definition: program_properties.hpp:44
name coopname
Имя кооператива
Definition: program_properties.hpp:39
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