|
- from odoo.tests.common import TransactionCase
- from odoo.exceptions import UserError
- from datetime import datetime
-
-
- class TestSellOrder(TransactionCase):
-
- def setUp(self):
- super(TestSellOrder, self).setUp()
- self.env.ref('core.jd').credit_limit = 100000
- self.order = self.env.ref('sell.sell_order_1')
- self.return_order = self.env.ref('sell.sell_order_return')
- self.env.ref('sell.sell_order_line_1').tax_rate = 0
-
- # 因同一个业务伙伴不能存在两张未审核的收付款单,把系统里已有的相关业务伙伴未审核的收付款单审核
- self.env.ref('money.get_40000').money_order_done()
- self.env.ref('money.pay_2000').money_order_done()
-
- self.partner_id = self.env.ref('core.jd')
- self.province_id = self.env['country.state'].search(
- [('name', '=', '河北省')])
- self.city_id = self.env['all.city'].search(
- [('city_name', '=', '石家庄市')])
- self.county_id = self.env['all.county'].search(
- [('county_name', '=', '正定县')])
-
- def test_compute_amount(self):
- ''' 计算字段的测试'''
- self.assertEqual(self.order.amount, 154048.00)
-
- def test_default_warehouse(self):
- '''新建销售订单时调出仓库的默认值'''
- order = self.env['sell.order'].with_context({
- 'warehouse_type': 'stock'
- }).create({})
- self.assertTrue(order.warehouse_id.type == 'stock')
-
- def test_onchange_partner_id(self):
- '''选择客户带出其默认地址信息'''
- self.order.onchange_partner_id()
-
- # partner 无 税率,销售单行商品无税率
- self.env.ref('core.jd').tax_rate = 0
- self.env.ref('goods.mouse').tax_rate = 0
- self.order.onchange_partner_id()
- # partner 有 税率,销售单行商品无税率
- self.env.ref('core.jd').tax_rate = 10
- self.env.ref('goods.mouse').tax_rate = 0
- self.order.onchange_partner_id()
- # partner 无税率,销售单行商品无税率
- self.env.ref('core.jd').tax_rate = 0
- self.env.ref('goods.mouse').tax_rate = 10
- self.order.onchange_partner_id()
- # partner 税率 > 销售单行商品税率
- self.env.ref('core.jd').tax_rate = 11
- self.env.ref('goods.mouse').tax_rate = 10
- self.order.onchange_partner_id()
- # partner 税率 =< 销售单行商品税率
- self.env.ref('core.jd').tax_rate = 9
- self.env.ref('goods.mouse').tax_rate = 10
- self.order.onchange_partner_id()
-
- # partner 不存在默认联系人
- self.partner_id.write({'child_ids':
- [(0, 0, {'contact': '小东',
- 'province_id': self.province_id.id,
- 'city_id': self.city_id.id,
- 'county_id': self.county_id.id,
- 'town': '曹路镇',
- 'detail_address': '金海路1688号',
- }
- )]})
- self.order.onchange_partner_id()
- # partner 存在默认联系人
- for child in self.partner_id.child_ids:
- child.mobile = '1385559999'
- child.phone = '55558888'
- child.qq = '11116666'
- child.is_default_add = True
- self.order.onchange_partner_id()
-
- def test_onchange_address(self):
- ''' sell.order onchange address '''
- address = self.env['partner.address'].create({'contact': '小东',
- 'province_id': self.province_id.id,
- 'city_id': self.city_id.id,
- 'county_id': self.county_id.id,
- 'town': '曹路镇',
- 'detail_address': '金海路1688号',
- })
- self.order.address_id = address.id
- self.order.onchange_partner_address()
-
- def test_onchange_discount_rate(self):
- ''' sell.order onchange test '''
- self.order.discount_rate = 10
- self.order.onchange_discount_rate()
- self.assertEqual(self.order.discount_amount, 15408.0)
-
- def test_unlink(self):
- '''测试删除已审核的销售订单'''
- self.env.ref('sell.sell_order_line_1').tax_rate = 0
- self.order.sell_order_done()
- with self.assertRaises(UserError):
- self.order.unlink()
- # 删除草稿状态的销售订单
- self.order.copy()
- self.order.sell_order_draft()
- self.order.unlink()
-
- def test_sell_order_done(self):
- '''测试审核销售订单'''
- # 审核销售订单
- self.order.sell_order_done()
- with self.assertRaises(UserError):
- self.order.sell_order_done()
-
- # 未填数量应报错
- self.order.sell_order_draft()
- for line in self.order.line_ids:
- line.quantity = 0
- with self.assertRaises(UserError):
- self.order.sell_order_done()
-
- # 输入预收款和结算账户
- bank_account = self.env.ref('core.alipay')
- bank_account.balance = 1000000
- self.order.pre_receipt = 50.0
- self.order.bank_account_id = bank_account
- for line in self.order.line_ids:
- line.quantity = 1
- self.order.sell_order_done()
-
- # 预收款不为空时,请选择结算账户!
- self.order.sell_order_draft()
- self.order.bank_account_id = False
- self.order.pre_receipt = 50.0
- with self.assertRaises(UserError):
- self.order.sell_order_done()
-
- def test_sell_order_done_no_line(self):
- '''没有订单行时审核报错'''
- for line in self.order.line_ids:
- line.unlink()
- with self.assertRaises(UserError):
- self.order.sell_order_done()
-
- def test_sell_order_done_foreign_currency(self):
- '''测试审核销售订单,外币免税'''
- self.order.currency_id = self.env.ref('base.USD')
- for line in self.order.line_ids:
- line.price_taxed = 1170
- line.tax_rate = 17
- with self.assertRaises(UserError):
- self.order.sell_order_done()
-
- def test_sell_order_draft(self):
- ''' 测试反审核销售订单 '''
- self.order.sell_order_done()
- self.order.sell_order_draft()
- with self.assertRaises(UserError):
- self.order.sell_order_draft()
-
- def test_action_view_delivery(self):
- """ 测试 查看发货/退货单 """
- self.order.sell_order_done()
- self.order.action_view_delivery()
- self.env.ref('core.jd').credit_limit = 0
- delivery = self.env['sell.delivery'].search(
- [('order_id', '=', self.order.id)])
- for line in delivery.line_out_ids:
- line.goods_qty = 1
- delivery.sell_delivery_done()
- self.order.action_view_delivery()
-
- # 先入库
- order_2 = self.env.ref('sell.sell_order_2')
- warehouse_obj = self.env.ref('warehouse.wh_in_whin0')
- warehouse_obj.approve_order()
- order_2.sell_order_done()
-
- delivery_2 = self.env['sell.delivery'].search([('order_id', '=', order_2.id)])
- for line in delivery_2.line_out_ids:
- line.goods_qty = 8
- delivery_2.sell_delivery_done()
- # len(delivery_ids) > 1
- order_2.action_view_delivery()
-
- # compute_delivery_count
- #self.assertTrue(order_2.delivery_count == 2)
-
- def test_action_view_return(self):
- '''该销售订单对应的退货单'''
- self.return_order.sell_order_done()
- self.return_order.action_view_return()
- self.assertTrue(self.return_order.return_count == 1)
-
- # len(delivery_ids) > 1
- delivery = self.env['sell.delivery'].search([
- ('order_id', '=', self.return_order.id)])
- for line in delivery.line_in_ids:
- line.goods_qty = 5
- line.location_id = self.env.ref('warehouse.b001_location')
- '''
- delivery.sell_delivery_done()
- self.return_order.action_view_return()
- self.assertTrue(self.return_order.return_count == 2)
- '''
-
- def test_sell_order_done_no_attribute(self):
- '''检查属性是否填充'''
- self.order.line_ids[0].goods_id = self.env.ref('goods.keyboard')
- with self.assertRaises(UserError):
- self.order.sell_order_done()
-
- def test_compute_net_weight(self):
- '''计算净重合计'''
- self.env.ref('goods.mouse').net_weight = 50
- self.order.line_ids[0].quantity = 10
- self.assertEqual(self.order.net_weight, 50 * 10)
-
-
- class TestSellOrderLine(TransactionCase):
-
- def setUp(self):
- super(TestSellOrderLine, self).setUp()
- self.order = self.env.ref('sell.sell_order_1')
- self.sell_order_line = self.env.ref('sell.sell_order_line_2_3')
-
- def test_compute_using_attribute(self):
- '''返回订单行中商品是否使用属性'''
- for line in self.order.line_ids:
- self.assertTrue(not line.using_attribute)
- line.goods_id = self.env.ref('goods.keyboard')
- self.assertTrue(line.using_attribute)
-
- def test_compute_all_amount(self):
- ''' 销售订单行计算字段的测试 '''
- self.assertEqual(self.sell_order_line.amount,
- 107) # tax_amount subtotal
- self.sell_order_line.onchange_goods_id()
- self.assertEqual(self.sell_order_line.tax_rate, 17.0)
- self.sell_order_line.price_taxed = 11.7
- self.sell_order_line.tax_rate = 17
- self.sell_order_line._compute_all_amount()
- self.assertEqual(self.sell_order_line.tax_amount, 15.55)
- self.assertEqual(self.sell_order_line.subtotal, 107)
-
- def test_compute_all_amount_foreign_currency(self):
- # '''外币测试:当订单行的数量、含税单价、折扣额、税率改变时,改变销售金额、税额、价税合计'''
- # 本位币
- self.order.currency_id = self.env.ref('base.CNY')
- for line in self.order.line_ids:
- line.price_taxed = 11.7
-
- self.order.currency_id = self.env.ref('base.EUR')
- for line in self.order.line_ids:
- line.price_taxed = 11.7
-
- def test_compute_all_amount_wrong_tax_rate(self):
- '''明细行上输入错误税率,应报错'''
- for line in self.order.line_ids:
- with self.assertRaises(UserError):
- line.tax_rate = -1
- with self.assertRaises(UserError):
- line.tax_rate = 102
-
- def test_onchange_price(self):
- '''当订单行的不含税单价改变时,改变含税单价'''
- for line in self.order.line_ids:
- line.price_taxed = 0
- line.price = 10
- line.onchange_price()
- self.assertAlmostEqual(line.price_taxed, 11.7)
-
- def test_onchange_goods_id(self):
- '''当销售订单行的商品变化时,带出商品上的单位、价格'''
- goods = self.env.ref('goods.keyboard')
- c_category_id = self.order.partner_id.c_category_id
-
- for line in self.order.line_ids:
- line.goods_id = goods
- line.onchange_goods_id()
- self.assertTrue(line.uom_id.name == '件')
- # 测试价格是否是商品的销售价
- self.assertTrue(line.price == goods.price)
-
- def test_onchange_goods_id_tax_rate(self):
- ''' 测试 修改商品时,商品行税率变化 '''
- self.order_line = self.env.ref('sell.sell_order_line_1')
- # partner 无 税率,销售单行商品无税率
- self.env.ref('core.jd').tax_rate = 0
- self.env.ref('goods.mouse').tax_rate = 0
- self.order_line.onchange_goods_id()
- # partner 有 税率,销售单行商品无税率
- self.env.ref('core.jd').tax_rate = 10
- self.env.ref('goods.mouse').tax_rate = 0
- self.order_line.onchange_goods_id()
- # partner 无税率,销售单行商品有税率
- self.env.ref('core.jd').tax_rate = 0
- self.env.ref('goods.mouse').tax_rate = 10
- self.order_line.onchange_goods_id()
- # partner 税率 > 销售单行商品税率
- self.env.ref('core.jd').tax_rate = 11
- self.env.ref('goods.mouse').tax_rate = 10
- self.order_line.onchange_goods_id()
- # partner 税率 =< 销售单行商品税率
- self.env.ref('core.jd').tax_rate = 9
- self.env.ref('goods.mouse').tax_rate = 10
- self.order_line.onchange_goods_id()
-
- def test_onchange_warehouse_id(self):
- '''仓库和商品带出价格策略的折扣率'''
- order_line = self.env.ref('sell.sell_order_line_1')
- order_line.onchange_warehouse_id()
- order = self.env.ref('sell.sell_order_1')
- order.partner_id = self.env.ref('core.yixun').id
- order_line.onchange_warehouse_id()
-
- # 找不到价格策略时
- order.date = '1999-01-01'
- order_line.onchange_warehouse_id()
-
- def test_onchange_discount_rate(self):
- ''' 销售订单行 折扣率 on_change'''
- self.sell_order_line.discount_rate = 20
- self.sell_order_line.onchange_discount_rate()
- self.assertEqual(round(self.sell_order_line.amount,1), 93.6)
-
-
- class TestApproveMultiSellOrder(TransactionCase):
- def setUp(self):
- ''' setUp Data '''
- super(TestApproveMultiSellOrder, self).setUp()
- self.env.ref('core.jd').credit_limit = 100000
- self.order = self.env.ref('sell.sell_order_1')
- self.order_2 = self.env.ref('sell.sell_order_2')
- self.partner_id = self.env.ref('core.jd')
-
- # 因同一个业务伙伴不能存在两张未审核的收付款单,把系统里已有的相关业务伙伴未审核的收付款单审核
- self.env.ref('money.get_40000').money_order_done()
- self.env.ref('money.pay_2000').money_order_done()
-
- def test_fields_view_get(self):
- ''' Test: fields_view_get '''
- sell_obj = self.env['approve.multi.sell.order']
- # 不报错的情况
- sell_obj.with_context({
- 'active_model': 'sell.order',
- 'active_ids': [self.order.id, self.order_2.id]
- }).fields_view_get(None, 'form', False, False)
- # 报错:存在销售订单已审核的单据
- self.order_2.sell_order_done()
- with self.assertRaises(UserError):
- sell_obj.with_context({
- 'active_model': 'sell.order',
- 'active_ids': [self.order.id, self.order_2.id]
- }).fields_view_get(None, 'form', False, False)
-
- def test_approve_sell_order(self):
- ''' Test: approve_sell_order '''
- sell_obj = self.env['approve.multi.sell.order']
- # 批量审核销售订单
- sell_obj.with_context({
- 'active_ids': [self.order.id, self.order_2.id]
- }).approve_sell_order()
-
- def test_set_default_note(self):
- ''' Test: set_default_note '''
- sell_obj = self.env['approve.multi.sell.order']
- # 设置默认值
- sell_obj.set_default_note()
|