Страница 3 из 3

Re: [Сценарий] Сервис УФНС России - Проверка кассового чека

Добавлено: Вт мар 29, 2022 2:28 pm
Eraser
Jilber писал(а):
Вт мар 29, 2022 2:10 pm
Теперь "Warning: Invalid argument supplied for foreach() in C:\_majordomo\htdocs\modules\app_check\app_check.class.php on line 183"
что в логах DebMes?

Re: [Сценарий] Сервис УФНС России - Проверка кассового чека

Добавлено: Вт мар 29, 2022 2:48 pm
Jilber
Если я правильно понял это оно ?
СпойлерПоказать
Check_App.jpg
Check_App.jpg (145.96 КБ) 3589 просмотров

Re: [Сценарий] Сервис УФНС России - Проверка кассового чека

Добавлено: Сб фев 04, 2023 11:31 am
Jilber
В приложении есть возможность сохранить выписку в json или pdf и отправить на email. Попробовал скриптом разобрать этот файл и сохранить данные в базу.

Код: Выделить всё

function printValues($arr) {
    global $count;
    global $values;
    global $Obj;
    global $DateTime;
    global $Name;
    global $Price;
    global $Quantity;
    global $Sum;
    global $RetailPlace;
    global $RetailPlaceAddress;
    global $User;
    global $Operator;
    global $ShiftNumber;
    
    if(!is_array($arr)){
        die("ERROR: Input is not an array");
    }
 
    foreach($arr as $key=>$value){
        if(is_array($value)){
            printValues($value);
        } else{
        	switch ($key) {
 			   case "_id":
        			addClassObject("Purchases", $value);
            		$Obj=$value;
        			break;
    			case "dateTime":
        			sg($Obj . ".DateTime", $value);
        			break;
    			case "name":
        			sg($Obj . ".Name", $value);
        			break;
    			case "price":
        			sg($Obj . ".Price", substr_replace($value, '.', -2, 0));
        			break;
    			case "quantity":
        			sg($Obj . ".Quantity", $value);
        			break;
                case "sum":
        			sg($Obj . ".Sum", substr_replace($value, '.', -2, 0));
        			break;
                case "retailPlace":
        			sg($Obj . ".RetailPlace", $value);
        			break;
                case "retailPlaceAddress":
        			sg($Obj . ".RetailPlaceAddress", $value);
        			break;
                case "user":
        			sg($Obj . ".User", $value);
        			break;
                case "shiftNumber":
        			sg($Obj . ".ShiftNumber", $value);
        			break;
                case "operator":
        			sg($Obj . ".Operator", $value);
        			break;
}
            $values[] = $value;
            $count++;
        }
    }
    return array('total' => $count, 'values' => $values);
};
$json = file_get_contents('Checks.json');
$arr = json_decode($json, true);

$result = printValues($arr);
Вроде работает, но сохраняет только 1 товар в чеке. Подскажите с кодом, в котором бы можно было сохранить все товары из чека.

Re: [Сценарий] Сервис УФНС России - Проверка кассового чека

Добавлено: Пн янв 01, 2024 3:18 pm
Jilber
Переделал скрипт. Вроде теперь нормально разбирает json.

Код: Выделить всё

$json = file_get_contents('31_12_2023_06_29_441000534495.json');
$json= substr($json, 0, -1);
$json= substr($json, 1);
$data = json_decode($json, true);
$purchaseInfo = [
$Obj = $data['_id'],
$BuyerPhoneOrAddress = $data['ticket']['document']['receipt']['buyerPhoneOrAddress'],
$CashTotalSum = substr_replace($data['ticket']['document']['receipt']['cashTotalSum'], '.', -2, 0),
$ECashTotalSum = substr_replace($data['ticket']['document']['receipt']['ecashTotalSum'], '.', -2, 0),
$Date = substr($data['ticket']['document']['receipt']['dateTime'], 8, 2) . "." . substr($data['ticket']['document']['receipt']['dateTime'], 5, 2) . "." . substr($data['ticket']['document']['receipt']['dateTime'], 0, 4),
$Time = substr($data['ticket']['document']['receipt']['dateTime'], -8, 8),
$RetailPlace = $data['ticket']['document']['receipt']['retailPlace'],
$RetailPlaceAddress = $data['ticket']['document']['receipt']['retailPlaceAddress'],
$User = $data['ticket']['document']['receipt']['user'],
$ShiftNumber = $data['ticket']['document']['receipt']['shiftNumber'],
$Operator = $data['ticket']['document']['receipt']['operator']
];
addClassObject("Purchases", $Obj);
sg($Obj . ".Date", $Date);
echo "Дата: " . $Date . "<br>";
sg($Obj . ".Time", $Time);
echo "Время: " . $Time . "<br>";
echo "Чек: " . $Obj . "<br>";
sg($Obj . ".BuyerPhoneOrAddress", $BuyerPhoneOrAddress);
echo "Покупатель: " . $BuyerPhoneOrAddress . "<br>";
sg($Obj . ".CashTotalSum", $CashTotalSum);
echo "Сумма: " . $CashTotalSum . "<br>";
sg($Obj . ".ECashTotalSum", $ECashTotalSum);
echo "Эл. сумма: " . $ECashTotalSum . "<br>";
sg($Obj . ".DateTime", $DateTime);
echo "Дата: " . $DateTime . "<br>";
sg($Obj . ".Operator", $Operator);
echo "Оператор: " . $Operator . "<br>";
sg($Obj . ".RetailPlace", $RetailPlace);
echo "Место покупки: " . $RetailPlace . "<br>";
sg($Obj . ".RetailPlaceAddress", $RetailPlaceAddress);
echo "Адрес магазина: " . $RetailPlaceAddress . "<br>";

$i = 1;
$Name = "";
$Price = "";
$Quantity = "";
$Sum = "";
foreach ($data['ticket']['document']['receipt']['items'] as $index => $item) {
$purchaseInfo['items'][$index] = [
$Tovar= $item['name'],
$Tsena= substr_replace($item['price'], '.', -2, 0),
$Kolichestvo = $item['quantity'],
$Summa = substr_replace($item['sum'], '.', -2, 0)
];
echo "<hr>";
$Name = "Name" . $i;
sg($Obj . "." . $Name, $Tovar);
echo "Товар-" . $i . ": " . $Tovar . "<br>";
$Price = "Price" . $i;
sg($Obj . "." . $Price, $Tsena);
echo "Цена-" . $i . ": " . $Tsena . "<br>";
$Quantity = "Quantity" . $i;
sg($Obj . "." . $Quantity, $Kolichestvo);
echo "Количество-" . $i . ": " . $Kolichestvo . "<br>";
$Sum =  "Sum" . $i;
sg($Obj . "." . $Sum, $Summa);
echo "Стоимость-" . $i . ": " . $Summa . "<br>";
$i = $i + 1;
}
Но приходится заранее вручную изменять в скрипте название файла. Можно ли как-то сделать выбор файла перед его обработкой ?