GoodERP
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.

373 lines
15KB

  1. from odoo.tests.common import TransactionCase
  2. from odoo.exceptions import UserError
  3. from datetime import datetime
  4. class TestSellOrder(TransactionCase):
  5. def setUp(self):
  6. super(TestSellOrder, self).setUp()
  7. self.env.ref('core.jd').credit_limit = 100000
  8. self.order = self.env.ref('sell.sell_order_1')
  9. self.return_order = self.env.ref('sell.sell_order_return')
  10. self.env.ref('sell.sell_order_line_1').tax_rate = 0
  11. # 因同一个业务伙伴不能存在两张未审核的收付款单,把系统里已有的相关业务伙伴未审核的收付款单审核
  12. self.env.ref('money.get_40000').money_order_done()
  13. self.env.ref('money.pay_2000').money_order_done()
  14. self.partner_id = self.env.ref('core.jd')
  15. self.province_id = self.env['country.state'].search(
  16. [('name', '=', '河北省')])
  17. self.city_id = self.env['all.city'].search(
  18. [('city_name', '=', '石家庄市')])
  19. self.county_id = self.env['all.county'].search(
  20. [('county_name', '=', '正定县')])
  21. def test_compute_amount(self):
  22. ''' 计算字段的测试'''
  23. self.assertEqual(self.order.amount, 154048.00)
  24. def test_default_warehouse(self):
  25. '''新建销售订单时调出仓库的默认值'''
  26. order = self.env['sell.order'].with_context({
  27. 'warehouse_type': 'stock'
  28. }).create({})
  29. self.assertTrue(order.warehouse_id.type == 'stock')
  30. def test_onchange_partner_id(self):
  31. '''选择客户带出其默认地址信息'''
  32. self.order.onchange_partner_id()
  33. # partner 无 税率,销售单行商品无税率
  34. self.env.ref('core.jd').tax_rate = 0
  35. self.env.ref('goods.mouse').tax_rate = 0
  36. self.order.onchange_partner_id()
  37. # partner 有 税率,销售单行商品无税率
  38. self.env.ref('core.jd').tax_rate = 10
  39. self.env.ref('goods.mouse').tax_rate = 0
  40. self.order.onchange_partner_id()
  41. # partner 无税率,销售单行商品无税率
  42. self.env.ref('core.jd').tax_rate = 0
  43. self.env.ref('goods.mouse').tax_rate = 10
  44. self.order.onchange_partner_id()
  45. # partner 税率 > 销售单行商品税率
  46. self.env.ref('core.jd').tax_rate = 11
  47. self.env.ref('goods.mouse').tax_rate = 10
  48. self.order.onchange_partner_id()
  49. # partner 税率 =< 销售单行商品税率
  50. self.env.ref('core.jd').tax_rate = 9
  51. self.env.ref('goods.mouse').tax_rate = 10
  52. self.order.onchange_partner_id()
  53. # partner 不存在默认联系人
  54. self.partner_id.write({'child_ids':
  55. [(0, 0, {'contact': '小东',
  56. 'province_id': self.province_id.id,
  57. 'city_id': self.city_id.id,
  58. 'county_id': self.county_id.id,
  59. 'town': '曹路镇',
  60. 'detail_address': '金海路1688号',
  61. }
  62. )]})
  63. self.order.onchange_partner_id()
  64. # partner 存在默认联系人
  65. for child in self.partner_id.child_ids:
  66. child.mobile = '1385559999'
  67. child.phone = '55558888'
  68. child.qq = '11116666'
  69. child.is_default_add = True
  70. self.order.onchange_partner_id()
  71. def test_onchange_address(self):
  72. ''' sell.order onchange address '''
  73. address = self.env['partner.address'].create({'contact': '小东',
  74. 'province_id': self.province_id.id,
  75. 'city_id': self.city_id.id,
  76. 'county_id': self.county_id.id,
  77. 'town': '曹路镇',
  78. 'detail_address': '金海路1688号',
  79. })
  80. self.order.address_id = address.id
  81. self.order.onchange_partner_address()
  82. def test_onchange_discount_rate(self):
  83. ''' sell.order onchange test '''
  84. self.order.discount_rate = 10
  85. self.order.onchange_discount_rate()
  86. self.assertEqual(self.order.discount_amount, 15408.0)
  87. def test_unlink(self):
  88. '''测试删除已审核的销售订单'''
  89. self.env.ref('sell.sell_order_line_1').tax_rate = 0
  90. self.order.sell_order_done()
  91. with self.assertRaises(UserError):
  92. self.order.unlink()
  93. # 删除草稿状态的销售订单
  94. self.order.copy()
  95. self.order.sell_order_draft()
  96. self.order.unlink()
  97. def test_sell_order_done(self):
  98. '''测试审核销售订单'''
  99. # 审核销售订单
  100. self.order.sell_order_done()
  101. with self.assertRaises(UserError):
  102. self.order.sell_order_done()
  103. # 未填数量应报错
  104. self.order.sell_order_draft()
  105. for line in self.order.line_ids:
  106. line.quantity = 0
  107. with self.assertRaises(UserError):
  108. self.order.sell_order_done()
  109. # 输入预收款和结算账户
  110. bank_account = self.env.ref('core.alipay')
  111. bank_account.balance = 1000000
  112. self.order.pre_receipt = 50.0
  113. self.order.bank_account_id = bank_account
  114. for line in self.order.line_ids:
  115. line.quantity = 1
  116. self.order.sell_order_done()
  117. # 预收款不为空时,请选择结算账户!
  118. self.order.sell_order_draft()
  119. self.order.bank_account_id = False
  120. self.order.pre_receipt = 50.0
  121. with self.assertRaises(UserError):
  122. self.order.sell_order_done()
  123. def test_sell_order_done_no_line(self):
  124. '''没有订单行时审核报错'''
  125. for line in self.order.line_ids:
  126. line.unlink()
  127. with self.assertRaises(UserError):
  128. self.order.sell_order_done()
  129. def test_sell_order_done_foreign_currency(self):
  130. '''测试审核销售订单,外币免税'''
  131. self.order.currency_id = self.env.ref('base.USD')
  132. for line in self.order.line_ids:
  133. line.price_taxed = 1170
  134. line.tax_rate = 17
  135. with self.assertRaises(UserError):
  136. self.order.sell_order_done()
  137. def test_sell_order_draft(self):
  138. ''' 测试反审核销售订单 '''
  139. self.order.sell_order_done()
  140. self.order.sell_order_draft()
  141. with self.assertRaises(UserError):
  142. self.order.sell_order_draft()
  143. def test_action_view_delivery(self):
  144. """ 测试 查看发货/退货单 """
  145. self.order.sell_order_done()
  146. self.order.action_view_delivery()
  147. self.env.ref('core.jd').credit_limit = 0
  148. delivery = self.env['sell.delivery'].search(
  149. [('order_id', '=', self.order.id)])
  150. for line in delivery.line_out_ids:
  151. line.goods_qty = 1
  152. delivery.sell_delivery_done()
  153. self.order.action_view_delivery()
  154. # 先入库
  155. order_2 = self.env.ref('sell.sell_order_2')
  156. warehouse_obj = self.env.ref('warehouse.wh_in_whin0')
  157. warehouse_obj.approve_order()
  158. order_2.sell_order_done()
  159. delivery_2 = self.env['sell.delivery'].search([('order_id', '=', order_2.id)])
  160. for line in delivery_2.line_out_ids:
  161. line.goods_qty = 8
  162. delivery_2.sell_delivery_done()
  163. # len(delivery_ids) > 1
  164. order_2.action_view_delivery()
  165. # compute_delivery_count
  166. #self.assertTrue(order_2.delivery_count == 2)
  167. def test_action_view_return(self):
  168. '''该销售订单对应的退货单'''
  169. self.return_order.sell_order_done()
  170. self.return_order.action_view_return()
  171. self.assertTrue(self.return_order.return_count == 1)
  172. # len(delivery_ids) > 1
  173. delivery = self.env['sell.delivery'].search([
  174. ('order_id', '=', self.return_order.id)])
  175. for line in delivery.line_in_ids:
  176. line.goods_qty = 5
  177. line.location_id = self.env.ref('warehouse.b001_location')
  178. '''
  179. delivery.sell_delivery_done()
  180. self.return_order.action_view_return()
  181. self.assertTrue(self.return_order.return_count == 2)
  182. '''
  183. def test_sell_order_done_no_attribute(self):
  184. '''检查属性是否填充'''
  185. self.order.line_ids[0].goods_id = self.env.ref('goods.keyboard')
  186. with self.assertRaises(UserError):
  187. self.order.sell_order_done()
  188. def test_compute_net_weight(self):
  189. '''计算净重合计'''
  190. self.env.ref('goods.mouse').net_weight = 50
  191. self.order.line_ids[0].quantity = 10
  192. self.assertEqual(self.order.net_weight, 50 * 10)
  193. class TestSellOrderLine(TransactionCase):
  194. def setUp(self):
  195. super(TestSellOrderLine, self).setUp()
  196. self.order = self.env.ref('sell.sell_order_1')
  197. self.sell_order_line = self.env.ref('sell.sell_order_line_2_3')
  198. def test_compute_using_attribute(self):
  199. '''返回订单行中商品是否使用属性'''
  200. for line in self.order.line_ids:
  201. self.assertTrue(not line.using_attribute)
  202. line.goods_id = self.env.ref('goods.keyboard')
  203. self.assertTrue(line.using_attribute)
  204. def test_compute_all_amount(self):
  205. ''' 销售订单行计算字段的测试 '''
  206. self.assertEqual(self.sell_order_line.amount,
  207. 107) # tax_amount subtotal
  208. self.sell_order_line.onchange_goods_id()
  209. self.assertEqual(self.sell_order_line.tax_rate, 17.0)
  210. self.sell_order_line.price_taxed = 11.7
  211. self.sell_order_line.tax_rate = 17
  212. self.sell_order_line._compute_all_amount()
  213. self.assertEqual(self.sell_order_line.tax_amount, 15.55)
  214. self.assertEqual(self.sell_order_line.subtotal, 107)
  215. def test_compute_all_amount_foreign_currency(self):
  216. # '''外币测试:当订单行的数量、含税单价、折扣额、税率改变时,改变销售金额、税额、价税合计'''
  217. # 本位币
  218. self.order.currency_id = self.env.ref('base.CNY')
  219. for line in self.order.line_ids:
  220. line.price_taxed = 11.7
  221. self.order.currency_id = self.env.ref('base.EUR')
  222. for line in self.order.line_ids:
  223. line.price_taxed = 11.7
  224. def test_compute_all_amount_wrong_tax_rate(self):
  225. '''明细行上输入错误税率,应报错'''
  226. for line in self.order.line_ids:
  227. with self.assertRaises(UserError):
  228. line.tax_rate = -1
  229. with self.assertRaises(UserError):
  230. line.tax_rate = 102
  231. def test_onchange_price(self):
  232. '''当订单行的不含税单价改变时,改变含税单价'''
  233. for line in self.order.line_ids:
  234. line.price_taxed = 0
  235. line.price = 10
  236. line.onchange_price()
  237. self.assertAlmostEqual(line.price_taxed, 11.7)
  238. def test_onchange_goods_id(self):
  239. '''当销售订单行的商品变化时,带出商品上的单位、价格'''
  240. goods = self.env.ref('goods.keyboard')
  241. c_category_id = self.order.partner_id.c_category_id
  242. for line in self.order.line_ids:
  243. line.goods_id = goods
  244. line.onchange_goods_id()
  245. self.assertTrue(line.uom_id.name == '件')
  246. # 测试价格是否是商品的销售价
  247. self.assertTrue(line.price == goods.price)
  248. def test_onchange_goods_id_tax_rate(self):
  249. ''' 测试 修改商品时,商品行税率变化 '''
  250. self.order_line = self.env.ref('sell.sell_order_line_1')
  251. # partner 无 税率,销售单行商品无税率
  252. self.env.ref('core.jd').tax_rate = 0
  253. self.env.ref('goods.mouse').tax_rate = 0
  254. self.order_line.onchange_goods_id()
  255. # partner 有 税率,销售单行商品无税率
  256. self.env.ref('core.jd').tax_rate = 10
  257. self.env.ref('goods.mouse').tax_rate = 0
  258. self.order_line.onchange_goods_id()
  259. # partner 无税率,销售单行商品有税率
  260. self.env.ref('core.jd').tax_rate = 0
  261. self.env.ref('goods.mouse').tax_rate = 10
  262. self.order_line.onchange_goods_id()
  263. # partner 税率 > 销售单行商品税率
  264. self.env.ref('core.jd').tax_rate = 11
  265. self.env.ref('goods.mouse').tax_rate = 10
  266. self.order_line.onchange_goods_id()
  267. # partner 税率 =< 销售单行商品税率
  268. self.env.ref('core.jd').tax_rate = 9
  269. self.env.ref('goods.mouse').tax_rate = 10
  270. self.order_line.onchange_goods_id()
  271. def test_onchange_warehouse_id(self):
  272. '''仓库和商品带出价格策略的折扣率'''
  273. order_line = self.env.ref('sell.sell_order_line_1')
  274. order_line.onchange_warehouse_id()
  275. order = self.env.ref('sell.sell_order_1')
  276. order.partner_id = self.env.ref('core.yixun').id
  277. order_line.onchange_warehouse_id()
  278. # 找不到价格策略时
  279. order.date = '1999-01-01'
  280. order_line.onchange_warehouse_id()
  281. def test_onchange_discount_rate(self):
  282. ''' 销售订单行 折扣率 on_change'''
  283. self.sell_order_line.discount_rate = 20
  284. self.sell_order_line.onchange_discount_rate()
  285. self.assertEqual(round(self.sell_order_line.amount,1), 93.6)
  286. class TestApproveMultiSellOrder(TransactionCase):
  287. def setUp(self):
  288. ''' setUp Data '''
  289. super(TestApproveMultiSellOrder, self).setUp()
  290. self.env.ref('core.jd').credit_limit = 100000
  291. self.order = self.env.ref('sell.sell_order_1')
  292. self.order_2 = self.env.ref('sell.sell_order_2')
  293. self.partner_id = self.env.ref('core.jd')
  294. # 因同一个业务伙伴不能存在两张未审核的收付款单,把系统里已有的相关业务伙伴未审核的收付款单审核
  295. self.env.ref('money.get_40000').money_order_done()
  296. self.env.ref('money.pay_2000').money_order_done()
  297. def test_fields_view_get(self):
  298. ''' Test: fields_view_get '''
  299. sell_obj = self.env['approve.multi.sell.order']
  300. # 不报错的情况
  301. sell_obj.with_context({
  302. 'active_model': 'sell.order',
  303. 'active_ids': [self.order.id, self.order_2.id]
  304. }).fields_view_get(None, 'form', False, False)
  305. # 报错:存在销售订单已审核的单据
  306. self.order_2.sell_order_done()
  307. with self.assertRaises(UserError):
  308. sell_obj.with_context({
  309. 'active_model': 'sell.order',
  310. 'active_ids': [self.order.id, self.order_2.id]
  311. }).fields_view_get(None, 'form', False, False)
  312. def test_approve_sell_order(self):
  313. ''' Test: approve_sell_order '''
  314. sell_obj = self.env['approve.multi.sell.order']
  315. # 批量审核销售订单
  316. sell_obj.with_context({
  317. 'active_ids': [self.order.id, self.order_2.id]
  318. }).approve_sell_order()
  319. def test_set_default_note(self):
  320. ''' Test: set_default_note '''
  321. sell_obj = self.env['approve.multi.sell.order']
  322. # 设置默认值
  323. sell_obj.set_default_note()
上海开阖软件有限公司 沪ICP备12045867号-1