Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Сумма прописью в ПДФ счете


VjS

Recommended Posts

Привет всем!

 

как реализовать сумму прописью в пдф счете?

нашел здесь на форуме такой код:

 

function num2str($inn, $stripkop=false) {
$nol = 'ноль';
$str[100]= array('','сто','двести','триста','четыреста','пятьсот','шестьсот', 'семьсот', 'восемьсот','девятьсот');
$str[11] = array('','десять','одиннадцать','двенадцать','тринадцать', 'четырнадцать','пятнадцать','шестнадцать','семнадцать', 'восемнадцать','девятнадцать','двадцать');
$str[10] = array('','десять','двадцать','тридцать','сорок','пятьдесят', 'шестьдесят','семьдесят','восемьдесят','девяносто');
$sex = array(
array('','один','два','три','четыре','пять','шесть','семь', 'восемь','девять'),// m
array('','одна','две','три','четыре','пять','шесть','семь', 'восемь','девять') // f
);
$forms = array(
array('копейка', 'копейки', 'копеек', 1), // 10^-2
array('рубль', 'рубля', 'рублей', 0), // 10^ 0
array('тысяча', 'тысячи', 'тысяч', 1), // 10^ 3
array('миллион', 'миллиона', 'миллионов', 0), // 10^ 6
array('миллиард', 'миллиарда', 'миллиардов', 0), // 10^ 9
array('триллион', 'триллиона', 'триллионов', 0), // 10^12
);
$out = $tmp = array();
// Поехали!
$tmp = explode('.', str_replace(',','.', $inn));
$rub = number_format($tmp[ 0], 0,'','-');
if ($rub== 0) $out[] = $nol;
// нормализация копеек
$kop = isset($tmp[1]) ? substr(str_pad($tmp[1], 2, '0', STR_PAD_RIGHT), 0,2) : '00';
$segments = explode('-', $rub);
$offset = sizeof($segments);
if ((int)$rub== 0) { // если 0 рублей
$o[] = $nol;
$o[] = morph( 0, $forms[1][ 0],$forms[1][1],$forms[1][2]);
}
else {
foreach ($segments as $k=>$lev) {
$sexi= (int) $forms[$offset][3]; // определяем род
$ri = (int) $lev; // текущий сегмент
if ($ri== 0 && $offset>1) {// если сегмент==0 & не последний уровень(там Units)
$offset--;
continue;
}
// нормализация
$ri = str_pad($ri, 3, '0', STR_PAD_LEFT);
// получаем циферки для анализа
$r1 = (int)substr($ri, 0,1); //первая цифра
$r2 = (int)substr($ri,1,1); //вторая
$r3 = (int)substr($ri,2,1); //третья
$r22= (int)$r2.$r3; //вторая и третья
// разгребаем порядки
if ($ri>99) $o[] = $str[100][$r1]; // Сотни
if ($r22>20) {// >20
$o[] = $str[10][$r2];
$o[] = $sex[ $sexi ][$r3];
}
else { // <=20
if ($r22>9) $o[] = $str[11][$r22-9]; // 10-20
elseif($r22> 0) $o[] = $sex[ $sexi ][$r3]; // 1-9
}
// Рубли
$o[] = morph($ri, $forms[$offset][ 0],$forms[$offset][1],$forms[$offset][2]);
$offset--;
}
}
// Копейки
if (!$stripkop) {
$o[] = $kop;
$o[] = morph($kop,$forms[ 0][ 0],$forms[ 0][1],$forms[ 0][2]);
}
return preg_replace("/\s{2,}/",' ',implode(' ',$o));
}

/**
* Склоняем словоформу
*/
function morph($n, $f1, $f2, $f5) {
$n = abs($n) % 100;
$n1= $n % 10;
if ($n>10 && $n<20) return $f5;
if ($n1>1 && $n1<5) return $f2;
if ($n1==1) return $f1;
return $f5;
}
 

как его прикрутить к модулю пдф счета в ocStore 2.1.0.2

Змінено користувачем shoputils
code в [code]
Надіслати
Поділитися на інших сайтах


модуль платный:

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=22647

 

поделюсь модулем, кто поможет решить несколько задач по модулю

 

1. в мультиязычном сайте надо чтоб ПДФ счет генерировался только на одном языке по умолчанию, в настройках модуля есть опция язык по умолчанию, (разработчик реализовал но не полностью,(говорит что полностью реализовать невозможно, названию товара и опции товара нельзя установить язык по умолчанию, остальному может быть). Слабо в это верится что нельзя, ведь в БД есть и название товара и опции товара на всех языках сайта, значит должна быть возможность взять только нужный язык из базы.

 

часть переменных остается на другом языке, 

например: если сайт имеет русский и английский язык, (в настройках модуля язык счета по умолчанию русский) клиент заходит на английскую версию, делает заказ, и потом в админке, админка на русском языке, смотреть этот пдф счет то часть данных в счете остается на английском, а конкретно: название товара, опция товара, предварительная сумма и итоговая сумма) . надо сделать чтоб весь пдф счет и тот что отправляется клиенту на майл с письмом после заказа и тот что просматривается в админке был только на одном языке что выставлен в настройках по умолчанию.

 

2. итоговая сумма прописью на языке счета по умолчанию.

Змінено користувачем VjS
Надіслати
Поділитися на інших сайтах


за фразу "поделюсь модулем" можно улететь на бан-ановые острова.

1. все правильно автор говорит - в базу о заказе пишется название только на одном языке, который стоит у покупателя в момент оформления заказа.

Надіслати
Поділитися на інших сайтах

за фразу "поделюсь модулем" можно улететь на бан-ановые острова.

1. все правильно автор говорит - в базу о заказе пишется название только на одном языке, который стоит у покупателя в момент оформления заказа.

 

немного не понял про "острова"

это же в знак благодарности, никого этой фразой обидеть и не думал даже.

 

1. да, в базу пишется название только на одном языке, на котором делал заказ клиент, но в самой базе есть же название товара на всех языках в таблице oc_product_description, разве нельзя както взять нужное название или указать ID_language или чтото в этом роде?

Змінено користувачем VjS
Надіслати
Поділитися на інших сайтах


к моменту, когда менеджер доберется до заказа, товар может быть уже переименован (или вовсе удален).

чтобы это не потревожило ранимую душу менеджера все данные берутся "из истории заказа".

сделать можно.

только не очень целесообразно.

Надіслати
Поділитися на інших сайтах

дело в том что по законам государства все счета должны быть на гос языке, а гос язык один, отсюда и необходимость счета на одном языке.

о менеджере государство не думает :)

 

так как все же это можно сделать?

Надіслати
Поділитися на інших сайтах


понятно.

лучше для этого писать отдельные запросы в модели, чтобы не трогать остальной функционал.

это в частном порядке под конкретный магазин.

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.