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.
102 lines
4.6 KiB
102 lines
4.6 KiB
from openerp import api, models, fields
|
|
from openerp.osv import fields, osv
|
|
from openerp import SUPERUSER_ID
|
|
|
|
##############################################################sale settings##############################################################
|
|
|
|
class Sale_config_settings(osv.TransientModel):
|
|
_inherit = 'sale.config.settings'
|
|
_columns = {
|
|
'limit_discount': fields.integer('Discount limit requires approval %', required=True,
|
|
help="Discount after which approval of sale is required."),
|
|
'module_sale_discount_approval': fields.boolean("Force two levels of approvals",
|
|
help='Provide a double validation mechanism for sale exceeding minimum discount.\n'
|
|
),
|
|
}
|
|
|
|
_defaults = {
|
|
'limit_discount': 40,
|
|
}
|
|
|
|
def get_default_limit_discount(self, cr, uid, ids, context=None):
|
|
ir_values = self.pool.get('ir.values')
|
|
limit_discount = ir_values.get_default(cr, uid, 'sale.config.settings', 'limit_discount')
|
|
return {
|
|
'limit_discount': limit_discount,
|
|
}
|
|
|
|
def set_limit_discount(self, cr, uid, ids, context=None):
|
|
ir_values = self.pool.get('ir.values')
|
|
wizard = self.browse(cr, uid, ids)[0]
|
|
if wizard.limit_discount:
|
|
limit_discount = wizard.limit_discount
|
|
ir_values.set_default(cr, SUPERUSER_ID, 'sale.config.settings', 'limit_discount', limit_discount)
|
|
|
|
def get_default_module_sale_discount_approval(self, cr, uid, ids, context=None):
|
|
ir_values = self.pool.get('ir.values')
|
|
module_sale_discount_approval = ir_values.get_default(cr, uid, 'sale.config.settings',
|
|
'module_sale_discount_approval')
|
|
return {
|
|
'module_sale_discount_approval': module_sale_discount_approval == 'True',
|
|
}
|
|
|
|
def set_module_sale_discount_approval(self, cr, uid, ids, context=None):
|
|
ir_values = self.pool.get('ir.values')
|
|
wizard = self.browse(cr, uid, ids)[0]
|
|
if wizard.module_sale_discount_approval:
|
|
module_sale_discount_approval = 'True'
|
|
else:
|
|
module_sale_discount_approval = 'False'
|
|
|
|
ir_values.set_default(cr, SUPERUSER_ID, 'sale.config.settings', 'module_sale_discount_approval',
|
|
module_sale_discount_approval)
|
|
|
|
|
|
#######################################################sale order workflow##############################################################
|
|
|
|
class SaleInherit(osv.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
_columns = {
|
|
'state': fields.selection([('draft', 'Draft Quotation'),
|
|
('sent', 'Quotation Sent'),
|
|
('cancel', 'Cancelled'),
|
|
('waiting_date', 'Waiting Schedule'),
|
|
('waitingapproval', 'Waiting Approval'),
|
|
('progress', 'Sales Order'),
|
|
('manual', 'Sale to Invoice'),
|
|
('shipping_except', 'Shipping Exception'),
|
|
('invoice_except', 'Invoice Exception'),
|
|
('done', 'Done')], required=True, track_visibility='onchange'),
|
|
}
|
|
|
|
def action_button_confirm(self, cr, uid, ids, context=None):
|
|
discnt = 0.0
|
|
no_line = 0.0
|
|
line_dicnt = 0.0
|
|
prod_price = 0.0
|
|
conf = self.pool.get('ir.values')
|
|
sale_obj = self.browse(cr, uid, ids, context)
|
|
double_valid = conf.get_default(cr, uid, 'sale.config.settings', 'module_sale_discount_approval')
|
|
if double_valid == 'True':
|
|
min_disct = conf.get_default(cr, uid, 'sale.config.settings', 'limit_discount')
|
|
for line in sale_obj.order_line:
|
|
no_line += 1
|
|
discnt += line.discount
|
|
discnt = (discnt / no_line)
|
|
if discnt >= min_disct:
|
|
assert len(ids) == 1, 'This option should only be used for a single id at a time.'
|
|
self.signal_workflow(cr, uid, ids, 'order_toapprov')
|
|
return True
|
|
else:
|
|
return super(SaleInherit, self).action_button_confirm(cr, uid, ids, context)
|
|
else:
|
|
return super(SaleInherit, self).action_button_confirm(cr, uid, ids, context)
|
|
|
|
####################################### workflow functions#############################################################################
|
|
|
|
@api.one
|
|
def wait_approval(self):
|
|
|
|
self.state = 'waitingapproval'
|
|
return True
|
|
|