[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:
Martin Trigaux
2016-09-28 16:49:18 +02:00
parent a7ba6cde9c
commit 46180408cb
9 changed files with 76 additions and 99 deletions
+1
View File
@@ -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',
+13 -9
View File
@@ -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"/>
+1
View File
@@ -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>