This commit is contained in:
Бахирев 2024-03-12 16:27:19 +03:00
parent c7c541c709
commit a4b269f1ca
51 changed files with 42452 additions and 738 deletions

View file

@ -1,17 +1,17 @@
{
"files": {
"main.css": "./static/css/main.0167aeb3.css",
"main.js": "./static/js/main.28c74018.js",
"main.css": "./static/css/main.44209276.css",
"main.js": "./static/js/main.5a210281.js",
"static/media/car.png": "./static/media/car.b8dd8738e37fe866285f.png",
"index.html": "./index.html",
"static/media/warning.svg": "./static/media/warning.e39a87773603f3ab157f.svg",
"static/media/info.svg": "./static/media/info.954631f6b19e3fe9c495.svg",
"static/media/alert.svg": "./static/media/alert.41e2b99c481139c13074.svg",
"main.0167aeb3.css.map": "./static/css/main.0167aeb3.css.map",
"main.28c74018.js.map": "./static/js/main.28c74018.js.map"
"main.44209276.css.map": "./static/css/main.44209276.css.map",
"main.5a210281.js.map": "./static/js/main.5a210281.js.map"
},
"entrypoints": [
"static/css/main.0167aeb3.css",
"static/js/main.28c74018.js"
"static/css/main.44209276.css",
"static/js/main.5a210281.js"
]
}

View file

@ -1 +1 @@
<!doctype html><html><head><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=no,maximum-scale=1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="cleartype" content="on"><meta name="HandheldFriendly" content="True"><meta name="format-detection" content="telephone=no"><meta name="format-detection" content="address=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><script type="text/javascript">var report=[]</script><script src="/log.txt"></script><script src="./log.txt"></script><script src="../log.txt"></script><script src="./log-0.txt"></script><script src="./log-1.txt"></script><script src="./log-2.txt"></script><script src="./log-3.txt"></script><script src="./log-4.txt"></script><script src="./log-5.txt"></script><script src="./log-6.txt"></script><script src="./report/log-0.txt"></script><script src="./report/log-1.txt"></script><script src="./report/log-2.txt"></script><script src="./report/log-3.txt"></script><script src="./report/log-4.txt"></script><script src="./report/log-5.txt"></script><script src="./report/log-6.txt"></script><link rel="icon" href="./favicon.svg"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Git Statistics</title><meta name="description" content="Simple and fast report on git commit history."><meta name="keywords" content="git, statistics, audit, history, log, monitoring, employee control"><meta name="author" content="Bakhirev Aleksei"><meta name="copyright" content="(c) Bakhirev Aleksei"><meta http-equiv="Reply-to" content="alexey-bakhirev@yandex.ru"><meta name="application-name" content="Git statistics"><meta name="msapplication-tooltip" content="Simple and fast report on Git commit history."><meta property="og:title" content="Git Statistics"><meta property="og:description" content="Simple and fast report on Git commit history."><meta property="og:image" content="http://assayo.jp/assets/seo/custom_icon_256.png"><meta property="og:site_name" content="Assayo"><meta property="og:url" content="http://assayo.jp/"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Git Statistics"><meta name="twitter:description" content="Simple and fast report on Git commit history."><meta name="twitter:creator" content="Bakhirev Aleksei"><meta name="twitter:image:src" content="http://assayo.jp/assets/seo/custom_icon_256.png"><meta name="twitter:domain" content="assayo.jp"><meta name="twitter:site" content="assayo.jp"><meta itemprop="name" content="Git Statistics"><meta itemprop="description" content="Simple and fast report on Git commit history."><meta itemprop="image" content="http://assayo.jp/assets/seo/custom_icon_256.png"><script defer="defer" src="./static/js/main.28c74018.js"></script><link href="./static/css/main.0167aeb3.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html><head><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=no,maximum-scale=1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="cleartype" content="on"><meta name="HandheldFriendly" content="True"><meta name="format-detection" content="telephone=no"><meta name="format-detection" content="address=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><script type="text/javascript">var report=[]</script><script src="/log.txt"></script><script src="./log.txt"></script><script src="../log.txt"></script><script src="./log-0.txt"></script><script src="./log-1.txt"></script><script src="./log-2.txt"></script><script src="./log-3.txt"></script><script src="./log-4.txt"></script><script src="./log-5.txt"></script><script src="./log-6.txt"></script><script src="./report/log-0.txt"></script><script src="./report/log-1.txt"></script><script src="./report/log-2.txt"></script><script src="./report/log-3.txt"></script><script src="./report/log-4.txt"></script><script src="./report/log-5.txt"></script><script src="./report/log-6.txt"></script><link rel="icon" href="./favicon.svg"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Git Statistics</title><meta name="description" content="Simple and fast report on git commit history."><meta name="keywords" content="git, statistics, audit, history, log, monitoring, employee control"><meta name="author" content="Bakhirev Aleksei"><meta name="copyright" content="(c) Bakhirev Aleksei"><meta http-equiv="Reply-to" content="alexey-bakhirev@yandex.ru"><meta name="application-name" content="Git statistics"><meta name="msapplication-tooltip" content="Simple and fast report on Git commit history."><meta property="og:title" content="Git Statistics"><meta property="og:description" content="Simple and fast report on Git commit history."><meta property="og:image" content="http://assayo.jp/assets/seo/custom_icon_256.png"><meta property="og:site_name" content="Assayo"><meta property="og:url" content="http://assayo.jp/"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Git Statistics"><meta name="twitter:description" content="Simple and fast report on Git commit history."><meta name="twitter:creator" content="Bakhirev Aleksei"><meta name="twitter:image:src" content="http://assayo.jp/assets/seo/custom_icon_256.png"><meta name="twitter:domain" content="assayo.jp"><meta name="twitter:site" content="assayo.jp"><meta itemprop="name" content="Git Statistics"><meta itemprop="description" content="Simple and fast report on Git commit history."><meta itemprop="image" content="http://assayo.jp/assets/seo/custom_icon_256.png"><script defer="defer" src="./static/js/main.5a210281.js"></script><link href="./static/css/main.44209276.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */
/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
/**
* @license React
* react-dom.production.min.js

File diff suppressed because one or more lines are too long

12
package-lock.json generated
View file

@ -5717,9 +5717,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001519",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz",
"integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==",
"version": "1.0.30001597",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz",
"integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==",
"funding": [
{
"type": "opencollective",
@ -22476,9 +22476,9 @@
}
},
"caniuse-lite": {
"version": "1.0.30001519",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz",
"integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg=="
"version": "1.0.30001597",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz",
"integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w=="
},
"case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",

41213
public/test.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -13,6 +13,7 @@ import style from './index.module.scss';
import PageWrapper from '../Page/wrapper';
interface IDataViewProps {
rowsForExcel?: any[];
rows: any[];
type?: string;
sort?: ISort[];
@ -25,6 +26,7 @@ interface IDataViewProps {
}
function DataView({
rowsForExcel = [],
rows = [],
sort = [],
type,
@ -62,7 +64,7 @@ function DataView({
className={style.data_view_icon}
onClick={() => {
const fileName = t(`sidebar.${urlParams.type}.${urlParams.page}`);
downloadExcel(rows, children, fileName);
downloadExcel(rowsForExcel || rows, children, fileName);
}}
/>
)}

View file

@ -1,6 +1,5 @@
import React, { useEffect, useState } from 'react';
// import DropZoneIcon from '../../../assets/dropzone.svg';
import { getOnDrop, getShowDropZone } from './helpers';
import style from './index.module.scss';

View file

@ -14,7 +14,6 @@ function UiKitTags({
const values = Array.isArray(value) ? value : [value];
const formattedValues = values.filter((v) => v);
console.dir(formattedValues);
const items = formattedValues
.map((tagValue: any) => (
<UiKitTag

View file

@ -1,6 +1,5 @@
import IHashMap from 'ts/interfaces/HashMap';
import MinMaxCounter from './counter';
import { IDirtyFile } from 'ts/interfaces/FileInfo';
const IGNORE_LIST = [
'.eslintrc',
@ -20,86 +19,58 @@ export default class DataGripByExtension {
this.statisticByName = {};
}
updateTotalInfo(fileList: any[], byAuthor: any) {
updateTotalInfo(fileList: IDirtyFile[], removedFileList: IDirtyFile[]) {
const byExtension = {};
console.dir(fileList);
fileList.forEach((file: any) => {
if (!file.extension
|| IGNORE_LIST.includes(file.name)) return;
if (!byExtension[file.extension]) {
byExtension[file.extension] = {
extension: file.extension,
authors: {},
files: { [file.firstName]: 1 },
count: 1,
more: {},
total: {
added: 0,
changes: 0,
removed: 0,
total: 0,
},
};
} else {
const numberNames = byExtension[file.extension].files[file.firstName];
byExtension[file.extension].files[file.firstName] = numberNames
? (numberNames + 1)
: 1;
byExtension[file.extension].count += 1;
}
for (let author in file.authors) {
if (!author
|| byAuthor.statisticByName[author]?.isStaff) return;
byExtension[file.extension].authors[author] = byExtension[file.extension].authors[author]
|| { added: 0, changes: 0, removed: 0 };
const statistic = file.authors[author];
const total = byExtension[file.extension].authors[author];
total.added += statistic.added;
total.changes += statistic.changes;
total.removed += statistic.removed;
byExtension[file.extension].total.added += statistic.added;
byExtension[file.extension].total.changes += statistic.changes;
byExtension[file.extension].total.removed += statistic.removed;
byExtension[file.extension].total.total += statistic.added + statistic.changes + statistic.removed;
}
this.#updateStatistic(file, byExtension, 'current');
});
this.#addMorePercent(byExtension);
removedFileList.forEach((file: any) => {
this.#updateStatistic(file, byExtension, 'removed');
});
this.statistic = Object.entries(byExtension)
.sort((a: any, b: any) => b[1].count - a[1].count)
.map((item: any) => item[1]);
.sort((a: any, b: any) => b[1].current.count - a[1].current.count)
.map((item: any) => {
if (item[1].removed.count !== 1 && item[1].current.count !== 1) {
item[1].path = null;
}
return item[1];
});
this.statisticByName = byExtension;
}
#addMorePercent(byExtension: any) {
for (let extension in byExtension) {
const moreAdded = new MinMaxCounter();
const moreChanges = new MinMaxCounter();
const moreRemoved = new MinMaxCounter();
#updateStatistic(
file: IDirtyFile,
group: Record<string, any>,
type: 'current' | 'removed',
) {
if (!file.extension
|| IGNORE_LIST.includes(file.name)) return;
for (let author in byExtension[extension].authors) {
const statistic = byExtension[extension].authors[author];
const total = statistic.added + statistic.changes + statistic.removed;
statistic.addedPercent = (statistic.added * 100) / total;
statistic.changesPercent = (statistic.changes * 100) / total;
statistic.removedPercent = (statistic.removed * 100) / total;
moreAdded.update(statistic.addedPercent, author);
moreChanges.update(statistic.changesPercent, author);
moreRemoved.update(statistic.removedPercent, author);
}
byExtension[extension].more = {
added: { percent: moreAdded.max, author: moreAdded.maxData },
changes: { percent: moreChanges.max, author: moreChanges.maxData },
removed: { percent: moreRemoved.max, author: moreRemoved.maxData },
};
if (!group[file.extension]) {
group[file.extension] = this.#getNewExtension(file);
}
group[file.extension][type].files[file.name] = file.firstName;
group[file.extension][type].count += 1;
}
}
#getNewExtension(file: IDirtyFile) {
return {
extension: file.extension,
authors: {},
task: file.created.task,
path: file.name,
current: {
files: {},
count: 0,
},
removed: {
files: {},
count: 0,
},
};
}
}

View file

@ -0,0 +1,86 @@
import { COMMIT_TYPE, ISystemCommit } from 'ts/interfaces/Commit';
import IHashMap from 'ts/interfaces/HashMap';
import settingsStore from 'ts/store/Settings';
function getRangeInDay(fromObject: any, toObject: any, gap?: number) {
const to = toObject.milliseconds;
const from = fromObject.milliseconds;
const delay = ((to - from) / settingsStore.ONE_DAY) - (gap || 0);
return to !== from && delay > 0 ? delay : 0;
}
export default class DataGripByRelease {
release: IHashMap<any> = {};
statistic: any[] = [];
statisticByName: IHashMap<any> = [];
clear() {
this.release = {};
this.statistic = [];
}
addCommit(commit: ISystemCommit) {
if (commit.commitType === COMMIT_TYPE.AUTO_MERGE) {
if (this.release[commit.branch]) {
this.#updateRelease(commit);
} else {
this.#addRelease(commit);
}
}
}
#updateRelease(commit: ISystemCommit) {
const statistic = this.release[commit.branch];
statistic.lastCommit = commit;
statistic.to = commit.timestamp;
statistic.delayInDays = getRangeInDay(statistic.firstCommit, commit) || statistic.delayInDays;
}
#addRelease(commit: ISystemCommit) {
if (!commit.branch) return;
const index = commit.branch.lastIndexOf('release');
if (index === -1) return;
const title = commit.branch
.substring(index + 7)
.replace(/([^\w.]*)/, '')
.trim();
this.release[commit.branch] = {
title,
firstCommit: commit,
lastCommit: commit,
from: commit.timestamp,
to: null,
delayInDays: 0,
waitingInDays: 0,
};
}
updateTotalInfo() {
let prev: any = null;
this.statistic = Object.entries(this.release)
.sort((a: any, b: any) => a[1].firstCommit.milliseconds - b[1].firstCommit.milliseconds)
.map((a: any) => {
const item = a[1];
item.to = item.from !== item.to && item.to
? item.lastCommit.date
: null;
item.from = item.firstCommit.date;
if (prev) {
prev.waitingInDays = getRangeInDay(prev.lastCommit, item.firstCommit, 1);
}
prev = item;
return item;
})
.reverse();
}
}

View file

@ -1,4 +1,6 @@
import ICommit, { ISystemCommit } from 'ts/interfaces/Commit';
import { IDirtyFile } from 'ts/interfaces/FileInfo';
import settingsStore from 'ts/store/Settings';
import Recommendations from 'ts/helpers/Recommendations';
@ -13,6 +15,7 @@ import DataGripByExtension from './components/extension';
import DataGripByGet from './components/get';
import DataGripByPR from './components/pr';
import DataGripByTasks from './components/tasks';
import DataGripByRelease from './components/release';
class DataGrip {
firstLastCommit: any = new MinMaxCounter();
@ -39,6 +42,8 @@ class DataGrip {
tasks: any = new DataGripByTasks();
release: any = new DataGripByRelease();
initializationInfo: any = {};
clear() {
@ -54,11 +59,13 @@ class DataGrip {
this.get.clear();
this.pr.clear();
this.tasks.clear();
this.release.clear();
}
addCommit(commit: ICommit | ISystemCommit) {
if (commit.author === 'GitHub') return;
this.pr.addCommit(commit); // @ts-ignore
this.release.addCommit(commit); // @ts-ignore
if (!commit.commitType) {
this.firstLastCommit.update(commit.milliseconds, commit);
this.author.addCommit(commit);
@ -81,6 +88,7 @@ class DataGrip {
this.recommendations.updateTotalInfo(this);
this.pr.updateTotalInfo(this.author);
this.tasks.updateTotalInfo(this.pr);
this.release.updateTotalInfo();
}
updateByInitialization() {
@ -104,8 +112,8 @@ class DataGrip {
this.#updateTotalInfo();
}
updateByFiles(fileList: any[]) {
this.extension.updateTotalInfo(fileList, this.author);
updateByFiles(fileList: IDirtyFile[], removedFileList: IDirtyFile[]) {
this.extension.updateTotalInfo(fileList, removedFileList);
}
}

View file

@ -3,6 +3,7 @@ import { utils, writeFile } from 'xlsx';
import localization from 'ts/helpers/Localization';
import { ColumnTypesEnum, IColumn } from '../components/Table/interfaces/Column';
import { getDate, getDateForExcel } from './formatter';
// import localization from './Localization';
export function downloadFile(file: Blob, fileName: string) {
@ -43,6 +44,10 @@ function getFormatter(columns: IColumn[]) {
? item[column.properties]
: item;
if (column.formatter === getDate) {
return getDateForExcel(value);
}
if (column.formatter) {
value = column.formatter(value);
}
@ -53,7 +58,9 @@ function getFormatter(columns: IColumn[]) {
const type = typeof value;
if (type === 'object') {
return JSON.stringify(value);
return Object.entries(value)
.map((row: any) => row.join(': '))
.join(', ');
}
if (type === 'string') {

View file

@ -8,10 +8,7 @@ import { getNewFileName, getFileList } from './files';
import { getNewFileInfo } from './file_info';
const uniq = {};
export default function Parser(
report: string[],
parseCommit: Function,
) {
export default function Parser(report: string[]) {
const allFiles: IHashMap<IDirtyFile> = {};
const removedFiles: IHashMap<IDirtyFile> = {};
const commits: Array<ICommit | ISystemCommit> = [];
@ -94,7 +91,6 @@ export default function Parser(
// console.log(`double ${uniq[prev.date]} === ${i}`);
}
uniq[prev.date] = i;
parseCommit(prev);
}
const next = getUserInfo(message);
@ -109,7 +105,6 @@ export default function Parser(
commits.push(prev); // @ts-ignore
}
}
if (prev) parseCommit(prev);
const { fileList, fileTree } = getFileList(allFiles);
return {

View file

@ -39,12 +39,13 @@ export default function getUserInfo(logString: string): ICommit | ISystemCommit
const isSystemPR = message.indexOf('Pull request #') === 0;
const isSystemMerge = message.indexOf('Merge pull request #') === 0;
const isAutoMerge = message.indexOf('Merge branch ') === 0
|| message.indexOf('Merge remote-tracking branch') === 0
|| message.indexOf('Merge commit ') === 0
|| message.indexOf('Automatic merge from') === 0;
const isMerge = message.indexOf('Merge branch ') === 0
|| message.indexOf('Merge commit ') === 0;
const isAutoMerge = message.indexOf('Automatic merge from') === 0
|| message.indexOf('Merge remote-tracking branch') === 0;
const isSystemCommit = isSystemPR
|| isSystemMerge
|| isMerge
|| isAutoMerge;
if (isSystemCommit) {
@ -61,6 +62,11 @@ export default function getUserInfo(logString: string): ICommit | ISystemCommit
const messageParts = message.substring(14, Infinity).split(':');
prId = messageParts.shift();
task = getTask(messageParts.join(':'));
} else if (isAutoMerge) {
[, branch, toBranch ] = message
.replace(/(Automatic\smerge\sfrom\s)|(\s->\s)/gim, ',')
.replace(/(Merge\sremote-tracking\sbranch\s')|('\sinto\s)/gim, ',')
.split(',');
}
taskNumber = getTaskNumber(task);

View file

@ -62,4 +62,4 @@ export default function applyUrlCommands(callback: Function) {
} else {
callback();
}
}
}

View file

@ -53,6 +53,12 @@ export function getDate(timestamp: string) {
return date.toLocaleString('ru-RU', { day: 'numeric', month: 'long', year: 'numeric' });
}
export function getDateForExcel(timestamp: string) {
if (!timestamp) return '';
const date = new Date(timestamp);
return date.toISOString().substring(0, 10).split('-').reverse().join('.');
}
export function getShortDate(timestamp: string) {
if (!timestamp) return '';
const date = new Date(timestamp);

View file

@ -29,7 +29,7 @@ function getTranslationWrapper(translation: string) {
i18next.use(initReactI18next).init({
lng: 'ru', // if you're using a language detector, do not define the lng option
debug: true,
debug: false,
resources: {
ru: getTranslationWrapper(ru),
en: getTranslationWrapper(en),
@ -37,4 +37,4 @@ i18next.use(initReactI18next).init({
// if you see an error like: "Argument of type 'DefaultTFuncReturn' is not assignable to parameter of type xyz"
// set returnNull to false (and also in the i18next.d.ts options)
// returnNull: false,
});
});

View file

@ -6,6 +6,8 @@ export interface IDirtyFile {
lines: number; // 38, line in file for this moment
created: ICommit,
path: string[],
extension: string,
firstName: string,
authors: {
[author: string]: {
added: number; // 38,

View file

@ -69,9 +69,21 @@ export const TEAM = [
},
{},
{
id: 'tree',
link: '/team/tree',
title: 'sidebar.team.tree',
id: 'files',
link: '/team/files',
title: 'sidebar.team.files',
icon: './assets/menu/team_files.svg',
},
{
id: 'removedFiles',
link: '/team/removedFiles',
title: 'sidebar.team.removedFiles',
icon: './assets/menu/team_files.svg',
},
{
id: 'extension',
link: '/team/extension',
title: 'sidebar.team.extension',
icon: './assets/menu/team_files.svg',
},
{
@ -80,6 +92,12 @@ export const TEAM = [
title: 'sidebar.team.tasks',
icon: './assets/menu/team_date_1.svg',
},
{
id: 'release',
link: '/team/release',
title: 'sidebar.team.release',
icon: './assets/menu/team_date_1.svg',
},
{},
{
id: 'commits',

View file

@ -11,6 +11,7 @@ import dataGripStore from 'ts/store/DataGrip';
import ICommonPageProps from 'ts/components/Page/interfaces/CommonPageProps';
import PageWrapper from 'ts/components/Page/wrapper';
import PageColumn from 'ts/components/Page/column';
import UiKitTags from 'ts/components/UiKit/components/Tags';
import DataLoader from 'ts/components/DataLoader';
import Pagination from 'ts/components/DataLoader/components/Pagination';
import getFakeLoader from 'ts/components/DataLoader/helpers/formatter';
@ -29,10 +30,11 @@ import Description from 'ts/components/Description';
interface IAuthorViewProps {
response?: IPagination<any>;
updateSort?: Function;
rowsForExcel?: any[];
mode?: string;
}
function AuthorView({ response, updateSort, mode }: IAuthorViewProps) {
function AuthorView({ response, updateSort, rowsForExcel, mode }: IAuthorViewProps) {
const { t } = useTranslation();
if (!response) return null;
@ -45,6 +47,7 @@ function AuthorView({ response, updateSort, mode }: IAuthorViewProps) {
return (
<DataView
rowsForExcel={rowsForExcel}
rows={response.content}
sort={response.sort}
updateSort={updateSort}
@ -57,6 +60,15 @@ function AuthorView({ response, updateSort, mode }: IAuthorViewProps) {
properties="author"
width={200}
/>
<Column
template={(row: any) => {
let value = 'работает';
if (row.isDismissed) value = 'уволен';
if (row.isStaff) value = 'помощник';
return <UiKitTags value={value} />;
}}
width={100}
/>
<Column
isSortable="daysWorked"
title="page.team.author.workedLosses"
@ -179,7 +191,10 @@ const Author = observer(({
})}
watch={mode}
>
<AuthorView mode={mode} />
<AuthorView
mode={mode}
rowsForExcel={rows}
/>
<Pagination />
</DataLoader>
<PageWrapper>

View file

@ -0,0 +1,161 @@
import React from 'react';
import { observer } from 'mobx-react-lite';
import { IPaginationRequest, IPagination } from 'ts/interfaces/Pagination';
import dataGripStore from 'ts/store/DataGrip';
import ICommonPageProps from 'ts/components/Page/interfaces/CommonPageProps';
import DataLoader from 'ts/components/DataLoader';
import Pagination from 'ts/components/DataLoader/components/Pagination';
import getFakeLoader from 'ts/components/DataLoader/helpers/formatter';
import NothingFound from 'ts/components/NothingFound';
import Title from 'ts/components/Title';
import DataView from 'ts/components/DataView';
import Column from 'ts/components/Table/components/Column';
import { ColumnTypesEnum } from 'ts/components/Table/interfaces/Column';
import getOptions from 'ts/components/LineChart/helpers/getOptions';
import LineChart from 'ts/components/LineChart';
import { getMax } from 'ts/pages/Common/helpers/getMax';
import ExternalLink from 'ts/components/ExternalLink';
import userSettings from 'ts/store/UserSettings';
interface IFilesViewProps {
response?: IPagination<any>;
updateSort?: Function;
rowsForExcel?: any[];
mode?: string;
}
function ExtensionView({ response, updateSort, rowsForExcel, mode }: IFilesViewProps) {
if (!response) return null;
const current = getMax(response, 'current', 'count');
const removed = getMax(response, 'removed', 'count');
const max = Math.max(current, removed);
const filesChart = getOptions({ max, suffix: 'page.team.extension.files' });
return (
<DataView
rowsForExcel={rowsForExcel}
rows={response.content}
sort={response.sort}
updateSort={updateSort}
type={mode === 'print' ? 'cards' : undefined}
columnCount={mode === 'print' ? 3 : undefined}
>
<Column
isFixed
template={ColumnTypesEnum.STRING}
title="page.team.extension.name"
properties="extension"
width={200}
/>
<Column
template={ColumnTypesEnum.STRING}
title="page.team.extension.path"
width={350}
properties="path"
/>
{mode === 'print' ? (
<Column
isSortable
title="page.team.pr.task"
properties="task"
width={120}
/>
) : (
<Column
isSortable
template={(value: string, row: any) => {
if (!row.path) return '';
return (
<ExternalLink
link={`${userSettings?.settings?.linksPrefix?.task || '/'}${value}`}
text={value}
/>
);
}}
title="page.team.pr.task"
properties="task"
width={120}
/>
)}
<Column
template={ColumnTypesEnum.SHORT_NUMBER}
properties="current"
formatter={(value: any) => value.count}
/>
<Column
isSortable
title="page.team.extension.current.count"
properties="current"
width={170}
minWidth={170}
template={(value: any) => (
<LineChart
options={filesChart}
value={value.count}
/>
)}
/>
<Column
template={ColumnTypesEnum.SHORT_NUMBER}
properties="removed"
formatter={(value: any) => value.count}
/>
<Column
isSortable
title="page.team.extension.removed.count"
properties="removed"
width={170}
minWidth={170}
template={(value: any) => (
<LineChart
options={filesChart}
value={value.count}
/>
)}
/>
</DataView>
);
}
ExtensionView.defaultProps = {
response: undefined,
};
const Extension = observer(({
mode,
}: ICommonPageProps): React.ReactElement | null => {
const rows = dataGripStore.dataGrip.extension.statistic;
if (rows?.length < 2) return mode !== 'print' ? (<NothingFound />) : null;
return (
<>
{mode === 'print' ? (
<Title title="sidebar.team.extension"/>
) : (
<>
<br/>
<br/>
<br/>
</>
)}
<DataLoader
to="response"
loader={(pagination?: IPaginationRequest) => getFakeLoader({
content: rows, pagination, mode,
})}
watch={mode}
>
<ExtensionView
mode={mode}
rowsForExcel={rows}
/>
<Pagination />
</DataLoader>
</>
);
});
export default Extension;

View file

@ -15,15 +15,17 @@ import { getMax } from 'ts/pages/Common/helpers/getMax';
import { getDate } from 'ts/helpers/formatter';
interface IPRViewProps {
mode?: string;
response?: IPagination<any>;
updateSort?: Function;
rowsForExcel?: any[];
mode?: string;
}
function AllPR({
mode,
response,
updateSort,
rowsForExcel,
mode,
}: IPRViewProps) {
if (!response) return null;
@ -36,6 +38,7 @@ function AllPR({
return (
<DataView
rowsForExcel={rowsForExcel}
rows={response.content}
sort={response.sort}
updateSort={updateSort}

View file

@ -22,10 +22,11 @@ const order = Object.values(TITLES);
interface IAuthorsProps {
response?: IPagination<any>;
updateSort?: Function;
rowsForExcel?: any[];
mode?: string;
}
function Authors({ response, updateSort, mode }: IAuthorsProps) {
function Authors({ response, updateSort, rowsForExcel, mode }: IAuthorsProps) {
if (!response) return null;
const timeChart = getOptions({ order, limit: 3 });
@ -40,6 +41,7 @@ function Authors({ response, updateSort, mode }: IAuthorsProps) {
return (
<DataView
rowsForExcel={rowsForExcel}
rows={response.content}
sort={response.sort}
updateSort={updateSort}

View file

@ -62,7 +62,10 @@ const PR = observer(({
content: authorsStat, pagination, sort, mode,
})}
>
<Authors mode={mode}/>
<Authors
mode={mode}
rowsForExcel={authorsStat}
/>
<Pagination/>
</DataLoader>
@ -78,7 +81,10 @@ const PR = observer(({
sort,
})}
>
<All mode={mode} />
<All
mode={mode}
rowsForExcel={rows}
/>
{mode !== 'print' && <Pagination/>}
</DataLoader>
</>

View file

@ -0,0 +1,142 @@
import React from 'react';
import { observer } from 'mobx-react-lite';
import { IPaginationRequest, IPagination } from 'ts/interfaces/Pagination';
import dataGripStore from 'ts/store/DataGrip';
import ICommonPageProps from 'ts/components/Page/interfaces/CommonPageProps';
import DataLoader from 'ts/components/DataLoader';
import Pagination from 'ts/components/DataLoader/components/Pagination';
import getFakeLoader from 'ts/components/DataLoader/helpers/formatter';
import NothingFound from 'ts/components/NothingFound';
import Title from 'ts/components/Title';
import DataView from 'ts/components/DataView';
import Column from 'ts/components/Table/components/Column';
import { ColumnTypesEnum } from 'ts/components/Table/interfaces/Column';
import getOptions from 'ts/components/LineChart/helpers/getOptions';
import LineChart from 'ts/components/LineChart';
import { getMax } from 'ts/pages/Common/helpers/getMax';
import { getDate } from 'ts/helpers/formatter';
interface IReleaseViewProps {
response?: IPagination<any>;
updateSort?: Function;
rowsForExcel?: any[];
mode?: string;
}
function ReleaseView({ response, updateSort, rowsForExcel, mode }: IReleaseViewProps) {
if (!response) return null;
const delay = getMax(response, 'delayInDays');
const waiting = getMax(response, 'waitingInDays');
const max = Math.max(delay, waiting);
const delayChart = getOptions({ max, suffix: 'page.team.release.chart' });
return (
<DataView
rowsForExcel={rowsForExcel}
rows={response.content}
sort={response.sort}
updateSort={updateSort}
type={mode === 'print' ? 'cards' : undefined}
columnCount={mode === 'print' ? 3 : undefined}
>
<Column
isFixed
template={ColumnTypesEnum.STRING}
title="page.team.release.title"
properties="title"
width={200}
/>
<Column
template={ColumnTypesEnum.STRING}
title="page.team.release.from"
width={150}
properties="from"
formatter={getDate}
/>
<Column
template={ColumnTypesEnum.STRING}
title="page.team.release.to"
width={150}
properties="to"
formatter={getDate}
/>
<Column
template={ColumnTypesEnum.SHORT_NUMBER}
properties="delayInDays"
/>
<Column
isSortable
title="page.team.release.delay"
properties="delayInDays"
width={170}
minWidth={170}
template={(value: number) => (
<LineChart
options={delayChart}
value={value}
/>
)}
/>
<Column
template={ColumnTypesEnum.SHORT_NUMBER}
properties="waitingInDays"
/>
<Column
isSortable
title="page.team.release.waiting"
properties="waitingInDays"
width={170}
minWidth={170}
template={(value: number) => (
<LineChart
options={delayChart}
value={value}
/>
)}
/>
</DataView>
);
}
ReleaseView.defaultProps = {
response: undefined,
};
const Release = observer(({
mode,
}: ICommonPageProps): React.ReactElement | null => {
const rows = dataGripStore.dataGrip.release.statistic;
if (rows?.length < 2) return mode !== 'print' ? (<NothingFound />) : null;
return (
<>
{mode === 'print' ? (
<Title title="sidebar.team.extension"/>
) : (
<>
<br/>
<br/>
<br/>
</>
)}
<DataLoader
to="response"
loader={(pagination?: IPaginationRequest) => getFakeLoader({
content: rows, pagination, mode,
})}
watch={mode}
>
<ReleaseView
mode={mode}
rowsForExcel={rows}
/>
<Pagination />
</DataLoader>
</>
);
});
export default Release;

View file

@ -11,7 +11,6 @@ import Pagination from 'ts/components/DataLoader/components/Pagination';
import getFakeLoader from 'ts/components/DataLoader/helpers/formatter';
import NothingFound from 'ts/components/NothingFound';
import Title from 'ts/components/Title';
// import Table from 'ts/components/Table';
import DataView from 'ts/components/DataView';
import Column from 'ts/components/Table/components/Column';
import { ColumnTypesEnum } from 'ts/components/Table/interfaces/Column';
@ -22,10 +21,11 @@ import Recommendations from 'ts/components/Recommendations';
interface IScopeViewProps {
response?: IPagination<any>;
updateSort?: Function;
rowsForExcel?: any[];
mode?: string;
}
function ScopeView({ response, updateSort, mode }: IScopeViewProps) {
function ScopeView({ response, updateSort, rowsForExcel, mode }: IScopeViewProps) {
if (!response) return null;
const typeChart = getOptions({ order: dataGripStore.dataGrip.type.list });
@ -33,6 +33,7 @@ function ScopeView({ response, updateSort, mode }: IScopeViewProps) {
return (
<DataView
rowsForExcel={rowsForExcel}
rows={response.content}
sort={response.sort}
updateSort={updateSort}
@ -134,7 +135,10 @@ const Scope = observer(({
})}
watch={mode}
>
<ScopeView mode={mode} />
<ScopeView
mode={mode}
rowsForExcel={rows}
/>
<Pagination />
</DataLoader>
</>

View file

@ -26,16 +26,18 @@ import userSettings from 'ts/store/UserSettings';
interface ITasksViewProps {
response?: IPagination<any>;
updateSort?: Function;
rowsForExcel?: any[];
mode?: string;
}
function TasksView({ response, updateSort, mode }: ITasksViewProps) {
function TasksView({ response, updateSort, rowsForExcel, mode }: ITasksViewProps) {
if (!response) return null;
const commitsChart = getOptions({ max: getMax(response, 'commits'), suffix: 'page.team.type.tasksSmall' });
return (
<DataView
rowsForExcel={rowsForExcel}
rows={response.content}
sort={response.sort}
updateSort={updateSort}
@ -158,7 +160,10 @@ const Tasks = observer(({
<br/>
<br/>
<br/>
<TasksView mode={mode} />
<TasksView
mode={mode}
rowsForExcel={rows}
/>
<Pagination />
</DataLoader>
);

View file

@ -1,4 +1,4 @@
import React from 'react';
import React, { useEffect } from 'react';
import { observer } from 'mobx-react-lite';
import { useTranslation } from 'react-i18next';
@ -15,6 +15,7 @@ import Column from 'ts/components/Table/components/Column';
import { ColumnTypesEnum } from 'ts/components/Table/interfaces/Column';
import LineChart from 'ts/components/LineChart';
import getOptions from 'ts/components/LineChart/helpers/getOptions';
import NothingFound from 'ts/components/NothingFound';
import TreeFilters from './TreeFilters';
import { getSubTreeByPath, getArrayFromTree } from '../helpers/tree';
@ -121,12 +122,25 @@ TreeView.defaultProps = {
response: undefined,
};
const Tree = observer((): React.ReactElement => {
interface ITreeProps {
type?: string
}
const Tree = observer(({ type }: ITreeProps): React.ReactElement => {
const { t } = useTranslation();
const fileTree = dataGripStore.fileTree;
const fileTree = type === 'removed'
? dataGripStore.removedFileTree
: dataGripStore.fileTree;
const subTree = getSubTreeByPath(fileTree, treeStore.selectedPath);
const fileList = getArrayFromTree(subTree);
// @ts-ignore
if (!fileTree?.lines) return <NothingFound />;
useEffect(() => {
treeStore.updateFilter('selectedPath', []);
}, [type]);
return (
<>
<Title title={t('common.filters')} />
@ -138,7 +152,7 @@ const Tree = observer((): React.ReactElement => {
loader={(pagination?: IPaginationRequest) => getFakeLoader({
content: fileList, pagination: { ...pagination, size: 500 },
})}
watch={treeStore.hash}
watch={`${treeStore.hash}${type}`}
>
<TreeView />
<Pagination />

View file

@ -27,10 +27,11 @@ import { getMax } from 'ts/pages/Common/helpers/getMax';
interface ITypeViewProps {
response?: IPagination<any>;
updateSort?: Function;
rowsForExcel?: any[];
mode?: string;
}
function TypeView({ response, updateSort, mode }: ITypeViewProps) {
function TypeView({ response, updateSort, rowsForExcel, mode }: ITypeViewProps) {
if (!response) return null;
const taskChart = getOptions({ max: getMax(response, 'tasks'), suffix: 'page.team.type.tasksSmall' });
@ -39,6 +40,7 @@ function TypeView({ response, updateSort, mode }: ITypeViewProps) {
return (
<DataView
rowsForExcel={rowsForExcel}
rows={response.content}
sort={response.sort}
updateSort={updateSort}
@ -137,7 +139,10 @@ const Type = observer(({
})}
watch={mode}
>
<TypeView mode={mode} />
<TypeView
mode={mode}
rowsForExcel={rows}
/>
<Pagination />
</DataLoader>
<PageWrapper>

View file

@ -25,10 +25,11 @@ import { getMax } from 'ts/pages/Common/helpers/getMax';
interface IWeekViewProps {
response?: IPagination<any>;
updateSort?: Function;
rowsForExcel?: any[];
mode?: string;
}
function WeekView({ response, updateSort, mode }: IWeekViewProps) {
function WeekView({ response, updateSort, rowsForExcel, mode }: IWeekViewProps) {
if (!response) return null;
const tasksChart = getOptions({ max: getMax(response, 'tasks'), order: dataGripStore.dataGrip.type.list, suffix: 'page.team.week.tasks' });
@ -46,6 +47,7 @@ function WeekView({ response, updateSort, mode }: IWeekViewProps) {
return (
<DataView
rowsForExcel={rowsForExcel}
rows={response.content}
sort={response.sort}
updateSort={updateSort}
@ -181,7 +183,10 @@ const Week = observer(({
})}
watch={mode}
>
<WeekView mode={mode} />
<WeekView
mode={mode}
rowsForExcel={rows}
/>
{mode !== 'print' && <Pagination />}
</DataLoader>
</>

View file

@ -13,6 +13,7 @@ import Scope from './components/Scope';
import Tempo from './components/Tempo';
import Total from './components/Total';
import Tree from './components/Tree';
import Extension from './components/Extension2';
import Type from './components/Type';
import Week from './components/Week';
import Month from './components/Month';
@ -20,6 +21,7 @@ import Tasks from './components/Tasks';
import Top from './components/Top';
import Pr from './components/PR';
import Print from './components/Print';
import Release from './components/Release';
function getViewById(page?: string) {
const mode = printStore.processing ? 'print' : undefined;
@ -32,7 +34,10 @@ function getViewById(page?: string) {
if (page === 'week') return <Week mode={mode}/>;
if (page === 'month') return <Month mode={mode}/>;
if (page === 'hours') return <Hours mode={mode}/>;
if (page === 'tree') return <Tree/>;
if (page === 'files') return <Tree/>;
if (page === 'removedFiles') return <Tree type="removed" />;
if (page === 'extension') return <Extension mode={mode}/>;
if (page === 'release') return <Release mode={mode}/>;
if (page === 'commits') return <Commits/>;
if (page === 'changes') return <Changes/>;
if (page === 'words') return <PopularWords mode={mode}/>;

View file

@ -1,6 +1,6 @@
import { makeObservable, observable, action } from 'mobx';
import ICommit from 'ts/interfaces/Commit';
import ICommit, { ISystemCommit } from 'ts/interfaces/Commit';
import { IDirtyFile, IFileTree } from 'ts/interfaces/FileInfo';
import achievements from 'ts/helpers/achievement/byCompetition';
import dataGrip from 'ts/helpers/DataGrip';
@ -52,7 +52,12 @@ class DataGripStore implements IDataGripStore {
fileList,
fileTree,
removed,
} = parser(dump || [], (commit: ICommit) => dataGrip.addCommit(commit));
} = parser(dump || []);
commits.sort((a, b) => a.milliseconds - b.milliseconds);
commits.forEach((commit: ICommit | ISystemCommit) => {
dataGrip.addCommit(commit);
});
this.commits = commits;
this.fileList = fileList;
@ -70,7 +75,7 @@ class DataGripStore implements IDataGripStore {
);
dataGrip.updateByInitialization();
dataGrip.updateByFiles(fileList);
dataGrip.updateByFiles(fileList, removed.fileList);
achievements.updateByDataGrip(dataGrip.author.statistic);
}

View file

@ -16,7 +16,8 @@ export default `
§ sidebar.team.day: Tageweise
§ sidebar.team.week: Nach Wochen
§ sidebar.team.month: Nach Monaten
§ sidebar.team.tree: Analysieren von Dateien
§ sidebar.team.tree: Dateien
§ sidebar.team.removedTree: Gelöschte dateien
§ sidebar.team.files: Dateien
§ sidebar.team.removedFiles: Gelöschte Dateien
§ sidebar.team.tasks: Aufgabenliste

View file

@ -16,8 +16,11 @@ export default `
§ sidebar.team.day: By day
§ sidebar.team.week: By week
§ sidebar.team.month: By month
§ sidebar.team.tree: Files
§ sidebar.team.files: Files
§ sidebar.team.removedFiles: Removed files
§ sidebar.team.extension: Extensions
§ sidebar.team.tasks: Tasks
§ sidebar.team.release: Releases
§ sidebar.team.hours: Work schedule
§ sidebar.team.commits: All commits
§ sidebar.team.changes: All changes

View file

@ -141,6 +141,16 @@ export default `
§ page.team.tasks.prAuthor: Merged by user
§ page.team.tasks.prDelayDays: Delay before merge in days
§ page.team.tasks.comments: Comments
§ page.team.extension.name: Extension
§ page.team.extension.path: Path
§ page.team.extension.current.count: Number
§ page.team.extension.removed.count: Number of removed
§ page.team.extension.files: files
§ page.team.release.title: Release
§ page.team.release.from: Create date
§ page.team.release.to: Last merge date
§ page.team.release.delay: Preparation days
§ page.team.release.waiting: Days of waiting for next release
§ page.person.print.photo.title: Photo
§ page.person.print.photo.description: space for a photo
§ page.person.total.title: Main characteristics

View file

@ -16,7 +16,8 @@ export default `
§ sidebar.team.day: Por días
§ sidebar.team.week: Por semana
§ sidebar.team.month: Por mes
§ sidebar.team.tree: Análisis de archivos
§ sidebar.team.tree: Archivos
§ sidebar.team.removedTree: Archivos eliminados
§ sidebar.team.files: Ficheros
§ sidebar.team.removedFiles: Archivos eliminados
§ sidebar.team.tasks: Lista de tareas

View file

@ -1,202 +1,210 @@
export default `
§ page.welcome.step1: Выполните команду в корне вашего проекта
§ page.welcome.step3: Перетащите
§ page.welcome.step4: файл log.txt на эту страницу
§ page.welcome.description: Git создаст файл log.txt. Он содержит данные для построения отчёта. Или git shortlog -s -n -e если отчёт вам не нужен. Создайте файл [.mailmap|https://git-scm.com/docs/gitmailmap] в корне проекта, чтобы объединить статистику по сотрудникам.
§ page.welcome.warning1: Сервис *НЕ ХРАНИТ* и *НЕ ПЕРЕДАЁТ* ваши данные. Все расчёты выполняются локально в вашем браузере прямо на вашей машине.
§ page.welcome.warning2: Сервис *НЕ СОБИРАЕТ СТАТИСТИКУ* по проектам. Вы можете отключить интернет, проверить трафик и даже собрать локальный билд из [исходников|https://github.com/bakhirev/assayo].
§ page.common.words.title: Статистика по словам
§ page.common.words.description: самое популярное слово. Встречается $1 раза.
§ page.common.commits.title: Количество коммитов по дням
§ page.common.commits.description: ($1) самый продуктивный день по числу коммитов.
§ page.common.commits.title2: $1 сделано коммитов: $2
§ page.common.filter.allUsers: Не имеет значения
§ page.print.modal.title: Что распечатываем?
§ page.print.modal.page: Текущую страницу
§ page.print.modal.type: Текущий раздел
§ page.print.modal.all: Всю статистику
§ page.print.modal.cancel: Отмена
§ page.print.tableOfContents: Оглавление
§ page.print.title: Отчёт по git-репозиторию
§ page.welcome.step1: Ejecute el comando en la raíz de su proyecto
§ page.welcome.step3: Arrastrais
§ page.welcome.step4: fichero log.txt a esta página
§ page.welcome.description: Git creará un archivo log.txt. Contiene los datos para construir el informe. Ejecute el comando git shortlog -s -n -e еsi el informe no es necesario. Crear un archivo [.mailmap|https://git-scm.com/docs/gitmailmap] en la raíz del proyecto para combinar las estadísticas de los empleados.
§ page.welcome.warning1: El Servicio no ALMACENA ni TRANSMITE sus datos. Todos los cálculos se realizan en su computadora.
§ page.welcome.warning2: El Servicio no RECOPILA ESTADÍSTICAS sobre proyectos. Puedes ver [código fuente|https://github.com/bakhirev/assayo].
§ page.common.words.title: Estadísticas en palabras
§ page.common.words.description: la palabra más popular. Se encuentra $1 veces.
§ page.common.commits.title: Número de commits por día
§ page.common.commits.description: ($1) el día más productivo por número de commits.
§ page.common.commits.title2: $1 commits hechas: $2
§ page.common.filter.allUsers: No tiene importancia
§ page.print.modal.title: Lo que imprimimos?
§ page.print.modal.page: Página actual
§ page.print.modal.type: Sección actual
§ page.print.modal.all: Todas las estadísticas
§ page.print.modal.cancel: Cancelación
§ page.print.tableOfContents: Tabla
§ page.print.title: Informe del repositorio git
§ page.print.sub_title: «$1»
§ page.print.description: Данные для отчёта были получены из истории коммитов.
§ page.team.author.title: Статистика по сотрудникам
§ page.team.author.description1: *Часть статистики* (скорость работы, затраченные деньги и т.п.) *по сотрудникам с типом «Помощник» не считается*, т.к. это эпизодическая роль в проекте. Предполагаем, что они не влияют на проект, а их правками можно пренебречь на фоне общего объема работы.
§ page.team.author.description2: *Сортировка по умолчанию* это сортировка по количеству задач и группам (текущие, уволенные, помогающие сотрудники).
§ page.team.author.types: Тип работ
§ page.team.author.commits: Коммитов
§ page.team.author.commitsSmall: коммитов
§ page.team.author.tasks: Задач
§ page.team.author.tasksSmall: задач
§ page.team.author.workedLosses: Дни с коммитами и без
§ page.team.author.worked: работа
§ page.team.author.losses: дни без коммитов
§ page.team.author.days: дней
§ page.team.author.daysForTask: Дней на задачу
§ page.team.author.scopes: Фич
§ page.team.author.moneyAll: Получил
§ page.team.author.moneyWorked: Отработал
§ page.team.author.moneyLosses: Переплата
§ page.team.hours.title: Распределение коммитов в течении каждого дня недели
§ page.team.month.title: Календарь работы по проекту
§ page.team.scope.title: Статистика по фичам
§ page.team.scope.scope: Фича
§ page.team.scope.days: Раб. дней
§ page.team.scope.authorsDays: Человеко-дней
§ page.team.scope.tasks: Задач
§ page.team.scope.commits: Коммитов
§ page.team.scope.commitsSmall: коммитов
§ page.team.scope.types: Тип работ
§ page.team.scope.authors: Персональный вклад
§ page.team.scope.cost: Стоимость
§ page.team.type.title: Статистика по типам задач
§ page.team.type.description: *Персональный вклад* считается по количеству коммитов, а не объему измененных строк или файлов. Поэтому следует так же смотреть раздел «Анализ файлов», чтобы оценить масштаб изменений.
§ page.team.type.type: Тип работы
§ page.team.type.tasks: Задач
§ page.team.type.tasksSmall: задач
§ page.team.type.days: Дней
§ page.team.type.daysSmall: дней
§ page.team.type.authorsDays: Человеко-дней
§ page.team.type.commits: Коммитов
§ page.team.type.authors: Персональный вклад
§ page.team.total.titleA: Объём работ
§ page.team.total.titleB: Стоимость
§ page.team.total.daysWorked.title: человеко-дней
§ page.team.total.daysWorked.description: Учтены только дни, в которые делались коммиты
§ page.team.total.commits.title: коммитов
§ page.team.total.commits.description: Удалённые ветки не считаются
§ page.team.total.daysLosses.title: дней без коммитов
§ page.team.total.daysLosses.description: Все дни минус: праздники, выходные, отпуск, дни с коммитами
§ page.team.total.employment.title: работает / уволилось
§ page.team.total.employment.description: Если сотрудник в течении месяца не сделал ни одного коммита, он считается уволенным
§ page.team.total.moneyAll.title: общая
§ page.team.total.moneyAll.description: Суммарные затраты на зп
§ page.team.total.moneyWorked.title: фактическая
§ page.team.total.moneyWorked.description: Фактически отработанные дни умноженные на среднюю зп
§ page.team.total.moneyLosses.title: возможная переплата
§ page.team.total.moneyLosses.description: Оплаченные рабочие дни, когда коммитов не было
§ page.team.total.weekendPayment.title: работа на выходных
§ page.team.total.weekendPayment.description: Суммарная переплата за работу в выходные дни
§ page.team.total.workSpeed.title: задач в день
§ page.team.total.workSpeed.description: Средняя скорость работы команды при текущем составе сотрудников
§ page.team.total.moneySpeed.title: в месяц
§ page.team.total.moneySpeed.description: Прогнозируемая сумма выплаты на зп при текущем составе сотрудников без учета налогов и сопутствующих затрат
§ page.team.total.description1: *Человеко-дни* это работа одного сотрудника в течение одного рабочего дня. Например, за один календарный день, команда из трех сотрудников выдает объем работы в три человеко-дня.
§ page.team.total.description2: *Днями прогулов* считаются только рабочие дни, когда коммиты могли бы быть сделаны. Выходные, государственные праздники и отпуска в расчёте не участвуют.
§ page.team.total.description3: Карточка *работает и уволилось* показывает фактический состав сотрудников, которые постоянно участвуют в работе. Кроме этого, есть «помощники» это сотрудники, как правило другой специализации, которые могут иногда делать коммиты в проект.
§ page.team.total.description4: *Переплатой* считаются только рабочие дни, когда коммиты могли бы быть сделаны. Выходные, государственные праздники и отпуска в расчёте не участвуют. Именно поэтому переплата + фактическая стоимость != общей. В общей стоимости заложена оплата выходных, государственных праздников и отпусков.
§ page.team.total.description5: *Работой на выходных* считается по коэффициенту х2 от оплаты обычного дня. Выше отображена именно переплата (х1), т.к. сам факт переработки в данном контексте не интересен. Мы не смотрим скорость сжигания бюджета. Мы смотрим переплату при увеличении скорости работы.
§ page.team.tree.title: Дерево проекта с учётом выбранных фильтров
§ page.team.tree.filters.author: Сотрудник
§ page.team.tree.filters.commits: Количество коммитов
§ page.team.tree.filters.help: Минимальное количество коммитов, которое сделал сотрудник в файле
§ page.team.tree.filters.all: Все сотрудники
§ page.team.tree.add: Кто добавлял
§ page.team.tree.change: Кто менял
§ page.team.tree.remove: Кто удалял
§ page.team.tree.line: строк
§ page.team.tree.lineAdd: добавили
§ page.team.tree.lineRemove: изменили
§ page.team.week.title: Статистика по неделям
§ page.team.week.date: Дата
§ page.team.week.numberTasks: Количество задач
§ page.team.week.people: Количество человек
§ page.team.week.line: Изменение строк
§ page.team.week.days: Дни с коммитами и без
§ page.team.week.lossesDetails: Кто не коммитил
§ page.team.week.add: добавили
§ page.team.week.change: изменили
§ page.team.week.remove: удалили
§ page.team.week.hasCommits: были коммиты
§ page.team.week.hasNotCommits: небыло коммитов
§ page.team.week.days: дней
§ page.team.week.tasks: задач
§ page.team.pr.task: Задача
§ page.team.pr.tasks: задач
§ page.team.pr.firstCommitTime: Первый коммит
§ page.team.pr.lastCommitTime: Последний
§ page.team.pr.workDays: Дней разработки
§ page.team.pr.delayDays: Дней ожидания влития
§ page.team.pr.commits: Коммиты
§ page.team.pr.date: Дата влития
§ page.team.pr.mergeAuthor: Влил
§ page.team.pr.author: Сотрудник
§ page.team.pr.middleTimeRelease: Среднее время поставки (дни)
§ page.team.pr.work: разработка
§ page.team.pr.delay: ожидание
§ page.team.pr.days: дней
§ page.team.pr.oneTaskDays: Время потраченное на одну задачу
§ page.team.pr.description1: *Время разработки* это разница времени от первого до последнего коммита по задаче. Не важно были перерывы в несколько дней между коммитами или нет. Сам факт какого-либо коммита увеличивает время.
§ page.team.pr.description2: *Время ожидания* это время между последним коммитом и влитием кода. Оно показывает фактический простой в ожидании чего-либо.
§ page.team.pr.description3: *Зачем отображать время разработки* без разбивки на кодинг и код-ревью? Затем, чтобы показать бизнесу фактическое время поставки кода. Ожидание тестирования, замечания на ревью, проблемы DevOps и прочие несовершенства процесса, как раз уже заложены в этот срок.
§ page.team.pr.statByAuthors: Статистика по сотрудникам
§ page.team.pr.longDelay: Длительное ожидание влития
§ page.person.print.photo.title: Фотография
§ page.person.print.photo.description: место для фотографии
§ page.person.total.title: Основные характеристики
§ page.person.total.daysWorked.title: дней работы
§ page.person.total.daysWorked.description: Учтены только дни, в которые делались коммиты
§ page.person.total.tasks.title: задач
§ page.person.total.tasks.description: Если коммиты правильно подписаны
§ page.person.character.title: Персонаж
§ page.person.achievement.title: Достижения
§ page.person.achievement.positive: Позитивные
§ page.person.achievement.normal: Нейтральные
§ page.person.achievement.negative: Негативные
§ page.person.achievement.description: Чем больше сотрудник набрал отрицательных достижений, тем больше вероятность, что ситуация нестандартная. Возможно, стоит изменить режим его работы, задачи или отчётность. Следует поговорить с ним и узнать, какие проблемы мешают его работе.
§ page.person.gets.title: Взятые геты:
§ page.person.gets.description: «Взять гет» в данном случае означает первым оставить коммит к задаче с «красивым» номером.
§ page.person.business.days.title: дней работы
§ page.person.business.days.description: Учтены только дни, в которые делались коммиты
§ page.person.business.tasks.title: задач
§ page.person.business.tasks.description: Если коммиты правильно подписаны
§ page.person.business.losses.title: дней без коммитов
§ page.person.business.losses.description: Все дни минус: праздники, выходные, отпуск, дни с коммитами
§ page.person.business.commits.title: коммитов
§ page.person.business.commits.description: Удалённые ветки не считаются
§ page.person.business.time.description: Время от первого, до последнего коммита (в том числе, нерабочие дни)
§ page.person.business.time.title: Дней на проекте:
§ page.person.business.time.dismissed: (уволен)
§ page.person.business.time.staff: (не в команде)
§ page.person.business.achievements: Достижения
§ page.person.changes.title: Достижения
§ page.print.description: Los datos para el informe se obtuvieron del historial de commits.
§ page.team.author.title: Estadísticas de los empleados
§ page.team.author.description1: Parte de las estadísticas (la velocidad del trabajo, el dinero gastado, etc.) para los empleados con el tipo de "Asistente" no cuenta, ya que no es un rol permanente en el proyecto. Su trabajo es insignificante y puede ser ignorado.
§ page.team.author.description2: La clasificación predeterminada es la clasificación por número de tareas y grupos(empleados actuales, despedidos, ayudantes).
§ page.team.author.types: Tipo de trabajo
§ page.team.author.commits: Commits
§ page.team.author.commitsSmall: commits
§ page.team.author.tasks: Tareas
§ page.team.author.tasksSmall: Tareas
§ page.team.author.workedLosses: Días con y sin commits
§ page.team.author.worked: trabajo
§ page.team.author.losses: días sin commits
§ page.team.author.days: día
§ page.team.author.daysForTask: Días por tarea
§ page.team.author.scopes: Elaboración definitiva
§ page.team.author.moneyAll: Dinero recibido
§ page.team.author.moneyWorked: Trabajo
§ page.team.author.moneyLosses: Sobrepago
§ page.team.hours.title: Distribución del trabajo cada día de la semana
§ page.team.month.title: Calendario del proyecto
§ page.team.scope.title: Estadísticas de módulos
§ page.team.scope.scope: Elaboración definitiva
§ page.team.scope.days: Siervo. día
§ page.team.scope.authorsDays: Días-persona
§ page.team.scope.tasks: Tareas
§ page.team.scope.commits: Commits
§ page.team.scope.commitsSmall: commits
§ page.team.scope.types: Tipo de trabajo
§ page.team.scope.authors: Contribución personal
§ page.team.scope.cost: Costo
§ page.team.type.title: Estadísticas por tipo de tarea
§ page.team.type.description: *Contribución personal* se considera por el número de Commits, no por el volumen de líneas o archivos modificados. Por lo tanto, también debe ver la sección "Análisis de archivos" para evaluar el alcance de los cambios
§ page.team.type.type: Tipo de trabajo
§ page.team.type.tasks: Tareas
§ page.team.type.tasksSmall: Tareas
§ page.team.type.days: Día
§ page.team.type.daysSmall: Día
§ page.team.type.authorsDays: Días-persona
§ page.team.type.commits: Commits
§ page.team.type.authors: Contribución personal
§ page.team.total.titleA: Alcance
§ page.team.total.titleB: Costo
§ page.team.total.daysWorked.title: días-persona
§ page.team.total.daysWorked.description: Solo se tienen en cuenta los días en que se realizaron los commits
§ page.team.total.commits.title: commits
§ page.team.total.commits.description: Las ramas eliminadas no cuentan
§ page.team.total.daysLosses.title: días sin commits
§ page.team.total.daysLosses.description: Todos los días menos: vacaciones, fin de semana, vacaciones, días con commits
§ page.team.total.employment.title: empleado / despedido
§ page.team.total.employment.description: Si un empleado no ha hecho ningún commit en un mes, se considera despedido
§ page.team.total.moneyAll.title: general
§ page.team.total.moneyAll.description: Costos totales de nómina
§ page.team.total.moneyWorked.title: real
§ page.team.total.moneyWorked.description: Días efectivamente trabajados multiplicados por el salario promedio
§ page.team.total.moneyLosses.title: posible sobrepago
§ page.team.total.moneyLosses.description: Días laborables pagados cuando no hubo commits
§ page.team.total.weekendPayment.title: trabajo de fin de semana
§ page.team.total.weekendPayment.description: Sobrepago total por trabajo de fin de semana
§ page.team.total.workSpeed.title: tareas por día
§ page.team.total.workSpeed.description: Velocidad media del equipo con la plantilla actual
§ page.team.total.moneySpeed.title: por mes
§ page.team.total.moneySpeed.description: Monto previsto de la nómina de sueldos en la plantilla actual, sin incluir impuestos ni costos asociados
§ page.team.total.description1: *Días-persona* es el trabajo de un empleado durante una jornada laboral. Por ejemplo, en un día calendario, un equipo de tres empleados emite una cantidad de trabajo de tres días-persona.
§ page.team.total.description2: *Días de absentismo* solo se cuentan los días hábiles en que se podrían haber realizado commits. Fines de semana, días festivos y vacaciones no participan en el cálculo.
§ page.team.total.description3: Tarjeta *trabaja y se despide* muestra la composición real de los empleados que participan constantemente en el trabajo. Aparte de eso, hay " ayudantes - que son empleados, por lo general de otra Especialización, que a veces pueden hacer commits en un proyecto.
§ page.team.total.description4: *Pago excesivo* solo se cuentan los días hábiles en que se podrían haber realizado commits. Los fines de semana, días festivos y vacaciones no están incluidos en el cálculo. ¡Es por eso que el sobrepago + el costo real!= general. El costo total incluye el pago de fines de semana, días festivos y vacaciones.
§ page.team.total.description5: *Trabajo de fin de semana* se considera por el factor X2 del pago de un día normal. Lo anterior muestra exactamente el pago excesivo (X1), ya que el hecho de procesar en este contexto no es interesante. No estamos viendo la tasa de quema del presupuesto. Estamos viendo el sobrepago al aumentar la velocidad del trabajo.
§ page.team.tree.title: Árbol de proyecto con filtros seleccionados
§ page.team.tree.filters.author: Empleado
§ page.team.tree.filters.commits: Número de commits
§ page.team.tree.filters.help: El número mínimo de commits que hizo un empleado en el archivo
§ page.team.tree.filters.all: Todos los empleados
§ page.team.tree.add: Quien ha añadido
§ page.team.tree.change: Quien cambió
§ page.team.tree.remove: Quién borró
§ page.team.tree.line: filas
§ page.team.tree.lineAdd: agregaron
§ page.team.tree.lineRemove: cambiaron
§ page.team.week.title: Estadísticas semanales
§ page.team.week.date: Fecha
§ page.team.week.numberTasks: Número de tareas
§ page.team.week.people: Número de personas
§ page.team.week.line: Cambiar filas
§ page.team.week.days: Días con y sin commits
§ page.team.week.lossesDetails: ¿Quién no commits
§ page.team.week.add: agregaron
§ page.team.week.change: cambiaron
§ page.team.week.remove: eliminaron
§ page.team.week.hasCommits: fueron commits
§ page.team.week.hasNotCommits: no hubo commits
§ page.team.week.days: día
§ page.team.week.tasks: tareas
§ page.team.pr.task: Tarea
§ page.team.pr.tasks: tareas
§ page.team.pr.firstCommitTime: Primer commits
§ page.team.pr.lastCommitTime: Last
§ page.team.pr.workDays: Days of development
§ page.team.pr.delayDays: Days of waiting for the infusion
§ page.team.pr.commits: commits
§ page.team.pr.date: Date of injection
§ page.team.pr.mergeAuthor: I poured it in
§ page.team.pr.author: Employee
§ page.team.pr.middleTimeRelease: Average delivery time (days)
§ page.team.pr.work: development
§ page.team.pr.delay: expectation
§ page.team.pr.days: days
§ page.team.pr.oneTaskDays: Time spent on one task
§ page.team.pr.description1: *Development time* this is the time difference from the first to the last commits for the task. It doesn't matter if there were breaks of several days between commits or not. The very fact of any commits increases the time.
§ page.team.pr.description2: *Waiting time* this is the time between the last commit and the code injection. It shows the actual idle waiting for something.
§ page.team.pr.description3: *Why display the development time* without a breakdown into coding and code review? Then, to show the business the actual delivery time of the code. The expectation of testing, comments on the review, DevOps problems and other imperfections of the process are already laid down in this period.
§ page.team.pr.statByAuthors: Employee statistics
§ page.team.pr.longDelay: Long wait for infusion
§ page.team.tasks.task: Task
§ page.team.tasks.author: The author of the first commits
§ page.team.tasks.from: The first commits
§ page.team.tasks.to: Last commits
§ page.team.tasks.daysInWork: Days in the work
§ page.team.tasks.commits: Number of commits
§ page.team.tasks.pr: Date of injection
§ page.team.tasks.prAuthor: I poured it in
§ page.team.tasks.prDelayDays: Days of waiting for the infusion
§ page.team.tasks.comments: Comments
§ page.person.print.photo.title: Photo
§ page.person.print.photo.description: a place for a photo
§ page.person.total.title: Main Features
§ page.person.total.daysWorked.title: working days
§ page.person.total.daysWorked.description: Only the days on which commits were made are taken into account
§ page.person.total.tasks.title: tasks
§ page.person.total.tasks.description: If the commits are signed correctly
§ page.person.character.title: Character
§ page.person.achievement.title: Progress
§ page.person.achievement.positive: Positive
§ page.person.achievement.normal: Neutral
§ page.person.achievement.negative: Negative
§ page.person.achievement.description: Cuantos más logros negativos tenga un empleado, más probable es que la situación no sea estándar. Puede que valga la pena cambiar su modo de trabajo, tareas o informes. Debe hablar con él y averiguar qué problemas interfieren con su trabajo.
§ page.person.gets.title: Geta Capturado:
§ page.person.gets.description: «Geta Capturado» in this case, it means leaving commits to the task with the "beautiful" number first.
§ page.person.business.days.title: working days
§ page.person.business.days.description: Only the days on which commits were made are taken into account
§ page.person.business.tasks.title: tasks
§ page.person.business.tasks.description: If commits are signed correctly
§ page.person.business.losses.title: days without commits
§ page.person.business.losses.description: All days minus: holidays, weekends, vacations, days with commits
§ page.person.business.commits.title: commits
§ page.person.business.commits.description: Deleted branches don't count
§ page.person.business.time.description: Time from the first to the last commits (including non-working days)
§ page.person.business.time.title: Days on the project:
§ page.person.business.time.dismissed: (Progreso)
§ page.person.business.time.staff: (Not in the team)
§ page.person.business.achievements: Progreso
§ page.person.changes.title: Progreso
§ page.person.changes.description:
При некоторых видах форматирования git отмечает строки как «удалённые» и «добавленные»,
хотя на самом деле они были «изменены». Поэтому, если вы провели большой рефакторинг,
git может показать малое количество изменений в статистике, а фактический результат
будет отмечен, как скачок «удаленных» и «добавленных» строк.
§ page.person.changes.description: Список коммитов и количество изменений в них за этот день:
§ page.person.commits.title: Список коммитов:
§ page.person.money.title.total: За всё время
§ page.person.money.title.middle: Средняя стоимость
§ page.person.money.moneyAll.title: получил
§ page.person.money.moneyAll.description: Предполагаемая сумма зп с проекта (см. настройки)
§ page.person.money.moneyWorked.title: отработал
§ page.person.money.moneyWorked.description: Фактически отработанные дни умноженные на среднюю зп
§ page.person.money.moneyLosses.title: возможная переплата
§ page.person.money.moneyLosses.description: Дни без коммитов умноженные на среднюю зп
§ page.person.money.tasks.title: задача
§ page.person.money.tasks.description: Количество закрытых задач к стоимости дня
§ page.person.money.commits.title: коммит
§ page.person.money.commits.description: Количество коммитов к стоимости рабочего дня
§ page.person.speed.task: Одна задача в среднем это
§ page.person.speed.max: Максимальная скорость в день
§ page.person.speed.days.title: дней
§ page.person.speed.days.description: Имеются ввиду рабочие дни, если коммиты правильно подписаны
§ page.person.speed.commits.title: коммитов
§ page.person.speed.commits.description: Отрезаны 10% максимальных и минимальных значений
§ page.person.speed.line.title: строк кода
§ page.person.speed.line.description: Отрезаны 10% максимальных и минимальных значений
§ page.person.speed.tasks.title: задач
§ page.person.speed.tasks.description: Задача может быть не доделана, но работа по ней должна быть
§ page.person.speed.maxCommits.title: коммитов
§ page.person.speed.maxCommits.description: Задача может быть не доделана, но работа по ней должна быть
§ page.person.hours.title: Распределение коммитов в течении каждого дня недели
§ page.person.week.date: Дата
§ page.person.week.tasks: Количество задач
§ page.person.week.workDays: Дни с коммитами
§ page.person.week.taskInDay: Задач в день
§ page.person.week.days: дней
§ page.person.week.workDay: будни
§ page.person.week.weekends: выходные
En algunos tipos de formato, git marca las líneas como "eliminadas" y "agregadas", cuando en realidad se han "modificado". Entonces, si has hecho mucha refactorización,
git puede Mostrar una pequeña cantidad de cambios en las estadísticas, y el resultado real se marcará como un salto en las líneas "eliminado" y "agregado"
§ page.person.changes.description: The list of commits and the number of changes to them for that day:
§ page.person.commits.title: Lista de commits:
§ page.person.money.title.total: Durante todo este tiempo 👌
§ page.person.money.title.middle: Average cost
§ page.person.money.moneyAll.title: received
§ page.person.money.moneyAll.description: Estimated amount of the PO from the project (see settings)
§ page.person.money.moneyWorked.title: worked out
§ page.person.money.moneyWorked.description: Actual days worked multiplied by the average po
§ page.person.money.moneyLosses.title: possible overpayment
§ page.person.money.moneyLosses.description: Days without commits multiplied by the average po
§ page.person.money.tasks.title: task
§ page.person.money.tasks.description: The number of closed tasks to the cost of the day
§ page.person.money.commits.title: commits
§ page.person.money.commits.description: The number of commits to the cost of the working day
§ page.person.speed.task: One task on average is
§ page.person.speed.max: Velocidad máxima por día
§ page.person.speed.days.title: días
§ page.person.speed.days.description: This means working days if the commits are signed correctly
§ page.person.speed.commits.title: commits
§ page.person.speed.commits.description: 10% of the maximum and minimum values were cut off
§ page.person.speed.line.title: lines of code
§ page.person.speed.line.description: 10% of the maximum and minimum values were cut off
§ page.person.speed.tasks.title: tasks
§ page.person.speed.tasks.description: The task may not be completed, but the work on it should be
§ page.person.speed.maxCommits.title: commits
§ page.person.speed.maxCommits.description: The task may not be completed, but the work on it should be
§ page.person.hours.title: Distribution of commits during each day of the week
§ page.person.week.date: Date
§ page.person.week.tasks: Number of tasks
§ page.person.week.workDays: Days with commits
§ page.person.week.taskInDay: Tasks per day
§ page.person.week.days: days
§ page.person.week.workDay: entresemana
§ page.person.week.weekends: día de descanso
`;

View file

@ -16,7 +16,6 @@ export default `
§ sidebar.team.day: Au jour le jour
§ sidebar.team.week: Le semaine
§ sidebar.team.month: Par mois
§ sidebar.team.tree: Analyse des fichiers
§ sidebar.team.files: Fichiers
§ sidebar.team.removedFiles: Fichiers supprimés
§ sidebar.team.tasks: Liste des tâches

View file

@ -1,212 +1,209 @@
export default `
§ page.welcome.step1: Execute the command in the root of your project.
§ page.welcome.step3: Drag and drop
§ page.welcome.step4: the log.txt file onto this page.
§ page.welcome.description: Git will create a log.txt file. It contains data for report generation. Or use git shortlog -s -n -e if you don't need a report. Create a [.mailmap|https://git-scm.com/docs/gitmailmap] file in the root of the project to consolidate employee statistics.
§ page.welcome.warning1: The service *DOES NOT SAVE* and *DOES NOT TRANSFER* your data. All calculations are performed locally in your browser on your machine.
§ page.welcome.warning2: The service *DOES NOT COLLECT STATISTICS* on projects. You can disconnect the internet, check traffic, and even build a local version from the [source|https://github.com/bakhirev/assayo].
§ page.common.words.title: Word Statistics.
§ page.common.words.description: the most popular word. Occurs $1 times.
§ page.common.commits.title: Number of commits by days.
§ page.common.commits.description: ($1) the most productive day in terms of the number of commits.
§ page.common.commits.title2: $1 commits made: $2
§ page.common.filter.allUsers: Does not matter
§ page.print.modal.title: What are we printing?
§ page.print.modal.page: Current page
§ page.print.modal.type: Current section
§ page.print.modal.all: All statistics
§ page.print.modal.cancel: Cancel
§ page.print.tableOfContents: Table of contents
§ page.print.title: Git repository report
§ page.welcome.step1: Exécutez la commande à la racine de votre projet
§ page.welcome.step3: transférer
§ page.welcome.step4: fichier log.txt sur cette page
§ page.welcome.description: Git créer un fichier log.txt. Il contient les données pour générer le rapport. Exécutez la commande git shortlog -s -n -e si vous n'avez pas besoin du rapport. Créer un fichier [.mailmap|https://git-scm.com/docs/gitmailmap] à la racine du projet est de combiner les statistiques sur les employés.
§ page.welcome.warning1: Le service ne STOCKE ni ne TRANSMET vos données. Tous les calculs sont effectués sur votre ordinateur.
§ page.welcome.warning2: Le service ne COLLECTE pas de STATISTIQUES sur les projets. Vous pouvez regarder [code source|https://github.com/bakhirev/assayo].
§ page.common.words.title: Statistiques par mots
§ page.common.words.description: le mot le plus populaire. Rencontre $1 fois.
§ page.common.commits.title: Nombre de commits par jour
§ page.common.commits.description: ($1) le jour le plus productif par le nombre de commits.
§ page.common.commits.title2: $1 commits faits: $2
§ page.common.filter.allUsers: Pas d'importance
§ page.print.modal.title: On imprime quoi?
§ page.print.modal.page: Page actuelle
§ page.print.modal.type: Section actuelle
§ page.print.modal.all: Toutes les statistiques
§ page.print.modal.cancel: Annulation
§ page.print.tableOfContents: Table des matières
§ page.print.title: Rapport sur dépôt git
§ page.print.sub_title: «$1»
§ page.print.description: The data for the report was obtained from the commit history.
§ page.team.author.title: Employee statistics
§ page.team.author.description1: *Part of the statistics* (work speed, costs, etc.) *for employees with the 'Assistant' type is not counted*, as it is an episodic role in the project. It is assumed that they do not affect the project, and their edits can be disregarded in the context of the overall volume of work.
§ page.team.author.description2: *Default sorting* is by the number of tasks and groups (current, fired, assisting employees).
§ page.team.author.types: Types of work
§ page.print.description: Les données du rapport ont é extraites de l'historique des commits.
§ page.team.author.title: Statistiques du personnel
§ page.team.author.description1: Partie des statistiques (vitesse de travail, argent dépensé, etc.) pour les collaborateurs de type Assistant, ce nest pas une rôle permanente dans le projet. Leur travail est insignifiant et peut être ignoré.
§ page.team.author.description2: Le tri par défaut est le tri par nombre de tâches et de groupes (employés actuels, licenciés et aidants).
§ page.team.author.types: Type de travaux
§ page.team.author.commits: Commits
§ page.team.author.commitsSmall: commits
§ page.team.author.tasks: Tasks
§ page.team.author.tasksSmall: tasks
§ page.team.author.workedLosses: Days with and without commits
§ page.team.author.worked: work
§ page.team.author.losses: days without commits
§ page.team.author.days: days
§ page.team.author.daysForTask: Days per task
§ page.team.author.scopes: Features
§ page.team.author.moneyAll: Received
§ page.team.author.moneyWorked: Worked for
§ page.team.author.moneyLosses: Overpayment
§ page.team.hours.title: Distribution of commits during each day of the week
§ page.team.month.title: Project work calendar
§ page.team.scope.title: Feature statistics
§ page.team.scope.scope: Feature
§ page.team.scope.days: Working Days
§ page.team.scope.authorsDays: Person-Days
§ page.team.scope.tasks: Tasks
§ page.team.author.tasks: tâche
§ page.team.author.tasksSmall: tâche
§ page.team.author.workedLosses: Jours avec et sans commits
§ page.team.author.worked: travail
§ page.team.author.losses: jours sans commits
§ page.team.author.days: jours
§ page.team.author.daysForTask: Jours par tâche
§ page.team.author.scopes: Mise au point
§ page.team.author.moneyAll: L'argent reçu
§ page.team.author.moneyWorked: Travaillas
§ page.team.author.moneyLosses: Trop-perçu
§ page.team.hours.title: Répartition du travail pour chaque jour de la semaine
§ page.team.month.title: Calendrier du projet
§ page.team.scope.title: Statistiques par module
§ page.team.scope.scope: Mise au point
§ page.team.scope.days: Esclave. jours
§ page.team.scope.authorsDays: Jours-homme
§ page.team.scope.tasks: Tâches
§ page.team.scope.commits: Commits
§ page.team.scope.commitsSmall: commits
§ page.team.scope.types: Types of work
§ page.team.scope.authors: Personal contribution
§ page.team.scope.cost: Cost
§ page.team.type.title: Task type statistics
§ page.team.type.description: *Personal contribution* is counted by the number of commits, not the volume of changed lines or files. Therefore, the "File Analysis" section should also be consulted to assess the scale of changes.
§ page.team.type.type: Type of work
§ page.team.type.tasks: Tasks
§ page.team.type.tasksSmall: tasks
§ page.team.type.days: Days
§ page.team.type.daysSmall: days
§ page.team.type.authorsDays: Person-days
§ page.team.scope.types: Type de travaux
§ page.team.scope.authors: Contribution personnelle
§ page.team.scope.cost: Coût
§ page.team.type.title: Statistiques par type de tâche
§ page.team.type.description: *Contribution personnelle* compte tenu du nombre de commits plutôt que de la taille des lignes ou fichiers modifiés. Vous devez donc également consulter la section Analyse des fichiers afin dévaluer lampleur des modifications.
§ page.team.type.type: Type de travail
§ page.team.type.tasks: Задач
§ page.team.type.tasksSmall: Tâche
§ page.team.type.days: Jours
§ page.team.type.daysSmall: Jours
§ page.team.type.authorsDays: Jours-homme
§ page.team.type.commits: Commits
§ page.team.type.authors: Personal contribution
§ page.team.total.titleA: Volume of work
§ page.team.total.titleB: Cost
§ page.team.total.daysWorked.title: person-days
§ page.team.total.daysWorked.description: Only days with commits are counted
§ page.team.type.authors: Contribution personnelle
§ page.team.total.titleA: Volume de travaux
§ page.team.total.titleB: Coût
§ page.team.total.daysWorked.title: jours-homme
§ page.team.total.daysWorked.description: Seuls les jours les commits ont é effectués sont pris en compte
§ page.team.total.commits.title: commits
§ page.team.total.commits.description: Deleted branches are not counted
§ page.team.total.daysLosses.title: days without commits
§ page.team.total.daysLosses.description: All days minus: holidays, weekends, vacation, days with commits
§ page.team.total.employment.title: working / dismissed
§ page.team.total.employment.description: If an employee does not make any commits within a month, they are considered dismissed
§ page.team.total.moneyAll.title: total
§ page.team.total.moneyAll.description: Total salary expenses
§ page.team.total.moneyWorked.title: actual
§ page.team.total.moneyWorked.description: Actual days worked multiplied by average salary
§ page.team.total.moneyLosses.title: possible overpayment
§ page.team.total.moneyLosses.description: Paid working days when there were no commits
§ page.team.total.weekendPayment.title: weekend work
§ page.team.total.weekendPayment.description: Total overpayment for weekend work
§ page.team.total.workSpeed.title: tasks per day
§ page.team.total.workSpeed.description: Average work speed of the team with the current composition of employees
§ page.team.total.moneySpeed.title: per month
§ page.team.total.moneySpeed.description: Forecasted salary payment amount with the current team composition, excluding taxes and related expenses
§ page.team.total.description1: *Person-days* the work of one employee during a single working day. For example, in one calendar day, a team of three employees produces a work volume of three person-days.
§ page.team.total.description2: *Absentee days* are counted only as working days when commits could have been made. Weekends, public holidays, and vacations are not included in the calculation.
§ page.team.total.description3: The *working and dismissed* card shows the actual composition of employees who are continuously involved in work. Additionally, there are "assistants" typically employees of a different specialization who may occasionally make commits to the project.
§ page.team.total.description4: *Overpayment* includes only working days when commits could have been made. Weekends, public holidays, and vacations are not included in the calculation. This is why overpayment + actual cost != total. The total cost includes payment for weekends, public holidays, and vacations.
§ page.team.total.description5: *Weekend work* is calculated at a rate of x2 the payment of a regular day. The displayed amount is specifically the overpayment (x1), as the fact of overtime in this context is not of interest. We focus on overpayment when increasing work speed.
§ page.team.tree.title: Project Tree Considering Selected Filters
§ page.team.tree.filters.author: Employee
§ page.team.tree.filters.commits: Number of commits
§ page.team.tree.filters.help: The minimum number of commits an employee has made in a file
§ page.team.tree.filters.all: All employees
§ page.team.tree.add: Who added
§ page.team.tree.change: Who changed
§ page.team.tree.remove: Who removed
§ page.team.tree.line: lines
§ page.team.tree.lineAdd: added
§ page.team.tree.lineRemove: changed
§ page.team.week.title: Weekly statistics
§ page.team.total.commits.description: Les branches supprimées ne comptent pas
§ page.team.total.daysLosses.title: jours sans commits
§ page.team.total.daysLosses.description: Tous les jours moins: vacances, week-ends, vacances, jours avec commits
§ page.team.total.employment.title: fonctionne / démissionnas
§ page.team.total.employment.description: Si un employé n'a fait aucun commit dans un mois, il est considéré comme licencié
§ page.team.total.moneyAll.title: générale
§ page.team.total.moneyAll.description: Coûts salariaux totaux
§ page.team.total.moneyWorked.title: réelle
§ page.team.total.moneyWorked.description: Jours effectivement travaillés multipliés par le salaire moyen
§ page.team.total.moneyLosses.title: trop-perçu possible
§ page.team.total.moneyLosses.description: Jours ouvrables payés quand il n'y avait pas de commits
§ page.team.total.weekendPayment.title: travail le week-end
§ page.team.total.weekendPayment.description: Trop-perçu total pour le travail de week-end
§ page.team.total.workSpeed.title: tâches par jour
§ page.team.total.workSpeed.description: Vitesse moyenne de travail de l'équipe avec la composition actuelle des employés
§ page.team.total.moneySpeed.title: par mois
§ page.team.total.moneySpeed.description: Montant prévu de la masse salariale, compte tenu de la composition actuelle du personnel, hors taxes et dépenses connexes
§ page.team.total.description1: *Jours-homme* c'est le travail d'un employé pendant une journée de travail. Par exemple, pour un jour calendaire, une équipe de trois employés produit une charge de travail de trois jours-homme.
§ page.team.total.description2: *Jours d'absentéisme* seuls les jours ouvrables les commits auraient pu être faits sont considérés. Les week-ends, les jours fériés et les vacances ne sont pas inclus dans le calcul.
§ page.team.total.description3: Carte *travaille et a démissionné* cela indique la composition effective des collaborateurs qui participent activement au projet. En outre, il y a des assistants, qui sont généralement des collaborateurs dune autre spécialité et qui peuvent parfois faire des commits sur le projet.
§ page.team.total.description4: *Trop-perçu* с seulement les jours ouverts des commits auraient pu être faits sont comptabilisés. Les jours fériés, les jours de congés payés et les jours chômés ne sont pas pris en compte. C'est pourquoi le trop-payé + le coût réel != général. Le coût total comprend le paiement des week-ends, des jours fériés et des vacances.
§ page.team.total.description5: *Travail le week-end* le calcul se fait selon un coefficient x2 sur le salaire du jour normal. Ce qui est affiché ici est précisément le surcoût (x1), car le fait même de travail supplémentaire nest pas dintérêt ici. Nous ne regardons pas la vitesse à laquelle le budget est brûlé. Nous regardons le surcoût lorsque la vitesse de travail augmente.
§ page.team.tree.title: Arborescence du projet avec les filtres sélectionnés
§ page.team.tree.filters.author: Employé
§ page.team.tree.filters.commits: Nombre de commits
§ page.team.tree.filters.help: Minimum commits que l'employé a fait dans le fichier
§ page.team.tree.filters.all: Tous les employés
§ page.team.tree.add: Qui a Ajouté
§ page.team.tree.change: Qui a changé
§ page.team.tree.remove: Qui a supprimé
§ page.team.tree.line: lignes
§ page.team.tree.lineAdd: ajoutâtes
§ page.team.tree.lineRemove: modifiâtes
§ page.team.week.title: Statistiques par semaine
§ page.team.week.date: Date
§ page.team.week.numberTasks: Number of tasks
§ page.team.week.people: Number of people
§ page.team.week.line: Line Changes
§ page.team.week.days: Days with and without commits
§ page.team.week.lossesDetails: Who did not commit
§ page.team.week.add: added
§ page.team.week.change: changed
§ page.team.week.remove: removed
§ page.team.week.hasCommits: had commits
§ page.team.week.hasNotCommits: had no commits
§ page.team.week.days: days
§ page.team.week.tasks: tasks
§ page.team.pr.task: Task
§ page.team.pr.tasks: tasks
§ page.team.pr.firstCommitTime: First commit
§ page.team.pr.lastCommitTime: Last
§ page.team.pr.workDays: Development days
§ page.team.pr.delayDays: Days waiting for merge
§ page.team.week.numberTasks: Nombre de tâches
§ page.team.week.people: Nombre de personnes
§ page.team.week.line: Modification des lignes
§ page.team.week.days: Jours avec et sans commits
§ page.team.week.lossesDetails: Qui n'a pas commis
§ page.team.week.add: добавили
§ page.team.week.change: modifiâtes
§ page.team.week.remove: supprimâtes
§ page.team.week.hasCommits: il y avait des commits
§ page.team.week.hasNotCommits: il n'y avait pas de commits
§ page.team.week.days: jours
§ page.team.week.tasks: tâches
§ page.team.pr.task: tâches
§ page.team.pr.tasks: tâches
§ page.team.pr.firstCommitTime: Premier commit
§ page.team.pr.lastCommitTime: Dernier
§ page.team.pr.workDays: Jours de développement
§ page.team.pr.delayDays: Jours d'attente
§ page.team.pr.commits: Commits
§ page.team.pr.date: Merge Date
§ page.team.pr.mergeAuthor: Merged by
§ page.team.pr.author: Employee
§ page.team.pr.middleTimeRelease: Average delivery time (days)
§ page.team.pr.work: development
§ page.team.pr.delay: waiting
§ page.team.pr.days: days
§ page.team.pr.oneTaskDays: Time spent on one task
§ page.team.pr.description1: *Development time* is the time difference from the first to the last commit on a task. It does not matter if there were breaks of several days between commits or not. Any commit increases the time.
§ page.team.pr.description2: *Waiting time* is the time between the last commit and the code merge. It shows the actual downtime while waiting for something.
§ page.team.pr.description3: *Why display development time* without splitting into coding and code review? To show the business the actual delivery time of the code. Waiting for testing, review comments, DevOps problems, and other process imperfections are already included in this term.
§ page.team.pr.statByAuthors: Statistics by employees
§ page.team.pr.longDelay: Prolonged Waiting for merge
§ page.team.tasks.task: Task
§ page.team.tasks.author: First commit author
§ page.team.tasks.from: First commit
§ page.team.tasks.to: Last commit
§ page.team.tasks.daysInWork: Days in work
§ page.team.tasks.commits: Commits number
§ page.team.tasks.pr: Merge date
§ page.team.tasks.prAuthor: Merged by user
§ page.team.tasks.prDelayDays: Delay before merge in days
§ page.team.tasks.comments: Comments
§ page.team.pr.date: Date de diffusion
§ page.team.pr.mergeAuthor: Versai
§ page.team.pr.author: Employé
§ page.team.pr.middleTimeRelease: Délai de Livraison moyen (jours)
§ page.team.pr.work: développement
§ page.team.pr.delay: attente
§ page.team.pr.days: jours
§ page.team.pr.oneTaskDays: Temps passé sur une tâche
§ page.team.pr.description1: *Temps de développement* cest la différence de temps entre le premier et le dernier commit pour un problème donné. Il nimporte pas si il y avait des pauses pendant plusieurs jours entre les commits, ou non. Le fait même davoir fait un quelconque commit augmente le temps.
§ page.team.pr.description2: *Délai d'attente* c'est le temps entre le dernier commit et l'injection de code. Il montre le réel simple en attendant quoi que ce soit.
§ page.team.pr.description3: *Pourquoi afficher le temps de développement* sans se diviser en Coding et revue de code? Ensuite, pour montrer à l'entreprise le délai de Livraison réel du code. L'attente des tests, les commentaires sur la revue, les problèmes de DevOps et d'autres imperfections du processus sont déjà posés dans cette période.
§ page.team.pr.statByAuthors: Statistiques du personnel
§ page.team.pr.longDelay: Longue attente pour l'injection
§ page.team.tasks.task: Tâche
§ page.team.tasks.author: Auteur du premier commit
§ page.team.tasks.from: Premier commit
§ page.team.tasks.to: Dernier commit
§ page.team.tasks.daysInWork: Jours de travail
§ page.team.tasks.commits: Nombre de commits
§ page.team.tasks.pr: Date de diffusion
§ page.team.tasks.prAuthor: Versai
§ page.team.tasks.prDelayDays: Jours d'attente
§ page.team.tasks.comments: Commentaires
§ page.person.print.photo.title: Photo
§ page.person.print.photo.description: space for a photo
§ page.person.total.title: Main characteristics
§ page.person.total.daysWorked.title: days of work
§ page.person.total.daysWorked.description: Only days with commits are counted
§ page.person.total.tasks.title: tasks
§ page.person.total.tasks.description: If commits are properly signed
§ page.person.character.title: Character
§ page.person.achievement.title: Achievements
§ page.person.achievement.positive: Positive
§ page.person.achievement.normal: Neutral
§ page.person.achievement.negative: Negative
§ page.person.achievement.description: The more negative achievements an employee accumulates, the higher the likelihood that the situation is unusual. It may be necessary to change their work mode, tasks, or reporting. A discussion with them to understand what problems are hindering their work is advisable.
§ page.person.gets.title: Gets taken:
§ page.person.gets.description: "Taking a get" in this context means being the first to leave a commit on a task with a "nice" number.
§ page.person.business.days.title: days of work
§ page.person.business.days.description: Only days with commits are counted
§ page.person.business.tasks.title: tasks
§ page.person.business.tasks.description: If commits are properly signed
§ page.person.business.losses.title: days without commits
§ page.person.business.losses.description: All days minus: holidays, weekends, vacation, days with commits
§ page.person.print.photo.description: place à la photographie
§ page.person.total.title: Caractéristiques de base
§ page.person.total.daysWorked.title: jours de travail
§ page.person.total.daysWorked.description: Seuls les jours les commits ont é effectués sont pris en compte
§ page.person.total.tasks.title: tâches
§ page.person.total.tasks.description: Si les commits sont correctement signés
§ page.person.character.title: Personnage
§ page.person.achievement.title: Les progrès
§ page.person.achievement.positive: Positifs
§ page.person.achievement.normal: Neutres
§ page.person.achievement.negative: Négatifs
§ page.person.achievement.description: Plus un collaborateur a accumulé dachievements négatifs, plus il est probable quil y ait une situation inhabituelle. Il se peut que vous deviez changer son mode de travail, ses tâches ou ses rapports. Vous devriez parler avec lui et découvrir quels problèmes entravent son travail.
§ page.person.gets.title: Les gètes prises:
§ page.person.gets.description: «Prendre geth» dans ce cas, cela signifie d'abord laisser le commit à la tâche avec un numéro «beau».
§ page.person.business.days.title: jours de travail
§ page.person.business.days.description: Seuls les jours les commits ont é effectués sont pris en compte
§ page.person.business.tasks.title: tâches
§ page.person.business.tasks.description: Si les commits sont correctement signés
§ page.person.business.losses.title: jours sans commits
§ page.person.business.losses.description: Tous les jours moins: vacances, week-ends, vacances, jours avec commits
§ page.person.business.commits.title: commits
§ page.person.business.commits.description: Deleted branches are not counted
§ page.person.business.time.description: Time from the first to the last commit (including non-working days)
§ page.person.business.time.title: Days on the project:
§ page.person.business.time.dismissed: (dismissed)
§ page.person.business.time.staff: (not in the team)
§ page.person.business.achievements: Achievements
§ page.person.changes.title: Achievements
§ page.person.business.commits.description: Les branches supprimées ne comptent pas
§ page.person.business.time.description: Temps de la première à la Dernière commits (y compris les jours non ouvrables)
§ page.person.business.time.title: Jours sur le projet:
§ page.person.business.time.dismissed: (licencié)
§ page.person.business.time.staff: (pas dans l'équipe)
§ page.person.business.achievements: Les progrès
§ page.person.changes.title: Les progrès
§ page.person.changes.description:
With some types of formatting, git marks lines as "deleted" and "added",
although in reality, they were "changed". Therefore, if you conducted a major refactoring,
git might show a small number of changes in the statistics, but the actual result
will be marked as a jump in "deleted" and "added" lines.
§ page.person.changes.description: List of commits and the number of changes in them for that day:
§ page.person.commits.title: List of commits:
§ page.person.money.title.total: Total over time
§ page.person.money.title.middle: Average cost
§ page.person.money.moneyAll.title: received
§ page.person.money.moneyAll.description: Assumed total salary from the project (see settings)
§ page.person.money.moneyWorked.title: worked for
§ page.person.money.moneyWorked.description: Actual days worked multiplied by average salary
§ page.person.money.moneyLosses.title: possible overpayment
§ page.person.money.moneyLosses.description: Days without commits multiplied by average salary
§ page.person.money.tasks.title: task
§ page.person.money.tasks.description: Number of closed tasks to the cost of the day
Avec certaines formes de formatage, git marque les lignes comme supprimées et ajoutées, bien quen réalité, elles aient é modifiées. Par conséquent, si vous effectuez un grand refactoring, git peut montrer une petite quantité de modifications dans les statistiques, et le résultat réel sera marqué comme un bond dans les lignes supprimées et ajoutées.
§ page.person.changes.description: La liste des commits et le nombre de modifications qu'ils ont apportées au cours de cette journée:
§ page.person.commits.title: Liste des commits:
§ page.person.money.title.total: Pour tous les temps
§ page.person.money.title.middle: Valeur moyenne
§ page.person.money.moneyAll.title: reçut
§ page.person.money.moneyAll.description: Montant estimatif des dépenses d & apos; appui au projet (voir paramètres)
§ page.person.money.moneyWorked.title: travaillas
§ page.person.money.moneyWorked.description: Jours effectivement travaillés multipliés par le nombre moyen de jours travaillés
§ page.person.money.moneyLosses.title: trop-perçu possible
§ page.person.money.moneyLosses.description: Jours sans commits multipliés par la moyenne SN
§ page.person.money.tasks.title: tâche
§ page.person.money.tasks.description: Nombre de tâches fermées au coût de la journée
§ page.person.money.commits.title: commit
§ page.person.money.commits.description: Number of commits to the cost of the workday
§ page.person.speed.task: One task on average is
§ page.person.speed.max: Maximum speed per day
§ page.person.speed.days.title: days
§ page.person.speed.days.description: Refers to workdays, if commits are properly signed
§ page.person.money.commits.description: Nombre de commits par jour ouvrable
§ page.person.speed.task: Une tâche en moyenne est
§ page.person.speed.max: Vitesse maximale par jour
§ page.person.speed.days.title: jours
§ page.person.speed.days.description: Cela signifie des jours ouvrables si les commits sont correctement signés
§ page.person.speed.commits.title: commits
§ page.person.speed.commits.description: Top and bottom 10% of values are trimmed
§ page.person.speed.line.title: lines of code
§ page.person.speed.line.description: Top and bottom 10% of values are trimmed
§ page.person.speed.tasks.title: tasks
§ page.person.speed.tasks.description: A task may not be completed, but work should be done on it
§ page.person.speed.commits.description: 10% des valeurs maximales et minimales sont coupées
§ page.person.speed.line.title: lignes de code
§ page.person.speed.line.description: 10% des valeurs maximales et minimales sont coupées
§ page.person.speed.tasks.title: tâches
§ page.person.speed.tasks.description: La tâche peut ne pas être terminée, mais le travail sur elle doit être
§ page.person.speed.maxCommits.title: commits
§ page.person.speed.maxCommits.description: A task may not be completed, but work should be done on it
§ page.person.hours.title: Distribution of commits during each day of the week
§ page.person.speed.maxCommits.description: La tâche peut ne pas être terminée, mais le travail sur elle doit être
§ page.person.hours.title: Répartition des commits par jour de la semaine
§ page.person.week.date: Date
§ page.person.week.tasks: Number of tasks
§ page.person.week.workDays: Days with commits
§ page.person.week.taskInDay: Tasks per day
§ page.person.week.days: days
§ page.person.week.workDay: weekdays
§ page.person.week.weekends: weekends
§ page.person.week.tasks: Nombre de tâches
§ page.person.week.workDays: Jours avec commits
§ page.person.week.taskInDay: Tâches par jour
§ page.person.week.days: jours
§ page.person.week.workDay: jours de semaine
§ page.person.week.weekends: congés
`;

View file

@ -16,10 +16,11 @@ export default `
§ sidebar.team.day: По дням
§ sidebar.team.week: По неделям
§ sidebar.team.month: По месяцам
§ sidebar.team.tree: Анализ файлов
§ sidebar.team.files: Файлы
§ sidebar.team.removedFiles: Удалённые файлы
§ sidebar.team.extension: Типы файлов
§ sidebar.team.tasks: Список задач
§ sidebar.team.release: Список релизов
§ sidebar.team.hours: Расписание
§ sidebar.team.commits: Все коммиты
§ sidebar.team.changes: Все изменения

View file

@ -141,6 +141,16 @@ export default `
§ page.team.tasks.prAuthor: Влил
§ page.team.tasks.prDelayDays: Дней ожидания влития
§ page.team.tasks.comments: Комментарии
§ page.team.extension.name: Тип
§ page.team.extension.path: Путь
§ page.team.extension.current.count: Количество
§ page.team.extension.removed.count: Количество удалённых
§ page.team.extension.files: файлов
§ page.team.release.title: Релиз
§ page.team.release.from: Дата создания
§ page.team.release.to: Дата завершения
§ page.team.release.delay: Дней работы
§ page.team.release.waiting: Дней до следующего релиза
§ page.person.print.photo.title: Фотография
§ page.person.print.photo.description: место для фотографии
§ page.person.total.title: Основные характеристики

View file

@ -1,212 +1,212 @@
export default `
§ page.welcome.step1: Execute the command in the root of your project.
§ page.welcome.step3: Drag and drop
§ page.welcome.step4: the log.txt file onto this page.
§ page.welcome.description: Git will create a log.txt file. It contains data for report generation. Or use git shortlog -s -n -e if you don't need a report. Create a [.mailmap|https://git-scm.com/docs/gitmailmap] file in the root of the project to consolidate employee statistics.
§ page.welcome.warning1: The service *DOES NOT SAVE* and *DOES NOT TRANSFER* your data. All calculations are performed locally in your browser on your machine.
§ page.welcome.warning2: The service *DOES NOT COLLECT STATISTICS* on projects. You can disconnect the internet, check traffic, and even build a local version from the [source|https://github.com/bakhirev/assayo].
§ page.common.words.title: Word Statistics.
§ page.common.words.description: the most popular word. Occurs $1 times.
§ page.common.commits.title: Number of commits by days.
§ page.common.commits.description: ($1) the most productive day in terms of the number of commits.
§ page.common.commits.title2: $1 commits made: $2
§ page.common.filter.allUsers: Does not matter
§ page.print.modal.title: What are we printing?
§ page.print.modal.page: Current page
§ page.print.modal.type: Current section
§ page.print.modal.all: All statistics
§ page.print.modal.cancel: Cancel
§ page.print.tableOfContents: Table of contents
§ page.print.title: Git repository report
§ page.welcome.step1: 在项目的根目录运行命令
§ page.welcome.step3: 拖放
§ page.welcome.step4: log.txt
§ page.welcome.description: Git log.txt. git shortlog -s -n -e [.mailmap|https://git-scm.com/docs/gitmailmap] 在项目的根源,结合员工统计.
§ page.welcome.warning1: 该服务不会存储或传输您的数据 .
§ page.welcome.warning2: 该服务不收集项目的统计数据 [|https://github.com/bakhirev/assayo].
§ page.common.words.title: 词汇统计
§ page.common.words.description: 最流行的词 $1次.
§ page.common.commits.title: Количество Commits по дням
§ page.common.commits.description: ($1) Commits .
§ page.common.commits.title2: $1 Commits: $2
§ page.common.filter.allUsers: 没关系
§ page.print.modal.title: 我们打印出来的是什么?
§ page.print.modal.page: 当前页面
§ page.print.modal.type: 当前部分
§ page.print.modal.all: 所有统计数字
§ page.print.modal.cancel: 取消
§ page.print.tableOfContents: 目录
§ page.print.title: Git仓库报告
§ page.print.sub_title: «$1»
§ page.print.description: The data for the report was obtained from the commit history.
§ page.team.author.title: Employee statistics
§ page.team.author.description1: *Part of the statistics* (work speed, costs, etc.) *for employees with the 'Assistant' type is not counted*, as it is an episodic role in the project. It is assumed that they do not affect the project, and their edits can be disregarded in the context of the overall volume of work.
§ page.team.author.description2: *Default sorting* is by the number of tasks and groups (current, fired, assisting employees).
§ page.team.author.types: Types of work
§ page.print.description: 报告的数据是从历史记录中获得的 Commits.
§ page.team.author.title: 雇员统计数字
§ page.team.author.description1: 部分统计数字 (.) "助理" .
§ page.team.author.description2: 默认排序是按任务和组数排序 ().
§ page.team.author.types: 工作类别
§ page.team.author.commits: Commits
§ page.team.author.commitsSmall: commits
§ page.team.author.tasks: Tasks
§ page.team.author.tasksSmall: tasks
§ page.team.author.workedLosses: Days with and without commits
§ page.team.author.worked: work
§ page.team.author.losses: days without commits
§ page.team.author.days: days
§ page.team.author.daysForTask: Days per task
§ page.team.author.scopes: Features
§ page.team.author.moneyAll: Received
§ page.team.author.moneyWorked: Worked for
§ page.team.author.moneyLosses: Overpayment
§ page.team.hours.title: Distribution of commits during each day of the week
§ page.team.month.title: Project work calendar
§ page.team.scope.title: Feature statistics
§ page.team.scope.scope: Feature
§ page.team.scope.days: Working Days
§ page.team.scope.authorsDays: Person-Days
§ page.team.scope.tasks: Tasks
§ page.team.author.tasks: 任务
§ page.team.author.tasksSmall: 任务
§ page.team.author.workedLosses: 有和没有commits的日子
§ page.team.author.worked: 工作
§ page.team.author.losses: 没有commits的日子
§ page.team.author.days: 天数
§ page.team.author.daysForTask: 每项任务的天数
§ page.team.author.scopes: 修改
§ page.team.author.moneyAll: 我拿到钱了
§ page.team.author.moneyWorked: 工作了
§ page.team.author.moneyLosses: 多付
§ page.team.hours.title: 每周每一天的工作分配
§ page.team.month.title: 项目工作日历
§ page.team.scope.title: 按模块划分的统计数字
§ page.team.scope.scope: 修改
§ page.team.scope.days: 工作天
§ page.team.scope.authorsDays: 人日
§ page.team.scope.tasks: 任务
§ page.team.scope.commits: Commits
§ page.team.scope.commitsSmall: commits
§ page.team.scope.types: Types of work
§ page.team.scope.authors: Personal contribution
§ page.team.scope.cost: Cost
§ page.team.type.title: Task type statistics
§ page.team.type.description: *Personal contribution* is counted by the number of commits, not the volume of changed lines or files. Therefore, the "File Analysis" section should also be consulted to assess the scale of changes.
§ page.team.type.type: Type of work
§ page.team.type.tasks: Tasks
§ page.team.type.tasksSmall: tasks
§ page.team.type.days: Days
§ page.team.type.daysSmall: days
§ page.team.type.authorsDays: Person-days
§ page.team.scope.types: 工作类别
§ page.team.scope.authors: 个人贡献
§ page.team.scope.cost: 成本
§ page.team.type.title: 按任务类型划分的统计信息
§ page.team.type.description: ** Commits, "文件分析"
§ page.team.type.type: 工作类别
§ page.team.type.tasks: 任务
§ page.team.type.tasksSmall: 任务
§ page.team.type.days: 天数
§ page.team.type.daysSmall: 天数
§ page.team.type.authorsDays: 人日
§ page.team.type.commits: Commits
§ page.team.type.authors: Personal contribution
§ page.team.total.titleA: Volume of work
§ page.team.total.titleB: Cost
§ page.team.total.daysWorked.title: person-days
§ page.team.total.daysWorked.description: Only days with commits are counted
§ page.team.type.authors: 个人贡献
§ page.team.total.titleA: 工作范围
§ page.team.total.titleB: 成本
§ page.team.total.daysWorked.title: 人日
§ page.team.total.daysWorked.description: 只考虑制作它们的日子 Commits
§ page.team.total.commits.title: commits
§ page.team.total.commits.description: Deleted branches are not counted
§ page.team.total.daysLosses.title: days without commits
§ page.team.total.daysLosses.description: All days minus: holidays, weekends, vacation, days with commits
§ page.team.total.employment.title: working / dismissed
§ page.team.total.employment.description: If an employee does not make any commits within a month, they are considered dismissed
§ page.team.total.moneyAll.title: total
§ page.team.total.moneyAll.description: Total salary expenses
§ page.team.total.moneyWorked.title: actual
§ page.team.total.moneyWorked.description: Actual days worked multiplied by average salary
§ page.team.total.moneyLosses.title: possible overpayment
§ page.team.total.moneyLosses.description: Paid working days when there were no commits
§ page.team.total.weekendPayment.title: weekend work
§ page.team.total.weekendPayment.description: Total overpayment for weekend work
§ page.team.total.workSpeed.title: tasks per day
§ page.team.total.workSpeed.description: Average work speed of the team with the current composition of employees
§ page.team.total.moneySpeed.title: per month
§ page.team.total.moneySpeed.description: Forecasted salary payment amount with the current team composition, excluding taxes and related expenses
§ page.team.total.description1: *Person-days* the work of one employee during a single working day. For example, in one calendar day, a team of three employees produces a work volume of three person-days.
§ page.team.total.description2: *Absentee days* are counted only as working days when commits could have been made. Weekends, public holidays, and vacations are not included in the calculation.
§ page.team.total.description3: The *working and dismissed* card shows the actual composition of employees who are continuously involved in work. Additionally, there are "assistants" typically employees of a different specialization who may occasionally make commits to the project.
§ page.team.total.description4: *Overpayment* includes only working days when commits could have been made. Weekends, public holidays, and vacations are not included in the calculation. This is why overpayment + actual cost != total. The total cost includes payment for weekends, public holidays, and vacations.
§ page.team.total.description5: *Weekend work* is calculated at a rate of x2 the payment of a regular day. The displayed amount is specifically the overpayment (x1), as the fact of overtime in this context is not of interest. We focus on overpayment when increasing work speed.
§ page.team.tree.title: Project Tree Considering Selected Filters
§ page.team.tree.filters.author: Employee
§ page.team.tree.filters.commits: Number of commits
§ page.team.tree.filters.help: The minimum number of commits an employee has made in a file
§ page.team.tree.filters.all: All employees
§ page.team.tree.add: Who added
§ page.team.tree.change: Who changed
§ page.team.tree.remove: Who removed
§ page.team.tree.line: lines
§ page.team.tree.lineAdd: added
§ page.team.tree.lineRemove: changed
§ page.team.week.title: Weekly statistics
§ page.team.week.date: Date
§ page.team.week.numberTasks: Number of tasks
§ page.team.week.people: Number of people
§ page.team.week.line: Line Changes
§ page.team.week.days: Days with and without commits
§ page.team.week.lossesDetails: Who did not commit
§ page.team.week.add: added
§ page.team.week.change: changed
§ page.team.week.remove: removed
§ page.team.week.hasCommits: had commits
§ page.team.week.hasNotCommits: had no commits
§ page.team.week.days: days
§ page.team.week.tasks: tasks
§ page.team.pr.task: Task
§ page.team.pr.tasks: tasks
§ page.team.pr.firstCommitTime: First commit
§ page.team.pr.lastCommitTime: Last
§ page.team.pr.workDays: Development days
§ page.team.pr.delayDays: Days waiting for merge
§ page.team.total.commits.description: 删除的分支不算数
§ page.team.total.daysLosses.title: 没有的日子 commits
§ page.team.total.daysLosses.description: 所有的日子都是负数: Commits
§ page.team.total.employment.title: 工作/退
§ page.team.total.employment.description: 如果员工在一个月内没有完成任何工作 Commits,
§ page.team.total.moneyAll.title: 普通
§ page.team.total.moneyAll.description: 工资费用总额
§ page.team.total.moneyWorked.title: 实际
§ page.team.total.moneyWorked.description: 实际工作天数乘以平均工资
§ page.team.total.moneyLosses.title: 可能多付
§ page.team.total.moneyLosses.description: 带薪工作日, Commits
§ page.team.total.weekendPayment.title: 周末工作
§ page.team.total.weekendPayment.description: 周末工作多付总额
§ page.team.total.workSpeed.title: 每天的任务
§ page.team.total.workSpeed.description: 团队与当前员工的平均工作速度
§ page.team.total.moneySpeed.title: 每月
§ page.team.total.moneySpeed.description: 现职工作人员的预计薪金支付额
§ page.team.total.description1: ** .
§ page.team.total.description2: ** Commits . .
§ page.team.total.description3: 卡片 *退* "- Commits .
§ page.team.total.description4: ** Commits . . +=.
§ page.team.total.description5: ** x2计算从支付一个正常的一天 x1 .
§ page.team.tree.title: 项目树
§ page.team.tree.filters.author: 雇员
§ page.team.tree.filters.commits: 数量 Commits
§ page.team.tree.filters.help: 最低数量 Commits,
§ page.team.tree.filters.all: 所有员工
§ page.team.tree.add: 谁加的
§ page.team.tree.change: 谁改变了它
§ page.team.tree.remove: 谁删除了它
§ page.team.tree.line: 线条
§ page.team.tree.lineAdd: 补充道
§ page.team.tree.lineRemove: 改变了
§ page.team.week.title: 按周划分的统计数字
§ page.team.week.date: 日期
§ page.team.week.numberTasks: 任务数量
§ page.team.week.people: 人数
§ page.team.week.line: 换线
§ page.team.week.days: 日起 Commits
§ page.team.week.lossesDetails: 谁不 Commits
§ page.team.week.add: 补充道
§ page.team.week.change: 改变了
§ page.team.week.remove: 已删除
§ page.team.week.hasCommits: Commits
§ page.team.week.hasNotCommits: 不是这样的 Commits
§ page.team.week.days: 天数
§ page.team.week.tasks: 任务
§ page.team.pr.task: 任务
§ page.team.pr.tasks: 任务
§ page.team.pr.firstCommitTime: 第一个 Commits
§ page.team.pr.lastCommitTime: 最后一次
§ page.team.pr.workDays: 发展的日子
§ page.team.pr.delayDays: 等待输液的日子
§ page.team.pr.commits: Commits
§ page.team.pr.date: Merge Date
§ page.team.pr.mergeAuthor: Merged by
§ page.team.pr.author: Employee
§ page.team.pr.middleTimeRelease: Average delivery time (days)
§ page.team.pr.work: development
§ page.team.pr.delay: waiting
§ page.team.pr.days: days
§ page.team.pr.oneTaskDays: Time spent on one task
§ page.team.pr.description1: *Development time* is the time difference from the first to the last commit on a task. It does not matter if there were breaks of several days between commits or not. Any commit increases the time.
§ page.team.pr.description2: *Waiting time* is the time between the last commit and the code merge. It shows the actual downtime while waiting for something.
§ page.team.pr.description3: *Why display development time* without splitting into coding and code review? To show the business the actual delivery time of the code. Waiting for testing, review comments, DevOps problems, and other process imperfections are already included in this term.
§ page.team.pr.statByAuthors: Statistics by employees
§ page.team.pr.longDelay: Prolonged Waiting for merge
§ page.team.tasks.task: Task
§ page.team.tasks.author: First commit author
§ page.team.tasks.from: First commit
§ page.team.tasks.to: Last commit
§ page.team.tasks.daysInWork: Days in work
§ page.team.tasks.commits: Commits number
§ page.team.tasks.pr: Merge date
§ page.team.tasks.prAuthor: Merged by user
§ page.team.tasks.prDelayDays: Delay before merge in days
§ page.team.tasks.comments: Comments
§ page.person.print.photo.title: Photo
§ page.person.print.photo.description: space for a photo
§ page.person.total.title: Main characteristics
§ page.person.total.daysWorked.title: days of work
§ page.person.total.daysWorked.description: Only days with commits are counted
§ page.person.total.tasks.title: tasks
§ page.person.total.tasks.description: If commits are properly signed
§ page.person.character.title: Character
§ page.person.achievement.title: Achievements
§ page.person.achievement.positive: Positive
§ page.person.achievement.normal: Neutral
§ page.person.achievement.negative: Negative
§ page.person.achievement.description: The more negative achievements an employee accumulates, the higher the likelihood that the situation is unusual. It may be necessary to change their work mode, tasks, or reporting. A discussion with them to understand what problems are hindering their work is advisable.
§ page.person.gets.title: Gets taken:
§ page.person.gets.description: "Taking a get" in this context means being the first to leave a commit on a task with a "nice" number.
§ page.person.business.days.title: days of work
§ page.person.business.days.description: Only days with commits are counted
§ page.person.business.tasks.title: tasks
§ page.person.business.tasks.description: If commits are properly signed
§ page.person.business.losses.title: days without commits
§ page.person.business.losses.description: All days minus: holidays, weekends, vacation, days with commits
§ page.person.business.commits.title: commits
§ page.person.business.commits.description: Deleted branches are not counted
§ page.person.business.time.description: Time from the first to the last commit (including non-working days)
§ page.person.business.time.title: Days on the project:
§ page.person.business.time.dismissed: (dismissed)
§ page.person.business.time.staff: (not in the team)
§ page.person.business.achievements: Achievements
§ page.person.changes.title: Achievements
§ page.team.pr.date: 注射日期
§ page.team.pr.mergeAuthor: 填写
§ page.team.pr.author: 雇员
§ page.team.pr.middleTimeRelease: 平均派递时间 ()
§ page.team.pr.work: 发展
§ page.team.pr.delay: 期望
§ page.team.pr.days: 天数
§ page.team.pr.oneTaskDays: 花在一项任务上的时间
§ page.team.pr.description1: ** Commits . Commits . Commits .
§ page.team.pr.description2: ** Commits . 西.
§ page.team.pr.description3: ** ? DevOps问题和流程的其他不完善之处已经在这一时期制定.
§ page.team.pr.statByAuthors: 雇员统计数字
§ page.team.pr.longDelay: 长时间等待输液
§ page.team.tasks.task: 任务
§ page.team.tasks.author: 第一篇的作者 Commits
§ page.team.tasks.from: 第一个 Commits
§ page.team.tasks.to: 最后一次 Commits
§ page.team.tasks.daysInWork: 工作中的日子
§ page.team.tasks.commits: 数量 Commits
§ page.team.tasks.pr: 注射日期
§ page.team.tasks.prAuthor:
§ page.team.tasks.prDelayDays: 等待输液的日子
§ page.team.tasks.comments: 评论
§ page.person.print.photo.title: 照片
§ page.person.print.photo.description: 拍照的地方
§ page.person.total.title: 主要特点
§ page.person.total.daysWorked.title: 工作天
§ page.person.total.daysWorked.description: 只考虑制作它们的日子 Commits
§ page.person.total.tasks.title: 任务
§ page.person.total.tasks.description: 如果 Commits
§ page.person.character.title: 性格
§ page.person.achievement.title: 进展情况
§ page.person.achievement.positive: 积极
§ page.person.achievement.normal: 中立
§ page.person.achievement.negative: 负面
§ page.person.achievement.description: 员工取得的负面成绩越多 .
§ page.person.gets.title: 被带走的木屐:
§ page.person.gets.description: «» Commits "美丽".
§ page.person.business.days.title: 工作天
§ page.person.business.days.description: 只考虑制作它们的日子 Commits
§ page.person.business.tasks.title: 任务
§ page.person.business.tasks.description: 如果 Commits
§ page.person.business.losses.title: 没有的日子 Commits
§ page.person.business.losses.description: 所有日子减去 Commits
§ page.person.business.commits.title: Commits
§ page.person.business.commits.description: 删除的分支不算数
§ page.person.business.time.description: 从第一到最后的时间 Commits ()
§ page.person.business.time.title: 项目日:
§ page.person.business.time.dismissed: ()
§ page.person.business.time.staff: ()
§ page.person.business.achievements: 进展情况
§ page.person.changes.title: 进展情况
§ page.person.changes.description:
With some types of formatting, git marks lines as "deleted" and "added",
although in reality, they were "changed". Therefore, if you conducted a major refactoring,
git might show a small number of changes in the statistics, but the actual result
will be marked as a jump in "deleted" and "added" lines.
§ page.person.changes.description: List of commits and the number of changes in them for that day:
§ page.person.commits.title: List of commits:
§ page.person.money.title.total: Total over time
§ page.person.money.title.middle: Average cost
§ page.person.money.moneyAll.title: received
§ page.person.money.moneyAll.description: Assumed total salary from the project (see settings)
§ page.person.money.moneyWorked.title: worked for
§ page.person.money.moneyWorked.description: Actual days worked multiplied by average salary
§ page.person.money.moneyLosses.title: possible overpayment
§ page.person.money.moneyLosses.description: Days without commits multiplied by average salary
§ page.person.money.tasks.title: task
§ page.person.money.tasks.description: Number of closed tasks to the cost of the day
§ page.person.money.commits.title: commit
§ page.person.money.commits.description: Number of commits to the cost of the workday
§ page.person.speed.task: One task on average is
§ page.person.speed.max: Maximum speed per day
§ page.person.speed.days.title: days
§ page.person.speed.days.description: Refers to workdays, if commits are properly signed
§ page.person.speed.commits.title: commits
§ page.person.speed.commits.description: Top and bottom 10% of values are trimmed
§ page.person.speed.line.title: lines of code
§ page.person.speed.line.description: Top and bottom 10% of values are trimmed
§ page.person.speed.tasks.title: tasks
§ page.person.speed.tasks.description: A task may not be completed, but work should be done on it
§ page.person.speed.maxCommits.title: commits
§ page.person.speed.maxCommits.description: A task may not be completed, but work should be done on it
§ page.person.hours.title: Distribution of commits during each day of the week
§ page.person.week.date: Date
§ page.person.week.tasks: Number of tasks
§ page.person.week.workDays: Days with commits
§ page.person.week.taskInDay: Tasks per day
§ page.person.week.days: days
§ page.person.week.workDay: weekdays
§ page.person.week.weekends: weekends
使git将字符串标记为"已删除""已添加",
"改变" ,
git可以显示统计信息的少量变化
"已删除""已添加".
§ page.person.changes.description: 名单 Commits :
§ page.person.commits.title: 名单 Commits:
§ page.person.money.title.total: 一直如此
§ page.person.money.title.middle: 平均成本
§ page.person.money.moneyAll.title: 收到
§ page.person.money.moneyAll.description: 工程项目的采购订单估计金额 ()
§ page.person.money.moneyWorked.title: 工作了
§ page.person.money.moneyWorked.description: 实际工作天数乘以平均po
§ page.person.money.moneyLosses.title: 可能多付
§ page.person.money.moneyLosses.description: 没有的日子 Commits po
§ page.person.money.tasks.title: 任务
§ page.person.money.tasks.description: 关闭任务的数量到一天的成本
§ page.person.money.commits.title: Commits
§ page.person.money.commits.description: 数量 Commits
§ page.person.speed.task: 平均一项任务是
§ page.person.speed.max: 每日最高速度
§ page.person.speed.days.title: 天数
§ page.person.speed.days.description: 这意味着如果 Commits
§ page.person.speed.commits.title: Commits
§ page.person.speed.commits.description: 最大值和最小值的10
§ page.person.speed.line.title: 代码行
§ page.person.speed.line.description: 最大值和最小值的10
§ page.person.speed.tasks.title: 任务
§ page.person.speed.tasks.description: 任务可能没有完成
§ page.person.speed.maxCommits.title: Commits
§ page.person.speed.maxCommits.description: 任务可能没有完成
§ page.person.hours.title: 分布情况 Commits
§ page.person.week.date: 日期
§ page.person.week.tasks: 任务数量
§ page.person.week.workDays: 日起 Commits
§ page.person.week.taskInDay: 每天的任务
§ page.person.week.days: 天数
§ page.person.week.workDay: 平日
§ page.person.week.weekends: 周末
`;