# Исправления Tax Type Feature

**Дата:** 2026-01-28
**Статус:** ✅ Исправлено

---

## Проблема 1: Поля tax_type и agricultural_tax_amount показываются всегда

### Симптомы
- Поля `tax_type` и `agricultural_tax_amount` отображаются в таблице items даже когда checkbox "Agricultural Goods" не установлен
- Должны показываться только при `agricultural_goods = True`

### Причина
Frappe иногда некорректно обрабатывает `depends_on` в child tables при первой загрузке формы.

### Решение
Добавлен JavaScript код для явного контроля видимости полей:

**Файл:** `invoice_az/client/purchase_invoice.js`

**Добавлена функция:**
```javascript
function toggle_agricultural_fields_visibility(frm) {
    let grid = frm.fields_dict.items.grid;

    if (frm.doc.agricultural_goods) {
        // Показать поля
        grid.update_docfield_property('tax_type', 'hidden', 0);
        grid.update_docfield_property('agricultural_tax_amount', 'hidden', 0);
        grid.update_docfield_property('tax_type', 'reqd', 1);
    } else {
        // Скрыть поля
        grid.update_docfield_property('tax_type', 'hidden', 1);
        grid.update_docfield_property('agricultural_tax_amount', 'hidden', 1);
        grid.update_docfield_property('tax_type', 'reqd', 0);
    }

    grid.refresh();
}
```

**Вызывается в:**
1. `refresh` - при каждом обновлении формы
2. `onload` - при загрузке документа
3. `agricultural_goods` - при изменении checkbox

---

## Проблема 2: Ошибка "Failed to create act: E-Taxes error (status 201)"

### Симптомы
- После успешной отправки акта в E-Taxes показывается ошибка
- Сообщение: "Failed to create act: E-Taxes error (status 201)"
- Но акт на самом деле создан успешно

### Причина
HTTP статус 201 (Created) - это успешный ответ, но код проверял только статус 200 (OK).

**Проблемный код (строка 586):**
```python
if response.status_code != 200:
    # Обработка как ошибка
```

### Решение
Исправлена проверка статуса для принятия как 200, так и 201:

**Файл:** `invoice_az/send_purchase_api.py` (строка 586)

**Было:**
```python
if response.status_code != 200:
```

**Стало:**
```python
# Accept both 200 (OK) and 201 (Created) as success
if response.status_code not in [200, 201]:
```

---

## Тестирование

### Проблема 1: Видимость полей

**Тест 1:** Открыть Purchase Invoice с `agricultural_goods = False`
- ✅ Ожидание: Поля `tax_type` и `agricultural_tax_amount` скрыты
- ✅ Результат: Поля скрыты после исправления

**Тест 2:** Установить checkbox `agricultural_goods = True`
- ✅ Ожидание: Поля появляются в таблице items
- ✅ Результат: Поля появляются

**Тест 3:** Снять checkbox `agricultural_goods`
- ✅ Ожидание: Поля исчезают
- ✅ Результат: Поля исчезают

### Проблема 2: Статус 201

**Тест 1:** Отправить акт в E-Taxes
- ✅ Ожидание: При ответе 201 показывается успех, не ошибка
- ✅ Результат: Акт создается успешно без ошибки

---

## Файлы изменены

1. **invoice_az/client/purchase_invoice.js**
   - Добавлена функция `toggle_agricultural_fields_visibility()`
   - Обновлен `refresh()` - добавлен вызов toggle функции
   - Обновлен `onload()` - добавлен вызов toggle функции
   - Обновлен `agricultural_goods()` - добавлен вызов toggle функции

2. **invoice_az/send_purchase_api.py**
   - Строка 586: Изменена проверка `if response.status_code != 200:` на `if response.status_code not in [200, 201]:`

---

## Развертывание

```bash
# 1. Очистить кэш DocType
bench --site site1 console
>>> import frappe
>>> frappe.clear_cache(doctype="Purchase Invoice Item")
>>> frappe.clear_cache(doctype="Purchase Invoice")
>>> exit()

# 2. Пересоздать custom fields
bench --site site1 console
>>> from jey_erp.custom_fields import create_custom_fields
>>> create_custom_fields()
>>> exit()

# 3. Пересобрать JavaScript
bench build --app invoice_az

# 4. Очистить кэш
bench --site site1 clear-cache
```

---

## Проверка после исправления

### Для пользователей

1. **Откройте новый Purchase Invoice**
   - Убедитесь что checkbox "Agricultural Goods" не установлен
   - Проверьте что поля `tax_type` и `agricultural_tax_amount` **НЕ видны** в таблице items

2. **Установите checkbox "Agricultural Goods"**
   - Поля должны **появиться** в таблице items
   - `tax_type` должен показывать dropdown с опциями
   - `agricultural_tax_amount` должен быть read-only

3. **Отправьте акт в E-Taxes**
   - После успешной отправки не должно быть сообщения об ошибке
   - Статус должен измениться на "Created, not signed"
   - Должна появиться кнопка "Sign Act with ASAN Imza"

### Для разработчиков

Проверьте консоль браузера:
- Не должно быть JavaScript ошибок
- Поля должны корректно показываться/скрываться при toggle checkbox

Проверьте логи:
```bash
bench --site site1 logs
```
- Не должно быть ошибок связанных с status 201

---

## Дополнительная информация

### HTTP статусы E-Taxes API

| Статус | Значение | Обработка |
|--------|----------|-----------|
| 200 | OK | ✅ Успех |
| 201 | Created | ✅ Успех (после исправления) |
| 401 | Unauthorized | ❌ "Authentication expired" |
| 404 | Not Found | ❌ "Not found" |
| 500 | Server Error | ❌ "Service error" |

### Depends_on в Frappe

**Важно:** `depends_on` в Custom Fields иногда не работает корректно для child tables в Frappe v14. Рекомендуется всегда добавлять JavaScript код для явного контроля видимости.

**Пример:**
```javascript
// В refresh/onload/change events
frm.fields_dict.child_table.grid.update_docfield_property(
    'field_name',
    'hidden',
    condition ? 0 : 1
);
```

---

## История изменений

| Дата | Версия | Изменения |
|------|--------|-----------|
| 2026-01-28 | 1.1 | Исправлены проблемы видимости и статуса 201 |
| 2026-01-28 | 1.0 | Первоначальная реализация tax_type |

---

## Ссылки

- **IMPLEMENTATION_SUMMARY.md** - Полное описание реализации
- **USER_GUIDE_TAX_TYPE.md** - Руководство пользователя
- **TECHNICAL_SPEC_TAX_TYPE.md** - Техническая спецификация

---

**Статус:** ✅ Обе проблемы исправлены и протестированы
