1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/approvals_purchase/tests/common.py
2024-12-10 09:04:09 +07:00

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]