diff --git a/product_kits/__init__.py b/product_kits/__init__.py new file mode 100644 index 0000000000..9b4296142f --- /dev/null +++ b/product_kits/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizard diff --git a/product_kits/__manifest__.py b/product_kits/__manifest__.py new file mode 100644 index 0000000000..66db49de79 --- /dev/null +++ b/product_kits/__manifest__.py @@ -0,0 +1,19 @@ +{ + 'name': 'Product Kits', + 'version': '1.0', + 'depends': ['base', 'sale_management'], + 'author': 'Aryan Donga (ardo)', + 'description': 'Simple module to create and sell product kits', + 'application': False, + 'installable': True, + 'license': 'LGPL-3', + 'data': [ + 'security/ir.model.access.csv', + 'report/sale_order_report.xml', + 'report/report_invoice.xml', + 'report/sale_order_portal_view.xml', + 'views/product_template_views.xml', + 'wizard/product_kit_wizard_views.xml', + 'views/sale_order_views.xml' + ], +} diff --git a/product_kits/models/__init__.py b/product_kits/models/__init__.py new file mode 100644 index 0000000000..8f2f8c0cbc --- /dev/null +++ b/product_kits/models/__init__.py @@ -0,0 +1,3 @@ +from . import product_template +from . import sale_order_line +from . import sale_order diff --git a/product_kits/models/product_template.py b/product_kits/models/product_template.py new file mode 100644 index 0000000000..faea924ab0 --- /dev/null +++ b/product_kits/models/product_template.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + is_kit = fields.Boolean(string='Is Kit', default=False) + sub_product_ids = fields.Many2many('product.product', string='Sub Products') diff --git a/product_kits/models/sale_order.py b/product_kits/models/sale_order.py new file mode 100644 index 0000000000..393067814c --- /dev/null +++ b/product_kits/models/sale_order.py @@ -0,0 +1,7 @@ +from odoo import fields, models + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + print_in_report = fields.Boolean(string='Print in report') diff --git a/product_kits/models/sale_order_line.py b/product_kits/models/sale_order_line.py new file mode 100644 index 0000000000..03323caed7 --- /dev/null +++ b/product_kits/models/sale_order_line.py @@ -0,0 +1,30 @@ +from odoo import api, fields, models + + +class SaleOrderLine(models.Model): + _inherit = 'sale.order.line' + + is_kit = fields.Boolean(compute='_compute_is_kit', store=True) + parent_kit_line_id = fields.Many2one( + comodel_name='sale.order.line', + string='Parent Kit Line', + ondelete='cascade', + index=True, + ) + + # Optional fields for sub-products + sub_product_line_ids = fields.One2many( + comodel_name='sale.order.line', + inverse_name='parent_kit_line_id', + string='Sub Product Lines', + copy=True, + ) + custom_sub_product_price = fields.Float( + string='Custom Sub Product Price', + help='Overridden price of the sub product line.', + ) + + @api.depends('product_id') + def _compute_is_kit(self): + for line in self: + line.is_kit = line.product_id.is_kit if line.product_id else False diff --git a/product_kits/report/report_invoice.xml b/product_kits/report/report_invoice.xml new file mode 100644 index 0000000000..a17973fd97 --- /dev/null +++ b/product_kits/report/report_invoice.xml @@ -0,0 +1,11 @@ + + + + diff --git a/product_kits/report/sale_order_portal_view.xml b/product_kits/report/sale_order_portal_view.xml new file mode 100644 index 0000000000..5adb8b77e0 --- /dev/null +++ b/product_kits/report/sale_order_portal_view.xml @@ -0,0 +1,10 @@ + + + + diff --git a/product_kits/report/sale_order_report.xml b/product_kits/report/sale_order_report.xml new file mode 100644 index 0000000000..1268f13bf8 --- /dev/null +++ b/product_kits/report/sale_order_report.xml @@ -0,0 +1,10 @@ + + + + diff --git a/product_kits/security/ir.model.access.csv b/product_kits/security/ir.model.access.csv new file mode 100644 index 0000000000..df4195f38e --- /dev/null +++ b/product_kits/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +product_kits.access_product_kit_wizard,access_product_kit_wizard,product_kits.model_product_kit_wizard,base.group_user,1,1,1,0 +product_kits.access_product_kit_wizard_line,access_product_kit_wizard_line,product_kits.model_product_kit_wizard_line,base.group_user,1,1,1,0 diff --git a/product_kits/views/product_template_views.xml b/product_kits/views/product_template_views.xml new file mode 100644 index 0000000000..75e3b2fdbe --- /dev/null +++ b/product_kits/views/product_template_views.xml @@ -0,0 +1,15 @@ + + + + product.template.form.view.kits + product.template + + + + + + + + + diff --git a/product_kits/views/sale_order_views.xml b/product_kits/views/sale_order_views.xml new file mode 100644 index 0000000000..0698ed1f5d --- /dev/null +++ b/product_kits/views/sale_order_views.xml @@ -0,0 +1,33 @@ + + + + sale.order.form.view.kits + sale.order + + + +