<?php

/**
 * Base class that represents a row from the 'expense_exp' table.
 *
 * This contains all church expense and withdrawal records
 *
 * @package propel.generator.ChurchCRM.model.ChurchCRM.Base
 */

namespace ChurchCRM\model\ChurchCRM\Base;

use DateTime;

abstract class Expense
{
    protected ?int $exp_ID = null;
    protected ?string $exp_Date = null;
    protected ?float $exp_Amount = null;
    protected ?int $exp_Category = null;
    protected ?int $exp_Fund = null;
    protected ?string $exp_Vendor = null;
    protected ?string $exp_Description = null;
    protected ?string $exp_Reference = null;
    protected string $exp_Status = 'Pending';
    protected string $exp_PaymentMethod = 'Check';
    protected ?string $exp_Notes = null;
    protected ?int $exp_EnteredBy = null;
    protected ?int $exp_ApprovedBy = null;
    protected ?DateTime $exp_CreatedDate = null;
    protected ?DateTime $exp_DateLastEdited = null;

    // Getters
    public function getId(): ?int
    {
        return $this->exp_ID;
    }

    public function getDate(): ?string
    {
        return $this->exp_Date;
    }

    public function getAmount(): ?float
    {
        return $this->exp_Amount;
    }

    public function getCategory(): ?int
    {
        return $this->exp_Category;
    }

    public function getFund(): ?int
    {
        return $this->exp_Fund;
    }

    public function getVendor(): ?string
    {
        return $this->exp_Vendor;
    }

    public function getDescription(): ?string
    {
        return $this->exp_Description;
    }

    public function getReference(): ?string
    {
        return $this->exp_Reference;
    }

    public function getStatus(): string
    {
        return $this->exp_Status;
    }

    public function getPaymentMethod(): string
    {
        return $this->exp_PaymentMethod;
    }

    public function getNotes(): ?string
    {
        return $this->exp_Notes;
    }

    public function getEnteredBy(): ?int
    {
        return $this->exp_EnteredBy;
    }

    public function getApprovedBy(): ?int
    {
        return $this->exp_ApprovedBy;
    }

    public function getCreatedDate(): ?DateTime
    {
        return $this->exp_CreatedDate;
    }

    public function getDateLastEdited(): ?DateTime
    {
        return $this->exp_DateLastEdited;
    }

    // Setters
    public function setId(?int $id): void
    {
        $this->exp_ID = $id;
    }

    public function setDate(?string $date): void
    {
        $this->exp_Date = $date;
    }

    public function setAmount(?float $amount): void
    {
        $this->exp_Amount = $amount;
    }

    public function setCategory(?int $category): void
    {
        $this->exp_Category = $category;
    }

    public function setFund(?int $fund): void
    {
        $this->exp_Fund = $fund;
    }

    public function setVendor(?string $vendor): void
    {
        $this->exp_Vendor = $vendor;
    }

    public function setDescription(?string $description): void
    {
        $this->exp_Description = $description;
    }

    public function setReference(?string $reference): void
    {
        $this->exp_Reference = $reference;
    }

    public function setStatus(string $status): void
    {
        $this->exp_Status = $status;
    }

    public function setPaymentMethod(string $method): void
    {
        $this->exp_PaymentMethod = $method;
    }

    public function setNotes(?string $notes): void
    {
        $this->exp_Notes = $notes;
    }

    public function setEnteredBy(?int $userId): void
    {
        $this->exp_EnteredBy = $userId;
    }

    public function setApprovedBy(?int $userId): void
    {
        $this->exp_ApprovedBy = $userId;
    }

    public function setCreatedDate(?DateTime $date): void
    {
        $this->exp_CreatedDate = $date;
    }

    public function setDateLastEdited(?DateTime $date): void
    {
        $this->exp_DateLastEdited = $date;
    }

    // Database methods (stubs for compatibility)
    public function save(): bool
    {
        return true;
    }
}
