COOPENOMICS  v1
Кооперативная Экономика
table_registrator_coops.hpp
См. документацию.
1#pragma once
2
3
4#include "../core/ram_payer.hpp"
5#include <eosio/asset.hpp>
6#include <eosio/binary_extension.hpp>
7#include <eosio/eosio.hpp>
8#include <string>
9
10#include "../consts.hpp"
11#include "../core/utils.hpp"
12#include "document_core.hpp"
13
17struct [[eosio::table, eosio::contract(REGISTRATOR)]] cooperative2 {
18 eosio::name username;
19 eosio::name parent_username;
20
21 std::string announce;
22 std::string description;
23 bool is_cooperative = false;
24
25 bool is_branched = false;
26 bool is_enrolled = false;
27
28 eosio::name coop_type;
29
30 eosio::asset registration;
31 eosio::asset initial;
32 eosio::asset minimum;
33
34 eosio::binary_extension<eosio::asset> org_registration;
35 eosio::binary_extension<eosio::asset> org_initial;
36 eosio::binary_extension<eosio::asset> org_minimum;
37
38 eosio::binary_extension<eosio::name> status;
39 eosio::binary_extension<eosio::time_point_sec> created_at;
40 eosio::binary_extension<document2> document;
41 eosio::binary_extension<uint64_t> active_participants_count;
42
43 uint64_t primary_key() const { return username.value; }
44
45 void check_symbol_or_fail(eosio::asset contribution) {
46 eosio::check(initial.symbol == contribution.symbol && minimum.symbol == contribution.symbol,
47 "Неверный контракт токена");
48 }
49
50 uint64_t by_status() const { return status.has_value() ? status.value().value : 0; }
51
52 uint64_t by_created() const {
53 return created_at.has_value() ? created_at.value().sec_since_epoch() : 0;
54 }
55
56 uint64_t by_parent() const { return parent_username.value; }
57
58 uint128_t by_coop_childs() const { return combine_ids(username.value, parent_username.value); }
59
60 uint64_t is_coop_index() const { return is_cooperative == true ? 1 : 0; }
61
62 uint64_t bycooptype() const { return coop_type.value; }
63
64 bool is_coop() const { return is_cooperative; }
65};
66
67typedef eosio::multi_index<
68 "coops"_n, cooperative2,
69 eosio::indexed_by<"iscoop"_n, eosio::const_mem_fun<cooperative2, uint64_t, &cooperative2::is_coop_index>>,
70 eosio::indexed_by<"byparent"_n, eosio::const_mem_fun<cooperative2, uint64_t, &cooperative2::by_parent>>,
71 eosio::indexed_by<"bycoopchilds"_n,
72 eosio::const_mem_fun<cooperative2, uint128_t, &cooperative2::by_coop_childs>>,
73 eosio::indexed_by<"bycooptype"_n, eosio::const_mem_fun<cooperative2, uint64_t, &cooperative2::bycooptype>>>
75
78 auto org = coops.find(coopname.value);
79 eosio::check(org != coops.end(), "Организация не найдена");
80 eosio::check(org->is_coop(), "Организация - не кооператив");
81 eosio::check(org->status.value() == "active"_n, "Кооператив не активен");
82
83 return *org;
84}
85
86// Плательщик за оперативную память строк таблицы — правило в lib/core/ram_payer.hpp.
static constexpr eosio::name _registrator
Definition: consts.hpp:178
contract
Definition: eosio.msig_tests.cpp:977
Definition: eosio.msig.hpp:34
Definition: table_registrator_coops.hpp:17
bool is_cooperative
Definition: table_registrator_coops.hpp:23
eosio::binary_extension< document2 > document
Definition: table_registrator_coops.hpp:40
eosio::binary_extension< eosio::asset > org_minimum
Definition: table_registrator_coops.hpp:36
eosio::binary_extension< eosio::time_point_sec > created_at
Definition: table_registrator_coops.hpp:39
eosio::name parent_username
Definition: table_registrator_coops.hpp:19
std::string description
Definition: table_registrator_coops.hpp:22
eosio::binary_extension< eosio::name > status
Definition: table_registrator_coops.hpp:38
eosio::asset minimum
Definition: table_registrator_coops.hpp:32
void check_symbol_or_fail(eosio::asset contribution)
Definition: table_registrator_coops.hpp:45
uint64_t by_created() const
Definition: table_registrator_coops.hpp:52
uint64_t by_parent() const
Definition: table_registrator_coops.hpp:56
eosio::binary_extension< eosio::asset > org_initial
Definition: table_registrator_coops.hpp:35
uint64_t bycooptype() const
Definition: table_registrator_coops.hpp:62
bool is_coop() const
Definition: table_registrator_coops.hpp:64
uint64_t primary_key() const
Definition: table_registrator_coops.hpp:43
std::string announce
Definition: table_registrator_coops.hpp:21
eosio::name username
Definition: table_registrator_coops.hpp:18
uint128_t by_coop_childs() const
Definition: table_registrator_coops.hpp:58
uint64_t is_coop_index() const
Definition: table_registrator_coops.hpp:60
uint64_t by_status() const
Definition: table_registrator_coops.hpp:50
eosio::binary_extension< uint64_t > active_participants_count
Definition: table_registrator_coops.hpp:41
eosio::asset registration
Definition: table_registrator_coops.hpp:30
eosio::binary_extension< eosio::asset > org_registration
Definition: table_registrator_coops.hpp:34
eosio::name coop_type
Definition: table_registrator_coops.hpp:28
eosio::asset initial
Definition: table_registrator_coops.hpp:31
eosio::multi_index< "coops"_n, cooperative2, eosio::indexed_by<"iscoop"_n, eosio::const_mem_fun< cooperative2, uint64_t, &cooperative2::is_coop_index > >, eosio::indexed_by<"byparent"_n, eosio::const_mem_fun< cooperative2, uint64_t, &cooperative2::by_parent > >, eosio::indexed_by<"bycoopchilds"_n, eosio::const_mem_fun< cooperative2, uint128_t, &cooperative2::by_coop_childs > >, eosio::indexed_by<"bycooptype"_n, eosio::const_mem_fun< cooperative2, uint64_t, &cooperative2::bycooptype > > > cooperatives2_index
Definition: table_registrator_coops.hpp:74
cooperative2 get_cooperative_or_fail(eosio::name coopname)
Definition: table_registrator_coops.hpp:76
RAM_PAYER_CLASS(cooperative2, contract)
static uint128_t combine_ids(const uint64_t &x, const uint64_t &y)
Definition: utils.hpp:7