GoodERP
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

102 líneas
5.5KB

  1. from odoo import tools
  2. from odoo import models, fields
  3. class ReportSellSummary(models.Model):
  4. _name = 'report.sell.summary'
  5. _description = '销售汇总表'
  6. _auto = False
  7. partner_id = fields.Many2one('partner', '客户')
  8. department_id = fields.Many2one('staff.department', '部门')
  9. user_id = fields.Many2one('res.users', '销售员')
  10. goods = fields.Char('商品名')
  11. goods_id = fields.Many2one('goods', '商品')
  12. brand_id = fields.Many2one('core.value', '品牌')
  13. location = fields.Char('库位')
  14. uom = fields.Char('单位')
  15. uos = fields.Char('辅助单位')
  16. lot = fields.Char('批号')
  17. attribute_id = fields.Char('属性')
  18. warehouse = fields.Char('仓库')
  19. goods_qty = fields.Float('数量', digits='Quantity')
  20. goods_uos_qty = fields.Float(
  21. '辅助单位数量', digits='Quantity')
  22. price = fields.Float('单价', digits='Price')
  23. amount = fields.Float('销售收入', digits='Amount')
  24. tax_amount = fields.Float('税额', digits='Amount')
  25. subtotal = fields.Float('价税合计', digits='Amount')
  26. margin = fields.Float('毛利', digits='Amount')
  27. date = fields.Date('日期')
  28. last_receipt_date = fields.Date(string='最后收款日期')
  29. def init(self):
  30. cr = self._cr
  31. tools.drop_view_if_exists(cr, 'report_sell_summary')
  32. cr.execute(
  33. """
  34. create or replace view report_sell_summary as (
  35. SELECT min(wml.id) AS id,
  36. wm.partner_id AS partner_id,
  37. wm.user_id AS user_id,
  38. staff.department_id AS department_id,
  39. goods.name AS goods,
  40. goods.id AS goods_id,
  41. goods.brand AS brand_id,
  42. loc.name AS location,
  43. wml.lot AS lot,
  44. attribute.name AS attribute_id,
  45. uom.name AS uom,
  46. uos.name AS uos,
  47. wh.name AS warehouse,
  48. wm.date AS date,
  49. SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.goods_uos_qty
  50. ELSE - wml.goods_uos_qty END) AS goods_uos_qty,
  51. SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.goods_qty
  52. ELSE - wml.goods_qty END) AS goods_qty,
  53. (CASE WHEN SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.goods_qty
  54. ELSE - wml.goods_qty END) = 0 THEN 0
  55. ELSE SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.amount*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END)
  56. ELSE - wml.amount*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END) END)
  57. / SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.goods_qty
  58. ELSE - wml.goods_qty END)
  59. END) AS price,
  60. SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.amount*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END)
  61. ELSE - wml.amount*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END) END) AS amount,
  62. SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.tax_amount*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END)
  63. ELSE - wml.tax_amount*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END) END) AS tax_amount,
  64. SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.subtotal*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END)
  65. ELSE - wml.subtotal*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END) END) AS subtotal,
  66. (SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.amount*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END)
  67. ELSE - wml.amount*(CASE WHEN rc.rate is null THEN 1 ELSE rc.rate END) END) - SUM(CASE WHEN wm.origin = 'sell.delivery.sell' THEN wml.goods_qty
  68. ELSE - wml.goods_qty END) * wml.cost_unit) AS margin,
  69. mi.get_amount_date AS last_receipt_date
  70. FROM wh_move_line wml
  71. LEFT JOIN wh_move wm ON wml.move_id = wm.id
  72. LEFT JOIN res_users ru ON wm.user_id = ru.id
  73. LEFT JOIN staff ON staff.user_id = ru.id
  74. LEFT JOIN warehouse wh ON wml.warehouse_dest_id = wh.id OR wml.warehouse_id = wh.id
  75. LEFT JOIN goods goods ON wml.goods_id = goods.id
  76. LEFT JOIN uom uom ON goods.uom_id = uom.id
  77. LEFT JOIN uom uos ON goods.uos_id = uos.id
  78. LEFT JOIN attribute attribute on attribute.id = wml.attribute_id
  79. LEFT JOIN location loc ON loc.goods_id = wml.goods_id
  80. LEFT JOIN sell_delivery AS sd ON wm.id = sd.sell_move_id
  81. LEFT JOIN money_invoice AS mi ON mi.id = sd.invoice_id
  82. LEFT JOIN res_currency_rate AS rc ON sd.currency_id = rc.currency_id
  83. WHERE wh.type = 'stock'
  84. AND wml.state = 'done'
  85. AND wm.origin like 'sell.delivery%%'
  86. AND (goods.no_stock is null or goods.no_stock = FALSE)
  87. GROUP BY wm.partner_id, wm.user_id, staff.department_id, goods.name, goods.id, goods.brand, loc.name, wml.lot, attribute.name, uom.name, uos.name, wh.name, wml.cost_unit,wm.date,
  88. mi.get_amount_date
  89. ORDER BY goods.name, wh.name, goods_qty asc
  90. )
  91. """)
上海开阖软件有限公司 沪ICP备12045867号-1