Helper::checkFields

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. Helper
  4. checkFields
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/invoice/compatible/helper.php
  • Класс: Bitrix\Crm\Invoice\Compatible\Helper
  • Вызов: Helper::checkFields
static function checkFields($action, &$fields, $id = 0)
{
	/** @global \CDatabase $DB */
	/** @global \CMain $APPLICATION */
	/** @global \CUserTypeManager $USER_FIELD_MANAGER */
	global $DB, $APPLICATION, $USER_FIELD_MANAGER;

	if (is_set($fields, "SITE_ID") && $fields["SITE_ID"] <> '')
		$fields["LID"] = $fields["SITE_ID"];

	if ((is_set($fields, "LID") || $action=="ADD") && $fields["LID"] == '')
	{
		$APPLICATION->ThrowException(Loc::getMessage("CRM_INVOICE_COMPAT_HELPER_EMPTY_SITE"));
		return false;
	}
	if ((is_set($fields, "PERSON_TYPE_ID") || $action=="ADD") && intval($fields["PERSON_TYPE_ID"])<=0)
	{
		$APPLICATION->ThrowException(Loc::getMessage("CRM_INVOICE_COMPAT_HELPER_EMPTY_PERS_TYPE"));
		return false;
	}
	if ((is_set($fields, "USER_ID") || $action=="ADD") && intval($fields["USER_ID"])<=0)
	{
		$APPLICATION->ThrowException(Loc::getMessage("CRM_INVOICE_COMPAT_HELPER_EMPTY_USER_ID"));
		return false;
	}

	if (is_set($fields, "PAYED") && $fields["PAYED"] != "Y")
		$fields["PAYED"] = "N";
	if (is_set($fields, "CANCELED") && $fields["CANCELED"] != "Y")
		$fields["CANCELED"] = "N";
	if (is_set($fields, "STATUS_ID") && $fields["STATUS_ID"] == '')
		$fields["STATUS_ID"] = "N";
	if (is_set($fields, "ALLOW_DELIVERY") && $fields["ALLOW_DELIVERY"] != "Y")
		$fields["ALLOW_DELIVERY"] = "N";
	if (is_set($fields, "EXTERNAL_ORDER") && $fields["EXTERNAL_ORDER"] != "Y")
		$fields["EXTERNAL_ORDER"] = "N";

	if (is_set($fields, "PRICE") || $action=="ADD")
	{
		$fields["PRICE"] = str_replace(",", ".", $fields["PRICE"]);
		$fields["PRICE"] = doubleval($fields["PRICE"]);
	}
	if (is_set($fields, "PRICE_DELIVERY") || $action=="ADD")
	{
		$fields["PRICE_DELIVERY"] = str_replace(",", ".", $fields["PRICE_DELIVERY"]);
		$fields["PRICE_DELIVERY"] = doubleval($fields["PRICE_DELIVERY"]);
	}
	if (is_set($fields, "SUM_PAID") || $action=="ADD")
	{
		$fields["SUM_PAID"] = str_replace(",", ".", $fields["SUM_PAID"]);
		$fields["SUM_PAID"] = doubleval($fields["SUM_PAID"]);
	}
	if (is_set($fields, "DISCOUNT_VALUE") || $action=="ADD")
	{
		$fields["DISCOUNT_VALUE"] = str_replace(",", ".", $fields["DISCOUNT_VALUE"]);
		$fields["DISCOUNT_VALUE"] = doubleval($fields["DISCOUNT_VALUE"]);
	}
	if (is_set($fields, "TAX_VALUE") || $action=="ADD")
	{
		$fields["TAX_VALUE"] = str_replace(",", ".", $fields["TAX_VALUE"]);
		$fields["TAX_VALUE"] = doubleval($fields["TAX_VALUE"]);
	}

	if(!is_set($fields, "LOCKED_BY") && (!is_set($fields, "UPDATED_1C") || (is_set($fields, "UPDATED_1C") && $fields["UPDATED_1C"] != "Y")))
	{
		$fields["UPDATED_1C"] = "N";
		$fields["~VERSION"] = "VERSION+0+1";
	}

	if ((is_set($fields, "CURRENCY") || $action=="ADD") && $fields["CURRENCY"] == '')
	{
		$APPLICATION->ThrowException(Loc::getMessage("CRM_INVOICE_COMPAT_HELPER_EMPTY_CURRENCY"));
		return false;
	}

	if (is_set($fields, "CURRENCY"))
	{
		if (!($arCurrency = \CCurrency::GetByID($fields["CURRENCY"])))
		{
			$APPLICATION->ThrowException(
				Loc::getMessage(
					"CRM_INVOICE_COMPAT_HELPER_WRONG_CURRENCY",
					["#ID#" => $fields["CURRENCY"]]
				)
			);
			return false;
		}
	}

	if (is_set($fields, "LID"))
	{
		$dbSite = \CSite::GetByID($fields["LID"]);
		if (!$dbSite->Fetch())
		{
			$APPLICATION->ThrowException(
				Loc::getMessage(
					"CRM_INVOICE_COMPAT_HELPER_WRONG_SITE",
					["#ID#" => $fields["LID"]]
				)
			);
			return false;
		}
	}

	if (is_set($fields, "USER_ID"))
	{
		$dbUser = \CUser::GetByID($fields["USER_ID"]);
		if (!$dbUser->Fetch())
		{
			$APPLICATION->ThrowException(
				Loc::getMessage(
					"CRM_INVOICE_COMPAT_HELPER_WRONG_USER",
					["#ID#" => $fields["USER_ID"]]
				)
			);
			return false;
		}
	}

	if (is_set($fields, "PERSON_TYPE_ID"))
	{
		$dbRes = Crm\Invoice\PersonType::getList([
			'filter' => [
				'=ID' => $fields["PERSON_TYPE_ID"]
			]
		]);
		if (!$dbRes->fetch())
		{
			$APPLICATION->ThrowException(
				Loc::getMessage(
					"CRM_INVOICE_COMPAT_HELPER_WRONG_PERSON_TYPE",
					["#ID#" => $fields["PERSON_TYPE_ID"]]
				)
			);
			return false;
		}
	}

	if (is_set($fields, "PAY_SYSTEM_ID") && intval($fields["PAY_SYSTEM_ID"]) > 0)
	{
		$paysystem = new \CSalePaySystem();
		if (!($arPaySystem = $paysystem->GetByID(intval($fields["PAY_SYSTEM_ID"]))))
		{
			$APPLICATION->ThrowException(
				Loc::getMessage(
					"CRM_INVOICE_COMPAT_HELPER_WRONG_PS",
					["#ID#" => $fields["PAY_SYSTEM_ID"]]
				)
			);
			return false;
		}
		unset($paysystem);
	}

	if (is_set($fields, "DELIVERY_ID") && intval($fields["DELIVERY_ID"]) > 0)
	{
		if (!($delivery = Sale\Delivery\Services\Table::getById($fields["DELIVERY_ID"])))
		{
			$APPLICATION->ThrowException(
				Loc::getMessage(
					"CRM_INVOICE_COMPAT_HELPER_WRONG_DELIVERY",
					["#ID#" => $fields["DELIVERY_ID"]]
				)
			);
			return false;
		}
	}

	if (is_set($fields, "STATUS_ID"))
	{
		$res = Crm\Invoice\InvoiceStatus::getList(['filter' => ['STATUS_ID' => $fields['STATUS_ID']]]);
		$row = $res->fetch();
		if (!is_array($row))
		{
			$APPLICATION->ThrowException(
				Loc::getMessage(
					"CRM_INVOICE_COMPAT_HELPER_WRONG_STATUS",
					["#ID#" => $fields["STATUS_ID"]]
				)
			);
			return false;
		}
		unset($res, $row);
	}

	if (is_set($fields, "ACCOUNT_NUMBER") && $action=="UPDATE")
	{
		if ($fields["ACCOUNT_NUMBER"] == '')
		{
			$APPLICATION->ThrowException(Loc::getMessage("CRM_INVOICE_COMPAT_HELPER_EMPTY_ACCOUNT_NUMBER"));
			return false;
		}
		else
		{
			$accountNumber = $DB->ForSql($fields["ACCOUNT_NUMBER"]);
			$dbres = $DB->Query(
				"SELECT ID, ACCOUNT_NUMBER FROM b_crm_invoice WHERE ACCOUNT_NUMBER = '{$accountNumber}'", true
			);
			unset($accountNumber);
			if ($arRes = $dbres->GetNext())
			{
				if (is_array($arRes) && $arRes["ID"] != $id)
				{
					$APPLICATION->ThrowException(
						Loc::getMessage("CRM_INVOICE_COMPAT_HELPER_EXISTING_ACCOUNT_NUMBER")
					);
					return false;
				}
			}
		}
	}

	if($action == "ADD")
		$fields["VERSION"] = 1;

	if (!$USER_FIELD_MANAGER->CheckFields(Crm\Invoice\Internals\InvoiceTable::getUfId(), $id, $fields))
	{
		return false;
	}

	return True;
}

Добавить комментарий