From 11e25fb29195f3e2ec45b5b96bafbe97bd1fa5b2 Mon Sep 17 00:00:00 2001 From: cybroodoo Date: Wed, 15 Jun 2016 11:29:37 +0530 Subject: [PATCH] [FIX]Rounding on SO,Decimal points in invoice print --- sale_discount_total/__openerp__.py~ | 34 ------- sale_discount_total/models/__init__.py~ | 2 - sale_discount_total/models/account_invoice.py | 29 +++--- .../models/account_invoice.py~ | 88 ------------------ sale_discount_total/models/sale.py | 46 +++++++--- sale_discount_total/models/sale.py~ | 91 ------------------- sale_discount_total/report/invoice_report.py | 3 +- sale_discount_total/report/sale_report.py | 3 +- sale_discount_total/views/invoice_report.xml | 6 +- sale_discount_total/views/invoice_report.xml~ | 87 ------------------ .../views/sale_order_report.xml | 6 ++ .../views/sale_order_report.xml~ | 40 -------- sale_discount_total/views/sale_view.xml | 15 +++ 13 files changed, 72 insertions(+), 378 deletions(-) delete mode 100644 sale_discount_total/__openerp__.py~ delete mode 100644 sale_discount_total/models/__init__.py~ delete mode 100644 sale_discount_total/models/account_invoice.py~ delete mode 100644 sale_discount_total/models/sale.py~ delete mode 100644 sale_discount_total/views/invoice_report.xml~ delete mode 100644 sale_discount_total/views/sale_order_report.xml~ diff --git a/sale_discount_total/__openerp__.py~ b/sale_discount_total/__openerp__.py~ deleted file mode 100644 index d0b5a7ac0..000000000 --- a/sale_discount_total/__openerp__.py~ +++ /dev/null @@ -1,34 +0,0 @@ -{ - 'name': 'Sale Discount for Total Amount', - 'version': '1.0', - 'category': 'sale', - 'sequence': 6, - 'summary': "extension of default Sale Management module meant to provide discount for total amount", - 'author': 'Cybrosys Techno Solutions', - 'company': 'Cybrosys Techno Solutions', - 'website': 'http://www.cybrosys.com', - - 'description': """ - -Sale Discount for Total Amount -======================= -Module to manage discount for total amount in Sale. - Two Type of Discount, - Discount by a fixed value, - Discount by a percentage... -""", - 'depends': ['sale', 'base', 'stock'], - 'data': [ - 'views/sale_view.xml', - 'views/account_invoice_view.xml', - 'views/invoice_report.xml', - 'views/sale_order_report.xml', - 'views/sale_discount_approval_view.xml', - 'views/sale_discount_approval_workflow.xml' - - ], - 'demo': [ - ], - 'installable': True, - 'auto_install': False, -} diff --git a/sale_discount_total/models/__init__.py~ b/sale_discount_total/models/__init__.py~ deleted file mode 100644 index aa35028cb..000000000 --- a/sale_discount_total/models/__init__.py~ +++ /dev/null @@ -1,2 +0,0 @@ -import account_invoice -import sale diff --git a/sale_discount_total/models/account_invoice.py b/sale_discount_total/models/account_invoice.py index 257a202b8..d8a875de8 100644 --- a/sale_discount_total/models/account_invoice.py +++ b/sale_discount_total/models/account_invoice.py @@ -61,22 +61,19 @@ class AccountInvoice(models.Model): @api.onchange('discount_type', 'discount_rate') def supply_rate(self): for inv in self: - amount = sum(line.price_subtotal for line in self.invoice_line) - tax = sum(line.amount for line in self.tax_line) - if inv.discount_type == 'percent': - self.compute_discount(inv.discount_rate) - else: - total = 0.0 - discount = 0.0 - for line in inv.invoice_line: - total += (line.quantity * line.price_unit) - if inv.discount_rate != 0: - print "#########################################" - discount = (inv.discount_rate / total) * 100 - print dp.get_precision('Discount'), - print discount - self.compute_discount(discount) - + if inv.discount_rate != 0: + amount = sum(line.price_subtotal for line in self.invoice_line) + tax = sum(line.amount for line in self.tax_line) + if inv.discount_type == 'percent': + self.compute_discount(inv.discount_rate) + else: + total = 0.0 + discount = 0.0 + for line in inv.invoice_line: + total += (line.quantity * line.price_unit) + if inv.discount_rate != 0: + discount = (inv.discount_rate / total) * 100 + self.compute_discount(discount) @api.model def _prepare_refund(self, invoice, date=None, period_id=None, description=None, journal_id=None): diff --git a/sale_discount_total/models/account_invoice.py~ b/sale_discount_total/models/account_invoice.py~ deleted file mode 100644 index e7ce609cd..000000000 --- a/sale_discount_total/models/account_invoice.py~ +++ /dev/null @@ -1,88 +0,0 @@ -from openerp import api, models, fields -from openerp.osv import osv -import openerp.addons.decimal_precision as dp - - -class AccountInvoice(models.Model): - _inherit = "account.invoice" - - @api.one - @api.depends('invoice_line.price_subtotal', 'tax_line.amount') - def _compute_amount(self): - self.amount_untaxed = sum(line.price_subtotal for line in self.invoice_line) - self.amount_tax = sum(line.amount for line in self.tax_line) - if self.discount_type == 'percent': - self.amount_discount = ((self.amount_untaxed + self.amount_tax) * self.discount_rate) / 100 - elif self.discount_type == 'amount': - self.amount_discount = self.discount_rate - self.amount_total = self.amount_untaxed + self.amount_tax - self.amount_discount - - discount_type = fields.Selection([('percent', 'Percentage'), ('amount', 'Amount')], 'Discount Type', readonly=True, - states={'draft': [('readonly', False)]}) - discount_rate = fields.Float('Discount rate', digits_compute=dp.get_precision('Account'), readonly=True, - states={'draft': [('readonly', False)]}) - amount_discount = fields.Float(string='Discount', digits=dp.get_precision('Account'), - readonly=True, compute='_compute_amount') - amount_untaxed = fields.Float(string='Subtotal', digits=dp.get_precision('Account'), - readonly=True, compute='_compute_amount', track_visibility='always') - amount_tax = fields.Float(string='Tax', digits=dp.get_precision('Account'), - readonly=True, compute='_compute_amount') - amount_total = fields.Float(string='Total', digits=dp.get_precision('Account'), - readonly=True, compute='_compute_amount') - - @api.onchange('discount_type', 'discount_rate') - def compute_discount(self): - for inv in self: - amount = sum(line.price_subtotal for line in self.invoice_line) - tax = sum(line.amount for line in self.tax_line) - if inv.discount_type == 'percent': - if inv.discount_rate == 100: - disc_amnt = amount + tax - else: - disc_amnt = (amount + tax) * inv.discount_rate / 100 - total = amount + tax - disc_amnt - self.amount_discount = disc_amnt - self.amount_total = total - else: - total = (amount + tax) - inv.discount_rate - self.amount_discount = inv.discount_rate - self.amount_total = total - - @api.model - def _prepare_refund(self, invoice, date=None, period_id=None, description=None, journal_id=None): - res = super(AccountInvoice, self)._prepare_refund(invoice, date, period_id, - description, journal_id) - res.update({ - 'discount_type': self.discount_type, - 'discount_rate': self.discount_rate, - }) - return res - - -class invoice_line(osv.Model): - _inherit = 'account.invoice.line' - - def move_line_get(self, cr, uid, invoice_id, context=None): - res = super(invoice_line, self).move_line_get(cr, uid, invoice_id, context=context) - inv = self.pool.get('account.invoice').browse(cr, uid, invoice_id, context=context) - - if inv.type in ('out_invoice', 'out_refund') and inv.discount_type: - prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', - context=context) - prop_id = prop and prop.id or False - account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, inv.fiscal_position or False, - prop_id) - sign = -1 - - res.append({ - 'name': 'Discount', - 'price_unit': sign * inv.amount_discount, - 'quantity': 1, - 'price': sign * inv.amount_discount, - 'account_id': account_id, - 'product_id': False, - 'uos_id': False, - 'account_analytic_id': False, - 'taxes': False, - }) - return res diff --git a/sale_discount_total/models/sale.py b/sale_discount_total/models/sale.py index e68d28d39..91932ff7d 100644 --- a/sale_discount_total/models/sale.py +++ b/sale_discount_total/models/sale.py @@ -22,10 +22,10 @@ class SaleOrder(osv.Model): val1 += line.price_subtotal val2 += self._amount_line_tax(cr, uid, line, context=context) val3 += (line.product_uom_qty * line.price_unit) * line.discount / 100 - res[order.id]['amount_untaxed'] = round(cur_obj.round(cr, uid, cur, val1)) - res[order.id]['amount_tax'] = round(cur_obj.round(cr, uid, cur, val2)) - res[order.id]['amount_discount'] = round(cur_obj.round(cr, uid, cur, val3)) - res[order.id]['amount_total'] = round(res[order.id]['amount_untaxed'] + res[order.id]['amount_tax']) + res[order.id]['amount_untaxed'] = cur_obj.round(cr, uid, cur, val1) + res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val2) + res[order.id]['amount_discount'] = cur_obj.round(cr, uid, cur, val3) + res[order.id]['amount_total'] = res[order.id]['amount_untaxed'] + res[order.id]['amount_tax'] return res def _get_order(self, cr, uid, ids, context=None): @@ -68,21 +68,27 @@ class SaleOrder(osv.Model): disc_amnt += (line.product_uom_qty * line.price_unit * line.discount)/100 total = val1 + val2 - disc_amnt self.currency_id = order.pricelist_id.currency_id - self.amount_discount = round(disc_amnt) - self.amount_tax = round(val2) - self.amount_total = round(total) + self.amount_discount = disc_amnt + self.amount_tax = val2 + self.amount_total = total @api.onchange('discount_type', 'discount_rate') def supply_rate(self): for order in self: - if order.discount_type == 'percent': - self.compute_discount(order.discount_rate) - else: - total = 0.0 - for line in order.order_line: - total += (line.product_uom_qty * line.price_unit) - discount = (order.discount_rate / total) * 100 - self.compute_discount(discount) + if order.discount_rate != 0: + if order.discount_type == 'percent': + self.compute_discount(order.discount_rate) + else: + total = 0.0 + for line in order.order_line: + total += (line.product_uom_qty * line.price_unit) + discount = (order.discount_rate / total) * 100 + self.compute_discount(discount) + + @api.multi + def button_dummy(self): + self.supply_rate() + return True def _prepare_invoice(self, cr, uid, order, lines, context=None): invoice_vals = super(SaleOrder, self)._prepare_invoice(cr, uid, order, lines, context=context) @@ -91,3 +97,13 @@ class SaleOrder(osv.Model): 'discount_rate': order.discount_rate }) return invoice_vals + +class SaleOrderLine(osv.Model): + _inherit = "sale.order.line" + + _columns = { + 'discount': fields.float(string='Discount (%)', + digits=(16, 10), + # digits= dp.get_precision('Discount'), + default=0.0), + } \ No newline at end of file diff --git a/sale_discount_total/models/sale.py~ b/sale_discount_total/models/sale.py~ deleted file mode 100644 index 7ad50b7f9..000000000 --- a/sale_discount_total/models/sale.py~ +++ /dev/null @@ -1,91 +0,0 @@ -from openerp.osv import fields, osv -from openerp import api -import openerp.addons.decimal_precision as dp - - -class SaleOrder(osv.Model): - _inherit = 'sale.order' - - def _amount_all(self, cr, uid, ids, field_name, arg, context=None): - cur_obj = self.pool.get('res.currency') - res = {} - for order in self.browse(cr, uid, ids, context=context): - res[order.id] = { - 'amount_untaxed': 0.0, - 'amount_discount': 0.0, - 'amount_tax': 0.0, - 'amount_total': 0.0, - } - val = val1 = val2 = 0.0 - cur = order.pricelist_id.currency_id - for line in order.order_line: - val1 += line.price_subtotal - val += self._amount_line_tax(cr, uid, line, context=context) - if order.discount_type == 'amount': - val2 = order.discount_rate - elif order.discount_type == 'percent': - val2 = ((val1 + val) * order.discount_rate) / 100 - res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val) - res[order.id]['amount_untaxed'] = cur_obj.round(cr, uid, cur, val1) - res[order.id]['amount_discount'] = cur_obj.round(cr, uid, cur, val2) - res[order.id]['amount_total'] = res[order.id]['amount_untaxed'] + res[order.id]['amount_tax'] - \ - res[order.id]['amount_discount'] - return res - - def _get_order(self, cr, uid, ids, context=None): - result = {} - for line in self.pool.get('sale.order.line').browse(cr, uid, ids, context=context): - result[line.order_id.id] = True - return result.keys() - - _columns = { - 'discount_type': fields.selection([ - ('percent', 'Percentage'), - ('amount', 'Amount')], 'Discount type'), - 'discount_rate': fields.float('Discount Amount', digits_compute=dp.get_precision('Account'), - readonly=True, - states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, ), - 'amount_discount': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Discount', - multi='sums', help="The total discount."), - 'amount_untaxed': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), - string='Untaxed Amount', - multi='sums', help="The amount without tax.", track_visibility='always'), - 'amount_tax': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Taxes', - multi='sums', help="The tax amount."), - 'amount_total': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Total', - multi='sums', help="The total amount."), - } - - _defaults = { - 'discount_type': 'percent', - } - - @api.onchange('discount_type', 'discount_rate') - def compute_discount(self): - for order in self: - val1 = val2 = 0.0 - for line in order.order_line: - val1 += line.price_subtotal - val2 += self._amount_line_tax(line) - if order.discount_type == 'percent': - if order.discount_rate == 100: - disc_amnt = val1 + val2 - else: - disc_amnt = (val1 + val2) * order.discount_rate / 100 - total = val1 + val2 - disc_amnt - self.currency_id = order.pricelist_id.currency_id - self.amount_discount = disc_amnt - self.amount_total = total - else: - total = (val1 + val2) - order.discount_rate - self.currency_id = order.pricelist_id.currency_id - self.amount_discount = order.discount_rate - self.amount_total = total - - def _prepare_invoice(self, cr, uid, order, lines, context=None): - invoice_vals = super(SaleOrder, self)._prepare_invoice(cr, uid, order, lines, context=context) - invoice_vals.update({ - 'discount_type': order.discount_type, - 'discount_rate': order.discount_rate - }) - return invoice_vals diff --git a/sale_discount_total/report/invoice_report.py b/sale_discount_total/report/invoice_report.py index 352d533b0..5118b72e7 100644 --- a/sale_discount_total/report/invoice_report.py +++ b/sale_discount_total/report/invoice_report.py @@ -1,11 +1,12 @@ from openerp.osv import fields, osv +import openerp.addons.decimal_precision as dp class DiscountInvoiceReport(osv.osv): _inherit = 'account.invoice.report' _columns = { - 'discount': fields.float('Discount', readonly=True), + 'discount': fields.float('Discount', readonly=True,digits=dp.get_precision('Discount')), } def _select(self): diff --git a/sale_discount_total/report/sale_report.py b/sale_discount_total/report/sale_report.py index 29b95b06f..6e6c185d1 100644 --- a/sale_discount_total/report/sale_report.py +++ b/sale_discount_total/report/sale_report.py @@ -1,11 +1,12 @@ from openerp.osv import fields, osv +import openerp.addons.decimal_precision as dp class DiscountSaleReport(osv.osv): _inherit = 'sale.report' _columns = { - 'discount': fields.float('Discount', readonly=True), + 'discount': fields.float('Discount', readonly=True, digits=dp.get_precision('Discount')), } def _select(self): diff --git a/sale_discount_total/views/invoice_report.xml b/sale_discount_total/views/invoice_report.xml index 623e9d606..53d2f8491 100644 --- a/sale_discount_total/views/invoice_report.xml +++ b/sale_discount_total/views/invoice_report.xml @@ -28,7 +28,8 @@ - + + @@ -44,7 +45,7 @@ - --> + Discount @@ -53,7 +54,6 @@ - diff --git a/sale_discount_total/views/invoice_report.xml~ b/sale_discount_total/views/invoice_report.xml~ deleted file mode 100644 index 08742101d..000000000 --- a/sale_discount_total/views/invoice_report.xml~ +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/sale_discount_total/views/sale_order_report.xml b/sale_discount_total/views/sale_order_report.xml index 8ff36ed09..6821d610c 100644 --- a/sale_discount_total/views/sale_order_report.xml +++ b/sale_discount_total/views/sale_order_report.xml @@ -3,6 +3,12 @@