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.
 
 
 
 

62 lines
2.3 KiB

# Copyright (C) 2017 - Today: GRAP (http://www.grap.coop)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import _, api, models
class SaleOrder(models.Model):
_inherit = "sale.order"
@api.model
def _prepare_from_pos(self, order_data):
PosSession = self.env["pos.session"]
session = PosSession.browse(order_data["pos_session_id"])
return {
"partner_id": order_data["partner_id"],
"origin": _("Point of Sale %s") % (session.name),
"client_order_ref": order_data["name"],
"user_id": order_data["user_id"],
"pricelist_id": order_data["pricelist_id"],
"fiscal_position_id": order_data["fiscal_position_id"],
}
@api.model
def create_order_from_pos(self, order_data, action):
SaleOrderLine = self.env["sale.order.line"]
# Create Draft Sale order
order_vals = self._prepare_from_pos(order_data)
sale_order = self.create(order_vals.copy())
sale_order.onchange_partner_id()
# we rewrite data, because onchange could alter some
# custom data (like pricelist)
sale_order.write(order_vals)
# create Sale order lines
for order_line_data in order_data["lines"]:
# Create Sale order lines
order_line_vals = SaleOrderLine._prepare_from_pos(
sale_order, order_line_data[2])
sale_order_line = SaleOrderLine.create(
order_line_vals.copy())
sale_order_line.product_id_change()
# we rewrite data, because onchange could alter some
# data (like quantity, or price)
sale_order_line.write(order_line_vals)
# Confirm Sale Order
if action in ["confirmed", "delivered"]:
sale_order.action_confirm()
# mark picking as delivered
if action == "delivered":
# Mark all moves are delivered
for move in sale_order.mapped(
"picking_ids.move_ids_without_package"):
move.quantity_done = move.product_uom_qty
sale_order.mapped("picking_ids").button_validate()
return {
"sale_order_id": sale_order.id,
}