You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
6.7 KiB
130 lines
6.7 KiB
# © 2019 Le Filament (<http://www.le-filament.com>)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo import models, fields, api
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = "sale.order"
|
|
|
|
@api.one
|
|
def _compute_website_order_line(self):
|
|
self.website_order_line = self.order_line.filtered(
|
|
lambda t: not t.pack_parent_line_id.exists(),
|
|
)
|
|
|
|
# @api.multi
|
|
# def action_invoice_create(self, grouped=False, final=False):
|
|
# """
|
|
# Create the invoice associated to the SO.
|
|
# :param grouped: if True, invoices are grouped by SO id. If False, invoices are grouped by
|
|
# (partner_invoice_id, currency)
|
|
# :param final: if True, refunds will be generated if necessary
|
|
# :returns: list of created invoices
|
|
# """
|
|
# res = super(SaleOrder, self).action_invoice_create(grouped, final)
|
|
# inv_obj = self.env['account.invoice']
|
|
# precision = self.env['decimal.precision'].precision_get('Product Unit of Measure')
|
|
# invoices = {}
|
|
# references = {}
|
|
# invoices_origin = {}
|
|
# invoices_name = {}
|
|
|
|
# for order in self:
|
|
# group_key = order.id if grouped else (order.partner_invoice_id.id, order.currency_id.id)
|
|
|
|
# # We only want to create sections that have at least one invoiceable line
|
|
# pending_section = None
|
|
|
|
# for line in order.order_line:
|
|
# print("---line---", str(line))
|
|
# if line.display_type == 'line_section':
|
|
# pending_section = line
|
|
# continue
|
|
# if group_key not in invoices:
|
|
# inv_data = order._prepare_invoice()
|
|
# invoice = inv_obj.create(inv_data)
|
|
# references[invoice] = order
|
|
# invoices[group_key] = invoice
|
|
# invoices_origin[group_key] = [invoice.origin]
|
|
# invoices_name[group_key] = [invoice.name]
|
|
# elif group_key in invoices:
|
|
# if order.name not in invoices_origin[group_key]:
|
|
# invoices_origin[group_key].append(order.name)
|
|
# if order.client_order_ref and order.client_order_ref not in invoices_name[group_key]:
|
|
# invoices_name[group_key].append(order.client_order_ref)
|
|
|
|
# if line.qty_to_invoice > 0 or (line.qty_to_invoice < 0 and final):
|
|
# print("---invoice lune create---", str(line))
|
|
# if pending_section:
|
|
# pending_section.invoice_line_create(invoices[group_key].id, pending_section.qty_to_invoice)
|
|
# pending_section = None
|
|
# line.invoice_line_create(invoices[group_key].id, line.qty_to_invoice)
|
|
|
|
# if references.get(invoices.get(group_key)):
|
|
# if order not in references[invoices[group_key]]:
|
|
# references[invoices[group_key]] |= order
|
|
|
|
# for group_key in invoices:
|
|
# invoices[group_key].write({'name': ', '.join(invoices_name[group_key]),
|
|
# 'origin': ', '.join(invoices_origin[group_key])})
|
|
# sale_orders = references[invoices[group_key]]
|
|
# if len(sale_orders) == 1:
|
|
# invoices[group_key].reference = sale_orders.reference
|
|
|
|
# # if not invoices:
|
|
# # raise UserError(_('There is no invoiceable line. If a product has a Delivered quantities invoicing policy, please make sure that a quantity has been delivered.'))
|
|
|
|
# for invoice in invoices.values():
|
|
# print("--- invoice ---", str(invoice))
|
|
# invoice.compute_taxes()
|
|
# if not invoice.invoice_line_ids:
|
|
# raise UserError(_('There is no invoiceable line. If a product has a Delivered quantities invoicing policy, please make sure that a quantity has been delivered.'))
|
|
# # If invoice is negative, do a refund invoice instead
|
|
# if invoice.amount_total < 0:
|
|
# invoice.type = 'out_refund'
|
|
# for line in invoice.invoice_line_ids:
|
|
# line.quantity = -line.quantity
|
|
# # Use additional field helper function (for account extensions)
|
|
# for line in invoice.invoice_line_ids:
|
|
# line._set_additional_fields(invoice)
|
|
# # Necessary to force computation of taxes. In account_invoice, they are triggered
|
|
# # by onchanges, which are not triggered when doing a create.
|
|
# invoice.compute_taxes()
|
|
# # Idem for partner
|
|
# so_payment_term_id = invoice.payment_term_id.id
|
|
# invoice._onchange_partner_id()
|
|
# # To keep the payment terms set on the SO
|
|
# invoice.payment_term_id = so_payment_term_id
|
|
# invoice.message_post_with_view('mail.message_origin_link',
|
|
# values={'self': invoice, 'origin': references[invoice]},
|
|
# subtype_id=self.env.ref('mail.mt_note').id)
|
|
# return [inv.id for inv in invoices.values()]
|
|
|
|
|
|
class SaleOrderLine(models.Model):
|
|
_inherit = "sale.order.line"
|
|
|
|
@api.multi
|
|
def invoice_line_create(self, invoice_id, qty):
|
|
print("---- TEST ----", str(invoice_id))
|
|
invoice_lines = super(SaleOrderLine, self).invoice_line_create(
|
|
invoice_id, qty)
|
|
print("---- invoice_lines ----", str(invoice_lines))
|
|
return invoice_lines
|
|
# invoice_lines = self.env['account.invoice.line']
|
|
# for line in self:
|
|
# # Check if line has a pack_parent_line_id
|
|
# print("---- self.pack_parent_line_id.exists() -----", str(self.pack_parent_line_id.exists()))
|
|
# if self.pack_parent_line_id.exists():
|
|
# # Get the ref of parent pack
|
|
# sale_id_ref = self.env['sale.order.line'].search([('id', '=', self.pack_parent_line_id.id)])
|
|
# print("--- sale_id_ref ---", str(sale_id_ref))
|
|
# print("--- sale_id_ref.product_id.product_tmpl_id.pack_type ---", str(sale_id_ref.product_id.product_tmpl_id.pack_type))
|
|
# print("--- sale_id_ref.product_id.product_tmpl_id.pack_component_price ---", str(sale_id_ref.product_id.product_tmpl_id.pack_component_price))
|
|
# # Check if product is Pack detailed and option Totalized
|
|
# if sale_id_ref.product_id.product_tmpl_id.pack_type == 'detailed' and sale_id_ref.product_id.product_tmpl_id.pack_component_price == 'totalized':
|
|
# return invoice_lines
|
|
# invoice_lines = super(SaleOrderLine, self).invoice_line_create(
|
|
# invoice_id, qty)
|
|
# return invoice_lines
|