HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/timetracker.panomity.com/src/Repository/Query/InvoiceQuery.php
<?php

/*
 * This file is part of the Kimai time-tracking app.
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace App\Repository\Query;

use App\Entity\Activity;
use App\Entity\Customer;
use App\Entity\InvoiceTemplate;
use App\Entity\Project;

/**
 * Find items (e.g. timesheets) for creating a new invoice.
 */
class InvoiceQuery extends TimesheetQuery
{
    private ?InvoiceTemplate $template = null;
    private ?\DateTime $invoiceDate = null;
    private bool $allowTemplateOverwrite = true;

    public function __construct()
    {
        parent::__construct();
        $this->setDefaults([
            'order' => self::ORDER_ASC,
            'exported' => self::STATE_NOT_EXPORTED,
            'state' => self::STATE_STOPPED,
            'billable' => true,
            'invoiceDate' => null,
        ]);
    }

    public function getTemplate(): ?InvoiceTemplate
    {
        return $this->template;
    }

    public function setTemplate(InvoiceTemplate $template): InvoiceQuery
    {
        $this->template = $template;

        return $this;
    }

    /**
     * Helper method, because many templates access {{ model.query.customer }} directly.
     *
     * @return Customer|null
     */
    public function getCustomer(): ?Customer
    {
        $customers = $this->getCustomers();
        if (\count($customers) === 1) {
            return $customers[0];
        }

        return null;
    }

    /**
     * Helper method, because many templates access {{ model.query.project }} directly.
     *
     * @return Project|null
     */
    public function getProject(): ?Project
    {
        $projects = $this->getProjects();
        if (\count($projects) === 1) {
            return $projects[0];
        }

        return null;
    }

    /**
     * Helper method, because many templates access {{ model.query.activity }} directly.
     *
     * @return Activity|null
     */
    public function getActivity(): ?Activity
    {
        $activities = $this->getActivities();
        if (\count($activities) === 1) {
            return $activities[0];
        }

        return null;
    }

    public function getInvoiceDate(): ?\DateTime
    {
        return $this->invoiceDate;
    }

    public function setInvoiceDate(?\DateTime $invoiceDate): void
    {
        $this->invoiceDate = $invoiceDate;
    }

    public function isAllowTemplateOverwrite(): bool
    {
        return $this->allowTemplateOverwrite;
    }

    public function setAllowTemplateOverwrite(bool $allowTemplateOverwrite): void
    {
        $this->allowTemplateOverwrite = $allowTemplateOverwrite;
    }
}