*/ final class TicketMapper extends DataMapperFactory { /** * Columns. * * @var array * @since 1.0.0 */ public const COLUMNS = [ 'support_ticket_id' => ['name' => 'support_ticket_id', 'type' => 'int', 'internal' => 'id'], 'support_ticket_task' => ['name' => 'support_ticket_task', 'type' => 'int', 'internal' => 'task'], 'support_ticket_app' => ['name' => 'support_ticket_app', 'type' => 'int', 'internal' => 'app'], ]; /** * Has one relation. * * @var array * @since 1.0.0 */ public const OWNS_ONE = [ 'task' => [ 'mapper' => TaskMapper::class, 'external' => 'support_ticket_task', ], ]; /** * Has many relation. * * @var array * @since 1.0.0 */ public const HAS_MANY = [ 'ticketElements' => [ 'mapper' => TicketElementMapper::class, 'table' => 'support_ticket_element', 'self' => 'support_ticket_element_ticket', 'external' => null, ], ]; /** * Belongs to. * * @var array * @since 1.0.0 */ public const BELONGS_TO = [ 'app' => [ 'mapper' => SupportAppMapper::class, 'external' => 'support_ticket_app', ] ]; /** * Primary table. * * @var string * @since 1.0.0 */ public const TABLE = 'support_ticket'; /** * Primary field name. * * @var string * @since 1.0.0 */ public const PRIMARYFIELD = 'support_ticket_id'; public static function getStatOverview(int $account) : array { $start = SmartDateTime::startOfMonth(); return [ 'total' => self::count()->with('task')->where('task/createdAt', $start, '>=')->execute(), 'unassigned' => self::count()->with('task')->where('for', null)->execute(), 'open' => self::count()->with('task')->where('task/status', TaskStatus::OPEN)->execute(), 'closed' => self::count()->with('task')->where('task/createdAt', $start, '>=')->where('task/status', TaskStatus::DONE)->where('task/status', TaskStatus::CANCELED, '=', 'OR')->where('task/status', TaskStatus::SUSPENDED, '=', 'OR')->execute(), 'inprogress' => self::count()->with('task')->where('task/status', TaskStatus::WORKING)->execute(), ]; } }