feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MonetaPhpShop\receipt;
|
||||
|
||||
use Closure;
|
||||
|
||||
/**
|
||||
* Åäèíèöà èçìåðåíèÿ ïîçèöèè ÷åêà (`measure`, ïåðå÷åíü `kassaspecification.pdf`) ïî åäèíèöå òîâàðà
|
||||
* PHPShop (`ed_izm` — ñâîáîäíûé òåêñò: «øò.», «êã», «ì2»). Âàðèàíòû íàïèñàíèÿ — òå, ÷òî êàññà
|
||||
* ðàñïîçíà¸ò ñàìà («àâòîîïðåäåëåíèå» â ñïåöèôèêàöèè), ïëþñ òî÷êà íà êîíöå è ïðîáåëû, êàê ïèøóò
|
||||
* â PHPShop. Íå ðàñïîçíàíî èëè ïóñòî — `unit` (øòóêà), çíà÷åíèå êàññû ïî óìîë÷àíèþ.
|
||||
*
|
||||
* Ñðàâíåíèå áåç ó÷¸òà ðåãèñòðà ÷åðåç `/iu`: `mbstring` ÿäðî PHPShop íå òðåáóåò. Âàðèàíòû — ëèòåðàëû
|
||||
* ìîäóëÿ: ïîñëå ñáîðêè îíè â cp1251, à øàáëîí ñ `/u` îáÿçàí áûòü UTF-8, ïîýòîìó ïåðåä ñðàâíåíèåì èõ
|
||||
* ïåðåêîäèðóåò òîò æå `$toUtf8`, ÷òî è ïðî÷èå ëèòåðàëû ÷åêà ({@see ReceiptBuilder}).
|
||||
*/
|
||||
final class Measure
|
||||
{
|
||||
public const UNIT = 'unit';
|
||||
|
||||
/** Êîä êàññû -> âàðèàíòû íàïèñàíèÿ (áåç ïðîáåëîâ, â íèæíåì ðåãèñòðå). */
|
||||
private const VARIANTS = [
|
||||
self::UNIT => ['øòóêà', 'øòóêè', 'øòóê', 'øò', 'pc', 'pce', 'pcs', 'nmb'],
|
||||
'gram' => ['ãðàìì', 'ãðàììû', 'ã', 'ãð', 'g', 'grm'],
|
||||
'kilogram' => ['êèëîãðàìì', 'êèëîãðàììû', 'êã', 'kg', 'kgm'],
|
||||
'ton' => ['òîííà', 'òîííû', 'ò', 't', 'tne'],
|
||||
'centimeter' => ['ñàíòèìåòð', 'ñì', 'cm', 'cmt'],
|
||||
'decimeter' => ['äåöèìåòð', 'äì', 'dm', 'dmt'],
|
||||
'meter' => ['ìåòð', 'ìåòðû', 'ì', 'm', 'mtr', 'ïì', 'ïîã.ì'],
|
||||
'square_centimeter' => ['êâàäðàòíûéñàíòèìåòð', 'êâ.ñì', 'ñì2', 'cm2', 'cmk'],
|
||||
'square_decimeter' => ['êâàäðàòíûéäåöèìåòð', 'êâ.äì', 'äì2', 'dm2', 'dmk'],
|
||||
'square_meter' => ['êâàäðàòíûéìåòð', 'êâ.ì', 'ì2', 'm2', 'mtk'],
|
||||
'milliliter' => ['ìèëëèëèòð', 'ìë', 'ml', 'mlt'],
|
||||
'liter' => ['ëèòð', 'ëèòðû', 'ë', 'l', 'ltr'],
|
||||
'cubic_meter' => ['êóáè÷åñêèéìåòð', 'êóá.ì', 'ì3', 'm3', 'mtq'],
|
||||
'kilowatt_hour' => ['êèëîâàòò÷àñ', 'êâò*÷', 'êâò-÷', 'êâò÷', 'kwh'],
|
||||
'gigacalorie' => ['ãèãàêàëîðèÿ', 'ãêàë', 'ãèãàêàë'],
|
||||
'day' => ['ñóòêè', 'ñóò', 'äåíü', 'äí', 'd', 'day'],
|
||||
'hour' => ['÷àñ', '÷', 'h', 'hur'],
|
||||
'minute' => ['ìèíóòà', 'ìèí', 'min'],
|
||||
'second' => ['ñåêóíäà', 'ñåê', 'ñ', 's', 'sec'],
|
||||
'kilobyte' => ['êèëîáàéò', 'êáàéò', 'êá', 'kib', 'êèá', 'kb'],
|
||||
'megabyte' => ['ìåãàáàéò', 'ìáàéò', 'ìá', 'mib', 'ìèá', 'mb'],
|
||||
'gigabyte' => ['ãèãàáàéò', 'ãáàéò', 'ãá', 'gib', 'ãèá', 'gb'],
|
||||
'terabyte' => ['òåðàáàéò', 'òáàéò', 'òá', 'tib', 'òèá', 'tb'],
|
||||
];
|
||||
|
||||
private function __construct() {}
|
||||
|
||||
/**
|
||||
* @param string $unit åäèíèöà òîâàðà â UTF-8
|
||||
* @param Closure(string): string $toUtf8 ëèòåðàëû ìîäóëÿ -> UTF-8
|
||||
*/
|
||||
public static function fromUnit(string $unit, Closure $toUtf8): string
|
||||
{
|
||||
// Ïðîáåëû íå çíà÷èìû («êâ. ì»), òî÷êà íà êîíöå — ñîêðàùåíèå («øò.»).
|
||||
$unit = rtrim((string) preg_replace('/\s+/u', '', $unit), '.');
|
||||
if ($unit === '') {
|
||||
return self::UNIT;
|
||||
}
|
||||
foreach (self::VARIANTS as $measure => $variants) {
|
||||
foreach ($variants as $variant) {
|
||||
if (preg_match('/\A' . preg_quote($toUtf8($variant), '/') . '\z/iu', $unit) === 1) {
|
||||
return $measure;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return self::UNIT;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user