Чек и сумма прописью

99cent

Старатель
Регистрация
27 Фев 2009
Сообщения
194
Реакции
12
Многим было бы удобно распечатывать чек из админки. Такая возможность есть. Можно переделать инвойс под чек, но как сделать что бы автоматом прописывалась сумма прописью? Кто знает решения - опишите плиз.
 
У меня где-то был вариант на украинском, но там переделать не сложно. Единственное что - код ужасен. Но с другой стороны, тебе его в рамочку не распечатывать, работает - и ладно. Он работает. Проверял. )

PHP:
// Число в строку //



$_1_2[1]="одна "; 
$_1_2[2]="двi "; 

$_1_19[1]="одна "; 
$_1_19[2]="двi "; 
$_1_19[3]="три "; 
$_1_19[4]="чотири "; 
$_1_19[5]="п'ять "; 
$_1_19[6]="шiсть "; 
$_1_19[7]="сiм "; 
$_1_19[8]="вiсiм "; 
$_1_19[9]="дев'ять "; 
$_1_19[10]="десять "; 

$_1_19[11]="одинадцять "; 
$_1_19[12]="дванадцять "; 
$_1_19[13]="тринадцять "; 
$_1_19[14]="чотирнадцять "; 
$_1_19[15]="п'ятнадцять "; 
$_1_19[16]="шiстнадцять "; 
$_1_19[17]="сiмнадцять "; 
$_1_19[18]="вiсiмнадцять "; 
$_1_19[19]="дев'ятнадцять "; 

$des[2]="двадцять "; 
$des[3]="тридцять "; 
$des[4]="сорок "; 
$des[5]="п'ятдесят "; 
$des[6]="шiстдесят "; 
$des[7]="сiмдесят "; 
$des[8]="вiсiмдесят "; 
$des[9]="дев'яносто "; 

$hang[1]="сто "; 
$hang[2]="двiстi "; 
$hang[3]="триста "; 
$hang[4]="чотириста "; 
$hang[5]="п'ятсот "; 
$hang[6]="шiстсот "; 
$hang[7]="сiмсот "; 
$hang[8]="вiсiмсот "; 
$hang[9]="дев'ятсот "; 

/*
$namerub[1]="гривня "; 
$namerub[2]="гривнi "; 
$namerub[3]="гривень "; 
*/
$namerub[1]="грн. "; 
$namerub[2]="грн. "; 
$namerub[3]="грн. "; 


$nametho[1]="тисяча "; 
$nametho[2]="тисячi "; 
$nametho[3]="тисяч "; 

$namemil[1]="мiльйон "; 
$namemil[2]="мiльйона "; 
$namemil[3]="мiльйонiв "; 

$namemrd[1]="мiлiард "; 
$namemrd[2]="мiлiарда "; 
$namemrd[3]="мiлiардов "; 

$kopeek[1]="копiйка "; 
$kopeek[2]="копiйки "; 
$kopeek[3]="копiйок "; 


function semantic($i,&$words,&$fem,$f){ 
global $_1_2, $_1_19, $des, $hang, $namerub, $nametho, $namemil, $namemrd; 
$words=""; 
$fl=0; 
if($i >= 100){ 
$jkl = intval($i / 100); 
$words.=$hang[$jkl]; 
$i%=100; 
} 
if($i >= 20){ 
$jkl = intval($i / 10); 
$words.=$des[$jkl]; 
$i%=10; 
$fl=1; 
} 
switch($i){ 
case 1: $fem=1; break; 
case 2: 
case 3: 
case 4: $fem=2; break; 
default: $fem=3; break; 
} 
if( $i ){ 
if( $i < 3 && $f > 0 ){ 
if ( $f >= 2 ) { 
$words.=$_1_19[$i]; 
} 
else { 
$words.=$_1_2[$i]; 
} 
} 
else { 
$words.=$_1_19[$i]; 
} 
} 
} 


function num2str($L) { 
global $_1_2, $_1_19, $des, $hang, $namerub, $nametho, $namemil, $namemrd, $kopeek; 
$s=" "; 
$s1=" "; 
$s2=" "; 
$L = round($L*100)/100;
$kop=intval( (round($L*100) - round(intval($L)*100))); 
$L=intval($L); 
if($L>=1000000000){ 
$many=0; 
semantic(intval($L / 1000000000),$s1,$many,3); 
$s.=$s1.$namemrd[$many]; 
$L%=1000000000; 
} 

if($L >= 1000000){ 
$many=0; 
semantic(intval($L / 1000000),$s1,$many,2); 
$s.=$s1.$namemil[$many]; 
$L%=1000000; 
if($L==0){ 
$s.= $namerub[3]; 
} 
} 

if($L >= 1000){ 
$many=0; 
semantic(intval($L / 1000),$s1,$many,1); 
$s.=$s1.$nametho[$many]; 
$L%=1000; 
if($L==0){ 
$s.= $namerub[3]; 
} 
} 

if($L != 0){ 
$many=0; 
semantic($L,$s1,$many,0); 
$s.=$s1.$namerub[$many]; 
} 


//if($kop > 0){ 
//$many=0; 
//semantic($kop,$s1,$many,1); 
//$s.=$s1.$kopeek[$many]; 
//} 
//else { 
//$s.=" 00 $kopeek[3]"; 
//} 

if ($kop < 10) $kop = '0'.$kop;
$s.=" $kop коп."; 

$s = trim($s);
if ($s[0] == 'ч') $s[0]='Ч';
else if ($s[0] == 'я') $s[0]='Я';
else $s = ucfirst($s);

return $s; 
} 


//  ------  //
 
  • Нравится
Реакции: hok
Отлично, а как это прикрутить к инвойсу? Я в пхп не силен
 
Не дождался ответа. Решил вопрос путем редактирования не инвойса, а товарной накладной. Там уже есть сумма прописью.
Для тех кому вместо рубля нужна грн. -> можно подредактировать файл
published/ → SC/ → html/ → scripts/ → classes/ class.currency.php

ищем:
PHP:
		$s .= ($s&&$c)?" ":'';
		switch($c){//единицы
			case 1: 
				switch($rod){
					case 0:$s .= "одна";break;//ж.р. И.п.
					case 1:$s .= "один";break;//м.р. И.п. 
					case 2:$s .= "одну";break;//ж.р. Р.п.
					case 3:$s .= "один";break;//м.р. Р.п. 
				}
				break;
			case 2:
				switch($rod){
					case 0:$s .= "две";break;//ж.р. И.п.
					case 1:$s .= "два";break;//м.р. И.п.  
					case 2:$s .= "две";break;//ж.р. Р.п.
					case 3:$s .= "два";break;//м.р. Р.п.  
				}
меняем на:
PHP:
switch($c){//единицы
			case 1: 
				switch($rod){
					case 0:$s .= "одна";break;//ж.р. И.п.
					case 1:$s .= "одна";break;//м.р. И.п. 
					case 2:$s .= "одну";break;//ж.р. Р.п.
					case 3:$s .= "одну";break;//м.р. Р.п. 
				}
				break;
			case 2:
				switch($rod){
					case 0:$s .= "две";break;//ж.р. И.п.
					case 1:$s .= "две";break;//м.р. И.п.  
					case 2:$s .= "две";break;//ж.р. Р.п.
					case 3:$s .= "две";break;//м.р. Р.п.  
				}
ищем:
PHP:
if ($roubles > 0)
		{
			$rub = "ей";
			$temp = $roubles % 10;
			if (floor(($roubles % 100)/10) != 1)
			{
				if ($temp == 1) $rub = "ь";
				else if ($temp >=2 && $temp <= 4) $rub = "я";
			}
			$s .=  self::number2string($roubles,1)." рубл{$rub} ";
		}
меняем на:
PHP:
if ($roubles > 0)
		{
			$rub = "";
			$temp = $roubles % 10;
			if (floor(($roubles % 100)/10) != 1)
			{
				if ($temp == 1) $rub = "";
				else if ($temp >=2 && $temp <= 4) $rub = "";
			}
			$s .=  self::number2string($roubles,1)." грн.{$rub} ";
		}
 
  • Нравится
Реакции: hok
Назад
Сверху