db/heromodels/examples/gov_example.rhai
2025-06-21 09:23:22 +02:00

223 lines
6.7 KiB
Plaintext

// Governance Example - Demonstrates using the governance models with embedded types
// This example shows how to create, retrieve, and manipulate governance entities with embedded types
// Get the database instance
let db = get_db();
println("Hero Models - Governance Example");
println("================================");
// Create a company with a business type using the fluent builder pattern
println("Creating a company...");
// Create a business type directly
let business_type = #{
type_name: "Corporation",
description: "A corporation is a legal entity that is separate and distinct from its owners"
};
let company = company__builder(1)
.name("Acme Corporation")
.registration_number("REG123456")
.incorporation_date(now())
.fiscal_year_end("December 31")
.email("info@acme.com")
.phone("+1 555-123-4567")
.website("https://acme.com")
.address("123 Main St, Anytown, USA")
.business_type(business_type)
.industry("Technology")
.description("A leading technology company")
.status("Active")
.build();
// Save the company to the database
set_company(db, company);
println("Company created successfully!");
println("");
// Create a committee with members using the fluent builder pattern
println("Creating a committee...");
let committee = committee__builder(1)
.company_id(1)
.name("Board of Directors")
.description("The main governing body of the company")
.add_member(
committee_member()
.id(1)
.user_id(101)
.name("John Smith")
.role(CommitteeRole::Chair)
)
.add_member(
committee_member()
.id(2)
.user_id(102)
.name("Jane Doe")
.role(CommitteeRole::Secretary)
)
.add_member(
committee_member()
.id(3)
.user_id(103)
.name("Bob Johnson")
.role(CommitteeRole::Member)
)
.build();
// Save the committee to the database
set_committee(db, committee);
println("Committee created successfully!");
println("");
// Create a meeting with attendees using the fluent builder pattern
println("Creating a meeting...");
let meeting = meeting__builder(1)
.company_id(1)
.title("Q2 Board Meeting")
.date(now() + days(7))
.location("Conference Room A")
.description("Quarterly board meeting to review financial performance")
.add_attendee(
attendee()
.id(1)
.user_id(101)
.name("John Smith")
.role(AttendeeRole::Coordinator)
.status(AttendeeStatus::Confirmed)
)
.add_attendee(
attendee()
.id(2)
.user_id(102)
.name("Jane Doe")
.role(AttendeeRole::Secretary)
.status(AttendeeStatus::Confirmed)
)
.add_attendee(
attendee()
.id(3)
.user_id(103)
.name("Bob Johnson")
.role(AttendeeRole::Member)
.status(AttendeeStatus::Pending)
)
.build();
// Save the meeting to the database
set_meeting(db, meeting);
println("Meeting created successfully!");
println("");
// Create a resolution with approvals using the fluent builder pattern
println("Creating a resolution...");
let resolution = resolution__builder(1)
.company_id(1)
.title("New Product Line Resolution")
.description("Resolution to approve the development of a new product line")
.resolution_type(ResolutionType::Ordinary)
.status(ResolutionStatus::Proposed)
.proposed_date(now())
.effective_date(now() + days(30))
.expiry_date(now() + days(365))
.add_approval("John Smith")
.add_approval("Jane Doe")
.build();
// Save the resolution to the database
set_resolution(db, resolution);
println("Resolution created successfully!");
println("");
// Create a vote with ballots using the fluent builder pattern
println("Creating a vote...");
let vote = vote__builder(1)
.company_id(1)
.resolution_id(1)
.title("Vote on New Product Line")
.description("Vote to approve the development of a new product line")
.status(VoteStatus::Open)
.add_ballot(
ballot()
.id(1)
.user_id(101)
.user_name("John Smith")
.option(VoteOption::Yes)
.comments("Strongly support this initiative")
)
.add_ballot(
ballot()
.id(2)
.user_id(102)
.user_name("Jane Doe")
.option(VoteOption::Yes)
.comments("Agree with the proposal")
)
.add_ballot(
ballot()
.id(3)
.user_id(103)
.user_name("Bob Johnson")
.option(VoteOption::Abstain)
.comments("Need more information")
)
.start_date(now())
.end_date(now() + days(7))
.build();
// Save the vote to the database
set_vote(db, vote);
println("Vote created successfully!");
println("");
// Retrieve and display the company
println("Retrieving company...");
let retrieved_company = get_company_by_id(db, 1);
println("Company: " + retrieved_company.name);
println("Business Type: " + retrieved_company.business_type.type_name);
println("");
// Retrieve and display the committee
println("Retrieving committee...");
let retrieved_committee = get_committee_by_id(db, 1);
println("Committee: " + retrieved_committee.name);
println("Members: " + retrieved_committee.members.len());
for member in retrieved_committee.members {
println("- " + member.name + " (" + member.role + ")");
}
println("");
// Retrieve and display the meeting
println("Retrieving meeting...");
let retrieved_meeting = get_meeting_by_id(db, 1);
println("Meeting: " + retrieved_meeting.title);
println("Date: " + retrieved_meeting.date);
println("Attendees: " + retrieved_meeting.attendees.len());
for attendee in retrieved_meeting.attendees {
println("- " + attendee.name + " (" + attendee.role + ", " + attendee.status + ")");
}
println("");
// Retrieve and display the resolution
println("Retrieving resolution...");
let retrieved_resolution = get_resolution_by_id(db, 1);
println("Resolution: " + retrieved_resolution.title);
println("Status: " + retrieved_resolution.status);
println("Approvals: " + retrieved_resolution.approvals.len());
for approval in retrieved_resolution.approvals {
println("- " + approval);
}
println("");
// Retrieve and display the vote
println("Retrieving vote...");
let retrieved_vote = get_vote_by_id(db, 1);
println("Vote: " + retrieved_vote.title);
println("Status: " + retrieved_vote.status);
println("Ballots: " + retrieved_vote.ballots.len());
for ballot in retrieved_vote.ballots {
println("- " + ballot.user_name + ": " + ballot.option);
}
println("");
println("Governance example completed successfully!");
()