Диплом: Автоматизация расчѐтов с персоналом в ООО "Промо Диджитал"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
90
10. Лазицкас, Е.А. Базы данных и системы управления базами данных:
учебное пособие: / Е.А. Лазицкас, И.Н. Загумѐнникова, П.Г. Гилевский. –
Минск: РИПО, 2016. – 267 с.
11. Медведкин, Я.В. Бухгалтерский учет расчетов с персоналом:
практическое пособие / Я.В. Медведкин. – Москва: Лаборатория книги, 2012. –
188 с.
12. Марк М. Windows Server 2012. Полное руководство. Том 2/ Марк
Минаси, Кевин Грин, Кристиан Бус, Роберт Батлер— 2 том, 2017. — С. 864.
13. Советов Б.Я. Архитектура информационных систем: учебник / Б.Я.
Советов, А.И. Водяхо, В.А. Дубенецкий, В.В. Цехановский. – М.: Академия,
2012. – 288 с.
14. Советов Б.Я. Базы данных: учебник / Б.Я. Советов, В.В.
Цехановский, В.Д. Чертовский. – 2-е изд., перераб. и доп. - М.: Юрайт, 2017. -
463с.
15. Фомин С. Структура и методология разработки
автоматизированных информационных систем// Учебно-методические пособия
/ Фомин С.— М., 2016. — С. 239.
16. Чистов Д. В. Проектирование информационных систем//Бакалавр.
Академический курс / Мельников П. П., Золотарюк А. В., Ничепорук Н. Б. —
2018. — С. 258.
17. Шкундин, С.З. Теория информационных процессов и систем:
учебное пособие / С.З. Шкундин, В.Ш. Берикашвили. – Москва: Горная книга,
2016. – 475 с.
91
Приложения
Приложение 1. Листинг программных модулей.
Листинг программного модуля расчета доходов фрилансера.
#!/usr/bin/env node
const Table = require('cli-table');
const { salary, config, printCompany, area } = require('./parser');
const colWidth = 10;
const formatMoney = value => Math.round(value * 100) / 100;
const getTaxInfo = (total) => {
const { base, percentage, deduction } = config.tax.accumulateTaxableIncome;
let index;
if (!base.some((value, i) => {
index = i;
if (total < value) {
return true;
}
return false;
})) {
index += 1;
}
return {percentage: percentage[index], deduction: deduction[index] };
};
// Распечатать личный доход / детали платежа
const logPersonalTable = () => {
const table = new Table({
colWidths: [colWidth, colWidth, colWidth, colWidth, colWidth, colWidth,
colWidth, colWidth, colWidth],
});
const baseSocial = Math.min(salary, config.social.base);
92
const baseProvident = Math.min(salary, config.provident.base);
let accumulateTaxableIncome = 0;
let accumulateTax = 0;
for (let i = 1; i <= 12; ++i) {
const pension = formatMoney(baseSocial * config.social.percentage.pension /
100);
const medical = formatMoney(baseSocial * config.social.percentage.medical /
100);
const unemployment = formatMoney(baseSocial *
config.social.percentage.unemployment / 100);
const provident = Math.round(baseProvident * config.provident.percentage /
100);
let tax;
accumulateTaxableIncome += salary - pension - medical - unemployment -
provident - config.tax.base - config.tax.deduction;
if (accumulateTaxableIncome > 0) {
const { percentage, deduction } = getTaxInfo(accumulateTaxableIncome);
tax = formatMoney(accumulateTaxableIncome * percentage / 100 - deduction -
accumulateTax);
accumulateTax += tax;
} else {
tax = 0;
}
const income = formatMoney(salary - pension - medical - unemployment -
provident - tax);
table.push([i, income, tax, baseProvident, provident, baseSocial, pension,
medical, unemployment]);
}
console.log(Личный доход / детали платежа - ${area}:`);
93
console.log(Доход за месяц | Доход с учетом налогов | Подоходный налог с
физических лиц(${config.provident.percentage}%) | Выплаты социального
страхования (${config.social.percentage.pension}%)`);
console.log(table.toString());
};
// Распечатать расходы компании / детали платежа
const logCompanyTable = () => {
const table = new Table({
colWidths: [colWidth, colWidth, colWidth, colWidth, colWidth, colWidth,
colWidth, colWidth, colWidth, colWidth],
});
const baseSocial = Math.min(salary, config.social.base);
const baseProvident = Math.min(salary, config.provident.base);
for (let i = 1; i <= 12; ++i) {
const pension = formatMoney(baseSocial *
config.social.companyPercentage.pension / 100); // Процент компании
const medical = formatMoney(baseSocial *
config.social.companyPercentage.medical / 100);
const unemployment = formatMoney(baseSocial *
config.social.companyPercentage.unemployment / 100);
const injury = formatMoney(baseSocial *
config.social.companyPercentage.injury / 100);
const fertility = formatMoney(baseSocial *
config.social.companyPercentage.fertility / 100);
const provident = Math.round(baseProvident *
config.provident.companyPercentage / 100);
const expenditure = formatMoney(salary + pension + medical + unemployment
+ injury + fertility + provident);
table.push([i, expenditure, baseProvident, provident, baseSocial, pension,
94
medical, unemployment, injury, fertility]);
}
console.log(Расходы компании / детали платежа - ${area}:`);
console.log( Расходы за месяц | Общие расходы | Выплаты социального
страхования (${config.provident.companyPercentage}%)`);
console.log(table.toString());
};
logPersonalTable();
if (printCompany) {
console.log('\n');
logCompanyTable();
}
Листинг программного модуля расчета доходов фрилансера.
const program = require('commander');
const packageInfo = require('../package.json');
program
.version(packageInfo.version, '-v, --version')
.option('-s --salary <n>', 'Ежемесячная зарплата с учетом налогов', parseFloat)
.option('-a --area [area]', 'Оплата, По умолчанию Рубль, поддерживает валюты
Rouble & Dollar')
.option('-c --print-company', 'Распечатать данные о доходах')
.parse(process.argv);
const areas = ['Rouble', 'Dollar'];
const { salary, baseSocial, baseProvident, printCompany } = program;
if (!salary || salary <= 0) {
95
console.log('error: Пожалуйста, введите правильную месячную зарплату');
program.outputHelp();
process.exit(1);
}
const index = areas.indexOf(program.area);
let area;
if (index !== -1) {
area = areas[index];
} else {
area = 'Rouble';
}
const config = require(`../config/config.${area.toLowerCase()}.json`);
if (baseSocial && baseSocial > 0) {
config.social.base = Math.min(baseSocial, config.social.base);
}
if (baseProvident && baseProvident > 0) {
config.provident.base = Math.min(baseProvident, config.provident.base);
}
const translateArea = (area) => {
switch (area) {
case 'Rouble':
return 'Рубль';
case 'Dollar':
return 'Доллар';
default:
return '';
}
};
module.exports = { salary, config, printCompany, area: translateArea(area) };
Листинг программного модуля графика доходов за 4 месяца.
96
function BuildChart(labels, values, chartTitle) {
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: chartTitle, // Название рядов
data: values,
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
97
responsive: true,
maintainAspectRatio: false,
}
});
return myChart;
}
var labels = json.map(function (e) {
return e.month;
});
console.log(labels); // месяц
var values = json.map(function (e) {
return e.salary;
});
console.log(values); // значения
var chart = BuildChart(labels, values, "Доход за период");
//Данные для диаграммы переданы JavaScript и представлены в графическом
виде.
function BuildChart(labels, values, chartTitle) {
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels, // Our labels
datasets: [{
label: chartTitle, // Name the series
data: values, // Our values
backgroundColor: [ // Specify custom colors
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
98
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [ // Add custom color borders
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1 // Specify bar border width
}]
},
options: {
responsive: true, // Instruct chart js to respond nicely.
maintainAspectRatio: false, // Add to prevent default behaviour of full-
width/height
}
});
return myChart;
}
// JSON Script
var table = document.getElementById('dataTable');
var json = []; // first row needs to be headers
var headers = [];
for (var i = 0; i < table.rows[0].cells.length; i++) {
99
headers[i] = table.rows[0].cells[i].innerHTML.toLowerCase().replace(/ /gi, '');
}
// go through cells
for (var i = 1; i < table.rows.length; i++) {
var tableRow = table.rows[i];
var rowData = {};
for (var j = 0; j < tableRow.cells.length; j++) {
rowData[headers[j]] = tableRow.cells[j].innerHTML;
}
json.push(rowData);
}
console.log(json);
// Map json values back to label array
var labels = json.map(function (e) {
return e.month;
});
console.log(labels);
// Map json values back to values array
var values = json.map(function (e) {
return e.salary;
});
console.log(values);
var chart = BuildChart(labels, values, "Доход за 4 месяца");

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Agile-методология в управлении проектами на примере ООО «Ресурсный центр «Академия КлассИнфо»
Aвтoмaтизaция пpoцecca вeдeния инфopмaциoннoй бaзы o дoлжнocтяx и вaкaнcияx c укaзaниeм тpeбoвaний к уpoвню знaний и нaвыкoв кaндидaтoв для гpуппы кaдpoв вoйcкoвoй чacти 3474»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
Cовершенствование управления рентабельности предприятия (на примере гуипп «бендерская типография «полиграфист»)
Event - менеджмент: реализация проекта (на примере ООО "АГРОПАК")