|
- from odoo.tests.common import TransactionCase
- from odoo.exceptions import UserError
- from datetime import datetime
- ISODATEFORMAT = '%Y-%m-%d'
-
-
- class TestSellDelivery(TransactionCase):
-
- def setUp(self):
- '''准备基本数据'''
- super(TestSellDelivery, self).setUp()
- self.env.ref('core.jd').credit_limit = 100000
- self.env.ref('core.goods_category_1').account_id = self.env.ref(
- 'finance.account_goods').id
- self.env.ref('warehouse.wh_in_whin0').date = '2016-02-06'
-
- # 因同一个业务伙伴不能存在两张未审核的收付款单,把系统里已有的相关业务伙伴未审核的收付款单审核
- self.env.ref('money.get_40000').money_order_done()
- self.env.ref('money.pay_2000').money_order_done()
-
- self.bank_account = self.env.ref('core.alipay')
- self.bank_account.balance = 10000
-
- self.order = self.env.ref('sell.sell_order_2')
- self.order.bank_account_id = self.bank_account.id
- self.order.pre_receipt = 1
- self.order.sell_order_done()
- self.delivery = self.env['sell.delivery'].search(
- [('order_id', '=', self.order.id)])
- self.return_order = self.env.ref('sell.sell_order_return')
- self.return_order.sell_order_done()
- self.return_delivery = self.env['sell.delivery'].search(
- [('order_id', '=', self.return_order.id)])
- for line in self.return_delivery.line_in_ids:
- line.location_id = self.env.ref('warehouse.b001_location').id
-
- self.warehouse_obj = self.env.ref('warehouse.wh_in_whin0')
- self.warehouse_obj.warehouse_dest_id = self.order.warehouse_id
- self.warehouse_obj.approve_order()
- for l in self.env['wh.move.line'].search([]):
- l.read()
-
- self.warehouse_id = self.env.ref('warehouse.bj_stock')
- self.customer_warehouse_id = self.env.ref(
- 'warehouse.warehouse_customer')
- self.goods = self.env.ref('goods.cable')
- self.partner = self.env.ref('core.lenovo')
-
- 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_sell_to_return(self):
- self.delivery.sell_delivery_done()
- self.delivery.sell_to_return()
-
- # 销售发货单存在草稿状态的退货单!
- with self.assertRaises(UserError):
- self.delivery.sell_to_return()
-
- # 部分退货
- return_order = self.env['sell.delivery'].search([
- ('is_return', '=', True),
- ('origin_id', '=', self.delivery.id),
- ('state', '=', 'draft')
- ])
- for line_in in return_order.line_in_ids:
- line_in.goods_qty = 4
- return_order.sell_delivery_done()
-
- # 二次退货
- self.delivery.sell_to_return()
- return_order_2 = self.env['sell.delivery'].search([
- ('is_return', '=', True),
- ('origin_id', '=', self.delivery.id),
- ('state', '=', 'draft')
- ])
- for line_in in return_order_2.line_in_ids:
- line_in.goods_qty = 4
- return_order_2.sell_delivery_done()
-
- # 三次退货,执行 if return_goods.get(t_key)
- self.delivery.sell_to_return()
-
- def test_sell_to_return_all_return(self):
- ''' Test raise error: all is return '''
- self.delivery.sell_delivery_done()
- self.delivery.sell_to_return()
-
- return_order = self.env['sell.delivery'].search([
- ('is_return', '=', True),
- ('origin_id', '=', self.delivery.id),
- ('state', '=', 'draft')
- ])
- return_order.sell_delivery_done()
-
- with self.assertRaises(UserError):
- self.delivery.sell_to_return()
-
- def test_sell_to_return_goods_is_using_batch(self):
- '''转化为销售退货单goods using_batch'''
- vals = {'partner_id': self.partner.id,
- 'date_due': (datetime.now()).strftime(ISODATEFORMAT),
- 'warehouse_id': self.warehouse_id.id,
- 'warehouse_dest_id': self.customer_warehouse_id.id,
- 'line_out_ids': [(0, 0, {'goods_id': self.env.ref('goods.mouse').id,
- 'lot_id': self.env.ref('warehouse.wh_move_line_12').id,
- 'price_taxed': 400,
- 'goods_qty': 1,
- 'type': 'out'})],
- }
- new = self.env['sell.delivery'].create(vals)
- new.sell_delivery_done()
- new.sell_to_return()
-
- def test_get_sell_goods_state(self):
- '''返回发货状态'''
- self.assertEqual(self.order.goods_state, '未出库')
- for d in self.order.delivery_ids:
- d.sell_delivery_done()
- self.assertEqual(self.order.goods_state, '全部出库')
-
- def test_get_sell_goods_cancel_state(self):
- '''测试部分取消'''
- for d in self.order.delivery_ids:
- for l in d.line_out_ids:
- # 订单10件,部分发货
- l.goods_qty = 4
- d.sell_delivery_done()
- self.assertEqual(self.order.goods_state, '部分出库')
- for d in self.order.delivery_ids:
- if d.state == 'draft':
- d.action_cancel()
- self.assertEqual(self.order.goods_state, '部分出库剩余作废')
-
- def test_onchange_partner_id(self):
- '''选择客户带出其默认地址信息'''
- # partner 不存在默认联系人
- partner = self.env.ref('core.jd')
- partner.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.delivery.onchange_partner_id()
- # partner 存在默认联系人
- for child in partner.child_ids:
- child.mobile = '1385559999'
- child.phone = '55558888'
- child.qq = '11116666'
- child.is_default_add = True
- self.delivery.onchange_partner_id()
-
- def test_onchange_address(self):
- ''' sell.delivery 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.delivery.address_id = address.id
- self.delivery.onchange_address_id()
-
- def test_onchange_discount_rate(self):
- """ 发货单中折扣率 on_change"""
- self.delivery.discount_rate = 10
- self.delivery.write(
- {"date_due": (datetime.now()).strftime(ISODATEFORMAT)})
- self.delivery.onchange_discount_rate()
- self.assertAlmostEqual(self.delivery.discount_amount, 10.70)
-
- def test_onchange_discount_rate_in(self):
- """ 销售 退货单 的折扣率 on_change 测试"""
- self.return_delivery.discount_rate = 10
- self.return_delivery.onchange_discount_rate()
- self.assertAlmostEqual(self.return_delivery.discount_amount, 10.70)
-
- def test_get_sell_money_state(self):
- '''测试返回收款状态'''
- # 未收款
- self.delivery.sell_delivery_done()
- self.delivery.sell_to_return()
- self.delivery._get_sell_money_state()
- self.assertEqual(self.delivery.money_state, '未收款')
-
- # 部分收款
- delivery = self.delivery.copy()
- delivery.receipt = delivery.amount - 1
- delivery.bank_account_id = self.bank_account
- delivery.sell_delivery_done()
-
- # 判断状态
- delivery._get_sell_money_state()
- self.assertEqual(delivery.money_state, '部分收款')
-
- # 全部收款
- delivery = self.delivery.copy()
- delivery.receipt = delivery.amount
- delivery.bank_account_id = self.bank_account
- delivery.sell_delivery_done()
-
- # 判断状态
- delivery._get_sell_money_state()
- self.assertEqual(delivery.money_state, '全部收款')
-
- def test_get_sell_money_state_return(self):
- '''测试返回退款状态'''
- # 未退款
- self.return_delivery.sell_delivery_done()
- self.return_delivery._get_sell_money_state()
- self.assertEqual(self.return_delivery.return_state, '未退款')
-
- # 部分退款
- return_delivery = self.return_delivery.copy()
- return_delivery.receipt = return_delivery.amount - 1
- return_delivery.bank_account_id = self.bank_account
- return_delivery.sell_delivery_done()
-
- # 判断状态
- return_delivery._get_sell_money_state()
- self.assertEqual(return_delivery.return_state, '部分退款')
-
- # 全部退款
- return_delivery = self.return_delivery.copy()
- return_delivery.receipt = return_delivery.amount
- return_delivery.bank_account_id = self.bank_account
- return_delivery.sell_delivery_done()
- # 判断状态
- return_delivery._get_sell_money_state()
- self.assertEqual(return_delivery.return_state, '全部退款')
-
- def test_unlink(self):
- '''测试删除销售发货/退货单'''
- # 测试是否可以删除已审核的单据
- self.delivery.sell_delivery_done()
- with self.assertRaises(UserError):
- self.delivery.unlink()
-
- # 删除销售发货单时,测试能否删除发货单行
- delivery = self.delivery.copy()
- move_id = delivery.sell_move_id.id
- delivery.unlink()
- move = self.env['wh.move'].search(
- [('id', '=', move_id)])
- self.assertTrue(not move)
- self.assertTrue(not move.line_out_ids)
-
- def test_sell_delievery_done_no_account_id(self):
- """销售 发货单 审核时付款账户为空 测试"""
- self.delivery.bank_account_id = False
- self.delivery.receipt = 20
- with self.assertRaises(UserError):
- self.delivery.sell_delivery_done()
-
- def test_sell_delievery_done_receipt_greater_than_amount(self):
- ''' 发货单 本次收款金额 大于总金额 '''
- self.delivery.receipt = 100000
- self.delivery.amount = 10
- self.delivery.bank_account_id = self.bank_account.id
- with self.assertRaises(UserError):
- self.delivery.sell_delivery_done()
-
- def test_sell_delivery_done_wrong(self):
- '''审核发货单/退货单报错情况'''
- # 销售发货单重复审核
- delivery = self.delivery
- delivery.sell_delivery_done()
- with self.assertRaises(UserError):
- delivery.sell_delivery_done()
- # 发货单审核时未填数量应报错
- for line in self.delivery.line_out_ids:
- line.goods_qty = 0
- with self.assertRaises(UserError):
- self.delivery.sell_delivery_done()
- # 销售退货单审核时未填数量应报错
- for line in self.return_delivery.line_in_ids:
- line.goods_qty = 0
- with self.assertRaises(UserError):
- self.return_delivery.sell_delivery_done()
-
- def test_auto_reconcile_sell_order(self):
- ''' 预收款与结算单自动核销 '''
- delivery = self.delivery
- delivery.receipt = 74
- delivery.bank_account_id = self.bank_account
- delivery.sell_delivery_done()
-
- def test_sell_delivery_done(self):
- """审核退货单正常流程"""
- vals = {'partner_id': self.partner.id,
- 'is_return': True,
- 'date_due': (datetime.now()).strftime(ISODATEFORMAT),
- 'warehouse_id': self.customer_warehouse_id.id,
- 'warehouse_dest_id': self.warehouse_id.id,
- 'line_in_ids': [(0, 0, {'goods_id': self.goods.id,
- 'price_taxed': 100, 'goods_qty': 5})],
- 'cost_line_ids': [(0, 0, {'partner_id': self.partner.id,
- 'category_id': self.env.ref('core.cat_freight').id,
- 'amount': 50})]}
-
- return_delivery = self.env['sell.delivery'].create(vals)
- return_delivery.sell_delivery_done()
-
- def test_sell_delivery_done_goods_inventory(self):
- '''发库单审核时商品不足直接盘盈'''
- for line in self.delivery.line_out_ids:
- line.goods_id = self.env.ref('goods.computer')
- self.delivery.sell_delivery_done()
-
- def test_goods_inventory(self):
- '''发库单审核商品不足时调用创建盘盈入库方法'''
- for line in self.delivery.line_out_ids:
- vals = {
- 'type': 'inventory',
- 'warehouse_id': self.env.ref('warehouse.warehouse_inventory').id,
- 'warehouse_dest_id': self.delivery.warehouse_id.id,
- 'line_in_ids': [(0, 0, {
- 'goods_id': line.goods_id.id,
- 'attribute_id': line.attribute_id.id,
- 'uos_id': line.uos_id.id,
- 'goods_qty': line.goods_qty,
- 'uom_id': line.uom_id.id,
- 'cost_unit': line.goods_id.cost
- }
- )]
- }
- self.delivery.goods_inventory(vals)
- # no message
- self.delivery.open_dialog('goods_inventory', vals)
-
- def test_sell_delivery_done_not_create_voucher(self):
- '''发库单审核商品不足时不生成凭证'''
- # 一个网线缺货
- self.warehouse_obj.cancel_approved_order()
- order_1 = self.env.ref('sell.sell_order_1')
- order_1.warehouse_id = self.env.ref('warehouse.sh_stock')
- for line in order_1.line_ids:
- line.goods_id = self.env.ref('goods.cable')
- line.quantity = 1
- line.discount_amount = 0
- order_1.sell_order_done()
- delivery = self.env['sell.delivery'].search(
- [('order_id', '=', order_1.id)])
- line = delivery.line_out_ids[0]
- vals = {
- 'type': 'inventory',
- 'warehouse_id': self.env.ref('warehouse.warehouse_inventory').id,
- 'warehouse_dest_id': delivery.warehouse_id.id,
- 'line_in_ids': [(0, 0, {
- 'goods_id': line.goods_id.id,
- 'uos_id': line.uos_id.id,
- 'goods_qty': 1,
- 'uom_id': line.uom_id.id,
- })]
- }
- delivery.goods_inventory(vals)
- self.assertEqual(line.cost, 0.0)
- self.assertTrue(not delivery.voucher_id)
-
- def test_create_zero_wh_in_with_attribute(self):
- '''创建一个缺货向导:有属性的商品'''
- for line in self.delivery.line_out_ids:
- line.goods_id = self.env.ref('goods.keyboard')
- line.attribute_id = self.env.ref('goods.keyboard_white')
- line.goods_qty = 610
- self.delivery.sell_delivery_done()
-
- # 商品的数量和含税单价不能小于0
- vals = {'partner_id': self.partner.id,
- 'date_due': (datetime.now()).strftime(ISODATEFORMAT),
- 'warehouse_id': self.warehouse_id.id,
- 'warehouse_dest_id': self.customer_warehouse_id.id,
- 'line_out_ids': [(0, 0, {'goods_id': self.env.ref('goods.iphone').id,
- 'attribute_id': self.env.ref('goods.iphone_white').id,
- 'price_taxed': 100,
- 'goods_qty': 0,
- 'type': 'out'})],
- }
- new = self.env['sell.delivery'].create(vals)
- with self.assertRaises(UserError):
- new.sell_delivery_done()
-
- # #客户有自己的发货时检查信用额度的逻辑,这里暂时去掉gooderp原生的检查
- # def test_sell_delivery_done_raise_credit_limit(self):
- # '''审核发货单/退货单 客户的 本次发货金额+客户应收余额 不能大于客户信用额度'''
- # self.delivery.amount = 20000000
- # with self.assertRaises(UserError):
- # self.delivery.sell_delivery_done()
-
- def test_sell_delivery_done_return_goods_and_money(self):
- '''如果已退货也已退款不生成新的分单'''
- self.delivery.sell_to_return()
- ret_order = self.env['sell.delivery'].search([('origin_id', '=', self.delivery.id)])
- ret_order.bank_account_id = self.bank_account.id
- ret_order.receipt = ret_order.amount
- ret_order.sell_delivery_done()
- self.assertEqual(ret_order.order_id.delivery_count, 1)
-
- def test_sell_delivery_draft(self):
- '''反审核发货单/退货单'''
- # 先审核发货单,再反审核
- for line in self.delivery.line_out_ids:
- line.goods_qty = 8
- self.delivery.sell_delivery_done()
- self.delivery.sell_delivery_draft()
- # 修改发货单,再次审核,并不产生分单
- for line in self.delivery.line_out_ids:
- line.goods_qty = 5
- self.delivery.sell_delivery_done()
- delivery = self.env['sell.delivery'].search(
- [('order_id', '=', self.order.id)])
- self.assertTrue(len(delivery) == 2)
-
- def test_sell_delivery_draft_money_order_process(self):
- ''' sell delivery draft: handle money order in case of different situation'''
- # 先审核发货单,再反审核
- self.delivery.bank_account_id = self.bank_account.id
- self.delivery.receipt = 5
- for line in self.delivery.line_out_ids:
- line.goods_qty = 8
- self.delivery.sell_delivery_done()
- deliverys = self.env['sell.delivery'].search(
- [('order_id', '=', self.order.id)])
- for delivery in deliverys:
- if delivery.state != 'done':
- for line in delivery.line_out_ids:
- line.goods_id.excess = True
- line.goods_qty = 8
- delivery.sell_delivery_done()
- # 建发货单对应的收款单
- money_order = self.env['money.order'].with_context({'type': 'get'}).create({
- 'partner_id': self.env.ref('core.jd').id,
- 'line_ids': [(0, 0, {
- 'bank_id': self.env.ref('core.comm').id,
- 'amount': 30000.0})]
- })
- money_order.onchange_partner_id()
- # 反审核销售发货单
- with self.assertRaises(UserError):
- deliverys and deliverys[0].sell_delivery_draft()
-
- def test_sell_delivery_draft_raise_error(self):
- '''不能反审核已核销的发货单'''
- self.env.company.draft_invoice = False
- self.delivery.sell_delivery_done()
- order = self.env['reconcile.order'].create({
- 'partner_id': self.env.ref('core.jd').id,
- 'business_type': 'adv_pay_to_get',
- })
- order.onchange_partner_id()
- # 将预收款40000的收款单核销本次发货单(金额75)
- for line in order.advance_payment_ids:
- if line.name != self.env.ref('money.get_40000'):
- line.unlink()
- else:
- line.this_reconcile = 75.0
- order.reconcile_order_done()
- with self.assertRaises(UserError):
- self.delivery.sell_delivery_draft()
-
- def test_sell_delivery_draft_quantity_out(self):
- '''反审核时,回写销售订单行已执行数量'''
- # 退货类型的销售订单生成的退货单的反审核
- self.return_delivery.sell_delivery_done()
- self.return_delivery.sell_delivery_draft()
- self.assertEqual(self.return_delivery.line_in_ids[0].sell_line_id.quantity_out, 0.0)
-
- # 销售类型的销售订单生成的发货单,生成退货单的反审核
- return_dict = self.delivery.sell_to_return()
- return_order = self.env['sell.delivery'].search(
- [('id', '=', return_dict['res_id'])])
- return_order.line_in_ids[0].goods_qty = 30
- return_order.sell_delivery_done()
-
- return_order.sell_delivery_draft()
- self.assertEqual(return_order.line_in_ids[0].sell_line_id.quantity_out, 0.0)
-
- def test_no_stock(self):
- ''' 测试虚拟商品出库 '''
- delivery = self.delivery.copy()
- for line in delivery.line_out_ids:
- line.goods_id = self.env.ref('goods.diy')
- delivery.sell_delivery_done()
-
- def test_scan_barcode(self):
- '''销售扫码出入库'''
- warehouse = self.env['wh.move']
- barcode = '12345678987'
- # 销售退货扫码
- model_name = 'sell.delivery'
- warehouse.scan_barcode(model_name, barcode, self.return_delivery.id)
- warehouse.scan_barcode(model_name, barcode, self.return_delivery.id)
- # 销售出库单扫码
- sell_order = self.env.ref('sell.sell_order_1')
- self.env.ref('sell.sell_order_line_1').tax_rate = 0
- sell_order.sell_order_done()
- delivery_order = self.env['sell.delivery'].search(
- [('order_id', '=', sell_order.id)])
- warehouse.scan_barcode(model_name, barcode, delivery_order.id)
- warehouse.scan_barcode(model_name, barcode, delivery_order.id)
-
- # 商品的条形码扫码出入库
- barcode = '123456789'
- # 销售出库单扫码
- warehouse.scan_barcode(model_name, barcode, delivery_order.id)
- warehouse.scan_barcode(model_name, barcode, delivery_order.id)
- # 销售退货扫码
- warehouse.scan_barcode(model_name, barcode, self.return_delivery.id)
- warehouse.scan_barcode(model_name, barcode, self.return_delivery.id)
-
- def test_onchange_partner_id_tax_rate(self):
- ''' 测试 改变 partner, 出库单行商品税率变化 '''
- delivery = self.env['sell.delivery'].search(
- [('order_id', '=', self.order.id)])
- # partner 无 税率, 出库单行商品无税率
- self.env.ref('core.jd').tax_rate = 0
- self.env.ref('goods.cable').tax_rate = 0
- delivery.onchange_partner_id()
- # partner 有 税率, 出库单行商品无税率
- self.env.ref('core.jd').tax_rate = 10
- self.env.ref('goods.cable').tax_rate = 0
- delivery.onchange_partner_id()
- # partner 无税率, 出库单行商品无税率
- self.env.ref('core.jd').tax_rate = 0
- self.env.ref('goods.cable').tax_rate = 10
- delivery.onchange_partner_id()
- # partner 税率 > 出库单行商品税率
- self.env.ref('core.jd').tax_rate = 11
- self.env.ref('goods.cable').tax_rate = 10
- delivery.onchange_partner_id()
- # partner 税率 =< 出库单行商品税率
- self.env.ref('core.jd').tax_rate = 11
- self.env.ref('goods.cable').tax_rate = 12
- delivery.onchange_partner_id()
-
- def test_sell_delivery_done_currency(self):
- """发货单上是外币时进行审核"""
- self.delivery.currency_id = self.env.ref('base.USD')
- self.delivery.sell_delivery_done()
-
- def test_sell_delivery_draft_twice(self):
- '''重复撤销报错'''
- with self.assertRaises(UserError):
- self.delivery.sell_delivery_draft()
-
-
- class TestWhMoveLine(TransactionCase):
-
- def setUp(self):
- '''准备基本数据'''
- super(TestWhMoveLine, self).setUp()
- self.env.ref('core.jd').credit_limit = 100000
- self.sell_return = self.browse_ref('sell.sell_order_return')
- self.sell_return.sell_order_done()
- self.delivery_return = self.env['sell.delivery'].search(
- [('order_id', '=', self.sell_return.id)])
-
- self.sell_order = self.env.ref('sell.sell_order_1')
- self.env.ref('sell.sell_order_line_1').tax_rate = 0
- self.sell_order.sell_order_done()
- self.delivery = self.env['sell.delivery'].search(
- [('order_id', '=', self.sell_order.id)])
-
- self.goods_cable = self.browse_ref('goods.cable')
- self.goods_keyboard = self.browse_ref('goods.keyboard')
- self.warehouse_id = self.env.ref('warehouse.hd_stock')
- self.customer_warehouse_id = self.env.ref(
- 'warehouse.warehouse_customer')
- self.partner = self.env.ref('core.jd')
-
- vals = {'partner_id': self.partner.id,
- 'is_return': False,
- 'date_due': (datetime.now()).strftime(ISODATEFORMAT),
- 'warehouse_id': self.customer_warehouse_id.id,
- 'warehouse_dest_id': self.warehouse_id.id,
- 'line_out_ids': [(0, 0, {'goods_id': self.goods_cable.id,
- 'goods_qty': 5,
- 'tax_rate': 17.0,
- 'type': 'out'})],
- }
- self.new_delivery = self.env['sell.delivery'].create(vals)
-
- def test_onchange_warehouse_id(self):
- '''wh.move.line仓库和商品带出价格策略的折扣率'''
- for line in self.delivery.line_out_ids[0]:
- line.with_context({'default_date': '2016-04-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 10)
- line.with_context({'default_date': '2016-05-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 20)
- line.with_context({'default_date': '2016-06-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 30)
- line.with_context({'default_date': '2016-07-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 40)
- line.with_context({'default_date': '2016-08-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 50)
- line.with_context({'default_date': '2016-09-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 60)
- line.with_context({'default_date': '2016-10-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 70)
- line.with_context({'default_date': '2016-11-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 80)
- line.with_context({'default_date': '2016-12-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 90)
- line.with_context({'default_date': '3000-02-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 0)
- line.with_context({'default_date': '2017-01-01',
- 'warehouse_type': 'customer',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 0)
-
- # 仓库类型不为客户仓时
- line.with_context({'default_date': '2017-01-01',
- 'default_partner': self.delivery.partner_id.id}).onchange_warehouse_id()
- self.assertTrue(line.discount_rate == 0)
-
- def test_onchange_goods_id(self):
- '''测试销售模块中商品的onchange,是否会带出单价'''
- # 销售退货单
- for line in self.delivery_return.line_in_ids:
- line.with_context({'default_is_return': True,
- 'default_partner': self.delivery_return.partner_id.id}).onchange_goods_id()
-
- def test_onchange_goods_id_tax_rate(self):
- ''' 测试 修改商品时,出库单行税率变化 '''
- for order_line in self.delivery.line_out_ids:
- # partner 无 税率,出库单行商品无税率
- self.partner.tax_rate = 0
- self.env.ref('goods.mouse').tax_rate = 0
- order_line.with_context(
- {'default_partner': self.delivery.partner_id.id}).onchange_goods_id()
- # partner 有 税率,出库单行商品无税率
- self.partner.tax_rate = 10
- self.env.ref('goods.mouse').tax_rate = 0
- order_line.with_context(
- {'default_partner': self.delivery.partner_id.id}).onchange_goods_id()
- # partner 无税率,出库单行商品有税率
- self.partner.tax_rate = 0
- self.env.ref('goods.mouse').tax_rate = 10
- order_line.with_context(
- {'default_partner': self.delivery.partner_id.id}).onchange_goods_id()
- # partner 税率 > 出库单行商品税率
- self.partner.tax_rate = 11
- self.env.ref('goods.mouse').tax_rate = 10
- order_line.with_context(
- {'default_partner': self.delivery.partner_id.id}).onchange_goods_id()
- # partner 税率 =< 出库单行商品税率
- self.partner.tax_rate = 9
- self.env.ref('goods.mouse').tax_rate = 10
- order_line.with_context(
- {'default_partner': self.delivery.partner_id.id}).onchange_goods_id()
-
- break
-
- def test_onchange_price(self):
- '''当订单行的不含税单价改变时,改变含税单价'''
- for line in self.new_delivery.line_out_ids:
- line.price = 10
- line.onchange_price()
- self.assertAlmostEqual(line.price_taxed, 11.7)
|