Динамически создавать и обновлять строки и столбцы таблицы в отчете odoo qweb с python - PullRequest
1 голос
/ 03 августа 2020

введите описание изображения здесь

У меня есть эта таблица выше как окончательный результат моего отчета qweb. Эта таблица должна создаваться динамически.

Какая структура данных вам потребуется для представления этих данных, чтобы значение ячеек таблицы, которые в настоящее время равны нулю, было эквивалентно значению после разделения переменной.

Я хочу, чтобы если у вас есть переменная m-x = 20, ячейка таблицы в col m, row x будет равна 20 и так далее. Если такой комбинации нет, то ячейка таблицы равна 0.

Пожалуйста, дайте мне знать, имеет ли это смысл и, возможно, какие-либо пояснения. Спасибо!

Это то, чем я сейчас занимаюсь. Не уверен, что я в правильном направлении. Отчет печатается с производственной модели. Я ищу, хотя товар перемещается в запасах, ищу все перемещения, происхождение или ссылка которых соответствует названию производственного заказа.

Затем я беру имя lot_id, присоединяю ключи в словаре и проверяю, совпадают ли они, и там я обновляю значения.

size = {
            'u/s': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0}
            'w': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0}
            'bhl': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0}
        }
for output in self.env['stock.move.line'].search(['|', ('origin', '=', docs.name), ('reference', '=', docs.name)]):
    lot_id = output.lot_id.name
        for i in size:
            for j in size[i]:
                if (j+'-'+i) == lot_id:
                   i[j] = output.qty_done

1 Ответ

1 голос
/ 03 августа 2020

Я получил это с помощью словарей.

Python код:

size = {
            'u/s': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'w': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'bhl': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'bhp': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'rhl': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'rhp': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'yhl': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'yhp': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'stains': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            
        }
        
for output in self.env['stock.move.line'].search(['|', ('origin', '=', docs.name), ('reference', '=', docs.name)]):
    lot_id = output.lot_id.name
    if lot_id:
       for i in size:
           for j in size[i]:
               if (f"{j}-{i}") == lot_id.lower():
                   size[i][j] = output.qty_done

Xml код:

<thead>
    <tr>
      <th>SIZE</th>
      <th>MP/SUP</th>
      <th>TR</th>
      <th>D2</th>
      <th>V</th>
      <th>V1</th>
      <th>D/REJ</th>
      <th>TOTAL</th>
      <th>PERCENTAGE (%)</th>
    </tr>
  </thead>
  <tbody>
     <t t-foreach="size" t-as="i">
         <tr>
            <th>
               <t t-esc="i.upper()" />
            </th>
         <t t-foreach="size[i]" t-as="j">
            <td>
               <t t-esc="size[i][j]" />
            </td>
         </t>
       </tr>
     </t>
 </tbody>

Ps. Pandas кажется действительно быстрым способом добиться цели.

...