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.
 
 
 
 

97 lines
3.5 KiB

# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2014 Akretion (<http://www.akretion.com>).
# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
# @author Sylvain Calador (sylvain.calador@akretion.com).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from odoo import models, api
class PosOrder(models.Model):
_inherit = 'pos.order'
# Overload Section
@api.model
def _order_fields(self, ui_order):
res = super(PosOrder, self)._order_fields(ui_order)
if 'order_id' in ui_order:
res['order_id'] = ui_order['order_id']
return res
@api.model
def create_from_ui(self, orders):
"""
Remove from the 'orders' list all orders where amount_return is < 0
(because that means they are not paid, but just in draft state).
* call a specific function for the draft orders list
* call the parent create_from_ui() for the remaining orders"""
draft_orders = []
for tmp_order in orders:
if tmp_order['data']['amount_return'] < 0\
and abs(tmp_order['data']['amount_return']) > 0.000001:
draft_orders.append(tmp_order)
orders.remove(tmp_order)
# Save Draft Orders
self._create_draft_order_from_ui(draft_orders)
# Save Paid Orders
return super(PosOrder, self).create_from_ui(orders)
# Custom Section
@api.model
def search_read_orders(self, query):
condition = [
('state', '=', 'draft'),
('statement_ids', '=', False),
'|',
('name', 'ilike', query),
('partner_id', 'ilike', query)
]
fields = ['name', 'partner_id', 'amount_total']
return self.search_read(condition, fields, limit=10)
@api.model
def load_order(self, order_id):
order = self.browse(order_id)
condition = [('order_id', '=', order_id)]
fields = ['product_id', 'price_unit', 'qty', 'discount']
orderlines = self.lines.search_read(condition, fields)
return {
'id': order.id,
'name': order.pos_reference,
'partner_id': order.partner_id.id,
'orderlines': orderlines,
}
@api.model
def _create_draft_order_from_ui(self, orders):
for order_tmp in orders:
order_data = order_tmp['data']
statements_data = order_data['statement_ids']
order_data.pop('statement_ids')
# create Order
order = self.create(self._order_fields(order_data))
# Create payment
for statement_data in statements_data:
self.add_payment(
order.id, self._payment_fields(statement_data[2]))