forked from Mapan/odoo17e
132 lines
5.1 KiB
Python
132 lines
5.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import fields
|
|
from odoo.tests.common import Form, TransactionCase
|
|
|
|
|
|
class TestApprovalsCommon(TransactionCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
# Define a approval category for purchase.
|
|
approval_category_form = Form(cls.env['approval.category'])
|
|
approval_category_form.name = 'Product Request'
|
|
approval_category_form.approval_type = 'purchase'
|
|
cls.purchase_category = approval_category_form.save()
|
|
# Create an user we can use as approver for example.
|
|
cls.user_approver = cls.env['res.users'].create({
|
|
'login': 'yesman',
|
|
'name': 'Carl Allen',
|
|
})
|
|
cls.payment_terms = cls.env.ref("account.account_payment_term_end_following_month")
|
|
# Create partners to use as seller.
|
|
cls.partner_seller_1 = cls.env['res.partner'].create({
|
|
'name': 'Uncle Bill\'s Electronic Store',
|
|
'property_supplier_payment_term_id' : cls.payment_terms.id,
|
|
})
|
|
cls.partner_seller_2 = cls.env['res.partner'].create({
|
|
'name': 'Jawa Good Deals'
|
|
})
|
|
# Create some products.
|
|
cls.product_mouse = cls.env['product.product'].create({
|
|
'name': 'Computer Mouse',
|
|
})
|
|
cls.product_computer = cls.env['product.product'].create({
|
|
'name': 'Laptop',
|
|
'seller_ids': [
|
|
(0, 0, {
|
|
'partner_id': cls.partner_seller_1.id,
|
|
'min_qty': 1,
|
|
'price': 250,
|
|
}),
|
|
(0, 0, {
|
|
'partner_id': cls.partner_seller_2.id,
|
|
'min_qty': 1,
|
|
'price': 260,
|
|
}),
|
|
(0, 0, {
|
|
'partner_id': cls.partner_seller_2.id,
|
|
'min_qty': 10,
|
|
'price': 230,
|
|
}),
|
|
],
|
|
})
|
|
cls.product_earphone = cls.env['product.product'].create({
|
|
'name': 'Earphone',
|
|
'seller_ids': [
|
|
(0, 0, {
|
|
'partner_id': cls.partner_seller_1.id,
|
|
'min_qty': 1,
|
|
'price': 8,
|
|
}),
|
|
],
|
|
})
|
|
# Find UoM unit and create the 'fortnight' unit.
|
|
cls.uom_unit = cls.env.ref('uom.product_uom_unit')
|
|
cls.uom_fortnight = cls.env['uom.uom'].create({
|
|
'category_id': cls.uom_unit.category_id.id,
|
|
'name': 'Fortnights',
|
|
'uom_type': 'bigger',
|
|
'factor_inv': 15.0,
|
|
})
|
|
|
|
def create_request_form(self, approver=False, category=False):
|
|
""" Return a new instance of Form for a purchase request.
|
|
|
|
:param approver: optional record to set an approver directly on the new
|
|
approval request.
|
|
:param category: optional record to chose the category of the new
|
|
approval request. Take the "Product Request" by default.
|
|
"""
|
|
if not category:
|
|
category = self.purchase_category
|
|
create_request_form = Form(self.env['approval.request'].with_user(approver).with_context(
|
|
default_name=self.purchase_category.name,
|
|
default_category_id=category.id,
|
|
))
|
|
if approver:
|
|
# Set an approver.
|
|
with create_request_form.approver_ids.new() as req_approver:
|
|
req_approver.user_id = approver
|
|
return create_request_form
|
|
|
|
def create_purchase_order(self, partner=False, origin=False, lines=False):
|
|
""" Create and return a new purchase order.
|
|
|
|
:param recort partner: partner used as vendor ('partner_seller_1' by default).
|
|
:param string origin: optional string to define a purchase order's origin.
|
|
:param list lines: optional list containing dicts to create purchase order lines.
|
|
Take the following keys:
|
|
- product: record of the product
|
|
- price: unit price for the product
|
|
- quantity: 1 by default
|
|
- uom: uom id for the line (product's uom by default)
|
|
"""
|
|
vals = {
|
|
'partner_id': (partner and partner.id) or self.partner_seller_1.id,
|
|
'origin': origin,
|
|
}
|
|
# Create order lines if defined.
|
|
if lines:
|
|
vals['order_line'] = []
|
|
for line in lines:
|
|
product = line['product']
|
|
order_line_vals = (0, 0, {
|
|
'date_planned': fields.Date.today(),
|
|
'name': product.display_name,
|
|
'price_unit': line['price'],
|
|
'product_id': product.id,
|
|
'product_qty': line.get('quantity', 1),
|
|
'product_uom': line.get('uom', product.uom_id.id),
|
|
})
|
|
vals['order_line'].append(order_line_vals)
|
|
|
|
new_purchase = self.env['purchase.order'].create(vals)
|
|
return new_purchase
|
|
|
|
def get_purchase_order(self, request, index=0):
|
|
purchases = request.product_line_ids.purchase_order_line_id.order_id
|
|
return purchases[index]
|