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.

99 line
4.0KB

  1. # -*- coding: utf-8 -*-
  2. # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  4. from odoo import _
  5. from odoo import fields, models, api, tools
  6. class BuyOrderDetail(models.Model):
  7. _name = 'buy.order.detail'
  8. _description = '采购入库明细表'
  9. _auto = False
  10. date = fields.Date('采购日期')
  11. order_name = fields.Char('采购单据号')
  12. type = fields.Char('业务类型')
  13. partner_id = fields.Many2one('partner', '供应商')
  14. goods_code = fields.Char('商品编码')
  15. goods_id = fields.Many2one('goods', '商品名称')
  16. attribute = fields.Char('属性')
  17. warehouse_dest_id = fields.Many2one('warehouse', '仓库')
  18. qty = fields.Float('数量', digits='Quantity')
  19. uom = fields.Char('单位')
  20. price = fields.Float('单价', digits='Price')
  21. amount = fields.Float(
  22. '采购金额', digits='Amount') # 商品的采购金额
  23. tax_amount = fields.Float('税额', digits='Amount')
  24. subtotal = fields.Float('价税合计', digits='Amount')
  25. note = fields.Char('备注')
  26. def init(self):
  27. cr = self._cr
  28. tools.drop_view_if_exists(cr, 'buy_order_detail')
  29. cr.execute("""
  30. CREATE or REPLACE VIEW buy_order_detail AS (
  31. SELECT MIN(wml.id) AS id,
  32. wm.date AS date,
  33. wm.name AS order_name,
  34. (CASE WHEN wm.origin = 'buy.receipt.buy' THEN '采购'
  35. ELSE '退货' END) AS type,
  36. wm.partner_id AS partner_id,
  37. goods.code AS goods_code,
  38. goods.id AS goods_id,
  39. attr.name AS attribute,
  40. wh.id AS warehouse_dest_id,
  41. SUM(CASE WHEN wm.origin = 'buy.receipt.buy' THEN wml.goods_qty
  42. ELSE - wml.goods_qty END) AS qty,
  43. uom.name AS uom,
  44. wml.price AS price,
  45. SUM(CASE WHEN wm.origin = 'buy.receipt.buy' THEN wml.amount
  46. ELSE - wml.amount END) AS amount,
  47. SUM(CASE WHEN wm.origin = 'buy.receipt.buy' THEN wml.tax_amount
  48. ELSE - wml.tax_amount END) AS tax_amount,
  49. SUM(CASE WHEN wm.origin = 'buy.receipt.buy' THEN wml.subtotal
  50. ELSE - wml.subtotal END) AS subtotal,
  51. wml.note AS note
  52. FROM wh_move_line AS wml
  53. LEFT JOIN wh_move wm ON wml.move_id = wm.id
  54. LEFT JOIN partner ON wm.partner_id = partner.id
  55. LEFT JOIN goods ON wml.goods_id = goods.id
  56. LEFT JOIN attribute AS attr ON wml.attribute_id = attr.id
  57. LEFT JOIN warehouse AS wh ON wml.warehouse_id = wh.id
  58. OR wml.warehouse_dest_id = wh.id
  59. LEFT JOIN uom ON goods.uom_id = uom.id
  60. LEFT JOIN buy_receipt AS br ON wm.id = br.buy_move_id
  61. WHERE wml.state = 'done'
  62. AND wm.origin like 'buy.receipt%%'
  63. AND wh.type = 'stock'
  64. GROUP BY wm.date, wm.name, origin, wm.partner_id,
  65. goods_code, goods.id, attribute, wh.id, uom,
  66. wml.price, wml.note
  67. )
  68. """)
  69. def view_detail(self):
  70. '''查看明细按钮'''
  71. self.ensure_one()
  72. order = self.env['buy.receipt'].search(
  73. [('name', '=', self.order_name)])
  74. if order:
  75. if not order.is_return:
  76. view = self.env.ref('buy.buy_receipt_form')
  77. else:
  78. view = self.env.ref('buy.buy_return_form')
  79. return {
  80. 'name': _('采购入库单'),
  81. '': 'form',
  82. 'view_mode': 'form',
  83. 'view_id': False,
  84. 'views': [(view.id, 'form')],
  85. 'res_model': 'buy.receipt',
  86. 'type': 'ir.actions.act_window',
  87. 'res_id': order.id,
  88. }
上海开阖软件有限公司 沪ICP备12045867号-1