55 lines
1.9 KiB
Python

from odoo import models, fields, api
class DineRecipe(models.Model):
_name = 'dine360.recipe'
_description = 'Restaurant Dish Recipe'
product_tmpl_id = fields.Many2one(
'product.template',
string='Dish',
required=True,
ondelete='cascade',
domain=[('type', '=', 'consu')], # Usually dishes are consumables or service
help="The finished dish that is sold to the customer."
)
ingredient_ids = fields.One2many(
'dine360.recipe.line',
'recipe_id',
string='Ingredients'
)
total_cost = fields.Float(
string='Total Ingredient Cost',
compute='_compute_total_cost',
store=True
)
@api.depends('ingredient_ids.subtotal_cost')
def _compute_total_cost(self):
for recipe in self:
recipe.total_cost = sum(recipe.ingredient_ids.mapped('subtotal_cost'))
class DineRecipeLine(models.Model):
_name = 'dine360.recipe.line'
_description = 'Recipe Ingredient Line'
recipe_id = fields.Many2one('dine360.recipe', string='Recipe', ondelete='cascade')
product_id = fields.Many2one(
'product.product',
string='Ingredient',
required=True,
domain=[('type', '=', 'product')], # Ingredients must be storable products
help="Raw materials like Rice, Chicken, Oil, etc."
)
quantity = fields.Float(string='Quantity', default=1.0, required=True)
uom_id = fields.Many2one('uom.uom', string='Unit of Measure', related='product_id.uom_id', readonly=True)
cost_price = fields.Float(string='Unit Cost', related='product_id.standard_price', readonly=True)
subtotal_cost = fields.Float(string='Subtotal Cost', compute='_compute_subtotal_cost', store=True)
@api.depends('quantity', 'product_id.standard_price')
def _compute_subtotal_cost(self):
for line in self:
line.subtotal_cost = line.quantity * line.product_id.standard_price