fix some bugs from accounting 6
This commit is contained in:
@@ -127,6 +127,32 @@ class ZarinController extends Controller
|
|||||||
return $value > 0 ? $value : 16;
|
return $value > 0 ? $value : 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* نوع کار برای سند تعدادی (sabtSanadTedadi).
|
||||||
|
* روی زرین aygin: 16=گرمی (رد میشود)، 17=سکه-تعدادی، 18=اجرت تعدادی.
|
||||||
|
*/
|
||||||
|
private function zarinCountNoeKar(): int
|
||||||
|
{
|
||||||
|
$tedadi = (int) $this->Config('zarin_noe_kar_tedadi');
|
||||||
|
if (in_array($tedadi, [17, 18], true)) {
|
||||||
|
return $tedadi;
|
||||||
|
}
|
||||||
|
|
||||||
|
$configured = $this->zarinDefaultNoeKar();
|
||||||
|
if (in_array($configured, [17, 18], true)) {
|
||||||
|
return $configured;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 16 و سایر مقادیر گرمی/نامرتبط برای sabtSanadTedadi قابل استفاده نیستند
|
||||||
|
return 17;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** fkNoeهایی که sabtSanadTedadi قبول میکند */
|
||||||
|
private function zarinCountFkNoes(): array
|
||||||
|
{
|
||||||
|
return ['17', '18'];
|
||||||
|
}
|
||||||
|
|
||||||
private function zarinDefaultGoroheKar()
|
private function zarinDefaultGoroheKar()
|
||||||
{
|
{
|
||||||
$value = (int) $this->Config('zarin_gorohe_kar');
|
$value = (int) $this->Config('zarin_gorohe_kar');
|
||||||
@@ -279,7 +305,7 @@ class ZarinController extends Controller
|
|||||||
$goroheKar = $goroheKar ?: $this->zarinDefaultGoroheKar();
|
$goroheKar = $goroheKar ?: $this->zarinDefaultGoroheKar();
|
||||||
$productName = $this->normalizeZarinName($product->title);
|
$productName = $this->normalizeZarinName($product->title);
|
||||||
|
|
||||||
$fromList = $this->findZarinKarInListKarSakhte($productName, $exactOnly);
|
$fromList = $this->findZarinKarInListKarSakhte($productName, $exactOnly, true);
|
||||||
if ($fromList) {
|
if ($fromList) {
|
||||||
return $fromList;
|
return $fromList;
|
||||||
}
|
}
|
||||||
@@ -294,8 +320,9 @@ class ZarinController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* کاتالوگ کارهای ساخته (لیست ۴۷ زرین) — id همین idKar سند تعدادی است.
|
* کاتالوگ کارهای ساخته (لیست ۴۷ زرین) — id همین idKar سند تعدادی است.
|
||||||
|
* برای سند تعدادی فقط fkNoe سکه-تعدادی/اجرت تعدادی (۱۷/۱۸) قبول میشود؛ گرمی(۱۶) رد.
|
||||||
*/
|
*/
|
||||||
private function findZarinKarInListKarSakhte(string $productName, bool $exactOnly = false): ?array
|
private function findZarinKarInListKarSakhte(string $productName, bool $exactOnly = false, bool $countDocOnly = true): ?array
|
||||||
{
|
{
|
||||||
$response = $this->zarinRequest([
|
$response = $this->zarinRequest([
|
||||||
'kind' => 'listKarSakhte',
|
'kind' => 'listKarSakhte',
|
||||||
@@ -310,6 +337,7 @@ class ZarinController extends Controller
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$allowedFk = $this->zarinCountFkNoes();
|
||||||
$exact = null;
|
$exact = null;
|
||||||
$fuzzy = null;
|
$fuzzy = null;
|
||||||
|
|
||||||
@@ -318,6 +346,11 @@ class ZarinController extends Controller
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$fkNoe = (string) ($row['fkNoe'] ?? $row['fknoe'] ?? '');
|
||||||
|
if ($countDocOnly && $fkNoe !== '' && !in_array($fkNoe, $allowedFk, true)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$name = $row['namFelezsakhthe']
|
$name = $row['namFelezsakhthe']
|
||||||
?? $row['nam_kar_sakhte']
|
?? $row['nam_kar_sakhte']
|
||||||
?? $row['nameKar']
|
?? $row['nameKar']
|
||||||
@@ -336,6 +369,7 @@ class ZarinController extends Controller
|
|||||||
'row' => $row,
|
'row' => $row,
|
||||||
'match' => 'exact',
|
'match' => 'exact',
|
||||||
'source' => 'listKarSakhte',
|
'source' => 'listKarSakhte',
|
||||||
|
'fkNoe' => $fkNoe,
|
||||||
];
|
];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -352,6 +386,7 @@ class ZarinController extends Controller
|
|||||||
'row' => $row,
|
'row' => $row,
|
||||||
'match' => 'fuzzy',
|
'match' => 'fuzzy',
|
||||||
'source' => 'listKarSakhte',
|
'source' => 'listKarSakhte',
|
||||||
|
'fkNoe' => $fkNoe,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -602,7 +637,7 @@ class ZarinController extends Controller
|
|||||||
$params = [
|
$params = [
|
||||||
'kind' => 'addFelezsakhteModel',
|
'kind' => 'addFelezsakhteModel',
|
||||||
'nameKar' => $product->title,
|
'nameKar' => $product->title,
|
||||||
'noeKar' => $this->zarinDefaultNoeKar(),
|
'noeKar' => $this->zarinCountNoeKar(),
|
||||||
'gorooheKar' => $this->zarinDefaultGoroheKar(),
|
'gorooheKar' => $this->zarinDefaultGoroheKar(),
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -746,8 +781,14 @@ class ZarinController extends Controller
|
|||||||
?? $existingRow['title']
|
?? $existingRow['title']
|
||||||
?? ''
|
?? ''
|
||||||
);
|
);
|
||||||
// اگر idKar موجود مال کالای دیگری است (مثلاً شمش برای گوی) قبول نکن
|
$idGp = (string) ($existingRow['idGp'] ?? $existingRow['idgp'] ?? $existingRow['fkNoe'] ?? '');
|
||||||
if ($rowName !== '' && $productName !== '' && $rowName !== $productName) {
|
$wrongType = $idGp !== '' && !in_array($idGp, $this->zarinCountFkNoes(), true);
|
||||||
|
|
||||||
|
// اگر idKar موجود مال کالای دیگری است یا نوع گرمی است (نه تعدادی) قبول نکن
|
||||||
|
if (
|
||||||
|
$wrongType
|
||||||
|
|| ($rowName !== '' && $productName !== '' && $rowName !== $productName)
|
||||||
|
) {
|
||||||
$this->clearProductZarinKar($product);
|
$this->clearProductZarinKar($product);
|
||||||
$product->refresh();
|
$product->refresh();
|
||||||
} else {
|
} else {
|
||||||
@@ -1835,7 +1876,7 @@ class ZarinController extends Controller
|
|||||||
|
|
||||||
[$response, $httpError] = $this->zarinDecodeResponse($http);
|
[$response, $httpError] = $this->zarinDecodeResponse($http);
|
||||||
$diag = 'idKar=' . $idKar
|
$diag = 'idKar=' . $idKar
|
||||||
. ' noeKar=' . $this->zarinDefaultNoeKar()
|
. ' noeKar=' . $this->zarinCountNoeKar()
|
||||||
. ' goroheKar=' . $this->zarinDefaultGoroheKar()
|
. ' goroheKar=' . $this->zarinDefaultGoroheKar()
|
||||||
. ' product=' . ($product->title ?? '')
|
. ' product=' . ($product->title ?? '')
|
||||||
. ' source=' . ($kar['source'] ?? '');
|
. ' source=' . ($kar['source'] ?? '');
|
||||||
|
|||||||
@@ -523,9 +523,13 @@ SELECT 'zarin_token', '', 'توکن زرین', 0, 1, 'توکن مکمل API زر
|
|||||||
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_token' LIMIT 1);
|
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_token' LIMIT 1);
|
||||||
|
|
||||||
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
||||||
SELECT 'zarin_noe_kar', '16', 'نوع کار پیشفرض زرین', 0, 1, 'کد noeKar هنگام ساخت کار ساخته در زرین.', 'number'
|
SELECT 'zarin_noe_kar', '16', 'نوع کار پیشفرض زرین', 0, 1, 'کد noeKar هنگام ساخت کار ساخته در زرین. مقدار ۱۶ معمولاً گرمی است و برای sabtSanadTedadi مناسب نیست.', 'number'
|
||||||
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_noe_kar' LIMIT 1);
|
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_noe_kar' LIMIT 1);
|
||||||
|
|
||||||
|
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
||||||
|
SELECT 'zarin_noe_kar_tedadi', '17', 'نوع کار تعدادی زرین', 0, 1, 'noeKar برای سند تعدادی (سکه/شمش/گوی/مکعب). روی زرین معمولاً ۱۷=سکه-تعدادی یا ۱۸=اجرت تعدادی. اگر خالی/نامعتبر باشد کد از ۱۷ استفاده میکند.', 'number'
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_noe_kar_tedadi' LIMIT 1);
|
||||||
|
|
||||||
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
||||||
SELECT 'zarin_gorohe_kar', '52', 'گروه کار پیشفرض زرین', 0, 1, 'کد gorooheKar هنگام ساخت/جستجوی کار در زرین. برای جداسازی چند پنل روی یک زرین، برای هر پنل مقدار متفاوت بگذارید.', 'number'
|
SELECT 'zarin_gorohe_kar', '52', 'گروه کار پیشفرض زرین', 0, 1, 'کد gorooheKar هنگام ساخت/جستجوی کار در زرین. برای جداسازی چند پنل روی یک زرین، برای هر پنل مقدار متفاوت بگذارید.', 'number'
|
||||||
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_gorohe_kar' LIMIT 1);
|
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'zarin_gorohe_kar' LIMIT 1);
|
||||||
@@ -1744,19 +1748,20 @@ UPDATE `settings` SET `can_edit` = 0, `is_active` = 0 WHERE `key` IN ('send_to_t
|
|||||||
UPDATE `settings` SET `can_edit` = 0 WHERE `key` IN (
|
UPDATE `settings` SET `can_edit` = 0 WHERE `key` IN (
|
||||||
'accounting_provider',
|
'accounting_provider',
|
||||||
'tahesab_host', 'tahesab_port', 'tahesab_token', 'tahesab_db', 'tahesab_bank_account',
|
'tahesab_host', 'tahesab_port', 'tahesab_token', 'tahesab_db', 'tahesab_bank_account',
|
||||||
'zarin_api', 'zarin_token', 'zarin_noe_kar', 'zarin_gorohe_kar', 'zarin_name_g', 'zarin_uid_prefix',
|
'zarin_api', 'zarin_token', 'zarin_noe_kar', 'zarin_noe_kar_tedadi', 'zarin_gorohe_kar', 'zarin_name_g', 'zarin_uid_prefix',
|
||||||
'pargar_username', 'pargar_password', 'pargar_api_token',
|
'pargar_username', 'pargar_password', 'pargar_api_token',
|
||||||
'pargar_item_id_rial', 'pargar_item_id_gold'
|
'pargar_item_id_rial', 'pargar_item_id_gold'
|
||||||
);
|
);
|
||||||
UPDATE `settings` SET `can_edit` = 0, `is_active` = 1 WHERE `key` LIKE 'zarin_%';
|
UPDATE `settings` SET `can_edit` = 0, `is_active` = 1 WHERE `key` LIKE 'zarin_%';
|
||||||
UPDATE `settings` SET `type` = 'text', `can_edit` = 0 WHERE `key` IN ('zarin_api', 'zarin_token', 'zarin_name_g', 'zarin_uid_prefix');
|
UPDATE `settings` SET `type` = 'text', `can_edit` = 0 WHERE `key` IN ('zarin_api', 'zarin_token', 'zarin_name_g', 'zarin_uid_prefix');
|
||||||
UPDATE `settings` SET `type` = 'number', `can_edit` = 0 WHERE `key` IN ('zarin_noe_kar', 'zarin_gorohe_kar');
|
UPDATE `settings` SET `type` = 'number', `can_edit` = 0 WHERE `key` IN ('zarin_noe_kar', 'zarin_noe_kar_tedadi', 'zarin_gorohe_kar');
|
||||||
UPDATE `settings` SET `title_fa` = 'سیستم حسابداری', `type` = 'select', `description` = 'none,pargar,tahesab,zarin'
|
UPDATE `settings` SET `title_fa` = 'سیستم حسابداری', `type` = 'select', `description` = 'none,pargar,tahesab,zarin'
|
||||||
WHERE `key` = 'accounting_provider';
|
WHERE `key` = 'accounting_provider';
|
||||||
UPDATE `settings` SET `description` = 'سیستم حسابداری: none=هیچکدام، pargar=API پرگار، tahesab=ارسال خودکار تهحساب، zarin=ارسال خودکار زرین.' WHERE `key` = 'accounting_provider';
|
UPDATE `settings` SET `description` = 'سیستم حسابداری: none=هیچکدام، pargar=API پرگار، tahesab=ارسال خودکار تهحساب، zarin=ارسال خودکار زرین.' WHERE `key` = 'accounting_provider';
|
||||||
UPDATE `settings` SET `title_fa` = 'آدرس API زرین', `description` = 'آدرس پایه وبسرویس زرین (بدون /ZarrinService/accounting).' WHERE `key` = 'zarin_api';
|
UPDATE `settings` SET `title_fa` = 'آدرس API زرین', `description` = 'آدرس پایه وبسرویس زرین (بدون /ZarrinService/accounting).' WHERE `key` = 'zarin_api';
|
||||||
UPDATE `settings` SET `title_fa` = 'توکن زرین', `description` = 'توکن مکمل API زرین که در نرمافزار زرین تعریف میشود.' WHERE `key` = 'zarin_token';
|
UPDATE `settings` SET `title_fa` = 'توکن زرین', `description` = 'توکن مکمل API زرین که در نرمافزار زرین تعریف میشود.' WHERE `key` = 'zarin_token';
|
||||||
UPDATE `settings` SET `title_fa` = 'نوع کار پیشفرض زرین', `type` = 'number', `description` = 'کد noeKar هنگام ساخت کار ساخته در زرین.' WHERE `key` = 'zarin_noe_kar';
|
UPDATE `settings` SET `title_fa` = 'نوع کار پیشفرض زرین', `type` = 'number', `description` = 'noeKar عمومی. مقدار ۱۶ معمولاً گرمی است و برای sabtSanadTedadi مناسب نیست؛ سند تعدادی از zarin_noe_kar_tedadi استفاده میکند.' WHERE `key` = 'zarin_noe_kar';
|
||||||
|
UPDATE `settings` SET `title_fa` = 'نوع کار تعدادی زرین', `type` = 'number', `description` = 'noeKar برای سند تعدادی (سکه/شمش/گوی/مکعب). معمولاً ۱۷=سکه-تعدادی یا ۱۸=اجرت تعدادی.' WHERE `key` = 'zarin_noe_kar_tedadi';
|
||||||
UPDATE `settings` SET `title_fa` = 'گروه کار پیشفرض زرین', `type` = 'number', `description` = 'کد gorooheKar هنگام ساخت/جستجوی کار در زرین. برای جداسازی چند پنل روی یک زرین، برای هر پنل مقدار متفاوت بگذارید.' WHERE `key` = 'zarin_gorohe_kar';
|
UPDATE `settings` SET `title_fa` = 'گروه کار پیشفرض زرین', `type` = 'number', `description` = 'کد gorooheKar هنگام ساخت/جستجوی کار در زرین. برای جداسازی چند پنل روی یک زرین، برای هر پنل مقدار متفاوت بگذارید.' WHERE `key` = 'zarin_gorohe_kar';
|
||||||
UPDATE `settings` SET `title_fa` = 'نام گروه حساب مشتریان زرین', `type` = 'text', `description` = 'پارامتر nameG در addhesab — گروه حساب زرین. برای اپ خانگی: مشتری نقدی (خریدار) = گروه ۶. گروه همکار استفاده نشود (مظنه متفاوت است).' WHERE `key` = 'zarin_name_g';
|
UPDATE `settings` SET `title_fa` = 'نام گروه حساب مشتریان زرین', `type` = 'text', `description` = 'پارامتر nameG در addhesab — گروه حساب زرین. برای اپ خانگی: مشتری نقدی (خریدار) = گروه ۶. گروه همکار استفاده نشود (مظنه متفاوت است).' WHERE `key` = 'zarin_name_g';
|
||||||
-- فقط اگر خالی است، پیشفرض گروه ۶ را بگذار (value موجود دست نخورده)
|
-- فقط اگر خالی است، پیشفرض گروه ۶ را بگذار (value موجود دست نخورده)
|
||||||
|
|||||||
Reference in New Issue
Block a user