コード例 #1
0
 private function query()
 {
     $raw1 = DB::raw("CASE \n                            WHEN tickets.created_at > posts.created_at OR posts.created_at IS NULL \n                            THEN tickets.created_at \n                            ELSE posts.created_at \n                         END as 'last_operation_date'");
     $raw2 = DB::raw("CASE \n                            WHEN tickets.created_at > posts.created_at OR posts.created_at IS NULL \n                            THEN tickets.creator_id ELSE posts.author_id \n                         END as 'last_operation_company_person_id'");
     $raw3 = DB::raw('(SELECT MAX(id) as post_id, ticket_id FROM posts GROUP BY ticket_id) as d1');
     $raw4 = DB::raw("(SELECT time.ticket_id, time.active_work, epe.event_id, epe.email_text,\n                            \n                            CASE WHEN t.status_id NOT IN (" . TICKET_SOLVED_STATUS_ID . "," . TICKET_CLOSED_STATUS_ID . ")\n                                THEN epe.delay_time - time.active_work \n                                ELSE NULL\n                            END as deadline\n\n                            FROM \n                            (SELECT d3.ticket_id, SUM(TIMESTAMPDIFF(SECOND, d3.from, d3.to)) as 'active_work' \n                            \n                            FROM (\n                                SELECT th1.ticket_id, th1.created_at as 'from', CASE WHEN th2.created_at IS NULL THEN NOW() ELSE th2.created_at END as 'to'\n                                FROM tickets_history as th1\n                                LEFT JOIN tickets_history th2 ON (th1.id = th2.previous_id)\n                                WHERE th1.status_id IN (" . str_replace(":", ",", TICKETS_ACTIVE_STATUS_IDS) . ")\n                            ) as d3\n                            \n                            LEFT JOIN (\n                                SELECT th1.ticket_id, MAX(th2.created_at) as 'last_important_update'\n                                FROM tickets_history as th1\n                                LEFT JOIN tickets_history th2 ON (th2.previous_id = th1.id)\n                                WHERE (th1.level_id != th2.level_id OR th1.priority_id != th2.priority_id)\n                                GROUP BY th1.ticket_id\n                            ) as d4 ON (d4.ticket_id = d3.ticket_id AND d4.last_important_update > d3.from)\n                            AND d4.ticket_id IS NULL\n\n                            GROUP BY d3.ticket_id\n                            ) as time\n\n                            LEFT JOIN tickets t ON t.id = time.ticket_id\n                            LEFT JOIN companies c ON c.id = t.company_id\n                            LEFT JOIN escalation_profiles ep ON c.escalation_profile_id = ep.id\n                            LEFT JOIN escalation_profile_event epe ON (epe.priority_id = t.priority_id AND epe.level_id = t.level_id AND epe.profile_id = c.escalation_profile_id)\n\n                        ) as final");
     $tickets = Ticket::select("tickets.*", $raw1, $raw2, 'statuses.allowed_statuses', 'final.active_work', 'final.deadline', 'final.event_id', 'final.email_text');
     $tickets->leftJoin('company_person as creator_contacts', 'tickets.creator_id', '=', 'creator_contacts.id');
     $tickets->leftJoin('company_person as assignee_contacts', 'tickets.assignee_id', '=', 'assignee_contacts.id');
     $tickets->leftJoin('people as assignees', 'assignee_contacts.person_id', '=', 'assignees.id');
     $tickets->leftJoin('people as creators', 'creator_contacts.person_id', '=', 'creators.id');
     $tickets->leftJoin('divisions', 'tickets.division_id', '=', 'divisions.id');
     $tickets->leftJoin('levels', 'tickets.level_id', '=', 'levels.id');
     $tickets->leftJoin('statuses', 'tickets.status_id', '=', 'statuses.id');
     $tickets->leftJoin('priorities', 'tickets.priority_id', '=', 'priorities.id');
     $tickets->leftJoin('companies', 'tickets.company_id', '=', 'companies.id');
     $tickets->leftJoin($raw3, 'd1.ticket_id', '=', 'tickets.id');
     $tickets->leftJoin('posts', 'd1.post_id', '=', 'posts.id');
     $tickets->leftJoin($raw4, 'final.ticket_id', '=', 'tickets.id');
     if (Auth::check() && !Auth::user()->active_contact->isE80()) {
         $tickets->where("tickets.company_id", "=", Auth::user()->active_contact->company_id);
     }
     return $tickets;
 }
コード例 #2
0
 protected function tickets()
 {
     return Ticket::select(['*', DB::raw('id_user_assigned AS assigned_to_name'), DB::raw('status AS status_name')])->get();
 }