Skip to content

Commit

Permalink
Merge pull request #5 from Komtet/feature/adding_two_check_processing…
Browse files Browse the repository at this point in the history
…#KK-1839

Поддержка фискализации двух чеков
  • Loading branch information
a1723 authored Jun 14, 2022
2 parents d040066 + fc381f4 commit 0906f59
Show file tree
Hide file tree
Showing 8 changed files with 527 additions and 157 deletions.
16 changes: 16 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Changelog
=========

Unreleased
----------

1.4.0 (01.06.2022)
-------------------

- Корректное отображение ошибки при создании чека в таблицах с отчётами
- Версия php-sdk 9.0.2
- Возможность создания двух чеков (Полная предоплата и Полный расчёт)
- В настройки добавлена возможность указания ставки НДС для товаров и Доставки
- В настройки добавлена инструкция по указанию предмета расчёта для товара
- Теперь номер телефона приводится к формату +7, 7 или 8 в начале
- Обработка предмета расчёта установленного в атрибуте товара
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

Важно! 54-ФЗ обязует выдать электронный чек клиенту, для того чтобы электронный чек был выслан клиенту на электронную почту необходимо сделать обязательным поле email на форме оформления заказа.

Так же статус заказа «Обработка» возникает, когда в разделе администратора магазина для заказа вы устанвливате статус «Обработка» и нажимаете кнопкк «Обновить». Это позволит провести фискализацию вручную.
Так же статус заказа «Обработка» возникает, когда в разделе администратора магазина для заказа вы устанвливате статус «Обработка» и нажимаете кнопку «Обновить». Это позволит провести фискализацию вручную.

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

Expand All @@ -44,8 +44,12 @@
2. Секретный ключ магазина. Аналогично предыдущему (Secret).
3. Включить или отключить печать бумажного чека.
4. Указать систему налогообложения вашей компании. Данные о системе налогообложения будут использованы при формировании чека.
5. Выбрать статус заказа, при при котором формируется и отправляется запрос на фискализацию платежа в систему КОМТЕТ Касса.
6. Скопировать в настройках плагина данные из полей Success url (http://your_domain/?komtet-kassa=success) и Failure url (http://your_domain/?komtet-kassa=fail), и записать их в соответствующие поля в настройках магазина в личном кабинете КОМТЕТ Касса
5. Указать ставку НДС для товаров.
6. Указать ставку НДС для доставки.
7. Указать платёжные системы для которых будет происходить фомирование чеков.
8. Выбрать статус заказа, при при котором формируется и отправляется запрос на фискализацию чека полной предоплаты в систему КОМТЕТ Касса.
9. Выбрать статус заказа, при при котором формируется и отправляется запрос на фискализацию чека полного расчета в систему КОМТЕТ Касса.
10. Скопировать в настройках плагина данные из полей Success url (http://your_domain/?komtet-kassa=success) и Failure url (http://your_domain/?komtet-kassa=fail), и записать их в соответствующие поля в настройках магазина в личном кабинете КОМТЕТ Касса

### Будет сделано

Expand Down
49 changes: 48 additions & 1 deletion README_DEV.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,54 @@
* Скачать установщик WordPress - https://wordpress.org/download/
* Cоздать в корневом каталоге папку php
* Распаковать архив WP CMS в папку php
* В файл /php/.htaccess добавить строчку: *php_value date.timezone 'Europe/Moscow*
* Добавить файл .htaccess в папку php со следующим содержимым:
```sh
<FilesMatch "\.md5$">
Deny from all
</FilesMatch>

DirectoryIndex index.php
Options -Indexes
# Comment the following line, if option Multiviews not allowed here
Options -MultiViews

AddDefaultCharset utf-8

<ifModule mod_rewrite.c>
RewriteEngine On

# Uncomment the following line, if you are having trouble
#RewriteBase /

# if request js file from ROOT
RewriteCond %{REQUEST_URI} ^\/?[^\/]+\.js$ [or]
# or if NOT request certain static file from anywhere
RewriteCond %{REQUEST_URI} !\.(js|css|jpg|jpeg|gif|png|svg|ttf|eot|otf|woff|woff2)$ [or]
# or if request apple-touch-icon.png icon
RewriteCond %{REQUEST_URI} apple-touch-icon\.png$ [or]

# or if other conditions for webdav and caldav are passed
RewriteCond %{REQUEST_METHOD} ^(POST|PUT|COPY|MOVE|DELETE|PROPFIND|OPTIONS|MKCOL)$ [or]
RewriteCond %{HTTP:Translate} ^.+$ [or]
RewriteCond %{HTTP_USER_AGENT} ^(DavClnt|litmus|gvfs|davfs|wdfs|WebDAV|cadaver|Cyberduck)

# or if file doesnt' exist
RewriteCond %{REQUEST_FILENAME} !-f
# or if directory doesnt' exist
RewriteCond %{REQUEST_FILENAME} !-d

# dispatch it to index.php
RewriteRule ^(.*)$ index.php [L,QSA]
</ifModule>

<ifModule mod_headers.c>
<FilesMatch "\.(jpg|jpeg|png|gif|js|css|svg|ttf|eot|otf|woff|woff2)$">
Header set Cache-Control "max-age=3153600, public"
</FilesMatch>
</ifModule>

php_value date.timezone 'Europe/Moscow
```
* Запустить сборку проекта
```sh
Expand Down
21 changes: 16 additions & 5 deletions src/includes/class-komtetkassa-admin-settings.php
Original file line number Diff line number Diff line change
@@ -1,24 +1,31 @@
<?php

final class KomtetKassa_AdminSettings {
final class KomtetKassa_AdminSettings
{

private static $options = array(
'komtetkassa_shop_id' => 'string',
'komtetkassa_secret_key' => 'string',
'komtetkassa_should_print' => 'bool',
'komtetkassa_queue_id' => 'string',
'komtetkassa_tax_system' => 'integer',
'komtetkassa_fiscalize_on_order_status' => 'string'
'komtetkassa_product_vat_rate' => 'string',
'komtetkassa_delivery_vat_rate' => 'string',
'komtet_kassa_payment_systems' => 'array',
'komtetkassa_fiscalize_pre_payment_full' => 'string',
'komtetkassa_fiscalize_full_payment' => 'string'
);

public static function out() {
public static function out()
{
if (!empty($_POST)) {
self::save();
}
include(KOMTETKASSA_ABSPATH_VIEWS . 'html-admin-settings.php');
}

public static function save() {
public static function save()
{

foreach (self::$options as $key => $type) {
$value = filter_input(INPUT_POST, $key);
Expand All @@ -29,7 +36,11 @@ public static function save() {
update_option($key, $value === "1" ? "1" : "0");
} else if ($type == 'integer') {
update_option($key, intval($value));
} else if ($type == 'array') {
if (isset($_POST[$key]) && array_key_exists($key, $_POST)) {
update_option($key, $_POST[$key]);
}
}
}
}
}
}
61 changes: 42 additions & 19 deletions src/includes/class-komtetkassa-report.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
<?php

if ( ! class_exists( 'WP_List_Table' ) ) {
require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
if (!class_exists('WP_List_Table')) {
require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php');
}

class KomtetKassa_ReportsList extends WP_List_Table {
class KomtetKassa_ReportsList extends WP_List_Table
{

public static $table_name;

Expand All @@ -20,13 +21,13 @@ public function __construct()
self::$table_name = $wpdb->prefix . KomtetKassa_Report::REPORT_TABLE_NAME;
}

public static function get_reports_data($per_page=5, $page_number=1)
public static function get_reports_data($per_page = 5, $page_number = 1)
{
global $wpdb;

$sql = "SELECT * FROM " . self::$table_name;

if (!empty($_REQUEST['orderby']) ) {
if (!empty($_REQUEST['orderby'])) {
$sql .= ' ORDER BY ' . esc_sql($_REQUEST['orderby']);
$sql .= !empty($_REQUEST['order']) ? ' ' . esc_sql($_REQUEST['order']) : ' ASC';
}
Expand All @@ -40,28 +41,31 @@ public static function get_reports_data($per_page=5, $page_number=1)
return $result;
}

public static function record_count() {
public static function record_count()
{
global $wpdb;

$sql = "SELECT COUNT(*) FROM " . self::$table_name;

return $wpdb->get_var($sql);
}

public function no_items() {
public function no_items()
{
echo '<div align="center">Список пуст</div>';
}

public function column_default($item, $column_name) {
switch ( $column_name ) {
public function column_default($item, $column_name)
{
switch ($column_name) {
case 'report_id':
case 'order_id':
return $item[$column_name];
case 'status':
$statuses = array(
'new' => "Новая",
'error' => "Ошибка",
'done' => "Выполнена"
'new' => "Новая",
'error' => "Ошибка",
'done' => "Выполнена"
);
return $statuses[$item[$column_name]];
case 'created_at':
Expand All @@ -75,7 +79,8 @@ public function column_default($item, $column_name) {
}
}

function get_columns() {
function get_columns()
{
$columns = array(
'report_id' => "#",
'created_at' => "Задача создана",
Expand All @@ -93,7 +98,7 @@ public function get_sortable_columns()
{
$columns = array(
'report_id' => array('report_id', true),
'order_id' => array( 'order_id', false )
'order_id' => array('order_id', false)
);
return $columns;
}
Expand All @@ -113,12 +118,13 @@ public function prepare_items()
}


final class KomtetKassa_Report {
final class KomtetKassa_Report
{

const REPORT_TABLE_NAME = 'komtetkassa_reports';


public function create($order_id, $request_check_data, $response_data, $error="")
public function create($order_id, $request_check_data, $response_data, $error = "")
{
global $wpdb;

Expand All @@ -130,7 +136,7 @@ public function create($order_id, $request_check_data, $response_data, $error=""
'response_data' => $response_data != null ? json_encode($response_data) : null,
'error' => empty($error) ? null : $error
),
array('%d', '%s', '%s')
array('%d', '%s', '%s', '%s')
);
}

Expand All @@ -140,7 +146,7 @@ public function update($order_id, $state, $report_data)

$table_name = $wpdb->prefix . self::REPORT_TABLE_NAME;

$report = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$table_name} WHERE `order_id` = %d LIMIT 1;", $order_id ) );
$report = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$table_name} WHERE `order_id` = %d LIMIT 1;", $order_id));

if ($report === null) {
status_header(422);
Expand All @@ -149,7 +155,8 @@ public function update($order_id, $state, $report_data)
exit;
}

$wpdb->update($table_name,
$wpdb->update(
$table_name,
array(
'status' => $state,
'report_data' => json_encode($report_data),
Expand All @@ -160,4 +167,20 @@ public function update($order_id, $state, $report_data)
array('%d')
);
}

public function get_check_calculation_method($order_id)
{
global $wpdb;

$table_name = $wpdb->prefix . self::REPORT_TABLE_NAME;

$order_report_data = $wpdb->get_row(
$wpdb->prepare(
"SELECT report_data FROM {$table_name} WHERE `order_id` = %d and `error` IS NULL LIMIT 1;",
$order_id
)
);

return json_decode($order_report_data->report_data, true)['positions'][0]['calculation_method'];
}
}
2 changes: 1 addition & 1 deletion src/includes/libs/komtet-kassa-php-sdk
Loading

0 comments on commit 0906f59

Please sign in to comment.