[IMP] point_of_sale: restore proper sales of the day report
The previous report was a workaround to avoid changing the model in the stable version using a custom widget. Replace by a proper wizard.
This commit is contained in:
@@ -34,6 +34,7 @@ Main Features
|
||||
'security/ir.model.access.csv',
|
||||
'data/default_barcode_patterns.xml',
|
||||
'wizard/pos_box.xml',
|
||||
'wizard/pos_details.xml',
|
||||
'wizard/pos_discount.xml',
|
||||
'wizard/pos_open_statement.xml',
|
||||
'wizard/pos_payment.xml',
|
||||
|
||||
@@ -790,13 +790,13 @@ class ReportSaleDetails(models.AbstractModel):
|
||||
|
||||
|
||||
@api.model
|
||||
def get_sale_details(self, date_start=False, date_stop=False, company=False):
|
||||
def get_sale_details(self, date_start=False, date_stop=False, configs=False):
|
||||
""" Serialise the orders of the day information
|
||||
|
||||
params: date_start, date_stop string representing the day of order
|
||||
params: date_start, date_stop string representing the datetime of order
|
||||
"""
|
||||
if not company:
|
||||
company = self.env.user.company_id
|
||||
if not configs:
|
||||
configs = self.env['pos.config'].search([])
|
||||
|
||||
today = fields.Datetime.from_string(fields.Date.context_today(self))
|
||||
if date_start:
|
||||
@@ -807,7 +807,7 @@ class ReportSaleDetails(models.AbstractModel):
|
||||
|
||||
if date_stop:
|
||||
# set time to 23:59:59
|
||||
date_stop = fields.Datetime.from_string(date_stop) + timedelta(days=1, seconds=-1)
|
||||
date_stop = fields.Datetime.from_string(date_stop)
|
||||
else:
|
||||
# stop by default today 23:59:59
|
||||
date_stop = today + timedelta(days=1, seconds=-1)
|
||||
@@ -817,9 +817,13 @@ class ReportSaleDetails(models.AbstractModel):
|
||||
|
||||
date_start = fields.Datetime.to_string(date_start)
|
||||
date_stop = fields.Datetime.to_string(date_stop)
|
||||
orders = self.env['pos.order'].search([('date_order', '>=', date_start), ('date_order', '<=', date_stop),
|
||||
('state', 'in', ['paid','invoiced','done']),
|
||||
('company_id', '=', company.id)])
|
||||
|
||||
orders = self.env['pos.order'].search([
|
||||
('date_order', '>=', date_start),
|
||||
('date_order', '<=', date_stop),
|
||||
('state', 'in', ['paid','invoiced','done']),
|
||||
('config_id', 'in', configs.ids)])
|
||||
|
||||
user_currency = self.env.user.company_id.currency_id
|
||||
|
||||
total = 0.0
|
||||
@@ -876,7 +880,7 @@ class ReportSaleDetails(models.AbstractModel):
|
||||
}
|
||||
|
||||
@api.multi
|
||||
def render_html(self, data=None):
|
||||
def render_html(self, docids, data=None):
|
||||
company = request.env.user.company_id
|
||||
date_start = self.env.context.get('date_start', False)
|
||||
date_stop = self.env.context.get('date_stop', False)
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
odoo.define('point_of_sale.report', function (require) {
|
||||
"use strict";
|
||||
|
||||
var chat_manager = require('mail.chat_manager');
|
||||
var composer = require('mail.composer');
|
||||
var ChatThread = require('mail.ChatThread');
|
||||
var utils = require('mail.utils');
|
||||
|
||||
var config = require('web.config');
|
||||
var core = require('web.core');
|
||||
var data = require('web.data');
|
||||
var Dialog = require('web.Dialog');
|
||||
var framework = require('web.framework');
|
||||
var Model = require('web.Model');
|
||||
|
||||
var pyeval = require('web.pyeval');
|
||||
var SearchView = require('web.SearchView');
|
||||
|
||||
var ActionManager = require('web.ActionManager');
|
||||
var ControlPanelMixin = require('web.ControlPanelMixin');
|
||||
var datepicker = require('web.datepicker');
|
||||
var Widget = require('web.Widget');
|
||||
|
||||
var QWeb = core.qweb;
|
||||
var _t = core._t;
|
||||
|
||||
// TODO replace in v10 with proper wizard
|
||||
var PosDetailsWidget = Widget.extend(ControlPanelMixin, {
|
||||
template: 'WizardSaleDetailsReport',
|
||||
events: {
|
||||
"click .js_generate": "renderReport",
|
||||
},
|
||||
|
||||
renderElement: function() {
|
||||
this._super();
|
||||
|
||||
var current_date = new moment();
|
||||
this.dp_start = new datepicker.DateWidget(this);
|
||||
this.dp_start.insertBefore(this.$el.find('.js_date_start'));
|
||||
this.dp_start.set_value(current_date.format('YYYY-MM-DD'));
|
||||
|
||||
this.dp_stop = new datepicker.DateWidget(this);
|
||||
this.dp_stop.insertAfter(this.$el.find('.js_date_stop'));
|
||||
this.dp_stop.set_value(current_date.format('YYYY-MM-DD'));
|
||||
|
||||
},
|
||||
|
||||
renderReport: function() {
|
||||
var start = this.dp_start.get_value();
|
||||
var stop = this.dp_stop.get_value();
|
||||
var url = '/pos/sale_details_report?date_start='+start+'&date_stop='+stop;
|
||||
window.open(url, '_blank');
|
||||
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
core.action_registry.add('report_pos_details', PosDetailsWidget);
|
||||
|
||||
return PosDetailsWidget;
|
||||
|
||||
});
|
||||
@@ -938,30 +938,6 @@
|
||||
</t>
|
||||
|
||||
|
||||
<t t-name="WizardSaleDetailsReport">
|
||||
<div class="o_form_view"><div class="oe_form_sheetbg o_form_sheet_bg"><div class="oe_form_sheet oe_form_sheet_width o_form_sheet">
|
||||
<div class="pos_details_dates">
|
||||
<h3>Select Dates for the report</h3>
|
||||
<table class="table-condensed">
|
||||
<tr>
|
||||
<td><strong>Start date</strong></td>
|
||||
<td><div class="js_date_start"></div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Stop date</strong></td>
|
||||
<td><div class="js_date_stop"></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
<button class="js_generate">Generate report</button>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div></div></div>
|
||||
</t>
|
||||
|
||||
|
||||
<t t-name="PopupWidget">
|
||||
<div class="modal-dialog">
|
||||
<div class="popup popup-alert">
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
<xpath expr="." position="inside">
|
||||
<link rel="stylesheet" href="/point_of_sale/static/src/less/pos_dashboard.less"/>
|
||||
<script type="text/javascript" src="/point_of_sale/static/src/js/tour.js"></script>
|
||||
<script type="text/javascript" src="/point_of_sale/static/src/js/report.js"></script>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
||||
|
||||
@@ -68,9 +68,12 @@
|
||||
<field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_pos_details" model="ir.actions.client">
|
||||
|
||||
<record id="action_report_pos_details" model="ir.actions.act_window">
|
||||
<field name="name">Sale Details</field>
|
||||
<field name="tag">report_pos_details</field>
|
||||
<field name="res_model">pos.details.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_report_pos_order_all" name="Orders" action="action_report_pos_order_all" parent="menu_point_rep" sequence="3"/>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import pos_box
|
||||
import pos_details
|
||||
import pos_discount
|
||||
import pos_open_statement
|
||||
import pos_payment
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class PosDetails(models.TransientModel):
|
||||
_name = 'pos.details.wizard'
|
||||
_description = 'Open Sale Details Report'
|
||||
|
||||
start_date = fields.Datetime(required=True, default=fields.Datetime.now)
|
||||
end_date = fields.Datetime(required=True, default=fields.Datetime.now)
|
||||
pos_config_ids = fields.Many2many('pos.config', 'pos_detail_configs',
|
||||
default=lambda s: s.env['pos.config'].search([]))
|
||||
|
||||
@api.onchange('start_date')
|
||||
def _onchange_start_date(self):
|
||||
if self.start_date and self.end_date and self.end_date < self.start_date:
|
||||
self.end_date = self.start_date
|
||||
|
||||
@api.onchange('end_date')
|
||||
def _onchange_end_date(self):
|
||||
if self.end_date and self.end_date < self.start_date:
|
||||
self.start_date = self.end_date
|
||||
|
||||
@api.multi
|
||||
def generate_report(self):
|
||||
data = {'date_start': self.start_date, 'date_stop': self.end_date}
|
||||
data.update(self.env['report.point_of_sale.report_saledetails'].get_sale_details(
|
||||
self.start_date, self.end_date, self.pos_config_ids))
|
||||
return self.env['report'].get_action(
|
||||
[], 'point_of_sale.report_saledetails', data=data)
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_pos_details_wizard" model="ir.ui.view">
|
||||
<field name="name">pos.details.wizard.form</field>
|
||||
<field name="model">pos.details.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Sale Details">
|
||||
<group>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="pos_config_ids" colspan="4" nolabel="1" />
|
||||
</group>
|
||||
<footer>
|
||||
<button name="generate_report" string="Print" type="object" class="btn-primary"/>
|
||||
<button string="Cancel" class="btn-default" special="cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user