feat: Download Agent wise report (#1517)

This commit is contained in:
Pranav Raj S 2020-12-15 23:35:03 +05:30 committed by GitHub
parent e6f7f5530b
commit 0619894560
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 61 additions and 3 deletions

View file

@ -17,6 +17,12 @@ class ReportsAPI extends ApiClient {
params: { since, until }, params: { since, until },
}); });
} }
getAgentReports(since, until) {
return axios.get(`${this.url}/agents`, {
params: { since, until },
});
}
} }
export default new ReportsAPI(); export default new ReportsAPI();

View file

@ -12,5 +12,6 @@ describe('#Reports API', () => {
expect(reports).toHaveProperty('delete'); expect(reports).toHaveProperty('delete');
expect(reports).toHaveProperty('getAccountReports'); expect(reports).toHaveProperty('getAccountReports');
expect(reports).toHaveProperty('getAccountSummary'); expect(reports).toHaveProperty('getAccountSummary');
expect(reports).toHaveProperty('getAgentReports');
}); });
}); });

View file

@ -3,6 +3,7 @@
"HEADER": "Reports", "HEADER": "Reports",
"LOADING_CHART": "Loading chart data...", "LOADING_CHART": "Loading chart data...",
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
"DOWNLOAD_AGENT_REPORTS": "Download agent reports",
"METRICS": { "METRICS": {
"CONVERSATIONS": { "CONVERSATIONS": {
"NAME": "Conversations", "NAME": "Conversations",

View file

@ -1,5 +1,12 @@
<template> <template>
<div class="column content-box"> <div class="column content-box">
<button
class="button nice icon success button--fixed-right-top"
@click="downloadAgentReports"
>
<i class="icon ion-android-download"></i>
{{ $t('REPORT.DOWNLOAD_AGENT_REPORTS') }}
</button>
<div class="small-3 pull-right"> <div class="small-3 pull-right">
<multiselect <multiselect
v-model="currentDateRangeSelection" v-model="currentDateRangeSelection"
@ -148,6 +155,13 @@ export default {
to, to,
}); });
}, },
downloadAgentReports() {
const { from, to } = this;
this.$store.dispatch('downloadAgentReports', {
from,
to,
});
},
}, },
}; };
</script> </script>

View file

@ -33,7 +33,7 @@ const getters = {
}, },
}; };
const actions = { export const actions = {
fetchAccountReport({ commit }, reportObj) { fetchAccountReport({ commit }, reportObj) {
commit(types.default.TOGGLE_ACCOUNT_REPORT_LOADING, true); commit(types.default.TOGGLE_ACCOUNT_REPORT_LOADING, true);
Report.getAccountReports( Report.getAccountReports(
@ -68,6 +68,17 @@ const actions = {
commit(types.default.TOGGLE_ACCOUNT_REPORT_LOADING, false); commit(types.default.TOGGLE_ACCOUNT_REPORT_LOADING, false);
}); });
}, },
downloadAgentReports(_, reportObj) {
return Report.getAgentReports(reportObj.from, reportObj.to)
.then(response => {
let csvContent = 'data:text/csv;charset=utf-8,' + response.data;
var encodedUri = encodeURI(csvContent);
window.open(encodedUri);
})
.catch(error => {
console.error(error);
});
},
}; };
const mutations = { const mutations = {

View file

@ -0,0 +1,21 @@
import axios from 'axios';
import { actions } from '../../reports';
global.open = jest.fn();
global.axios = axios;
jest.mock('axios');
describe('#actions', () => {
describe('#downloadAgentReports', () => {
it('open CSV download prompt if API is success', async () => {
axios.get.mockResolvedValue({
data: `Agent name,Conversations count,Avg first response time (Minutes),Avg resolution time (Minutes)
Pranav,36,114,28411`,
});
await actions.downloadAgentReports(1, 2);
expect(global.open).toBeCalledWith(
'data:text/csv;charset=utf-8,Agent%20name,Conversations%20count,Avg%20first%20response%20time%20(Minutes),Avg%20resolution%20time%20(Minutes)%0A%20%20%20%20%20%20%20%20Pranav,36,114,28411'
);
});
});
});

View file

@ -8,5 +8,6 @@
until: params[:until] until: params[:until]
}).summary %> }).summary %>
<% row = [ agent.name, agent_report[:conversations_count], (agent_report[:avg_first_response_time]/60).to_i, (agent_report[:avg_resolution_time]/60).to_i ] %> <% row = [ agent.name, agent_report[:conversations_count], (agent_report[:avg_first_response_time]/60).to_i, (agent_report[:avg_resolution_time]/60).to_i ] %>
<%= CSV.generate_line row %> <%= CSV.generate_line row %>
<% end %> <% end %>
<%= CSV.generate_line [I18n.t('reports.period', { since: Date.strptime(params[:since], '%s'), until: Date.strptime(params[:until], '%s') })] %>

View file

@ -42,6 +42,9 @@ en:
email_already_exists: "You have already signed up for an account with %{email}" email_already_exists: "You have already signed up for an account with %{email}"
failed: Signup failed failed: Signup failed
reports:
period: Reporting period %{since} to %{until}
conversations: conversations:
activity: activity:
status: status: