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.
91 lines
3.0 KiB
91 lines
3.0 KiB
# -*- coding: utf-8 -*-
|
|
# 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 openerp import models, api, _
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = "sale.order"
|
|
|
|
@api.model
|
|
def _prepare_order_field_from_pos(self, order_data):
|
|
session_obj = self.env["pos.session"]
|
|
session = session_obj.browse(order_data["pos_session_id"])
|
|
res = self.onchange_partner_id(order_data["partner_id"])["value"]
|
|
res.update(
|
|
{
|
|
"partner_id": order_data["partner_id"] or False,
|
|
"origin": _("Point of Sale %s") % (session.name),
|
|
"client_order_ref": order_data["name"],
|
|
"user_id": order_data["user_id"] or False,
|
|
"order_line": [],
|
|
}
|
|
)
|
|
if self.env.context.get("is_pos_pricelist"):
|
|
res.update(
|
|
{"pricelist_id": order_data["pricelist_id"],}
|
|
)
|
|
for line_data in order_data["lines"]:
|
|
res["order_line"].append(
|
|
[
|
|
0,
|
|
False,
|
|
self._prepare_order_line_field_from_pos(line_data[2], res),
|
|
]
|
|
)
|
|
return res
|
|
|
|
@api.model
|
|
def _prepare_order_line_field_from_pos(self, line_data, sale_order_data):
|
|
line_obj = self.env["sale.order.line"]
|
|
res = line_obj.product_id_change(
|
|
sale_order_data["pricelist_id"],
|
|
line_data["product_id"],
|
|
qty=line_data["qty"],
|
|
partner_id=sale_order_data["partner_id"],
|
|
)["value"]
|
|
res.update(
|
|
{
|
|
"product_id": line_data["product_id"],
|
|
"product_uom_qty": line_data["qty"],
|
|
"discount": line_data["discount"],
|
|
"tax_id": [(6, False, res["tax_id"])],
|
|
}
|
|
)
|
|
if self.env.context.get("is_pos_pricelist"):
|
|
res.update(
|
|
{
|
|
"price_unit": line_data["price_unit"],
|
|
"tax_id": line_data["tax_ids"],
|
|
}
|
|
)
|
|
return res
|
|
|
|
@api.model
|
|
def create_order_from_pos(self, order_data):
|
|
is_pos_pricelist = len(
|
|
self.env["ir.module.module"].search(
|
|
[("name", "=", "pos_pricelist"), ("state", "=", "installed")]
|
|
)
|
|
)
|
|
# Create Draft Sale order
|
|
sale_order = self.create(
|
|
self.with_context(
|
|
is_pos_pricelist=is_pos_pricelist
|
|
)._prepare_order_field_from_pos(order_data)
|
|
)
|
|
|
|
# Confirm Sale Order
|
|
if order_data["sale_order_state"] in ["confirmed", "delivered"]:
|
|
sale_order.action_button_confirm()
|
|
|
|
# mark picking as delivered
|
|
if order_data["sale_order_state"] == "delivered":
|
|
sale_order.picking_ids.force_assign()
|
|
sale_order.picking_ids.do_transfer()
|
|
|
|
return {
|
|
"sale_order_id": sale_order.id,
|
|
}
|