Расширена общая статистика по дням: Отзывы, Календари, Жалобы, Тикеты, Подписки #22
This commit is contained in:
@@ -7,7 +7,8 @@
|
||||
-export([list_by_user/1]).
|
||||
-export([count_tickets_by_status/1, avg_resolution_time/0, count_tickets_by_admin/2]).
|
||||
-export([update_ticket/2]).
|
||||
-export([delete_ticket/1]). % ← для admin_handler_ticket_by_id
|
||||
-export([delete_ticket/1]).
|
||||
-export([count_tickets_by_date/2]).
|
||||
|
||||
%% ─────────────────────────────────────────────────────────────────
|
||||
%% Значения по умолчанию для необязательных полей
|
||||
@@ -248,6 +249,27 @@ count_tickets_by_admin(AdminId, Status) ->
|
||||
Match = #ticket{assigned_to = AdminId, status = Status, _ = '_'},
|
||||
length(mnesia:dirty_match_object(Match)).
|
||||
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @doc Подсчёт тикетов, созданных в заданном временном диапазоне.
|
||||
%%% @end
|
||||
%%%-------------------------------------------------------------------
|
||||
-spec count_tickets_by_date(From :: calendar:datetime(), To :: calendar:datetime()) ->
|
||||
[{{pos_integer(), pos_integer(), pos_integer()}, non_neg_integer()}].
|
||||
count_tickets_by_date(From, To) ->
|
||||
All = mnesia:dirty_match_object(#ticket{_ = '_'}),
|
||||
Filtered = lists:filter(fun(T) -> T#ticket.first_seen >= From andalso
|
||||
T#ticket.first_seen =< To end, All),
|
||||
Counts = lists:foldl(fun(T, Acc) ->
|
||||
Day = date_part(T#ticket.first_seen),
|
||||
case lists:keyfind(Day, 1, Acc) of
|
||||
false -> [{Day, 1} | Acc];
|
||||
{Day, C} -> lists:keyreplace(Day, 1, Acc, {Day, C+1})
|
||||
end
|
||||
end, [], Filtered),
|
||||
lists:sort(Counts).
|
||||
|
||||
date_part({{Y,M,D}, _}) -> {Y,M,D}.
|
||||
|
||||
%%%===================================================================
|
||||
%%% ВНУТРЕННИЕ ФУНКЦИИ
|
||||
%%%===================================================================
|
||||
|
||||
Reference in New Issue
Block a user