TIP: You can type at any time to perform a new search.
Repairs
repair · odoo/odoo
- Repository
- odoo/odoo · module folder
- Module version
- 1.0
- Category
- Supply Chain/Inventory
- Folder size
- 3.77 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- None
- Last tracking update
- 2026-08-15 22:44:18
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Xavier Morel, Raphael Collet, Christophe Simonis, Thibault Delavallée, Odoo Translation Bot, GitHub, Arnold Moyaux, Julien Castiaux, Victor Feyens, William Henrotin, svs-odoo, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, JF Aubert, Renaud Thiry, François Honoré, Louis Wicket (wil), Adrien Widart (awt), Victor Piryns (pivi), Djamel Touati, Pieter Claeys (clpi), clesgow, Dylan Kiss (dyki), Anita (anko), lase@odoo.com, Quentin Wolfs, reka-odoo, kcv-odoo, Louis Gobert, nihp-odoo, Agustin Castro Bugallo, manv-afk, yagp-odoo, Mohammad Abdulmoneim, Mathias Mathy (MAMA), pkgu-odoo, Mohammad Abdulmoneim (abdu), Iván Todorovich, djameltouati, Shrey Mehta, plha-odoo, Krzysztof Magusiak (krma), Robin Engels (roen), pajo, kinhosz, Elijah Tay (elct), Lulu Grimalkin (lugr), adip-odoo, srap-odoo, saurabh, sako-odoo, lase, chpa-odoo, Youssef
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- fieldservice_repair, l10n_din5008_repair, maintenance_request_repair, mgmtsystem_nonconformity_repair, mrp_repair, mrp_repair_order, mrp_subcontracting_repair, pos_repair, purchase_repair, repair_security
- Description
The aim is to have a complete module to manage all products repairs. ==================================================================== The following topics are covered by this module: ------------------------------------------------------ * Add/remove products in the reparation * Impact for stocks * Warranty concept * Repair quotation report * Notes for the technician and for the final customer
Code Analysis ⓘ
Views touched (20)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_view_search_catalog |
product.view.search.catalog.inherit.repair | product.product | search | Inherits product.product_view_search_catalog |
repair_order_view_activity |
repair.order.view.activity | repair.order | activity | New |
repair_view_picking_form |
stock.picking.form.inherit.repair | stock.picking | form | Inherits stock.view_picking_form |
repair_view_picking_type_form |
stock.picking.type.inherit.repair | stock.picking.type | form | Inherits stock.view_picking_type_form |
report_repairorder |
report_repairorder | ir.ui.view | qweb | New |
report_repairorder2 |
report_repairorder2 | ir.ui.view | qweb | New |
stock_production_lot_view_form |
stock.production.lot.view.form | stock.lot | form | Inherits stock.view_production_lot_form |
stock_repair_type_kanban |
stock.picking.type.kanban | stock.picking.type | kanban | Inherits stock.stock_picking_type_kanban |
stock_warn_insufficient_qty_repair_form_view |
stock.warn.insufficient.qty.repair | stock.warn.insufficient.qty.repair | form | Inherits stock.stock_warn_insufficient_qty_form_view |
view_product_template_form_inherit_repair |
product.template.form.inherit.repair | product.template | form | Inherits sale.product_template_form_view |
view_repair_graph |
repair.graph | repair.order | graph | New |
view_repair_kanban |
repair.kanban | repair.order | kanban | New |
view_repair_order_form |
repair.form | repair.order | form | New |
view_repair_order_form_filter |
repair.select | repair.order | search | New |
view_repair_order_tree |
repair.list | repair.order | list | New |
view_repair_pivot |
repair.pivot | repair.order | pivot | New |
view_repair_tag_search |
repair.tag.search | repair.tags | search | New |
view_repair_tag_tree |
repair.tag.list | repair.tags | list | New |
view_sale_order_form_inherit_repair |
sale.order.form.inherit.repair | sale.order | form | Inherits sale.view_order_form |
view_warehouse_inherit_repair |
Stock Warehouse Inherit Repair | stock.warehouse | Inherits stock.view_warehouse |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (16)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (1)
-
product_catalog_product_is_in_repairBooleancompute='_compute_product_is_in_repair'search='_search_product_is_in_repair'
No public methods.
New fields (1)
-
service_trackingSelectionondelete={'repair': 'set default'}selection_add=[('repair', 'Repair Order')]
No public methods.
New fields (43)
-
allowed_lot_idsOne2many → stock.lotcompute='_compute_allowed_lot_ids' args: 'stock.lot' -
allowed_uom_idsMany2many → uom.uomcompute='_compute_allowed_uom_ids' args: 'uom.uom' -
company_idMany2one → res.companydefault=<expr>index=Truereadonly=Truerequired=True args: 'res.company', 'Company' -
has_uncomplete_movesBooleancompute='_compute_has_uncomplete_moves' -
internal_notesHtmlargs: 'Internal Notes' -
is_parts_availableBooleancompute='_compute_availability_boolean'default=Falsestore=True args: 'All Parts are available' -
is_parts_lateBooleancompute='_compute_availability_boolean'default=Falsestore=True args: 'Any Part is late' -
location_dest_idMany2one → stock.locationcheck_company=Truedepends=['picking_type_id']help='This is the location where the repaired product is located.'index=Trueprecompute=Truereadonly=Truerelated='picking_type_id.default_location_dest_id'required=Truestore=True args: 'stock.location', 'Added Parts Destination Location' -
location_idMany2one → stock.locationcheck_company=Truecompute='_compute_location_id'help='This is the location where the components of product to repair is located.'index=Trueprecompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Component Source Location' -
lot_idMany2one → stock.lotcheck_company=Truecompute='compute_lot_id'domain="[('id', 'in', allowed_lot_ids)]"help='Products repaired are all belonging to this lot'store=True args: 'stock.lot', 'Lot/Serial' -
move_idMany2one → stock.movecheck_company=Truecopy=Falsereadonly=Truetracking=True args: 'stock.move', 'Inventory Move' -
move_idsOne2many → stock.movecheck_company=Truecopy=Truedomain=[('repair_line_type', '!=', False)] args: 'stock.move', 'repair_id', 'Parts' -
nameCharcopy=Falsedefault=<expr>index='trigram'readonly=Truerequired=True args: 'Repair Reference' -
partner_idMany2one → res.partnerchange_default=Truecheck_company=Truecompute='_compute_partner_id'help='Choose partner for whom the order will be invoiced and delivered. You can find a partner by its Name, TIN, Email or Internal Reference.'index=Truereadonly=Falsestore=True args: 'res.partner', 'Customer' -
parts_availabilityCharcompute='_compute_parts_availability'help="Latest parts availability status for this RO. If green, then the RO's readiness status is ready."string='Component Status' -
parts_availability_stateSelectioncompute='_compute_parts_availability' args: [('available', 'Available'), ('expected', 'Expected'), ('late', 'Late')] -
parts_location_idMany2one → stock.locationcheck_company=Truedepends=['picking_type_id']help='This is the location where the repair parts are located.'index=Trueprecompute=Truereadonly=Truerelated='picking_type_id.default_remove_location_dest_id'required=Truestore=True args: 'stock.location', 'Removed Parts Destination Location' -
picking_idMany2one → stock.pickingcheck_company=Truecopy=Falsedomain="[('return_id', '!=', False), ('product_id', '=?', product_id)]"help='Transfer from which the product to be repaired is picked'index='btree_not_null' args: 'stock.picking', 'Transfer' -
picking_product_idMany2onerelated='picking_id.product_id' -
picking_product_idsOne2many → product.productcompute='_compute_picking_product_ids' args: 'product.product' -
picking_type_idMany2one → stock.picking.typecheck_company=Truecompute='_compute_picking_type_id'copy=Truedefault=_default_picking_type_iddomain="[('code', '=', 'repair_operation'), ('company_id', '=', company_id)]"index=Trueprecompute=Truereadonly=Falserequired=Truestore=True args: 'stock.picking.type', 'Operation Type' -
picking_type_visibleBooleancompute='_compute_picking_type_visible' -
prioritySelectiondefault='0'string='Priority' args: [('0', 'Normal'), ('1', 'Urgent')] -
product_idMany2one → product.productcheck_company=Truedomain="[('type', '=', 'consu'), '|', ('company_id', '=', company_id), ('company_id', '=', False), '|', ('id', 'in', picking_product_ids), ('id', '=?', picking_product_id)]"string='Product to Repair' args: 'product.product' -
product_location_dest_idMany2one → stock.locationcheck_company=Truecompute='_compute_product_location_dest_id'help='This is the location where the repaired product is located.'index=Trueprecompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Product Destination Location' -
product_location_src_idMany2one → stock.locationcheck_company=Truecompute='_compute_product_location_src_id'help='This is the location where the product to repair is located.'index=Trueprecompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Product Source Location' -
product_qtyFloatcompute='_compute_product_qty'default=1.0digits='Product Unit'readonly=Falsestore=True args: 'Product Quantity' -
product_uomMany2one → uom.uomcompute='compute_product_uom'domain="[('id', 'in', allowed_uom_ids)]"precompute=Truereadonly=Falsestore=True args: 'uom.uom', 'Unit' -
recycle_location_idMany2one → stock.locationcheck_company=Truecompute='_compute_recycle_location_id'help='This is the location where the repair parts are located.'index=Trueprecompute=Truereadonly=Falserequired=Truestore=True args: 'stock.location', 'Recycled Parts Destination Location' -
reference_idsMany2many → stock.referencecopy=Falsestring='References' args: 'stock.reference', 'stock_reference_repair_rel', 'repair_id', 'reference_id' -
repair_propertiesPropertiescopy=Truedefinition='picking_type_id.repair_properties_definition' args: 'Properties' -
repair_requestTexthelp='Sale Order Line Description.'related='sale_order_line_id.name'string='Repair Request' -
reserve_visibleBooleancompute='_compute_unreserve_visible'help='Technical field to check when we can reserve quantities' args: 'Allowed to Reserve Production' -
sale_order_idMany2one → sale.ordercheck_company=Truecopy=Falsehelp='Sale Order from which the Repair Order comes from.'index='btree_not_null'readonly=True args: 'sale.order', 'Sale Order' -
sale_order_line_idMany2one → sale.order.linecheck_company=Truecopy=Falsehelp='Sale Order Line from which the Repair Order comes from.'readonly=True args: 'sale.order.line' -
schedule_dateDatetimecopy=Falsedefault=fields.Datetime.nowindex=Truerequired=True args: 'Scheduled Date' -
search_date_categorySelectionreadonly=Truesearch='_search_date_category'store=Falsestring='Date Category' args: [('before', 'Before'), ('yesterday', 'Yesterday'), ('today', 'Today'), ('day_1', 'Tomorrow'), ('day_2', 'The day after tomorrow'), ('after', 'After')] -
stateSelectioncopy=Falsedefault='draft'help="* The 'New' status is used when a user is encoding a new and unconfirmed repair order.\n* The 'Confirmed' status is used when a user confirms the repair order.\n* The 'Under Repair' status is used when the repair is ongoing.\n* The 'Repaired' status is set when repairing is completed.\n* The 'Cancelled' status is used when user cancel repair order."index=Truereadonly=Truestring='Status'tracking=True args: [('draft', 'New'), ('confirmed', 'Confirmed'), ('under_repair', 'Under Repair'), ('done', 'Repaired'), ('cancel', 'Cancelled')] -
tag_idsMany2many → repair.tagsstring='Tags' args: 'repair.tags' -
trackingSelectionreadonly=Falserelated='product_id.tracking'string='Product Tracking' -
under_warrantyBooleanhelp='If ticked, the sales price will be set to 0 for all products transferred from the repair order.' args: 'Under Warranty' -
unreserve_visibleBooleancompute='_compute_unreserve_visible'help='Technical field to check when we can unreserve' args: 'Allowed to Unreserve Production' -
user_idMany2one → res.userscheck_company=Truedefault=<expr>string='Responsible' args: 'res.users'
-
action_add_from_catalog(self) -
action_assign(self) -
action_create_sale_order(self) -
action_generate_serial(self) -
action_repair_cancel(self) -
action_repair_cancel_draft(self) -
action_repair_done(self)Creates stock move for final product of repair order. Writes move_id and move_ids state to 'done'. Writes repair order state to 'Repaired'. @return: True -
action_repair_end(self)Checks before action_repair_done. @return: True -
action_repair_start(self)Writes repair order state to 'Under Repair' -
action_unreserve(self) -
action_validate(self) -
action_view_sale_order(self) -
compute_lot_id(self)@api.depends('product_id', 'lot_id', 'lot_id.product_id', 'picking_id') -
compute_product_uom(self)@api.depends('product_id', 'product_id.uom_id') -
create(self, vals_list)@api.model_create_multi -
default_get(self, fields)@api.model -
message_post(self, **kwargs) -
onchange_product_uom(self)@api.onchange('product_uom') -
print_repair_order(self) -
write(self, vals)
New fields (2)
-
colorIntegerdefault=_get_default_colorstring='Color Index' -
nameCharrequired=True args: 'Tag Name'
No public methods.
New fields (2)
-
repair_countIntegercompute='_compute_repair_count'groups='stock.group_stock_user' args: 'Repair Order(s)' -
repair_order_idsOne2many → repair.ordercomodel_name='repair.order'groups='stock.group_stock_user'inverse_name='sale_order_id'string='Repair Order'
-
action_show_repair(self)
New fields (0)
No new fields.
Public methods (3)-
create(self, vals_list)@api.model_create_multi -
has_valued_move_ids(self) -
write(self, vals)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (4)
-
in_repair_countIntegercompute='_compute_in_repair_count' args: 'In repair count' -
repair_line_idsMany2many → repair.ordercompute='_compute_repair_line_ids'string='Repair Orders' args: 'repair.order' -
repair_part_countIntegercompute='_compute_repair_line_ids' args: 'Repair part count' -
repaired_countIntegercompute='_compute_repaired_count' args: 'Repaired count'
-
action_lot_open_repairs(self) -
action_view_ro(self)
New fields (2)
-
repair_idMany2one → repair.ordercheck_company=Truecopy=Falseindex='btree_not_null'ondelete='cascade' args: 'repair.order' -
repair_line_typeSelectionindex=Truestore=True args: [('add', 'Add'), ('remove', 'Remove'), ('recycle', 'Recycle')], 'Type'
-
action_add_from_catalog_repair(self) -
action_show_details(self) -
copy_data(self, default=None) -
create(self, vals_list)@api.model_create_multi -
unlink(self) -
write(self, vals)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
nbr_repairsIntegercompute='_compute_nbr_repairs' args: 'Number of repairs linked to this picking' -
repair_idsOne2many → repair.orderargs: 'repair.order', 'picking_id'
-
action_repair_return(self) -
action_view_repairs(self) -
get_action_click_graph(self)@api.model
New fields (10)
-
codeSelectionondelete={'repair_operation': 'cascade'}selection_add=[('repair_operation', 'Repair')] -
count_repair_confirmedIntegercompute='_compute_count_repair'string='Number of Repair Orders Confirmed' -
count_repair_lateIntegercompute='_compute_count_repair'string='Number of Late Repair Orders' -
count_repair_readyIntegercompute='_compute_count_repair'string='Number of Repair Orders to Process' -
count_repair_under_repairIntegercompute='_compute_count_repair'string='Number of Repair Orders Under Repair' -
default_product_location_dest_idMany2one → stock.locationcheck_company=Truecompute='_compute_default_product_location_id'help='This is the default destination location for the product to be repaired in repair orders with this operation type.'precompute=Truereadonly=Falsestore=True args: 'stock.location', 'Product Destination Location' -
default_product_location_src_idMany2one → stock.locationcheck_company=Truecompute='_compute_default_product_location_id'help='This is the default source location for the product to be repaired in repair orders with this operation type.'precompute=Truereadonly=Falsestore=True args: 'stock.location', 'Product Source Location' -
default_recycle_location_dest_idMany2one → stock.locationcheck_company=Truecompute='_compute_default_recycle_location_dest_id'help='This is the default recycle destination location when you create a repair order with this operation type.'precompute=Truereadonly=Falsestore=True args: 'stock.location', 'Recycle Destination Location' -
default_remove_location_dest_idMany2one → stock.locationcheck_company=Truecompute='_compute_default_remove_location_dest_id'help='This is the default remove destination location when you create a repair order with this operation type.'precompute=Truereadonly=Falsestore=True args: 'stock.location', 'Remove Destination Location' -
repair_properties_definitionPropertiesDefinitionargs: 'Repair Properties'
-
get_repair_stock_picking_action_picking_type(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
repair_mto_pull_idMany2one → stock.rulecopy=False args: 'stock.rule', 'Repair MTO Rule' -
repair_type_idMany2one → stock.picking.typecheck_company=Truecopy=False args: 'stock.picking.type', 'Repair Operation Type'
No public methods.
New fields (1)
-
repair_idMany2one → repair.orderstring='Repair' args: 'repair.order'
-
action_done(self)
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…