60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
// lib/common/utils/pricing.util.js
|
|
|
|
export const QUALITIES = [
|
|
{ id: 'low', label: 'Эконом' },
|
|
{ id: 'medium', label: 'Стандарт' },
|
|
{ id: 'high', label: 'Максимум' }
|
|
];
|
|
|
|
export const COLOR_MODES = [
|
|
{ id: 'bw', label: 'Черно-белая' },
|
|
{ id: 'color', label: 'Цветная' }
|
|
];
|
|
|
|
export const FORMATS = ['A4', 'A5'];
|
|
|
|
/**
|
|
* Возвращает количество физических листов.
|
|
* Для двусторонней печати: страницы / 2, округлённые вверх.
|
|
*/
|
|
export function getSheetsCount(pagesCount, isDuplex = false) {
|
|
const pages = Math.max(0, Number(pagesCount) || 0);
|
|
|
|
if (!isDuplex) {
|
|
return pages;
|
|
}
|
|
|
|
return Math.ceil(pages / 2);
|
|
}
|
|
|
|
/**
|
|
* Расчет цены за лист.
|
|
* Для двусторонней печати фиксированно 15 ₽/лист.
|
|
* Для односторонней остаются старые тарифы.
|
|
*/
|
|
export function getPricePerPage(pagesOrSheetsCount, sides = 'Односторонняя') {
|
|
if (sides === 'Двусторонняя') {
|
|
return 15;
|
|
}
|
|
|
|
const n = Math.max(0, Number(pagesOrSheetsCount) || 0);
|
|
|
|
if (n >= 25) return 9;
|
|
|
|
return 10;
|
|
}
|
|
|
|
/**
|
|
* Плюрализация
|
|
*/
|
|
export function pluralize(n, forms) {
|
|
const mod10 = n % 10;
|
|
const mod100 = n % 100;
|
|
if (mod10 === 1 && mod100 !== 11) return forms[0];
|
|
if (mod10 >= 2 && mod10 <= 4 && (mod100 < 10 || mod100 > 14)) return forms[1];
|
|
return forms[2];
|
|
}
|
|
|
|
export const plFiles = (n) => pluralize(n, ['файл', 'файла', 'файлов']);
|
|
export const plCopies = (n) => pluralize(n, ['копия', 'копии', 'копий']);
|