mirror of
https://github.com/bakhirev/assayo.git
synced 2025-02-23 13:32:19 +00:00
147 lines
3.3 KiB
TypeScript
147 lines
3.3 KiB
TypeScript
import { makeObservable, observable, action } from 'mobx';
|
|
import ICommit from '../interfaces/Commit';
|
|
import dataGripStore from './DataGrip';
|
|
|
|
interface ISettingsStore {
|
|
commits: ICommit[];
|
|
defaultFrom: string;
|
|
defaultTo: string;
|
|
TODAY: Date;
|
|
ONE_DAY: number;
|
|
from: string;
|
|
to: string;
|
|
minCommits: number;
|
|
isFullTime: boolean;
|
|
|
|
defaultSalary: number;
|
|
defaultWorkDays: number;
|
|
holidaysInYear: number;
|
|
currency: string;
|
|
salary: any;
|
|
workDays: any;
|
|
|
|
updateByCommits: (commits: ICommit[], first: ICommit, last: ICommit) => void,
|
|
setFilterByDateType: (type: string) => void,
|
|
}
|
|
|
|
class SettingsStore implements ISettingsStore {
|
|
commits: ICommit[] = [];
|
|
|
|
defaultFrom: string = '';
|
|
|
|
defaultTo: string = '';
|
|
|
|
TODAY: Date = new Date();
|
|
|
|
ONE_DAY: number = 24 * 60 * 60 * 1000;
|
|
|
|
from: string = '';
|
|
|
|
to: string = '';
|
|
|
|
minCommits: number = 20;
|
|
|
|
isFullTime: boolean = true;
|
|
|
|
defaultSalary: number = 3000;
|
|
|
|
defaultWorkDays: number = 5;
|
|
|
|
holidaysInYear: number = 118 + 22; // праздники + выходные + отпуск
|
|
|
|
currency: string = 'USD';
|
|
|
|
salary: any = {};
|
|
|
|
workDays: any = {};
|
|
|
|
constructor() {
|
|
makeObservable(this, {
|
|
commits: observable,
|
|
defaultFrom: observable,
|
|
defaultTo: observable,
|
|
TODAY: observable,
|
|
ONE_DAY: observable,
|
|
from: observable,
|
|
to: observable,
|
|
minCommits: observable,
|
|
isFullTime: observable,
|
|
|
|
defaultSalary: observable,
|
|
defaultWorkDays: observable,
|
|
holidaysInYear: observable,
|
|
currency: observable,
|
|
|
|
salary: observable,
|
|
workDays: observable,
|
|
|
|
updateByCommits: action,
|
|
setFilterByDateType: action,
|
|
updateProperty: action,
|
|
setSalary: action,
|
|
});
|
|
}
|
|
|
|
getMiddleSalaryInMonth(name: string): number {
|
|
return this.salary[name] || this.defaultSalary;
|
|
}
|
|
|
|
getMiddleSalaryInDay(name: string) {
|
|
const salaryInMonth = this.getMiddleSalaryInMonth(name);
|
|
const workDaysInWeek = this.workDays[name] || this.defaultWorkDays;
|
|
const workDaysInMonth = Math.ceil(4.3 * workDaysInWeek);
|
|
return salaryInMonth / workDaysInMonth;
|
|
}
|
|
|
|
getValue(property: string) {
|
|
return property.split('.').reduce((acc, key) => acc[key], this);
|
|
}
|
|
|
|
updateByCommits(commits: ICommit[], firstCommit: ICommit, lastCommit: ICommit) {
|
|
this.commits = commits;
|
|
this.defaultFrom = firstCommit.timestamp;
|
|
this.defaultTo = lastCommit.timestamp;
|
|
this.TODAY = new Date(this.defaultTo);
|
|
this.from = this.defaultFrom;
|
|
this.to = this.defaultTo;
|
|
this.minCommits = 20;
|
|
}
|
|
|
|
setFilterByDateType(type: string) {
|
|
const count = {
|
|
year: 365,
|
|
halfYear: 183,
|
|
month: 30,
|
|
week: 7,
|
|
day: 1,
|
|
}[type];
|
|
|
|
this.from = count
|
|
? (new Date(this.TODAY.getTime() - this.ONE_DAY * count)).toISOString().split('T')[0]
|
|
: this.defaultFrom;
|
|
|
|
this.to = this.defaultTo;
|
|
|
|
this.minCommits = {
|
|
all: 20,
|
|
year: 20,
|
|
halfYear: 10,
|
|
month: 2,
|
|
}[type] || 1;
|
|
dataGripStore.updateChars();
|
|
}
|
|
|
|
updateProperty(propertyName: string, value?: any) {
|
|
this[propertyName] = value ?? null;
|
|
dataGripStore.updateChars();
|
|
}
|
|
|
|
setSalary(userName: string, salary?: number) {
|
|
this.salary[userName] = salary || this.defaultSalary;
|
|
}
|
|
}
|
|
|
|
const settingsStore = new SettingsStore();
|
|
|
|
export default settingsStore;
|