276 lines
12 KiB
Plaintext
276 lines
12 KiB
Plaintext
// Hero Models - Biz Rhai Example
|
|
|
|
print("Hero Models - Biz Rhai Example");
|
|
print("===============================");
|
|
print("DB instance will be implicitly passed to DB functions.");
|
|
|
|
// --- Enum Constants ---
|
|
print("\n--- Enum Constants ---");
|
|
print(`CompanyStatus Active: ${CompanyStatusConstants::Active}`);
|
|
print(`CompanyStatus Inactive: ${CompanyStatusConstants::Inactive}`);
|
|
print(`BusinessType Coop: ${BusinessTypeConstants::Coop}`);
|
|
print(`BusinessType Global: ${BusinessTypeConstants::Global}`);
|
|
|
|
// --- Testing Company Model ---
|
|
print("\n--- Testing Company Model ---");
|
|
|
|
let company1_uuid = "comp-uuid-alpha-001";
|
|
let company1_name = "Innovatech Solutions Ltd.";
|
|
let company1_reg = "REG-ISL-2024";
|
|
let company1_inc_date = 1672531200; // Jan 1, 2023
|
|
|
|
print(`Creating a new company (UUID: ${company1_uuid})...`);
|
|
let company1 = new_company(company1_name, company1_reg, company1_inc_date)
|
|
.email("contact@innovatech.com")
|
|
.phone("+1-555-0100")
|
|
.website("https://innovatech.com")
|
|
.address("123 Innovation Drive, Tech City, TC 54321")
|
|
.business_type(BusinessTypeConstants::Global)
|
|
.industry("Technology")
|
|
.description("Leading provider of innovative tech solutions.")
|
|
.status(CompanyStatusConstants::Active)
|
|
.fiscal_year_end("12-31")
|
|
.set_base_created_at(1672531200)
|
|
.set_base_modified_at(1672531205);
|
|
|
|
print(`Company 1 Name: ${company1.name}, Status: ${company1.status}`);
|
|
print(`Company 1 Email: ${company1.email}, Industry: ${company1.industry}`);
|
|
// Save the company to the database
|
|
print("\nSaving company1 to database...");
|
|
company1 = set_company(company1); // Capture the company with the DB-assigned ID
|
|
print("Company1 saved.");
|
|
|
|
// Retrieve the company
|
|
print(`\nRetrieving company by ID (${company1.id})...`);
|
|
let retrieved_company = get_company_by_id(company1.id);
|
|
print(`Retrieved Company: ${retrieved_company.name}, Status: ${retrieved_company.status}`);
|
|
print(`Retrieved Company Reg No: ${retrieved_company.registration_number}, Website: ${retrieved_company.website}`);
|
|
|
|
// --- Testing Shareholder Model ---
|
|
print("\n--- Testing Shareholder Model ---");
|
|
|
|
|
|
let sh1_user_id = 3001; // Example user ID
|
|
let sh1_name = "Alice Wonderland";
|
|
let sh1_since = 1672617600; // Example timestamp (Jan 2, 2023)
|
|
|
|
print(`Creating shareholder 1 for company ${company1.id}...`);
|
|
let shareholder1 = new_shareholder()
|
|
.company_id(company1.id)
|
|
.user_id(sh1_user_id)
|
|
.name(sh1_name)
|
|
.shares(1000.0)
|
|
.percentage(10.0)
|
|
.type_(ShareholderTypeConstants::Individual)
|
|
.since(sh1_since)
|
|
.set_base_created_at(1672617600);
|
|
|
|
shareholder1 = set_shareholder(shareholder1);
|
|
print("Shareholder 1 saved.");
|
|
|
|
let retrieved_sh1 = get_shareholder_by_id(shareholder1.id);
|
|
print(`Retrieved Shareholder 1: ${retrieved_sh1.name}, Type: ${retrieved_sh1.type_}, Shares: ${retrieved_sh1.shares}`);
|
|
|
|
|
|
let sh2_entity_id = 4001; // Example corporate entity ID
|
|
let sh2_name = "Mad Hatter Inc.";
|
|
let sh2_since = 1672704000; // Example timestamp (Jan 3, 2023)
|
|
|
|
print(`\nCreating shareholder 2 for company ${company1.id}...`);
|
|
let shareholder2 = new_shareholder()
|
|
.company_id(company1.id)
|
|
.user_id(sh2_entity_id) // Using user_id field for entity_id for simplicity in example
|
|
.name(sh2_name)
|
|
.shares(5000.0)
|
|
.percentage(50.0)
|
|
.type_(ShareholderTypeConstants::Corporate)
|
|
.since(sh2_since)
|
|
.set_base_created_at(1672704000);
|
|
|
|
shareholder2 = set_shareholder(shareholder2);
|
|
print("Shareholder 2 saved.");
|
|
|
|
let retrieved_sh2 = get_shareholder_by_id(shareholder2.id);
|
|
print(`Retrieved Shareholder 2: ${retrieved_sh2.name}, Type: ${retrieved_sh2.type_}, Percentage: ${retrieved_sh2.percentage}`);
|
|
|
|
// --- Testing Update for Company (Example - if setters were fully implemented for complex updates) ---
|
|
print("\n--- Testing Update for Company ---");
|
|
let updated_company = retrieved_company
|
|
.description("Leading global provider of cutting-edge technology solutions and services.")
|
|
.status(CompanyStatusConstants::Active)
|
|
.phone("+1-555-0199"); // Assume modified_at would be updated by set_company
|
|
|
|
print(`Updated Company - Name: ${updated_company.name}, New Phone: ${updated_company.phone}`);
|
|
set_company(updated_company);
|
|
print("Updated Company saved.");
|
|
|
|
let final_retrieved_company = get_company_by_id(company1.id);
|
|
print(`Final Retrieved Company - Description: '${final_retrieved_company.description}', Phone: ${final_retrieved_company.phone}`);
|
|
|
|
print("\n--- Testing Product Model ---");
|
|
|
|
// Print ProductType constants
|
|
print("\n--- ProductType Constants ---");
|
|
print(`Product Type Product: ${ProductTypeConstants::Product}`);
|
|
print(`Product Type Service: ${ProductTypeConstants::Service}`);
|
|
|
|
// Print ProductStatus constants
|
|
print("\n--- ProductStatus Constants ---");
|
|
print(`Product Status Available: ${ProductStatusConstants::Available}`);
|
|
print(`Product Status Unavailable: ${ProductStatusConstants::Unavailable}`);
|
|
|
|
// Create a product component
|
|
let component1 = new_product_component("Super Capacitor")
|
|
.description("High-capacity energy storage unit")
|
|
.quantity(2);
|
|
print(`\nCreated Product Component: ${component1.name}, Qty: ${component1.quantity}`);
|
|
|
|
// Create Product 1 (a physical product with a component)
|
|
|
|
let product1_name = "Advanced Gadget X";
|
|
let product1_creation_time = 1672876800; // Example timestamp (Jan 5, 2023)
|
|
|
|
print(`\nCreating Product 1: ${product1_name}...`);
|
|
let product1 = new_product()
|
|
.name(product1_name)
|
|
.description("A revolutionary gadget with cutting-edge features.")
|
|
.price(299.99)
|
|
.type_(ProductTypeConstants::Product)
|
|
.category("Electronics")
|
|
.status(ProductStatusConstants::Available)
|
|
.max_amount(1000)
|
|
.purchase_till(1704067199) // Dec 31, 2023, 23:59:59
|
|
.active_till(1735689599) // Dec 31, 2024, 23:59:59
|
|
.add_component(component1)
|
|
.set_base_created_at(product1_creation_time);
|
|
|
|
print("Saving Product 1...");
|
|
product1 = set_product(product1);
|
|
print("Product 1 saved.");
|
|
|
|
print(`\nRetrieving Product 1 (ID: ${product1.id})...`);
|
|
let retrieved_product1 = get_product_by_id(product1.id);
|
|
print(`Retrieved Product 1: ${retrieved_product1.name}, Price: ${retrieved_product1.price}, Type: ${retrieved_product1.type_}`);
|
|
if retrieved_product1.components.len() > 0 {
|
|
print(`Product 1 Component 1: ${retrieved_product1.components[0].name}, Desc: ${retrieved_product1.components[0].description}`);
|
|
} else {
|
|
print("Product 1 has no components.");
|
|
}
|
|
|
|
// Create Product 2 (a service)
|
|
|
|
let product2_name = "Cloud Backup Service - Pro Plan";
|
|
let product2_creation_time = 1672963200; // Example timestamp (Jan 6, 2023)
|
|
|
|
print(`\nCreating Product 2: ${product2_name}...`);
|
|
let product2 = new_product()
|
|
.name(product2_name)
|
|
.description("Unlimited cloud backup with 24/7 support.")
|
|
.price(19.99) // Monthly price
|
|
.type_(ProductTypeConstants::Service)
|
|
.category("Cloud Services")
|
|
.status(ProductStatusConstants::Available)
|
|
.active_till(1735689599) // Valid for a long time, or represents subscription cycle end
|
|
.set_base_created_at(product2_creation_time);
|
|
|
|
print("Saving Product 2...");
|
|
product2 = set_product(product2);
|
|
print("Product 2 saved.");
|
|
|
|
print(`\nRetrieving Product 2 (ID: ${product2.id})...`);
|
|
let retrieved_product2 = get_product_by_id(product2.id);
|
|
print(`Retrieved Product 2: ${retrieved_product2.name}, Category: ${retrieved_product2.category}, Status: ${retrieved_product2.status}`);
|
|
if retrieved_product2.components.len() > 0 {
|
|
print(`Product 2 has ${retrieved_product2.components.len()} components.`);
|
|
} else {
|
|
print("Product 2 has no components (as expected for a service).");
|
|
}
|
|
|
|
|
|
// --- Testing Sale Model ---
|
|
print("\n--- Testing Sale Model ---");
|
|
|
|
// Print SaleStatus constants
|
|
print("\n--- SaleStatus Constants ---");
|
|
print(`Sale Status Pending: ${SaleStatusConstants::Pending}`);
|
|
print(`Sale Status Completed: ${SaleStatusConstants::Completed}`);
|
|
print(`Sale Status Cancelled: ${SaleStatusConstants::Cancelled}`);
|
|
|
|
// Create SaleItem 1 (using product1 from above)
|
|
let sale_item1_product_id = product1.id; // Using product1.id after it's set // Using product1_id from product example
|
|
let sale_item1_name = retrieved_product1.name; // Using name from retrieved product1
|
|
let sale_item1_qty = 2;
|
|
let sale_item1_unit_price = retrieved_product1.price;
|
|
let sale_item1_subtotal = sale_item1_qty * sale_item1_unit_price;
|
|
|
|
print(`\nCreating SaleItem 1 for Product ID: ${sale_item1_product_id}, Name: ${sale_item1_name}...`);
|
|
let sale_item1 = new_sale_item(sale_item1_product_id, sale_item1_name, sale_item1_qty, sale_item1_unit_price, sale_item1_subtotal);
|
|
print(`SaleItem 1: Product ID ${sale_item1.product_id}, Qty: ${sale_item1.quantity}, Subtotal: ${sale_item1.subtotal}`);
|
|
|
|
// Create SaleItem 2 (using product2 from above)
|
|
let sale_item2_product_id = product2.id; // Using product2.id after it's set // Using product2_id from product example
|
|
let sale_item2_name = retrieved_product2.name;
|
|
let sale_item2_qty = 1;
|
|
let sale_item2_unit_price = retrieved_product2.price;
|
|
let sale_item2_subtotal = sale_item2_qty * sale_item2_unit_price;
|
|
|
|
print(`\nCreating SaleItem 2 for Product ID: ${sale_item2_product_id}, Name: ${sale_item2_name}...`);
|
|
let sale_item2 = new_sale_item(sale_item2_product_id, sale_item2_name, sale_item2_qty, sale_item2_unit_price, sale_item2_subtotal);
|
|
print(`SaleItem 2: Product ID ${sale_item2.product_id}, Qty: ${sale_item2.quantity}, Subtotal: ${sale_item2.subtotal}`);
|
|
|
|
// Create a Sale
|
|
|
|
let sale1_customer_id = company1.id; // Example: company1 is the customer
|
|
let sale1_date = 1673049600; // Example timestamp (Jan 7, 2023)
|
|
let sale1_total_amount = sale_item1.subtotal + sale_item2.subtotal;
|
|
|
|
print(`\nCreating Sale 1 for Customer ID: ${sale1_customer_id}...`);
|
|
let sale1 = new_sale(
|
|
sale1_customer_id, // for company_id_i64 in Rhai registration
|
|
"Temp Buyer Name", // for buyer_name in Rhai registration
|
|
"temp@buyer.com", // for buyer_email in Rhai registration
|
|
0.0, // for total_amount (will be overridden by builder)
|
|
SaleStatusConstants::Pending, // for status (will be overridden by builder)
|
|
0 // for sale_date (will be overridden by builder)
|
|
)
|
|
.customer_id(sale1_customer_id) // Actual field on Sale struct
|
|
.status(SaleStatusConstants::Pending)
|
|
.sale_date(sale1_date)
|
|
.add_item(sale_item1) // Add item one by one
|
|
.add_item(sale_item2)
|
|
// Alternatively, to set all items at once (if items were already in an array):
|
|
// .items([sale_item1, sale_item2])
|
|
.total_amount(sale1_total_amount)
|
|
.notes("First major sale of the year. Includes Advanced Gadget X and Cloud Backup Pro.")
|
|
.set_base_created_at(sale1_date)
|
|
.set_base_modified_at(sale1_date + 300) // 5 mins later
|
|
.add_base_comment(1) // Example comment ID
|
|
.add_base_comment(2);
|
|
|
|
print(`Sale 1 Created: ID ${sale1.id}, Customer ID: ${sale1.customer_id}, Status: ${sale1.status}, Total: ${sale1.total_amount}`);
|
|
print(`Sale 1 Notes: ${sale1.notes}`);
|
|
print(`Sale 1 Item Count: ${sale1.items.len()}`);
|
|
if sale1.items.len() > 0 {
|
|
print(`Sale 1 Item 1: ${sale1.items[0].name}, Qty: ${sale1.items[0].quantity}`);
|
|
}
|
|
if sale1.items.len() > 1 {
|
|
print(`Sale 1 Item 2: ${sale1.items[1].name}, Qty: ${sale1.items[1].quantity}`);
|
|
}
|
|
print(`Sale 1 Base Comments: ${sale1.comments}`);
|
|
|
|
// Save Sale 1 to database
|
|
print("\nSaving Sale 1 to database...");
|
|
sale1 = set_sale(sale1);
|
|
print("Sale 1 saved.");
|
|
|
|
// Retrieve Sale 1 from database
|
|
print(`\nRetrieving Sale 1 by ID (${sale1.id})...`);
|
|
let retrieved_sale1 = get_sale_by_id(sale1.id);
|
|
print(`Retrieved Sale 1: ID ${retrieved_sale1.id}, Customer: ${retrieved_sale1.customer_id}, Status: ${retrieved_sale1.status}`);
|
|
print(`Retrieved Sale 1 Total: ${retrieved_sale1.total_amount}, Notes: '${retrieved_sale1.notes}'`);
|
|
if retrieved_sale1.items.len() > 0 {
|
|
print(`Retrieved Sale 1 Item 1: ${retrieved_sale1.items[0].name} (Product ID: ${retrieved_sale1.items[0].product_id})`);
|
|
}
|
|
|
|
print("\nBiz Rhai example script finished.");
|