Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
anthonyaxenov committed Apr 24, 2019
0 parents commit 2ede786
Show file tree
Hide file tree
Showing 9 changed files with 819 additions and 0 deletions.
60 changes: 60 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Модуль интеграции Dreamkas для OpenCart 3.*

## Содержимое репозитория

* `./dreamkas-opencart3.ocmod/` - директория с исходным кодом модуля
* `./dreamkas-opencart3.ocmod.ocmod.zip` - модуль, готовый к установке
* `./dreamkas-f opencart.ocmod.zip` - исходный модуль для OpenCart 2.3, на котором основан данный

## Описание

Модуль устанавливается на OpenCart 3.0.2.0, настройки сохраняются, читаются.
Судя по отзывам ([1](http://blog.anthonyaxenov.ru/2018/05/09/%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d1%8c-%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d0%b8-dreamkas-%d0%b4%d0%bb%d1%8f-opencart-3-0-2-0/#comment-103) [2](https://help.dreamkas.ru/hc/ru/articles/115005504689-%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C-%D0%BA%D0%B0%D1%81%D1%81%D1%83-%D0%BA-OpenCart)), модуль рабочий, за исключением одного момента: не отображаются статусы фискализации, но сама фискализация работает.

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

Вся основная логика модуля прописана здесь:

```upload/catalog/controller/extension/module/dreamkas.php```

Этот файл я не трогал.
Я лишь восстановил возможность установить, удалить и настроить модуль.

## Краткая информация

Основано на модуле *[dreamkas-f opencart.ocmod.zip](https://help.dreamkas.ru/hc/ru/article_attachments/115010763145/dreamkas-f_opencart.ocmod.zip)*.

Этот архив включен в репозиторий - для истории.
Может кому-нибудь даже будет интересно увидеть в diff-ах точные правки, но ниже я опишу вкратце лишь основные:

1. Шаблон (`upload/admin/view/template/extension/module/dreamkas.twig`):
1. переписан с языка php на язык шаблонизатора Twig
2. изменено расширение с .tpl на .twig
2. Страница настроек:
1. удалены большие куски закомментированного и нерабочего (?) кода
2. исправлено получение списка установленных платёжных систем
3. форматирование кода (`upload/admin/controller/extension/module/dreamkas.php`)
3. Мелкое форматирование и исправление ссылки на сайт разработчика (`install.xml`)

## Полезные ссылки

1. История появления модуля: [читать в блоге](http://blog.anthonyaxenov.ru/2018/05/09/модуль-интеграции-dreamkas-для-opencart-3-0-2-0)
2. Открытая документация к Dreamkas API: [kabinet.docs.apiary.io](http://kabinet.docs.apiary.io)
3. [Как подключить интернет-магазин к кассе через Кабинет?](https://help.dreamkas.ru/hc/ru/articles/115005007709)
4. [Подключить кассу к OpenCart](https://help.dreamkas.ru/hc/ru/articles/115005504689-%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C-%D0%BA%D0%B0%D1%81%D1%81%D1%83-%D0%BA-OpenCart)
5. Групповой чат для разработчиков в Telegram: [@apidreamkas](https://t.me/apidreamkas) (если ссылка не работает — ищи через в TG поиск)

## Лицензия

Весь исходный код, находящийся в этом репозитории, распространяется по [лицензии WTFPL v2](http://www.wtfpl.net/txt/copying/).

Причина - отсутствие какой-либо лицензии на исходный модуль `./dreamkas-f opencart.ocmod.zip` и безразличие к моим доработкам.

## Поддержка

Отсутствует и не появится.

Любые манипуляции с модулем - НА ВАШ СТРАХ И РИСК.

Я НЕ ДАЮ НИКАКИХ ГАРАНТИЙ ЕГО РАБОТОСПОСОБНОСТИ.
Binary file added dreamkas-f opencart.ocmod.zip
Binary file not shown.
Binary file added dreamkas-opencart3.ocmod.zip
Binary file not shown.
170 changes: 170 additions & 0 deletions dreamkas-opencart3.ocmod/install.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="UTF-8" ?>
<modification>
<name>Dreamkas 2.3.x</name>
<code>Dreamkas 2.3.x</code>
<version>1.00</version>
<author>Alt-team</author>
<link>https://www.alt-team.ru/</link>
<!--file path="catalog/controller/checkout/success.php">
<operation>
<search><![CDATA[public function index() {]]></search>
<add position="after">
<![CDATA[
if (isset($this->session->data['order_id'])) {
$this->load->controller('extension/module/dreamkas/fiscalize',$this->session->data['order_id']);
}
]]>
</add>
</operation>
</file-->
<file path="admin/view/template/catalog/product_form.tpl">
<operation>
<search><![CDATA[
<label class="col-sm-2 control-label" for="input-price"><?php echo $entry_price; ?></label>
]]></search>
<add position="after" offset="4"><![CDATA[
<div class="form-group">
<label class="col-sm-2 control-label" for="input-width">НДС товара при фискализации</label>
<div class="col-sm-10">
<select name="dk_tax_type" id="input-dk_tax_type" class="form-control">
<option value="0" <?php if (empty($dk_tax_type)) echo "selected=\"selected\"";?>>Выберите НДС</option>
<option value="NDS_NO_TAX" <?php if ($dk_tax_type=='NDS_NO_TAX') echo "selected=\"selected\"";?>>Без НДС</option>
<option value="NDS_0" <?php if ($dk_tax_type=='NDS_0') echo "selected=\"selected\"";?>>НДС 0</option>
<option value="NDS_10" <?php if ($dk_tax_type=='NDS_10') echo "selected=\"selected\"";?>>НДС 10</option>
<option value="NDS_18" <?php if ($dk_tax_type=='NDS_18') echo "selected=\"selected\"";?>>НДС 18</option>
<option value="NDS_10_CALCULATED" <?php if ($dk_tax_type=='NDS_10_CALCULATED') echo "selected=\"selected\"";?>>НДС 10/110</option>
<option value="NDS_18_CALCULATED" <?php if ($dk_tax_type=='NDS_18_CALCULATED') echo "selected=\"selected\"";?>>НДС 18/118</option>
</select>
</div>
</div>
]]></add>
</operation>
</file>
<file path="admin/model/catalog/product.php">
<operation>
<search><![CDATA[
$this->db->query("DELETE FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$product_id . "'");
]]></search>
<add position="before"><![CDATA[
if (isset($data['dk_tax_type'])) {
$this->db->query("UPDATE " . DB_PREFIX . "product SET dk_tax_type = '" . $this->db->escape($data['dk_tax_type']) . "' WHERE product_id = '" . (int)$product_id . "'");
}
]]></add>
</operation>
</file>
<file path="admin/controller/catalog/product.php">
<operation>
<search><![CDATA[
$this->load->model('catalog/recurring');
]]></search>
<add position="before"><![CDATA[
if (isset($this->request->post['dk_tax_type'])) {
$data['dk_tax_type'] = $this->request->post['dk_tax_type'];
} elseif (!empty($product_info['dk_tax_type'])) {
$data['dk_tax_type'] = $product_info['dk_tax_type'];
} else {
$data['dk_tax_type'] = '';
}
]]></add>
</operation>
</file>
<file path="admin/view/template/sale/order_list.tpl">
<operation>
<search><![CDATA[
<td class="text-right"><?php echo $column_action; ?></td>
]]></search>
<add position="before"><![CDATA[
<td class="text-left">Статус фискализации</td>
]]></add>
</operation>
<operation>
<search><![CDATA[
<td class="text-left"><?php echo $order['date_modified']; ?></td>
]]></search>
<add position="after"><![CDATA[
<td class="text-left"><?php echo $order['dk_status']; ?></td>
]]></add>
</operation>
</file>
<file path="admin/view/template/sale/order_info.tpl">
<operation>
<search><![CDATA[
<td><?php echo $text_affiliate; ?>
]]></search>
<add position="before"><![CDATA[
<td><?php echo $entry_dk_status; ?></td>
<td class="text-right"><?php if ($dk_status) { ?><?php echo $dk_status; ?><?php } ?></td>
<td class="text-center"></td>
</tr>
<tr>
]]></add>
</operation>
</file>
<file path="admin/controller/sale/order.php">
<operation>
<search><![CDATA[
$results = $this->model_sale_order->getOrders($filter_data);
]]></search>
<add position="after" offset="2"><![CDATA[
$dkquery = $this->db->query("SELECT dk_status FROM " . DB_PREFIX . "dreamkas WHERE order_id = '" . (int)$result['order_id']. "'");
]]></add>
</operation>
<operation>
<search><![CDATA['shipping_code' => $result['shipping_code'],]]></search>
<add position="before"><![CDATA[
'dk_status' => !empty($dkquery->row['dk_status'])?$dkquery->row['dk_status']:'',
]]></add>
</operation>
<operation>
<search><![CDATA[$data['tab_additional'] = $this->language->get('tab_additional');]]></search>
<add position="before"><![CDATA[
$query = $this->db->query("SELECT order_status_id FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'");
$status = $query->row['order_status_id'];
$query = $this->db->query("SELECT payment_code FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'");
$payment_code = $query->row['payment_code'];
if ($status == $this->config->get('dreamkas_paid_order') && in_array($payment_code, $this->config->get('dreamkas_payments_ids'))) {
$query = $this->db->query("SELECT dk_id FROM " . DB_PREFIX . "dreamkas WHERE order_id = '" . (int)$order_id. "'");
if(!empty($query->row['dk_id'])) {
$dk_id = $query->row['dk_id'];
$ch = curl_init();
$access_token = $this->config->get('dreamkas_access_token');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"Authorization: Bearer $access_token"
));
curl_setopt($ch, CURLOPT_URL, "https://kabinet.dreamkas.ru/api/operations/".$dk_id);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response, true);
if((substr($response['status'], 0, 1)==4)) {
$this->log->write('Dreamkas debug: ' . json_encode($response));
} elseif(!empty($response['data']['error'])) {
$this->log->write('Dreamkas debug: ' . json_encode($response['data']['error']));
} else {
$dk_date = empty($response['createdAt'])?$response['completedAt']:$response['createdAt'];
$this->db->query("UPDATE `" . DB_PREFIX . "dreamkas` SET `order_id` = '" . (int)$order_id . "', `dk_id` = '".$response['id']."', `dk_date` ='".$dk_date."', `dk_status` = '" .$response['status']. "' WHERE order_id = '" . (int)$order_id. "'");
}
}
}
$query = $this->db->query("SELECT dk_status FROM " . DB_PREFIX . "dreamkas WHERE order_id = '" . (int)$order_id. "'");
if(!empty($query->row['dk_status'])) {
$data['dk_status'] = $query->row['dk_status'];
} else {
$data['dk_status']='';
}
$this->load->language('extension/module/dreamkas');
$data['entry_dk_status'] = $this->language->get('entry_dk_status');
]]></add>
</operation>
</file>
</modification>
Loading

0 comments on commit 2ede786

Please sign in to comment.