Proteus-Zweig: dataset.yaml-Pipeline und 5.0/8.0-Modellbaumvergleich

- create_dataset.py, compare_snapshots.py, rst_to_dataset.py: Proteus-
  Testdatensatz anlegen/vergleichen bzw. aus *.rst-Szenarien extrahieren
- create_dataset.py: Feld-Alias-Fallback (FIELD_RENAMES) für bekannte
  Umbenennungen wie stock.move.uom -> unit, bidirektional
- merge_dedup_rsts.py: Extrahierte YAMLs pro Version zusammenführen,
  versionsinterne Duplikate entfernen, abhängigkeitskorrekt sortieren
- extract_model_tree.py: Modellbaum (Modelle/Felder) statisch aus dem
  Tryton-Quellcode ziehen, für 5.0 und 8.0
- model_diff.py, model_coverage.py: 5.0<->8.0-Modelländerungen finden und
  gegen die aktuelle Testdatenabdeckung abgleichen, priorisiert nach
  tatsächlicher Änderung
- reports/*_merged.yaml: Extraktionsergebnisse für die aktiven
  Module (rohe *.rst-Quellen bewusst nicht mitversioniert)
- Ordner doc ergänzt
This commit is contained in:
2026-08-22 10:52:13 +02:00
parent b549063ff6
commit c0dd24b6c5
38 changed files with 26136 additions and 20 deletions
+532
View File
@@ -0,0 +1,532 @@
{
"records": [
{
"key": "scenario_party_erase__party",
"model": "party.party",
"fields": {
"name": "Pam",
"active": false
}
},
{
"key": "scenario_party_erase__attachment",
"model": "ir.attachment",
"fields": {
"resource": {
"$ref": "scenario_party_erase__party"
},
"name": "Attachment"
}
},
{
"key": "scenario_party_replace__party1",
"model": "party.party",
"fields": {
"name": "Pam"
}
},
{
"key": "scenario_stock_lot_shipment_out__customer",
"model": "party.party",
"fields": {
"name": "Customer"
}
},
{
"key": "scenario_stock_product_location__supplier",
"model": "party.party",
"fields": {
"name": "Suppier"
}
},
{
"key": "scenario_stock_reporting__supplier",
"model": "party.party",
"fields": {
"name": "Supplier"
}
},
{
"key": "scenario_stock_shipment_internal__employee_party",
"model": "party.party",
"fields": {
"name": "Employee"
}
},
{
"key": "scenario_stock_shipment_internal__employee",
"model": "company.employee",
"fields": {
"party": {
"$ref": "scenario_stock_shipment_internal__employee_party"
}
}
},
{
"key": "scenario_stock_shipment_out__employee",
"model": "company.employee",
"fields": {
"party": {
"$ref": "scenario_stock_shipment_internal__employee_party"
}
}
},
{
"key": "scenario_production__template",
"model": "product.template",
"fields": {
"name": "product",
"default_uom": {
"$manual": "unit"
},
"type": "goods",
"producible": true,
"list_price": {
"$decimal": "30"
}
}
},
{
"key": "scenario_production__template1",
"model": "product.template",
"fields": {
"name": "component 1",
"default_uom": {
"$manual": "unit"
},
"type": "goods",
"list_price": {
"$decimal": "5"
}
}
},
{
"key": "scenario_production__template2",
"model": "product.template",
"fields": {
"name": "component 2",
"default_uom": {
"$manual": "meter"
},
"type": "goods",
"list_price": {
"$decimal": "7"
}
}
},
{
"key": "scenario_stock_average_cost_price__template",
"model": "product.template",
"fields": {
"name": "Product",
"default_uom": {
"$manual": "unit"
},
"type": "goods",
"list_price": {
"$decimal": "300"
},
"cost_price_method": "average"
}
},
{
"key": "scenario_stock_inventory__template2",
"model": "product.template",
"fields": {
"name": "Product",
"default_uom": {
"$manual": "kg"
},
"type": "goods",
"list_price": {
"$decimal": "140"
},
"cost_price_method": "average"
}
},
{
"key": "scenario_stock_lot_shipment_out__template",
"model": "product.template",
"fields": {
"name": "Product",
"default_uom": {
"$manual": "unit"
},
"type": "goods",
"list_price": {
"$decimal": "20"
}
}
},
{
"key": "scenario_production__bom",
"model": "production.bom",
"fields": {
"name": "product"
}
},
{
"key": "scenario_production__production",
"model": "production",
"fields": {
"planned_date": {
"$manual": "today"
},
"product": {
"$manual": "product"
},
"bom": {
"$ref": "scenario_production__bom"
},
"quantity": 2
}
},
{
"key": "scenario_production__production_lead_time",
"model": "production.lead_time",
"fields": {
"product": {
"$manual": "product"
},
"bom": {
"$ref": "scenario_production__bom"
},
"lead_time": {
"$manual": "datetime.timedelta(1)"
}
}
},
{
"key": "scenario_stock_shipment_internal__stock_user",
"model": "res.user",
"fields": {
"name": "Stock",
"login": "stock",
"main_company": {
"$manual": "company"
},
"employee": {
"$ref": "scenario_stock_shipment_internal__employee"
}
}
},
{
"key": "scenario_stock_shipment_out__stock_user",
"model": "res.user",
"fields": {
"name": "Stock",
"login": "stock",
"main_company": {
"$manual": "company"
},
"employee": {
"$ref": "scenario_stock_shipment_out__employee"
}
}
},
{
"key": "scenario_stock_inventory__inventory",
"model": "stock.inventory",
"fields": {
"location": {
"$manual": "storage_loc"
},
"empty_quantity": "keep"
}
},
{
"key": "scenario_stock_inventory_empty_quantity__inventory",
"model": "stock.inventory",
"fields": {
"location": {
"$manual": "storage_loc"
},
"empty_quantity": "empty"
}
},
{
"key": "scenario_stock_average_cost_price__storage_sub_loc",
"model": "stock.location",
"fields": {
"name": "Storage Sub",
"type": "storage",
"parent": {
"$manual": "storage_loc"
}
}
},
{
"key": "scenario_stock_product_location__child_loc",
"model": "stock.location",
"fields": {
"name": "Child Location",
"parent": {
"$manual": "storage_loc"
},
"code": "CHI"
}
},
{
"key": "scenario_stock_shipment_in_same_storage_input__storage1",
"model": "stock.location",
"fields": {
"name": "Storage 1",
"parent": {
"$manual": "storage_loc"
}
}
},
{
"key": "scenario_stock_shipment_internal__internal_loc",
"model": "stock.location",
"fields": {
"name": "Internal",
"type": "storage"
}
},
{
"key": "scenario_stock_shipment_internal__lead_time",
"model": "stock.location.lead_time",
"fields": {
"from_warehouse": {
"$manual": "storage_loc.warehouse"
},
"to_warehouse": {
"$manual": "storage_loc.warehouse"
},
"lead_time": {
"$manual": "datetime.timedelta(1)"
}
}
},
{
"key": "scenario_stock_average_cost_price__incoming_move",
"model": "stock.move",
"fields": {
"product": {
"$manual": "product"
},
"uom": {
"$manual": "unit"
},
"quantity": 1,
"from_location": {
"$manual": "supplier_loc"
},
"to_location": {
"$manual": "storage_loc"
},
"planned_date": {
"$manual": "today"
},
"effective_date": {
"$manual": "today"
},
"company": {
"$manual": "company"
},
"unit_price": {
"$decimal": "200"
},
"currency": {
"$manual": "company.currency"
}
}
},
{
"key": "scenario_stock_product_location__shipment_in",
"model": "stock.shipment.in",
"fields": {
"planned_date": {
"$manual": "today"
},
"supplier": {
"$ref": "scenario_stock_product_location__supplier"
},
"warehouse": {
"$manual": "warehouse_loc"
},
"company": {
"$manual": "company"
}
}
},
{
"key": "scenario_stock_reporting__shipment_in",
"model": "stock.shipment.in",
"fields": {
"planned_date": {
"$manual": "today"
},
"supplier": {
"$ref": "scenario_stock_reporting__supplier"
},
"warehouse": {
"$manual": "warehouse_loc"
},
"company": {
"$manual": "company"
}
}
},
{
"key": "scenario_stock_shipment_in_same_storage_input__shipment_in",
"model": "stock.shipment.in",
"fields": {
"supplier": {
"$ref": "scenario_stock_reporting__supplier"
},
"warehouse": {
"$manual": "warehouse_loc"
},
"company": {
"$manual": "company"
}
}
},
{
"key": "scenario_stock_reporting__shipment_internal",
"model": "stock.shipment.internal",
"fields": {
"planned_date": {
"$manual": "today"
},
"company": {
"$manual": "company"
},
"from_location": {
"$manual": "storage_loc"
},
"to_location": {
"$manual": "lost_loc"
}
}
},
{
"key": "scenario_stock_shipment_internal__shipment",
"model": "stock.shipment.internal",
"fields": {
"planned_date": {
"$manual": "today"
},
"from_location": {
"$ref": "scenario_stock_shipment_internal__internal_loc"
},
"to_location": {
"$manual": "storage_loc"
}
}
},
{
"key": "scenario_stock_lot_shipment_out__shipment_out",
"model": "stock.shipment.out",
"fields": {
"planned_date": {
"$manual": "today"
},
"customer": {
"$ref": "scenario_stock_lot_shipment_out__customer"
},
"warehouse": {
"$manual": "warehouse_loc"
},
"company": {
"$manual": "company"
}
}
},
{
"key": "scenario_stock_reporting__shipment_out",
"model": "stock.shipment.out",
"fields": {
"planned_date": {
"$manual": "today"
},
"customer": {
"$ref": "scenario_stock_lot_shipment_out__customer"
},
"warehouse": {
"$manual": "warehouse_loc"
},
"company": {
"$manual": "company"
}
}
},
{
"key": "scenario_stock_shipment_out__shipment_out",
"model": "stock.shipment.out",
"fields": {
"planned_date": {
"$manual": "today"
},
"customer": {
"$ref": "scenario_stock_lot_shipment_out__customer"
},
"warehouse": {
"$manual": "warehouse_loc"
},
"company": {
"$manual": "company"
}
}
},
{
"key": "scenario_stock_shipment_out_same_storage_output__shipment_out",
"model": "stock.shipment.out",
"fields": {
"customer": {
"$ref": "scenario_stock_lot_shipment_out__customer"
},
"warehouse": {
"$manual": "warehouse_loc"
},
"company": {
"$manual": "company"
}
}
},
{
"key": "scenario_stock_split_shipment__shipment1",
"model": "stock.shipment.out",
"fields": {
"customer": {
"$ref": "scenario_stock_lot_shipment_out__customer"
}
}
},
{
"key": "scenario_stock_product_location__shipment_out_return",
"model": "stock.shipment.out.return",
"fields": {
"customer": {
"$ref": "scenario_stock_lot_shipment_out__customer"
},
"supplier": {
"$ref": "scenario_stock_product_location__supplier"
},
"from_location": {
"$manual": "output_loc"
},
"to_location": {
"$manual": "supplier_loc"
}
}
},
{
"key": "scenario_stock_shipment_out_return_same_storage_input__shipment",
"model": "stock.shipment.out.return",
"fields": {
"customer": {
"$ref": "scenario_stock_lot_shipment_out__customer"
},
"warehouse": {
"$manual": "warehouse_loc"
},
"company": {
"$manual": "company"
}
}
}
]
}
File diff suppressed because it is too large Load Diff
+103
View File
@@ -0,0 +1,103 @@
# Testdaten-Abdeckung gegen den 5.0-Modellbaum
## Komplett unabgedeckte Modelle (35)
Für diese Modelle gibt es noch gar keinen Record in der dataset.yaml:
- `company.company` _[geändert]_
- `country.subdivision` _[geändert]_
- `currency.currency` _[geändert]_
- `currency.currency.rate` _[geändert]_
- `party.address` _[geändert]_
- `party.address.format` _[geändert]_
- `party.contact_mechanism` _[geändert]_
- `product.cost_price` _[geändert]_
- `product.list_price` _[geändert]_
- `product.product` _[geändert]_
- `production.bom.input` _[geändert]_
- `stock.inventory.line` _[geändert]_
- `stock.lot` _[geändert]_
- `stock.product.location` _[geändert]_
- `stock.shipment.in.return` _[geändert]_
- `country.zip` _[entfernt]_
- `stock.lot.type` _[entfernt]_
- `country.country` _[nur ergänzt]_
- `party.configuration` _[nur ergänzt]_
- `party.identifier` _[nur ergänzt]_
- `product.category` _[nur ergänzt]_
- `product.configuration` _[nur ergänzt]_
- `production.configuration` _[nur ergänzt]_
- `stock.configuration` _[nur ergänzt]_
- `party.category` _[unverändert]_
- `party.party.lang` _[unverändert]_
- `party.party.location` _[unverändert]_
- `product.cost_price_method` _[unverändert]_
- `product.uom` _[unverändert]_
- `product.uom.category` _[unverändert]_
- `production.configuration.production_sequence` _[unverändert]_
- `stock.configuration.sequence` _[unverändert]_
- `stock.period` _[unverändert]_
- `stock.period.cache` _[unverändert]_
- `stock.period.cache.lot` _[unverändert]_
## Teilweise abgedeckte Modelle (15)
Modell hat mind. einen Record, aber nicht alle setzbaren Felder werden benutzt:
### `product.template` _[geändert]_
- optional, ungenutzt: categories, categories_all, consumable, cost_price_methods, expiration_state, expiration_time, height, height_uom, length, length_uom, list_prices, lot_required, products, shelf_life_state, shelf_life_time, volume, volume_uom, weight, weight_uom, width, width_uom
### `production` _[geändert]_
- **required, aber ungenutzt:** company, location, warehouse
- optional, ungenutzt: effective_date, effective_start_date, inputs, number, outputs, planned_start_date, reference, state, uom
### `res.user` _[geändert]_
- **required, aber ungenutzt:** menu
- optional, ungenutzt: actions, applications, company, email, employees, groups, language, password, password_hash, password_reset, password_reset_expire, signature, warnings
### `stock.inventory` _[geändert]_
- **required, aber ungenutzt:** company, date, lost_found
- optional, ungenutzt: lines, number, state
### `stock.move` _[geändert]_
- **required, aber ungenutzt:** internal_quantity
- optional, ungenutzt: cost_price, internal_volume, internal_weight, lot, origin, production_input, production_output, shipment, state
### `stock.shipment.in` _[geändert]_
- optional, ungenutzt: contact_address, effective_date, incoming_moves, inventory_moves, moves, number, reference, state
### `stock.shipment.internal` _[geändert]_
- optional, ungenutzt: effective_date, effective_start_date, incoming_moves, moves, number, outgoing_moves, planned_start_date, reference, state
### `stock.shipment.out` _[geändert]_
- **required, aber ungenutzt:** delivery_address
- optional, ungenutzt: effective_date, inventory_moves, moves, number, outgoing_moves, reference, state
### `stock.shipment.out.return` _[geändert]_
- **required, aber ungenutzt:** delivery_address
- optional, ungenutzt: effective_date, incoming_moves, inventory_moves, moves, number, planned_date, reference, state
### `company.employee` _[nur ergänzt]_
- **required, aber ungenutzt:** company
- optional, ungenutzt: end_date, start_date
### `party.party` _[nur ergänzt]_
- **required, aber ungenutzt:** code
- optional, ungenutzt: addresses, categories, contact_mechanisms, customer_location, identifiers, lang, langs, locations, replaced_by, supplier_location
### `production.bom` _[nur ergänzt]_
- optional, ungenutzt: inputs, output_products, outputs
### `stock.location` _[nur ergänzt]_
- **required, aber ungenutzt:** left, right
- optional, ungenutzt: address, childs, flat_childs, input_location, output_location, picking_location, production_location, storage_location
### `ir.attachment` _[unverändert]_
- **required, aber ungenutzt:** type
- optional, ungenutzt: data, description, file_id, link
### `stock.location.lead_time` _[unverändert]_
- optional, ungenutzt: warehouse_from, warehouse_to
File diff suppressed because it is too large Load Diff
+463
View File
@@ -0,0 +1,463 @@
# Modellbaum-Diff: 5.0 -> 8.0
## entfernt (12) - Modell existiert nicht mehr
- `country.zip`
- `ir.model.field-res.group`
- `product.template-stock.lot.type`
- `production.assign`
- `production.assign.failed`
- `stock.lot.type`
- `stock.shipment.in.return.assign`
- `stock.shipment.in.return.assign.failed`
- `stock.shipment.internal.assign`
- `stock.shipment.internal.assign.failed`
- `stock.shipment.out.assign`
- `stock.shipment.out.assign.failed`
## geändert (57) - Feld(er) entfernt oder geändert - Kandidat für einen echten Vergleichslauf
### `company.company`
- entfernte Felder: childs, parent
- (zusätzlich neue Felder: logo, logo_cache, tax_identifiers)
### `country.subdivision`
- **code**: required: True -> None
- **type**: required: True -> None
- (zusätzlich neue Felder: flag)
### `currency.currency`
- **symbol**: required: True -> None
### `currency.currency.rate`
- **currency**: required: None -> True
- **rate**: required: None -> True
### `ir.action`
- **type**: type: Char -> Selection
- (zusätzlich neue Felder: action, records)
### `ir.action.act_window`
- entfernte Felder: action
- **domains**: type: Function[Binary] -> Function[Field]
- **views**: type: Function[Binary] -> Function[Field]
### `ir.action.act_window.domain`
- entfernte Felder: sequence
### `ir.action.act_window.view`
- entfernte Felder: sequence
- **act_window**: required: None -> True
- (zusätzlich neue Felder: model)
### `ir.action.keyword`
- **action**: required: None -> True
- **groups**: type: Function[One2Many] -> Function[Many2Many]
### `ir.action.report`
- entfernte Felder: action, email, pyson_email
- (zusätzlich neue Felder: record_name, report_content_html)
### `ir.action.url`
- entfernte Felder: action
### `ir.action.wizard`
- entfernte Felder: action, email
### `ir.cron`
- entfernte Felder: args, function, model, name, number_calls, repeat_missed, request_user, user
- **interval_type**: required: None -> True
- **next_call**: required: True -> None
- (zusätzlich neue Felder: day, hour, logs, method, minute, running, timezone, weekday)
### `ir.model`
- entfernte Felder: info, model
- **fields**: required: True -> None
- **name**: required: None -> True
- (zusätzlich neue Felder: string)
### `ir.model.access`
- **model**: type: Many2One -> Char; relation: ir.model -> None
### `ir.model.button`
- **model**: type: Many2One -> Char; relation: ir.model -> None
### `ir.model.data`
- entfernte Felder: fs_values, out_of_sync, values
- **db_id**: required: True -> None
- (zusätzlich neue Felder: field_names)
### `ir.model.field`
- entfernte Felder: field_description, groups
- **model**: type: Many2One -> Char; relation: ir.model -> None
- (zusätzlich neue Felder: access, string)
### `ir.model.field.access`
- **field**: type: Many2One -> Char; relation: ir.model.field -> None
- (zusätzlich neue Felder: model)
### `ir.module`
- **childs**: type: Function[One2Many] -> Function[Many2Many]
- **parents**: type: Function[One2Many] -> Function[Many2Many]
### `ir.module.config_wizard.item`
- entfernte Felder: sequence
### `ir.rule.group`
- **model**: type: Many2One -> Char; relation: ir.model -> None
- **name**: required: None -> True
### `ir.sequence`
- entfernte Felder: code, groups
- (zusätzlich neue Felder: preview, sequence_type)
### `ir.sequence.type`
- entfernte Felder: code
### `ir.translation`
- entfernte Felder: src_md5
- (zusätzlich neue Felder: field, src_plural, value_1, value_2, value_3)
### `ir.trigger`
- entfernte Felder: action_function, action_model, on_create, on_delete, on_time, on_write
- (zusätzlich neue Felder: action, on_create_, on_delete_, on_time_, on_write_)
### `ir.ui.icon`
- entfernte Felder: sequence
- **icon**: type: Function[Char] -> Function[Text]
### `ir.ui.view`
- entfernte Felder: priority
- (zusätzlich neue Felder: basis, extensions)
### `ir.ui.view_search`
- **user**: required: True -> None
### `ir.ui.view_tree_width`
- **width**: required: True -> None
- (zusätzlich neue Felder: occurrence, screen_width)
### `party.address`
- entfernte Felder: name, zip
- **street**: type: Text -> Function[Text]
- (zusätzlich neue Felder: attn, building_name, building_number, contact_mechanisms, floor_number, identifiers, post_box, post_office, postal_code, private_bag, room_number, street_name, street_single_line, street_unstructured, subdivision_types, unit_number, warehouses)
### `party.address.format`
- entfernte Felder: country, language
- (zusätzlich neue Felder: building_number_format, country_code, floor_number_format, language_code, post_box_format, post_office_format, private_bag_format, room_number_format, street_format, unit_number_format)
### `party.contact_mechanism`
- **value**: required: None -> True
- (zusätzlich neue Felder: address, delivery, language, languages)
### `product.cost_price`
- **cost_price**: required: None -> True
### `product.list_price`
- **template**: required: None -> True
- (zusätzlich neue Felder: product)
### `product.product`
- entfernte Felder: lead_times
- (zusätzlich neue Felder: code_readonly, identifiers, list_price, list_price_used, list_prices, position, prefix_code, production_lead_times, replaced_by, suffix_code)
### `product.template`
- entfernte Felder: height_digits, length_digits, volume_digits, weight_digits, width_digits
- **lot_required**: type: Many2Many -> MultiSelection; relation: product.template-stock.lot.type -> None
- (zusätzlich neue Felder: code, code_readonly, locations, lot_sequence)
### `production`
- entfernte Felder: effective_date, planned_date, reference, unit_digits, uom
- (zusätzlich neue Felder: origin, type, unit)
### `production.bom.input`
- entfernte Felder: unit_digits, uom
- **product**: required: True -> None
- (zusätzlich neue Felder: phantom_bom, unit)
### `production.bom.tree`
- entfernte Felder: unit_digits, uom
- (zusätzlich neue Felder: unit)
### `production.bom.tree.open.start`
- entfernte Felder: unit_digits, uom
- (zusätzlich neue Felder: unit)
### `production.split.start`
- entfernte Felder: unit_digits, uom
- (zusätzlich neue Felder: unit)
### `res.user`
- entfernte Felder: main_company
- **companies**: type: Function[One2Many] -> Many2Many; relation: None -> res.user-company.company
- **menu**: required: True -> None
- (zusätzlich neue Felder: avatar_badge_url, company_filter, notifications, warehouse)
### `res.user.application`
- **application**: required: None -> True
### `stock.inventory`
- entfernte Felder: lost_found
### `stock.inventory.count.quantity`
- entfernte Felder: quantity_added, quantity_resulting, unit_digits, uom
- (zusätzlich neue Felder: lot, quantity, total_quantity, unit)
### `stock.inventory.count.search`
- entfernte Felder: search_model
### `stock.inventory.line`
- entfernte Felder: unit_digits, uom
- (zusätzlich neue Felder: inventory_date, inventory_location, unit)
### `stock.lot`
- entfernte Felder: expiration_date, expiration_state, number, product, shelf_life_expiration_date, shelf_life_expiration_state
- (zusätzlich neue Felder: default_uom)
### `stock.move`
- entfernte Felder: unit_digits, uom
- (zusätzlich neue Felder: cost_price_required, delay, from_location_name, origin_planned_date, outcome_moves, product_cost_price, production, production_cost_price_updated, to_location_name, unit, unit_price_company, unit_price_updated)
### `stock.move.split.start`
- entfernte Felder: unit_digits, uom
- (zusätzlich neue Felder: unit)
### `stock.product.location`
- **product**: required: True -> None
- (zusätzlich neue Felder: template)
### `stock.shipment.in`
- entfernte Felder: effective_date, number, planned_date, reference
- **warehouse_input**: type: Function[Many2One] -> Many2One; relation: None -> stock.location; required: None -> True
- **warehouse_storage**: type: Function[Many2One] -> Many2One; relation: None -> stock.location; required: None -> True
### `stock.shipment.in.return`
- entfernte Felder: effective_date, number, planned_date, reference
- (zusätzlich neue Felder: warehouse)
### `stock.shipment.internal`
- entfernte Felder: effective_date, number, planned_date, reference
- (zusätzlich neue Felder: internal_transit_location, to_warehouse, warehouse)
### `stock.shipment.out`
- entfernte Felder: effective_date, number, planned_date, reference
- **warehouse_output**: type: Function[Many2One] -> Many2One; relation: None -> stock.location; required: None -> True
- **warehouse_storage**: type: Function[Many2One] -> Many2One; relation: None -> stock.location; required: None -> True
### `stock.shipment.out.return`
- entfernte Felder: delivery_address, effective_date, number, planned_date, reference
- **warehouse_input**: type: Function[Many2One] -> Many2One; relation: None -> stock.location; required: None -> True
- **warehouse_storage**: type: Function[Many2One] -> Many2One; relation: None -> stock.location; required: None -> True
- (zusätzlich neue Felder: contact_address)
## neu (76) - Modell gibt es erst ab 8.0
- `company.company.logo.cache`
- `company.company.tax_identifier`
- `country.organization`
- `country.organization.member`
- `country.postal_code`
- `country.region`
- `currency.cron`
- `currency.cron-currency.currency`
- `ir.avatar`
- `ir.avatar.cache`
- `ir.calendar.day`
- `ir.calendar.month`
- `ir.chat.channel`
- `ir.chat.follower`
- `ir.chat.message`
- `ir.cron.log`
- `ir.email`
- `ir.email.address`
- `ir.email.template`
- `ir.email.template-ir.action.report`
- `ir.error`
- `ir.export-res.group`
- `ir.export-write-res.group`
- `ir.filestore.queue`
- `ir.lang.config`
- `ir.lang.config.start`
- `ir.message`
- `ir.model.log`
- `ir.model.refresh_materialized`
- `ir.module.config.start`
- `ir.ui.view_tree_optional`
- `party.address.subdivision_type`
- `party.contact_mechanism.language`
- `party.party-delivered_to-stock.location`
- `product.configuration.default_lot_sequence`
- `product.cost_price.revision`
- `product.identifier`
- `product.modify_cost_price`
- `product.modify_cost_price.start`
- `product.price_list`
- `product.price_list.line`
- `product.product.replace`
- `product.product.replace.ask`
- `product.recompute_cost_price.start`
- `res.notification`
- `res.user-company.company`
- `res.user.device`
- `stock.configuration.measurement`
- `stock.location.waste`
- `stock.lot.trace`
- `stock.lots_by_locations`
- `stock.move.add.lots`
- `stock.move.add.lots.start`
- `stock.move.add.lots.start.lot`
- `stock.product_quantities_warehouse.move`
- `stock.product_quantities_warehouse.move.open`
- `stock.product_quantities_warehouse.open`
- `stock.products_by_locations`
- `stock.reporting.inventory`
- `stock.reporting.inventory.context`
- `stock.reporting.inventory.daily`
- `stock.reporting.inventory.move`
- `stock.reporting.inventory.range.context`
- `stock.reporting.inventory.turnover`
- `stock.reporting.inventory.turnover.context`
- `stock.reporting.margin.category`
- `stock.reporting.margin.category.time_series`
- `stock.reporting.margin.category.tree`
- `stock.reporting.margin.context`
- `stock.reporting.margin.main`
- `stock.reporting.margin.main.time_series`
- `stock.reporting.margin.product`
- `stock.reporting.margin.product.time_series`
- `stock.shipment.assign`
- `stock.shipment.assign.partial`
- `stock.shipment.drop`
## nur ergänzt (24) - nur neue Felder dazugekommen, Rest unverändert
- `company.employee`
- `country.country`
- `ir.configuration`
- `ir.export`
- `ir.lang`
- `ir.session`
- `ir.translation.export.result`
- `ir.ui.menu`
- `party.configuration`
- `party.identifier`
- `party.party`
- `product.by_location.context`
- `product.category`
- `product.configuration`
- `production.bom`
- `production.configuration`
- `res.group`
- `res.user.login.attempt`
- `stock.configuration`
- `stock.location`
- `stock.package`
- `stock.product_quantities_warehouse`
- `stock.product_quantities_warehouse.context`
- `stock.products_by_locations.context`
## unverändert (101) - komplett identisch geblieben
- `company.company.config`
- `company.company.config.start`
- `ir.action-res.group`
- `ir.attachment`
- `ir.cache`
- `ir.cron-company.company`
- `ir.date`
- `ir.export.line`
- `ir.model.button-button.reset`
- `ir.model.button-res.group`
- `ir.model.button.click`
- `ir.model.button.rule`
- `ir.model.graph`
- `ir.model.print_model_graph`
- `ir.model.print_model_graph.start`
- `ir.model.workflow_graph`
- `ir.module.activate_upgrade`
- `ir.module.activate_upgrade.done`
- `ir.module.activate_upgrade.start`
- `ir.module.config`
- `ir.module.config_wizard`
- `ir.module.config_wizard.done`
- `ir.module.config_wizard.first`
- `ir.module.config_wizard.other`
- `ir.module.dependency`
- `ir.note`
- `ir.note.read`
- `ir.queue`
- `ir.rule`
- `ir.rule.group-res.group`
- `ir.sequence.strict`
- `ir.sequence.type-res.group`
- `ir.session.wizard`
- `ir.translation.clean`
- `ir.translation.clean.start`
- `ir.translation.clean.succeed`
- `ir.translation.export`
- `ir.translation.export.start`
- `ir.translation.report`
- `ir.translation.set`
- `ir.translation.set.start`
- `ir.translation.set.succeed`
- `ir.translation.update`
- `ir.translation.update.start`
- `ir.trigger.log`
- `ir.ui.menu-res.group`
- `ir.ui.menu.favorite`
- `ir.ui.view.show`
- `ir.ui.view.show.start`
- `ir.ui.view_tree_state`
- `party.category`
- `party.check_vies`
- `party.check_vies.result`
- `party.configuration.party_lang`
- `party.configuration.party_sequence`
- `party.erase`
- `party.erase.ask`
- `party.letter`
- `party.party-party.category`
- `party.party.lang`
- `party.party.location`
- `party.replace`
- `party.replace.ask`
- `product.configuration.default_cost_price_method`
- `product.cost_price_method`
- `product.product-production.bom`
- `product.recompute_cost_price`
- `product.template-product.category`
- `product.template-product.category.all`
- `product.uom`
- `product.uom.category`
- `production.bom.output`
- `production.bom.tree.open`
- `production.bom.tree.open.tree`
- `production.configuration.production_sequence`
- `production.lead_time`
- `production.split`
- `res.user-company.employee`
- `res.user-ir.action`
- `res.user-res.group`
- `res.user.config`
- `res.user.config.start`
- `res.user.email_reset_password`
- `res.user.warning`
- `stock.configuration.location`
- `stock.configuration.sequence`
- `stock.inventory.count`
- `stock.location.lead_time`
- `stock.location.lot.shelf_life`
- `stock.lots_by_location.context`
- `stock.move.split`
- `stock.period`
- `stock.period.cache`
- `stock.period.cache.lot`
- `stock.shipment.in.restocking_list`
- `stock.shipment.internal.report`
- `stock.shipment.out.delivery_note`
- `stock.shipment.out.picking_list`
- `stock.shipment.out.return.restocking_list`
- `stock.shipment.split`
- `stock.shipment.split.start`
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff