Ruby / Redmine: компиляция ха sh из тем вопросов и соответствующих пользовательских полей - PullRequest
0 голосов
/ 26 февраля 2020

Я использую плагин Redmine и Computed Custom Field .

Плагин позволяет вычислять настраиваемые поля и принимает для расчетов код ruby.

В Redmine у ​​меня есть проект (Project_id = 11), в котором я рассчитываю стоимость продуктов в отдельном настраиваемом поле для каждой проблемы. Выглядит это так:

  • В каждом выпуске есть настраиваемое поле (cf_id = 31) для выбора продукта: груши, ананасы, помидоры, кокосы.
  • В каждом выпуске есть настраиваемое поле (cf_id = 32) для ввода количества (штук) товаров.
  • У каждого выпуска есть настраиваемое поле (cf_id = 33) для ввода веса (фунтов) товара.
  • Каждый выпуск имеет вычисленное пользовательское поле (cf_id = 34), в котором формула вычисляет стоимость продукта.

Формула в вычисляемом пользовательском поле (cf_id = 34) включает два хэши с ценами продуктов (в зависимости от типа продукта):

products_by_weight = {
    "Pears" => [110],
    "Tomatoes" => [120]
}

products_by_pieces = {
    "Pineapples" => [130,300],
    "Coconuts" => [140,200]
}

Затем моя формула проверяет продукт, выбранный в cf_id = 31 на принадлежность к первому или второму хэшу, и выполняет соответствующие вычисления:

  1. Умножает цену на вес (cf_id = 32) в случае использования товаров из первого списка
  2. Или умножает цену на количество (cf_id = 33) в случае использования груз из второго списка. Второе значение в массиве значений «products_by_pieces» ha sh является пределом веса на единицу. Если вес, разделенный на предел, является большей величиной, чем указано в cf_id = 32, тогда в формуле в сценарии 2 будет использоваться это количество вместо значения, указанного в cf_id = 32.

Теперь я пытаюсь переместить эти переменные за пределы формулы. Я создал проект (Project_id = 22), в котором я хочу сохранить эти переменные как проблемы.

Я представляю это так:

  • Название проблемы - название продукта
  • Каждая проблема имеет два настраиваемых поля:
    • cf_id = 41 - цена продукта
    • cf_id = 42 - предел веса на единицу.
  • Для каждого выпуска присваивается категория: "products_by_weight" или "products_by_pieces".

Я хочу скомпилировать те же хеши, которые теперь включены в мою формулу в cf_id = 34 вопросов проекта 11, но автоматически из проблем проекта 22 с учетом категории.

Пока все, что у меня есть достигнуто, чтобы найти цену известный продукт из таких выпусков проекта 22.

price = Project.find(22).issues.where(subject: "Pineapples").first.try(:custom_field_value,41)

Но это никак не помогает и требует внесения изменений в код при добавлении каждого нового продукта.

Я новичок к программированию и Ruby, поэтому я пытаюсь поэкспериментировать с классами Redmine , и попытался скомпилировать ха sh с таким кодом:

Issue.by_category(Project.find(22))

Но в результате До сих пор я получил только это:

[{"status_id"=>"27", "closed"=>true, "category_id"=>"1", "total"=>"10"}]

, что полностью отличается от ожидаемого результата. Любая помощь будет полезна!

UPD. Прямо сейчас мои переменные (цены на продукты и ограничения по весу) находятся в га sh, что непосредственно является частью кода для вычислений. поле 34. Но я не хочу, чтобы эти переменные (цены и ограничения по весу) были частью кода. Я хочу управлять ими как проблемами с соответствующими пользовательскими полями (41 и 42) в отдельном проекте (22) - таким образом, чтобы обычный пользователь мог изменять или добавлять эти значения в проблемах, не изменяя код вычисляемого пользовательского поля (34). Поэтому я хочу скомпилировать это sh на основе проблем проекта 22 вместо того, чтобы писать его напрямую. Я предполагаю, что это так, что Предметы Проблем Проекта 22 должны стать ключами и массивом пользовательских полей [41,41] - значений. При этом мне нужны два отдельных хэша, определенных назначенной категорией ("goods_by_weight" и "goods_by_pieces"), потому что они рассчитываются по-разному, и в Project 22 у меня есть другие переменные, записанные в качестве значений пользовательских полей в выпусках с другой категорией.

...