Untitled
unknown
plain_text
a year ago
9.2 kB
6
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