public function setDiscount(discount $discount = null)
По этой семантики метода я могу сказать, что она ждет не ID в виде числа, а конкретно объект класса discount
Может быть попробовать воспользоваться вот этой функцией
public function getAllDiscounts($codeName = false)
Получить все скидки или скидку по codeName, а потом уже передавать её в функцию установки скидки?
а есть вот ещё
/**
* Получить экземпляр скидки по ее id
* @param Integer $discountId id скидки
* @return discount объект скидки, экземпляр класса-потомка discount
*/
public static function get($discountId) {
static $cache = array();
if(!$discountId) {
return null;
}
if(isset($cache[$discountId])) {
return $cache[$discountId];
}
$objects = umiObjectsCollection::getInstance();
$discountObject = $objects->getObject($discountId);
if($discountObject instanceof iUmiObject == false) {
return false;
}
$discountTypeId = $discountObject->discount_type_id;
$discountTypeObject = $objects->getObject($discountTypeId);
if($discountTypeObject instanceof iUmiObject == false) return null;
$className = $discountTypeObject->codename . 'Discount';
self::includeDiscount($className);
return $cache[$discountId] = new $className($discountObject);
}
в принципе можно попробовать
$discount = discount::get($Id);
$order->setDiscount($discount);