Untitled
unknown
plain_text
6 months ago
9.2 kB
3
Indexable
from odoo import models, fields, api, SUPERUSER_ID class SaleOrderInherit(models.Model): _inherit = "sale.order" members = fields.Many2many('res.users', string='Members', compute='_compute_members') members_ = fields.Many2many('res.users',string='Internal Stakeholders') project_id=fields.Many2one('project.project') @api.depends('project_id', 'project_id.sale_order_id','project_id.members') def _compute_members(self): for order in self: project = self.env['project.project'].search([('sale_order_id', '=', order.id)], limit=1) if project: order.members = project.members order.write({'members_': order.members}) else: order.members = False invoice_status_ = fields.Selection([ ('to invoice', 'To Invoice'), ('invoiced', 'Fully Invoiced'), ('partial', 'Partially Invoiced')], string='Invoice Status', compute='_compute_invoice_status', readonly=True) inv_status = fields.Selection([ ('to invoice', 'To Invoice'), ('invoiced', 'Fully Invoiced'), ('partial', 'Partially Invoiced')], string='Invoice Status') @api.depends('state', 'amount_total', 'invoice_ids.state', 'invoice_ids.amount_total') def _compute_invoice_status(self): # for order in self: # # If there are no invoices or any invoice is still in draft state # if not order.invoice_ids or any(inv.state == 'draft' for inv in order.invoice_ids): # order.invoice_status_ = 'to invoice' # else: # total_invoiced = sum(inv.amount_total for inv in order.invoice_ids if inv.state == 'posted') # # # If there are invoices in both posted and draft states, set status to 'partial' # if any(inv.state == 'draft' for inv in order.invoice_ids) and total_invoiced < order.amount_total: # order.invoice_status_ = 'partial' # # # All invoices are posted, check if fully invoiced or partially invoiced # elif total_invoiced >= order.amount_total: # order.invoice_status_ = 'invoiced' # else: # order.invoice_status_ = 'partial' # # Write the computed status to inv_status field # order.write({'inv_status': order.invoice_status_}) for order in self: total_invoiced = sum(inv.amount_total for inv in order.invoice_ids if inv.state == 'posted') draft_invoices_exist = any(inv.state == 'draft' for inv in order.invoice_ids) posted_invoices_exist = any(inv.state == 'posted' for inv in order.invoice_ids) if not order.invoice_ids or draft_invoices_exist: order.invoice_status_ = 'to invoice' elif draft_invoices_exist and posted_invoices_exist or total_invoiced < order.amount_total: order.invoice_status_ = 'partial' elif posted_invoices_exist and total_invoiced >= order.amount_total: order.invoice_status_ = 'invoiced' else: order.invoice_status_ = 'partial' order.write({'inv_status': order.invoice_status_}) class SaleOrderLineInherit(models.Model): _inherit = "sale.order.line" invoice_status_ = fields.Selection([ ('to invoice', 'To Invoice'), ('invoiced', 'Fully Invoiced'), ('partial', 'Partially Invoiced')], string='Invoice Status', compute='_compute_invoice_status', readonly=True) inv_status = fields.Selection([ ('to invoice', 'To Invoice'), ('invoiced', 'Fully Invoiced'), ('partial', 'Partially Invoiced')], string='Invoice Status') @api.depends('state', 'qty_delivered', 'qty_to_invoice', 'qty_invoiced', 'order_id.amount_total', 'order_id.invoice_ids.state', 'order_id.invoice_ids.amount_total') def _compute_invoice_status(self): # for line in self: # order = line.order_id # # Check if no invoice or any invoice in draft state # if not order.invoice_ids or any(inv.state == 'draft' for inv in order.invoice_ids): # line.invoice_status_ = 'to invoice' # else: # total_invoiced = sum(inv.amount_total for inv in order.invoice_ids) # # Check if the total invoiced is less than the sale order total # if total_invoiced <= order.amount_total: # line.invoice_status_ = 'partial' # elif total_invoiced >= order.amount_total: # line.invoice_status_ = 'invoiced' for line in self: order = line.order_id # If there are no invoices or any invoice is still in draft state if not order.invoice_ids or any(inv.state == 'draft' for inv in order.invoice_ids): order.invoice_status_ = 'to invoice' else: total_invoiced = sum(inv.amount_total for inv in order.invoice_ids if inv.state == 'posted') # If there are invoices in both posted and draft states, set status to 'partial' if any(inv.state == 'draft' for inv in order.invoice_ids) and total_invoiced < order.amount_total: order.invoice_status_ = 'partial' # All invoices are posted, check if fully invoiced or partially invoiced elif total_invoiced >= order.amount_total: order.invoice_status_ = 'invoiced' else: order.invoice_status_ = 'partial' # Write the computed status to inv_status field order.write({'inv_status': line.invoice_status_}) # @api.depends('partner_id') # def _compute_members(self): # for order in self: # project = self.env['project.project'].search([('partner_id', '=', order.partner_id.id)]) # if project: # order.members = project.members # order.write({'members_' : order.members}) # else: # order.members = False # @api.depends('project_id') # def _compute_members(self): # print('test++++++++++++++++') # for order in self: # if order.project_id: # order.members_ = order.project_id.members # order.write({'members_' : order.members}) # else: # order.members = False # invoice_status_ = fields.Selection([ # ('to invoice', 'To Invoice'), # ('invoiced', 'Fully Invoiced'), # ('partial', 'Partially Invoiced')] ,string='Invoice Status', readonly=True) #compute='_compute_invoice_status', # # # inv_status = fields.Selection([ # ('to invoice', 'To Invoice'), # ('invoiced', 'Fully Invoiced'), # ('partial', 'Partially Invoiced')] ,string='Invoice Status') # # # @api.depends('state', 'amount_total', 'invoice_ids.state', 'invoice_ids.amount_total') # def _compute_invoice_status(self): # for order in self: # if order.invoice_ids: # total_invoiced = sum(inv.amount_total for inv in order.invoice_ids if inv.state == 'posted') # if total_invoiced < order.amount_total: # order.invoice_status_ = 'partial' # elif total_invoiced >= order.amount_total: # order.invoice_status_ = 'invoiced' # else: # order.invoice_status_ = 'to invoice' # # order.write({'inv_status' : order.invoice_status_}) # # # # class SaleOrderLineInherit(models.Model): # _inherit = "sale.order.line" # # # invoice_status_ = fields.Selection([ # ('to invoice', 'To Invoice'), # ('invoiced', 'Fully Invoiced'), # ('partial', 'Partially Invoiced')] ,string='Invoice Status', compute='_compute_invoice_status', readonly=True) # # inv_status = fields.Selection([ # ('to invoice', 'To Invoice'), # ('invoiced', 'Fully Invoiced'), # ('partial', 'Partially Invoiced')] ,string='Invoice Status') # # # @api.depends('state', 'qty_delivered', 'qty_to_invoice', 'qty_invoiced', 'order_id.amount_total', 'order_id.invoice_ids.state', 'order_id.invoice_ids.amount_total') # def _compute_invoice_status(self): # for line in self: # order = line.order_id # if order.invoice_ids: # total_invoiced = sum(inv.amount_total for inv in order.invoice_ids if inv.state == 'posted') # if total_invoiced < order.amount_total: # line.invoice_status_ = 'partial' # elif total_invoiced >= order.amount_total: # line.invoice_status_ = 'invoiced' # else: # line.invoice_status_ = 'to invoice' # # order.write({'inv_status' : order.invoice_status_})
Editor is loading...
Leave a Comment