use bevy::prelude::*;
use super::components::{BudgetChannel, Currency, ExpenseItem, IncomeSource};
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct SettlementRequested {
pub organization: Entity,
pub period: u32,
pub day: u32,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct SettlementCompletedEvent {
pub organization: Entity,
pub period: u32,
pub income: Currency,
pub expenses: Currency,
pub net: Currency,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct BudgetTransferRequested {
pub organization: Entity,
pub from: BudgetChannel,
pub to: BudgetChannel,
pub amount: Currency,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct BudgetTransferredEvent {
pub organization: Entity,
pub from: BudgetChannel,
pub to: BudgetChannel,
pub amount: Currency,
}
#[derive(Event, Clone, Reflect)]
pub struct IncomeCalculationEvent {
pub settlement_entity: Entity,
pub organization: Entity,
pub period: u32,
pub sources: Vec<IncomeSource>,
}
#[derive(Event, Clone, Reflect)]
pub struct ExpenseCalculationEvent {
pub settlement_entity: Entity,
pub organization: Entity,
pub period: u32,
pub items: Vec<ExpenseItem>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_settlement_requested_creation() {
let event = SettlementRequested {
organization: Entity::PLACEHOLDER,
period: 1,
day: 7,
};
assert_eq!(event.period, 1);
assert_eq!(event.day, 7);
}
#[test]
fn test_budget_transfer_requested() {
let event = BudgetTransferRequested {
organization: Entity::PLACEHOLDER,
from: BudgetChannel::Cash,
to: BudgetChannel::Research,
amount: Currency::new(100),
};
assert_eq!(event.from, BudgetChannel::Cash);
assert_eq!(event.to, BudgetChannel::Research);
assert_eq!(event.amount, Currency::new(100));
}
}