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;
}