[MERGE] Merged with addons/trunk.
bzr revid: tde@openerp.com-20120814194449-lbgwttiax09fhvj6
This commit is contained in:
commit
9056c6dfe8
|
@ -1351,11 +1351,11 @@ class account_invoice_line(osv.osv):
|
||||||
'uos_id': fields.many2one('product.uom', 'Unit of Measure', ondelete='set null'),
|
'uos_id': fields.many2one('product.uom', 'Unit of Measure', ondelete='set null'),
|
||||||
'product_id': fields.many2one('product.product', 'Product', ondelete='set null'),
|
'product_id': fields.many2one('product.product', 'Product', ondelete='set null'),
|
||||||
'account_id': fields.many2one('account.account', 'Account', required=True, domain=[('type','<>','view'), ('type', '<>', 'closed')], help="The income or expense account related to the selected product."),
|
'account_id': fields.many2one('account.account', 'Account', required=True, domain=[('type','<>','view'), ('type', '<>', 'closed')], help="The income or expense account related to the selected product."),
|
||||||
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Account')),
|
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),
|
||||||
'price_subtotal': fields.function(_amount_line, string='Subtotal', type="float",
|
'price_subtotal': fields.function(_amount_line, string='Subtotal', type="float",
|
||||||
digits_compute= dp.get_precision('Account'), store=True),
|
digits_compute= dp.get_precision('Account'), store=True),
|
||||||
'quantity': fields.float('Quantity', required=True),
|
'quantity': fields.float('Quantity', digits_compute= dp.get_precision('Product Unit of Measure'), required=True),
|
||||||
'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Account')),
|
'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Discount')),
|
||||||
'invoice_line_tax_id': fields.many2many('account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id', 'Taxes', domain=[('parent_id','=',False)]),
|
'invoice_line_tax_id': fields.many2many('account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id', 'Taxes', domain=[('parent_id','=',False)]),
|
||||||
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'),
|
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'),
|
||||||
'company_id': fields.related('invoice_id','company_id',type='many2one',relation='res.company',string='Company', store=True, readonly=True),
|
'company_id': fields.related('invoice_id','company_id',type='many2one',relation='res.company',string='Company', store=True, readonly=True),
|
||||||
|
|
|
@ -31,7 +31,7 @@ openerp.auth_reset_password = function(instance) {
|
||||||
},
|
},
|
||||||
do_reset_password: function(db, email) {
|
do_reset_password: function(db, email) {
|
||||||
var self = this;
|
var self = this;
|
||||||
instance.connection.session_authenticate(db, 'anonymous', 'anonymous', true).pipe(function () {
|
instance.session.session_authenticate(db, 'anonymous', 'anonymous', true).pipe(function () {
|
||||||
var func = new instance.web.Model("res.users").get_func("send_reset_password_request");
|
var func = new instance.web.Model("res.users").get_func("send_reset_password_request");
|
||||||
return func(email).then(function(res) {
|
return func(email).then(function(res) {
|
||||||
// show message
|
// show message
|
||||||
|
|
|
@ -12,7 +12,7 @@ openerp.auth_signup = function(instance) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var cnx = instance.connection;
|
var cnx = instance.session;
|
||||||
if (cnx.session_is_valid()) {
|
if (cnx.session_is_valid()) {
|
||||||
self._signup();
|
self._signup();
|
||||||
} else {
|
} else {
|
||||||
|
@ -83,7 +83,7 @@ openerp.auth_signup = function(instance) {
|
||||||
type: 'ir.actions.client',
|
type: 'ir.actions.client',
|
||||||
tag: 'login',
|
tag: 'login',
|
||||||
params: {
|
params: {
|
||||||
db: instance.connection.db,
|
db: instance.session.db,
|
||||||
login: email,
|
login: email,
|
||||||
password: password,
|
password: password,
|
||||||
login_successful: function() {
|
login_successful: function() {
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
import time
|
import time
|
||||||
from osv import fields,osv
|
from osv import fields,osv
|
||||||
from tools.translate import _
|
from tools.translate import _
|
||||||
|
import decimal_precision as dp
|
||||||
|
|
||||||
class delivery_carrier(osv.osv):
|
class delivery_carrier(osv.osv):
|
||||||
_name = "delivery.carrier"
|
_name = "delivery.carrier"
|
||||||
|
@ -237,8 +238,8 @@ class delivery_grid_line(osv.osv):
|
||||||
'max_value': fields.float('Maximum Value', required=True),
|
'max_value': fields.float('Maximum Value', required=True),
|
||||||
'price_type': fields.selection([('fixed','Fixed'),('variable','Variable')], 'Price Type', required=True),
|
'price_type': fields.selection([('fixed','Fixed'),('variable','Variable')], 'Price Type', required=True),
|
||||||
'variable_factor': fields.selection([('weight','Weight'),('volume','Volume'),('wv','Weight * Volume'), ('price','Price')], 'Variable Factor', required=True),
|
'variable_factor': fields.selection([('weight','Weight'),('volume','Volume'),('wv','Weight * Volume'), ('price','Price')], 'Variable Factor', required=True),
|
||||||
'list_price': fields.float('Sale Price', required=True),
|
'list_price': fields.float('Sale Price', digits_compute= dp.get_precision('Product Price'), required=True),
|
||||||
'standard_price': fields.float('Cost Price', required=True),
|
'standard_price': fields.float('Cost Price', digits_compute= dp.get_precision('Product Price'), required=True),
|
||||||
}
|
}
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'type': lambda *args: 'weight',
|
'type': lambda *args: 'weight',
|
||||||
|
|
|
@ -6,7 +6,7 @@ openerp.edi.EdiView = openerp.web.Widget.extend({
|
||||||
this._super();
|
this._super();
|
||||||
this.db = db;
|
this.db = db;
|
||||||
this.token = token;
|
this.token = token;
|
||||||
this.session = openerp.connection;
|
this.session = openerp.session;
|
||||||
this.template = "EdiEmpty";
|
this.template = "EdiEmpty";
|
||||||
this.content = "";
|
this.content = "";
|
||||||
this.sidebar = "";
|
this.sidebar = "";
|
||||||
|
@ -108,7 +108,7 @@ openerp.edi.EdiView = openerp.web.Widget.extend({
|
||||||
});
|
});
|
||||||
|
|
||||||
openerp.edi.edi_view = function (db, token) {
|
openerp.edi.edi_view = function (db, token) {
|
||||||
openerp.connection.session_bind().then(function () {
|
openerp.session.session_bind().then(function () {
|
||||||
new openerp.edi.EdiView(null,db,token).appendTo($("body").addClass('openerp'));
|
new openerp.edi.EdiView(null,db,token).appendTo($("body").addClass('openerp'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -188,7 +188,7 @@ openerp.edi.EdiImport = openerp.web.Widget.extend({
|
||||||
});
|
});
|
||||||
|
|
||||||
openerp.edi.edi_import = function (url) {
|
openerp.edi.edi_import = function (url) {
|
||||||
openerp.connection.session_bind().then(function () {
|
openerp.session.session_bind().then(function () {
|
||||||
new openerp.edi.EdiImport(null,url).appendTo($("body").addClass('openerp'));
|
new openerp.edi.EdiImport(null,url).appendTo($("body").addClass('openerp'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ class hr_expense_expense(osv.osv):
|
||||||
'account_move_id': fields.many2one('account.move', 'Ledger Posting'),
|
'account_move_id': fields.many2one('account.move', 'Ledger Posting'),
|
||||||
'line_ids': fields.one2many('hr.expense.line', 'expense_id', 'Expense Lines', readonly=True, states={'draft':[('readonly',False)]} ),
|
'line_ids': fields.one2many('hr.expense.line', 'expense_id', 'Expense Lines', readonly=True, states={'draft':[('readonly',False)]} ),
|
||||||
'note': fields.text('Note'),
|
'note': fields.text('Note'),
|
||||||
'amount': fields.function(_amount, string='Total Amount'),
|
'amount': fields.function(_amount, string='Total Amount', digits_compute= dp.get_precision('Account')),
|
||||||
'invoice_id': fields.many2one('account.invoice', "Employee's Invoice"),
|
'invoice_id': fields.many2one('account.invoice', "Employee's Invoice"),
|
||||||
'currency_id': fields.many2one('res.currency', 'Currency', required=True),
|
'currency_id': fields.many2one('res.currency', 'Currency', required=True),
|
||||||
'department_id':fields.many2one('hr.department','Department'),
|
'department_id':fields.many2one('hr.department','Department'),
|
||||||
|
@ -258,8 +258,8 @@ class hr_expense_line(osv.osv):
|
||||||
'date_value': fields.date('Date', required=True),
|
'date_value': fields.date('Date', required=True),
|
||||||
'expense_id': fields.many2one('hr.expense.expense', 'Expense', ondelete='cascade', select=True),
|
'expense_id': fields.many2one('hr.expense.expense', 'Expense', ondelete='cascade', select=True),
|
||||||
'total_amount': fields.function(_amount, string='Total', digits_compute=dp.get_precision('Account')),
|
'total_amount': fields.function(_amount, string='Total', digits_compute=dp.get_precision('Account')),
|
||||||
'unit_amount': fields.float('Unit Price', digits_compute=dp.get_precision('Account')),
|
'unit_amount': fields.float('Unit Price', digits_compute=dp.get_precision('Product Price')),
|
||||||
'unit_quantity': fields.float('Quantities' ),
|
'unit_quantity': fields.float('Quantities', digits_compute= dp.get_precision('Product Unit of Measure')),
|
||||||
'product_id': fields.many2one('product.product', 'Product', domain=[('hr_expense_ok','=',True)]),
|
'product_id': fields.many2one('product.product', 'Product', domain=[('hr_expense_ok','=',True)]),
|
||||||
'uom_id': fields.many2one('product.uom', 'Unit of Measure'),
|
'uom_id': fields.many2one('product.uom', 'Unit of Measure'),
|
||||||
'description': fields.text('Description'),
|
'description': fields.text('Description'),
|
||||||
|
|
|
@ -72,7 +72,7 @@ class report_account_analytic_line_to_invoice(osv.osv):
|
||||||
'account_id':fields.many2one('account.analytic.account', 'Analytic account', readonly=True),
|
'account_id':fields.many2one('account.analytic.account', 'Analytic account', readonly=True),
|
||||||
'product_uom_id':fields.many2one('product.uom', 'Unit of Measure', readonly=True),
|
'product_uom_id':fields.many2one('product.uom', 'Unit of Measure', readonly=True),
|
||||||
'unit_amount': fields.float('Units', readonly=True),
|
'unit_amount': fields.float('Units', readonly=True),
|
||||||
'sale_price': fields.float('Sale price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
|
'sale_price': fields.float('Sale price', readonly=True, digits_compute=dp.get_precision('Product Price')),
|
||||||
'amount': fields.float('Amount', readonly=True, digits_compute=dp.get_precision('Account')),
|
'amount': fields.float('Amount', readonly=True, digits_compute=dp.get_precision('Account')),
|
||||||
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
|
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
|
||||||
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
|
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
|
||||||
|
|
|
@ -120,7 +120,7 @@ Normal - the campaign runs normally and automatically sends all emails and repor
|
||||||
'Status',),
|
'Status',),
|
||||||
'activity_ids': fields.one2many('marketing.campaign.activity',
|
'activity_ids': fields.one2many('marketing.campaign.activity',
|
||||||
'campaign_id', 'Activities'),
|
'campaign_id', 'Activities'),
|
||||||
'fixed_cost': fields.float('Fixed Cost', help="Fixed cost for running this campaign. You may also specify variable cost and revenue on each campaign activity. Cost and Revenue statistics are included in Campaign Reporting.", digits_compute=dp.get_precision('Purchase Price')),
|
'fixed_cost': fields.float('Fixed Cost', help="Fixed cost for running this campaign. You may also specify variable cost and revenue on each campaign activity. Cost and Revenue statistics are included in Campaign Reporting.", digits_compute=dp.get_precision('Product Price')),
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
@ -435,8 +435,8 @@ class marketing_campaign_activity(osv.osv):
|
||||||
'from_ids': fields.one2many('marketing.campaign.transition',
|
'from_ids': fields.one2many('marketing.campaign.transition',
|
||||||
'activity_to_id',
|
'activity_to_id',
|
||||||
'Previous Activities'),
|
'Previous Activities'),
|
||||||
'variable_cost': fields.float('Variable Cost', help="Set a variable cost if you consider that every campaign item that has reached this point has entailed a certain cost. You can get cost statistics in the Reporting section", digits_compute=dp.get_precision('Purchase Price')),
|
'variable_cost': fields.float('Variable Cost', help="Set a variable cost if you consider that every campaign item that has reached this point has entailed a certain cost. You can get cost statistics in the Reporting section", digits_compute=dp.get_precision('Product Price')),
|
||||||
'revenue': fields.float('Revenue', help="Set an expected revenue if you consider that every campaign item that has reached this point has generated a certain revenue. You can get revenue statistics in the Reporting section", digits_compute=dp.get_precision('Sale Price')),
|
'revenue': fields.float('Revenue', help="Set an expected revenue if you consider that every campaign item that has reached this point has generated a certain revenue. You can get revenue statistics in the Reporting section", digits_compute=dp.get_precision('Account')),
|
||||||
'signal': fields.char('Signal', size=128,
|
'signal': fields.char('Signal', size=128,
|
||||||
help='An activity with a signal can be called programmatically. Be careful, the workitem is always created when a signal is sent'),
|
help='An activity with a signal can be called programmatically. Be careful, the workitem is always created when a signal is sent'),
|
||||||
'keep_if_condition_not_met': fields.boolean("Don't Delete Workitems",
|
'keep_if_condition_not_met': fields.boolean("Don't Delete Workitems",
|
||||||
|
|
|
@ -63,8 +63,8 @@ class campaign_analysis(osv.osv):
|
||||||
'country_id': fields.related('partner_id', 'country_id',
|
'country_id': fields.related('partner_id', 'country_id',
|
||||||
type='many2one', relation='res.country',string='Country'),
|
type='many2one', relation='res.country',string='Country'),
|
||||||
'total_cost' : fields.function(_total_cost, string='Cost',
|
'total_cost' : fields.function(_total_cost, string='Cost',
|
||||||
type="float", digits_compute=dp.get_precision('Purchase Price')),
|
type="float", digits_compute=dp.get_precision('Account')),
|
||||||
'revenue': fields.float('Revenue', readonly=True, digits_compute=dp.get_precision('Sale Price')),
|
'revenue': fields.float('Revenue', readonly=True, digits_compute=dp.get_precision('Account')),
|
||||||
'count' : fields.integer('# of Actions', readonly=True),
|
'count' : fields.integer('# of Actions', readonly=True),
|
||||||
'state': fields.selection([('todo', 'To Do'),
|
'state': fields.selection([('todo', 'To Do'),
|
||||||
('exception', 'Exception'), ('done', 'Done'),
|
('exception', 'Exception'), ('done', 'Done'),
|
||||||
|
|
|
@ -146,7 +146,7 @@ class membership_line(osv.osv):
|
||||||
'date_to': fields.date('To', readonly=True),
|
'date_to': fields.date('To', readonly=True),
|
||||||
'date_cancel': fields.date('Cancel date'),
|
'date_cancel': fields.date('Cancel date'),
|
||||||
'date': fields.date('Join Date', help="Date on which member has joined the membership"),
|
'date': fields.date('Join Date', help="Date on which member has joined the membership"),
|
||||||
'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Sale Price'), required=True, help='Amount for the membership'),
|
'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Product Price'), required=True, help='Amount for the membership'),
|
||||||
'account_invoice_line': fields.many2one('account.invoice.line', 'Account Invoice line', readonly=True),
|
'account_invoice_line': fields.many2one('account.invoice.line', 'Account Invoice line', readonly=True),
|
||||||
'account_invoice_id': fields.related('account_invoice_line', 'invoice_id', type='many2one', relation='account.invoice', string='Invoice', readonly=True),
|
'account_invoice_id': fields.related('account_invoice_line', 'invoice_id', type='many2one', relation='account.invoice', string='Invoice', readonly=True),
|
||||||
'state': fields.function(_state,
|
'state': fields.function(_state,
|
||||||
|
@ -447,7 +447,7 @@ Partner()
|
||||||
class product_template(osv.osv):
|
class product_template(osv.osv):
|
||||||
_inherit = 'product.template'
|
_inherit = 'product.template'
|
||||||
_columns = {
|
_columns = {
|
||||||
'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Sale Price')),
|
'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Product Price')),
|
||||||
}
|
}
|
||||||
|
|
||||||
product_template()
|
product_template()
|
||||||
|
|
|
@ -29,7 +29,7 @@ class membership_invoice(osv.osv_memory):
|
||||||
_description = "Membership Invoice"
|
_description = "Membership Invoice"
|
||||||
_columns = {
|
_columns = {
|
||||||
'product_id': fields.many2one('product.product','Membership', required=True),
|
'product_id': fields.many2one('product.product','Membership', required=True),
|
||||||
'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Sale Price'), required=True),
|
'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Product Price'), required=True),
|
||||||
}
|
}
|
||||||
def onchange_product(self, cr, uid, ids, product_id=False):
|
def onchange_product(self, cr, uid, ids, product_id=False):
|
||||||
"""This function returns value of product's member price based on product id.
|
"""This function returns value of product's member price based on product id.
|
||||||
|
|
|
@ -138,7 +138,7 @@ class report_custom(report_rml):
|
||||||
</row>
|
</row>
|
||||||
""" % (_('Components'), _('Components suppliers'), _('Quantity'),_('Cost Price per Unit of Measure'), _('Supplier Price per Unit of Measure'))
|
""" % (_('Components'), _('Components suppliers'), _('Quantity'),_('Cost Price per Unit of Measure'), _('Supplier Price per Unit of Measure'))
|
||||||
|
|
||||||
purchase_price_digits = rml_obj.get_digits(dp='Purchase Price')
|
purchase_price_digits = rml_obj.get_digits(dp='Product Price')
|
||||||
|
|
||||||
for product in product_pool.browse(cr, uid, ids, context=context):
|
for product in product_pool.browse(cr, uid, ids, context=context):
|
||||||
product_uom_name = to_xml(product.uom_id.name)
|
product_uom_name = to_xml(product.uom_id.name)
|
||||||
|
|
|
@ -692,10 +692,10 @@ class mrp_repair_line(osv.osv, ProductChangeMixin):
|
||||||
'to_invoice': fields.boolean('To Invoice'),
|
'to_invoice': fields.boolean('To Invoice'),
|
||||||
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok','=',True)], required=True),
|
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok','=',True)], required=True),
|
||||||
'invoiced': fields.boolean('Invoiced',readonly=True),
|
'invoiced': fields.boolean('Invoiced',readonly=True),
|
||||||
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Sale Price')),
|
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),
|
||||||
'price_subtotal': fields.function(_amount_line, string='Subtotal',digits_compute= dp.get_precision('Sale Price')),
|
'price_subtotal': fields.function(_amount_line, string='Subtotal',digits_compute= dp.get_precision('Account')),
|
||||||
'tax_id': fields.many2many('account.tax', 'repair_operation_line_tax', 'repair_operation_line_id', 'tax_id', 'Taxes'),
|
'tax_id': fields.many2many('account.tax', 'repair_operation_line_tax', 'repair_operation_line_id', 'tax_id', 'Taxes'),
|
||||||
'product_uom_qty': fields.float('Quantity', digits_compute= dp.get_precision('Product UoS'), required=True),
|
'product_uom_qty': fields.float('Quantity', digits_compute= dp.get_precision('Product Unit of Measure'), required=True),
|
||||||
'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
|
'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
|
||||||
'prodlot_id': fields.many2one('stock.production.lot', 'Lot Number',domain="[('product_id','=',product_id)]"),
|
'prodlot_id': fields.many2one('stock.production.lot', 'Lot Number',domain="[('product_id','=',product_id)]"),
|
||||||
'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True),
|
'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True),
|
||||||
|
@ -784,10 +784,10 @@ class mrp_repair_fee(osv.osv, ProductChangeMixin):
|
||||||
'repair_id': fields.many2one('mrp.repair', 'Repair Order Reference', required=True, ondelete='cascade', select=True),
|
'repair_id': fields.many2one('mrp.repair', 'Repair Order Reference', required=True, ondelete='cascade', select=True),
|
||||||
'name': fields.char('Description', size=64, select=True,required=True),
|
'name': fields.char('Description', size=64, select=True,required=True),
|
||||||
'product_id': fields.many2one('product.product', 'Product'),
|
'product_id': fields.many2one('product.product', 'Product'),
|
||||||
'product_uom_qty': fields.float('Quantity', digits=(16,2), required=True),
|
'product_uom_qty': fields.float('Quantity', digits_compute= dp.get_precision('Product Unit of Measure'), required=True),
|
||||||
'price_unit': fields.float('Unit Price', required=True),
|
'price_unit': fields.float('Unit Price', required=True),
|
||||||
'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
|
'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
|
||||||
'price_subtotal': fields.function(_amount_line, string='Subtotal',digits_compute= dp.get_precision('Sale Price')),
|
'price_subtotal': fields.function(_amount_line, string='Subtotal',digits_compute= dp.get_precision('Account')),
|
||||||
'tax_id': fields.many2many('account.tax', 'repair_fee_line_tax', 'repair_fee_line_id', 'tax_id', 'Taxes'),
|
'tax_id': fields.many2many('account.tax', 'repair_fee_line_tax', 'repair_fee_line_id', 'tax_id', 'Taxes'),
|
||||||
'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True),
|
'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True),
|
||||||
'to_invoice': fields.boolean('To Invoice'),
|
'to_invoice': fields.boolean('To Invoice'),
|
||||||
|
|
|
@ -674,7 +674,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
|
||||||
self.$('.loader img').hide();
|
self.$('.loader img').hide();
|
||||||
return new instance.web.Model("ir.model.data").get_func("search_read")([['name', '=', 'action_pos_session_opening']], ['res_id'])
|
return new instance.web.Model("ir.model.data").get_func("search_read")([['name', '=', 'action_pos_session_opening']], ['res_id'])
|
||||||
.pipe( _.bind(function(res){
|
.pipe( _.bind(function(res){
|
||||||
return instance.connection.rpc('/web/action/load', {'action_id': res[0]['res_id']})
|
return instance.session.rpc('/web/action/load', {'action_id': res[0]['res_id']})
|
||||||
.pipe(_.bind(function(result){
|
.pipe(_.bind(function(result){
|
||||||
var action = result.result;
|
var action = result.result;
|
||||||
this.do_action(action);
|
this.do_action(action);
|
||||||
|
|
|
@ -407,18 +407,18 @@ class product_pricelist_item(osv.osv):
|
||||||
'base_pricelist_id': fields.many2one('product.pricelist', 'If Other Pricelist'),
|
'base_pricelist_id': fields.many2one('product.pricelist', 'If Other Pricelist'),
|
||||||
|
|
||||||
'price_surcharge': fields.float('Price Surcharge',
|
'price_surcharge': fields.float('Price Surcharge',
|
||||||
digits_compute= dp.get_precision('Sale Price')),
|
digits_compute= dp.get_precision('Product Price')),
|
||||||
'price_discount': fields.float('Price Discount', digits=(16,4)),
|
'price_discount': fields.float('Price Discount', digits=(16,4)),
|
||||||
'price_round': fields.float('Price Rounding',
|
'price_round': fields.float('Price Rounding',
|
||||||
digits_compute= dp.get_precision('Sale Price'),
|
digits_compute= dp.get_precision('Product Price'),
|
||||||
help="Sets the price so that it is a multiple of this value.\n" \
|
help="Sets the price so that it is a multiple of this value.\n" \
|
||||||
"Rounding is applied after the discount and before the surcharge.\n" \
|
"Rounding is applied after the discount and before the surcharge.\n" \
|
||||||
"To have prices that end in 9.99, set rounding 10, surcharge -0.01" \
|
"To have prices that end in 9.99, set rounding 10, surcharge -0.01" \
|
||||||
),
|
),
|
||||||
'price_min_margin': fields.float('Min. Price Margin',
|
'price_min_margin': fields.float('Min. Price Margin',
|
||||||
digits_compute= dp.get_precision('Sale Price')),
|
digits_compute= dp.get_precision('Product Price')),
|
||||||
'price_max_margin': fields.float('Max. Price Margin',
|
'price_max_margin': fields.float('Max. Price Margin',
|
||||||
digits_compute= dp.get_precision('Sale Price')),
|
digits_compute= dp.get_precision('Product Price')),
|
||||||
'company_id': fields.related('price_version_id','company_id',type='many2one',
|
'company_id': fields.related('price_version_id','company_id',type='many2one',
|
||||||
readonly=True, relation='res.company', string='Company', store=True)
|
readonly=True, relation='res.company', string='Company', store=True)
|
||||||
}
|
}
|
||||||
|
|
|
@ -272,8 +272,8 @@ class product_template(osv.osv):
|
||||||
'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
|
'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
|
||||||
'rental': fields.boolean('Can be Rent'),
|
'rental': fields.boolean('Can be Rent'),
|
||||||
'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"),
|
'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"),
|
||||||
'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Sale Price'), help="Base price for computing the customer price. Sometimes called the catalog price."),
|
'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Product Price'), help="Base price for computing the customer price. Sometimes called the catalog price."),
|
||||||
'standard_price': fields.float('Cost Price', required=True, digits_compute=dp.get_precision('Purchase Price'), help="Product's cost for accounting stock valuation. It is the base price for the supplier price.", groups="base.group_user"),
|
'standard_price': fields.float('Cost Price', required=True, digits_compute=dp.get_precision('Product Price'), help="Product's cost for accounting stock valuation. It is the base price for the supplier price.", groups="base.group_user"),
|
||||||
'volume': fields.float('Volume', help="The volume in m3."),
|
'volume': fields.float('Volume', help="The volume in m3."),
|
||||||
'weight': fields.float('Gross Weight', digits_compute=dp.get_precision('Stock Weight'), help="The gross weight in Kg."),
|
'weight': fields.float('Gross Weight', digits_compute=dp.get_precision('Stock Weight'), help="The gross weight in Kg."),
|
||||||
'weight_net': fields.float('Net Weight', digits_compute=dp.get_precision('Stock Weight'), help="The net weight in Kg."),
|
'weight_net': fields.float('Net Weight', digits_compute=dp.get_precision('Stock Weight'), help="The net weight in Kg."),
|
||||||
|
@ -518,8 +518,8 @@ class product_product(osv.osv):
|
||||||
'virtual_available': fields.function(_product_virtual_available, type='float', string='Quantity Available'),
|
'virtual_available': fields.function(_product_virtual_available, type='float', string='Quantity Available'),
|
||||||
'incoming_qty': fields.function(_product_incoming_qty, type='float', string='Incoming'),
|
'incoming_qty': fields.function(_product_incoming_qty, type='float', string='Incoming'),
|
||||||
'outgoing_qty': fields.function(_product_outgoing_qty, type='float', string='Outgoing'),
|
'outgoing_qty': fields.function(_product_outgoing_qty, type='float', string='Outgoing'),
|
||||||
'price': fields.function(_product_price, type='float', string='Pricelist', digits_compute=dp.get_precision('Sale Price')),
|
'price': fields.function(_product_price, type='float', string='Pricelist', digits_compute=dp.get_precision('Product Price')),
|
||||||
'lst_price' : fields.function(_product_lst_price, type='float', string='Public Price', digits_compute=dp.get_precision('Sale Price')),
|
'lst_price' : fields.function(_product_lst_price, type='float', string='Public Price', digits_compute=dp.get_precision('Product Price')),
|
||||||
'code': fields.function(_product_code, type='char', string='Reference'),
|
'code': fields.function(_product_code, type='char', string='Reference'),
|
||||||
'partner_ref' : fields.function(_product_partner_ref, type='char', string='Customer ref'),
|
'partner_ref' : fields.function(_product_partner_ref, type='char', string='Customer ref'),
|
||||||
'default_code' : fields.char('Reference', size=64, select=True),
|
'default_code' : fields.char('Reference', size=64, select=True),
|
||||||
|
@ -528,8 +528,8 @@ class product_product(osv.osv):
|
||||||
'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True, ondelete="cascade"),
|
'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True, ondelete="cascade"),
|
||||||
'ean13': fields.char('EAN13', size=13, help="The numbers encoded in EAN-13 bar codes are product identification numbers."),
|
'ean13': fields.char('EAN13', size=13, help="The numbers encoded in EAN-13 bar codes are product identification numbers."),
|
||||||
'packaging' : fields.one2many('product.packaging', 'product_id', 'Logistical Units', help="Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."),
|
'packaging' : fields.one2many('product.packaging', 'product_id', 'Logistical Units', help="Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."),
|
||||||
'price_extra': fields.float('Variant Price Extra', digits_compute=dp.get_precision('Sale Price')),
|
'price_extra': fields.float('Variant Price Extra', digits_compute=dp.get_precision('Product Price')),
|
||||||
'price_margin': fields.float('Variant Price Margin', digits_compute=dp.get_precision('Sale Price')),
|
'price_margin': fields.float('Variant Price Margin', digits_compute=dp.get_precision('Product Price')),
|
||||||
'pricelist_id': fields.dummy(string='Pricelist', relation='product.pricelist', type='many2one'),
|
'pricelist_id': fields.dummy(string='Pricelist', relation='product.pricelist', type='many2one'),
|
||||||
'name_template': fields.related('product_tmpl_id', 'name', string="Name", type='char', size=128, store=True, select=True),
|
'name_template': fields.related('product_tmpl_id', 'name', string="Name", type='char', size=128, store=True, select=True),
|
||||||
'color': fields.integer('Color Index'),
|
'color': fields.integer('Color Index'),
|
||||||
|
@ -878,7 +878,7 @@ class pricelist_partnerinfo(osv.osv):
|
||||||
'name': fields.char('Description', size=64),
|
'name': fields.char('Description', size=64),
|
||||||
'suppinfo_id': fields.many2one('product.supplierinfo', 'Partner Information', required=True, ondelete='cascade'),
|
'suppinfo_id': fields.many2one('product.supplierinfo', 'Partner Information', required=True, ondelete='cascade'),
|
||||||
'min_quantity': fields.float('Quantity', required=True, help="The minimal quantity to trigger this rule, expressed in the supplier Unit of Measure if any or in the default Unit of Measure of the product otherrwise."),
|
'min_quantity': fields.float('Quantity', required=True, help="The minimal quantity to trigger this rule, expressed in the supplier Unit of Measure if any or in the default Unit of Measure of the product otherrwise."),
|
||||||
'price': fields.float('Unit Price', required=True, digits_compute=dp.get_precision('Purchase Price'), help="This price will be considered as a price for the supplier Unit of Measure if any or the default Unit of Measure of the product otherwise"),
|
'price': fields.float('Unit Price', required=True, digits_compute=dp.get_precision('Product Price'), help="This price will be considered as a price for the supplier Unit of Measure if any or the default Unit of Measure of the product otherwise"),
|
||||||
}
|
}
|
||||||
_order = 'min_quantity asc'
|
_order = 'min_quantity asc'
|
||||||
pricelist_partnerinfo()
|
pricelist_partnerinfo()
|
||||||
|
|
|
@ -157,12 +157,12 @@ parameter) will see those record just disappear.
|
||||||
<field eval="'product.pricelist,'+str(ref('list0'))" name="value"/>
|
<field eval="'product.pricelist,'+str(ref('list0'))" name="value"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record forcecreate="True" id="decimal_sale" model="decimal.precision">
|
<record forcecreate="True" id="decimal_price" model="decimal.precision">
|
||||||
<field name="name">Sale Price</field>
|
<field name="name">Product Price</field>
|
||||||
<field name="digits">2</field>
|
<field name="digits">2</field>
|
||||||
</record>
|
</record>
|
||||||
<record forcecreate="True" id="decimal_purchase" model="decimal.precision">
|
<record forcecreate="True" id="decimal_discount" model="decimal.precision">
|
||||||
<field name="name">Purchase Price</field>
|
<field name="name">Discount</field>
|
||||||
<field name="digits">2</field>
|
<field name="digits">2</field>
|
||||||
</record>
|
</record>
|
||||||
<record forcecreate="True" id="decimal_account" model="decimal.precision">
|
<record forcecreate="True" id="decimal_account" model="decimal.precision">
|
||||||
|
|
|
@ -112,7 +112,7 @@ class product_pricelist(report_sxw.rml_parse):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _get_price(self,pricelist_id, product_id,qty):
|
def _get_price(self,pricelist_id, product_id,qty):
|
||||||
sale_price_digits = self.get_digits(dp='Sale Price')
|
sale_price_digits = self.get_digits(dp='Product Price')
|
||||||
pool = pooler.get_pool(self.cr.dbname)
|
pool = pooler.get_pool(self.cr.dbname)
|
||||||
price_dict = pool.get('product.pricelist').price_get(self.cr, self.uid, [pricelist_id], product_id, qty, context=self.localcontext)
|
price_dict = pool.get('product.pricelist').price_get(self.cr, self.uid, [pricelist_id], product_id, qty, context=self.localcontext)
|
||||||
if price_dict[pricelist_id]:
|
if price_dict[pricelist_id]:
|
||||||
|
|
|
@ -143,7 +143,6 @@ class purchase_order(osv.osv):
|
||||||
|
|
||||||
STATE_SELECTION = [
|
STATE_SELECTION = [
|
||||||
('draft', 'Draft PO'),
|
('draft', 'Draft PO'),
|
||||||
('wait', 'Waiting'),
|
|
||||||
('sent', 'RFQ Sent'),
|
('sent', 'RFQ Sent'),
|
||||||
('confirmed', 'Waiting Approval'),
|
('confirmed', 'Waiting Approval'),
|
||||||
('approved', 'Purchase Order'),
|
('approved', 'Purchase Order'),
|
||||||
|
@ -190,15 +189,15 @@ class purchase_order(osv.osv):
|
||||||
'purchase.order.line': (_get_order, ['date_planned'], 10),
|
'purchase.order.line': (_get_order, ['date_planned'], 10),
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
'amount_untaxed': fields.function(_amount_all, digits_compute= dp.get_precision('Purchase Price'), string='Untaxed Amount',
|
'amount_untaxed': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Untaxed Amount',
|
||||||
store={
|
store={
|
||||||
'purchase.order.line': (_get_order, None, 10),
|
'purchase.order.line': (_get_order, None, 10),
|
||||||
}, multi="sums", help="The amount without tax"),
|
}, multi="sums", help="The amount without tax"),
|
||||||
'amount_tax': fields.function(_amount_all, digits_compute= dp.get_precision('Purchase Price'), string='Taxes',
|
'amount_tax': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Taxes',
|
||||||
store={
|
store={
|
||||||
'purchase.order.line': (_get_order, None, 10),
|
'purchase.order.line': (_get_order, None, 10),
|
||||||
}, multi="sums", help="The tax amount"),
|
}, multi="sums", help="The tax amount"),
|
||||||
'amount_total': fields.function(_amount_all, digits_compute= dp.get_precision('Purchase Price'), string='Total',
|
'amount_total': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Total',
|
||||||
store={
|
store={
|
||||||
'purchase.order.line': (_get_order, None, 10),
|
'purchase.order.line': (_get_order, None, 10),
|
||||||
}, multi="sums",help="The total amount"),
|
}, multi="sums",help="The total amount"),
|
||||||
|
@ -804,8 +803,8 @@ class purchase_order_line(osv.osv):
|
||||||
'product_id': fields.many2one('product.product', 'Product', domain=[('purchase_ok','=',True)], change_default=True),
|
'product_id': fields.many2one('product.product', 'Product', domain=[('purchase_ok','=',True)], change_default=True),
|
||||||
'move_ids': fields.one2many('stock.move', 'purchase_line_id', 'Reservation', readonly=True, ondelete='set null'),
|
'move_ids': fields.one2many('stock.move', 'purchase_line_id', 'Reservation', readonly=True, ondelete='set null'),
|
||||||
'move_dest_id': fields.many2one('stock.move', 'Reservation Destination', ondelete='set null'),
|
'move_dest_id': fields.many2one('stock.move', 'Reservation Destination', ondelete='set null'),
|
||||||
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Purchase Price')),
|
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),
|
||||||
'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute= dp.get_precision('Purchase Price')),
|
'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute= dp.get_precision('Account')),
|
||||||
'order_id': fields.many2one('purchase.order', 'Order Reference', select=True, required=True, ondelete='cascade'),
|
'order_id': fields.many2one('purchase.order', 'Order Reference', select=True, required=True, ondelete='cascade'),
|
||||||
'account_analytic_id':fields.many2one('account.analytic.account', 'Analytic Account',),
|
'account_analytic_id':fields.many2one('account.analytic.account', 'Analytic Account',),
|
||||||
'company_id': fields.related('order_id','company_id',type='many2one',relation='res.company',string='Company', store=True, readonly=True),
|
'company_id': fields.related('order_id','company_id',type='many2one',relation='res.company',string='Company', store=True, readonly=True),
|
||||||
|
|
|
@ -180,16 +180,15 @@
|
||||||
<button name="purchase_confirm" states="draft,sent" string="Confirm Quotation" class="oe_highlight"/>
|
<button name="purchase_confirm" states="draft,sent" string="Confirm Quotation" class="oe_highlight"/>
|
||||||
<button name="wkf_send_rfq" states="draft" string="Send RFQ" type="object" context="{'send_rfq':True}"/>
|
<button name="wkf_send_rfq" states="draft" string="Send RFQ" type="object" context="{'send_rfq':True}"/>
|
||||||
<button name="wkf_send_rfq" states="confirmed" string="Resend Purchase Order" type="object" class="oe_highlight"/>
|
<button name="wkf_send_rfq" states="confirmed" string="Resend Purchase Order" type="object" class="oe_highlight"/>
|
||||||
<button name="action_cancel" states="except_picking,except_invoice,wait" string="Cancel" type="object" />
|
<button name="action_cancel" states="except_picking,except_invoice" string="Cancel" type="object" />
|
||||||
<button name="picking_ok" states="except_picking" string="Manually Corrected"/>
|
<button name="picking_ok" states="except_picking" string="Manually Corrected"/>
|
||||||
<button name="invoice_ok" states="except_invoice" string="Manually Corrected"/>
|
<button name="invoice_ok" states="except_invoice" string="Manually Corrected"/>
|
||||||
<button name="purchase_appbuyer" states="wait_auth" string="Approve Purchase" class="oe_highlight"/>
|
|
||||||
<button name="purchase_approve" states="confirmed" string="Approve Order" class="oe_highlight"/>
|
<button name="purchase_approve" states="confirmed" string="Approve Order" class="oe_highlight"/>
|
||||||
<button name="view_invoice" string="Receive Invoice" type="object" attrs="{'invisible': ['|', ('invoice_method','=','picking'), '|', ('state','!=', 'approved'), ('invoiced','=',True) ]}" class="oe_highlight"/>
|
<button name="view_invoice" string="Receive Invoice" type="object" attrs="{'invisible': ['|', ('invoice_method','=','picking'), '|', ('state','!=', 'approved'), ('invoiced','=',True) ]}" class="oe_highlight"/>
|
||||||
<button name="view_picking" string="Receive Products" type="object" attrs="{'invisible': ['|', ('shipped','=',True), ('state','!=', 'approved')]}" class="oe_highlight"/>
|
<button name="view_picking" string="Receive Products" type="object" attrs="{'invisible': ['|', ('shipped','=',True), ('state','!=', 'approved')]}" class="oe_highlight"/>
|
||||||
<button name="action_cancel_draft" states="cancel,sent,confirmed" string="Set to Draft" type="object" />
|
<button name="action_cancel_draft" states="cancel,sent,confirmed" string="Set to Draft" type="object" />
|
||||||
<button name="purchase_cancel" states="draft,confirmed,wait_auth,sent" string="Cancel"/>
|
<button name="purchase_cancel" states="draft,confirmed,sent" string="Cancel"/>
|
||||||
<field name="state" widget="statusbar" statusbar_visible="draft,approved,done" statusbar_colors='{"except_picking":"red","except_invoice":"red","confirmed":"blue","wait":"blue"}' readonly="1"/>
|
<field name="state" widget="statusbar" statusbar_visible="draft,approved,done" statusbar_colors='{"except_picking":"red","except_invoice":"red","confirmed":"blue"}' readonly="1"/>
|
||||||
</header>
|
</header>
|
||||||
<sheet>
|
<sheet>
|
||||||
<div class="oe_title">
|
<div class="oe_title">
|
||||||
|
@ -323,7 +322,7 @@
|
||||||
<field name="name">purchase.order.tree</field>
|
<field name="name">purchase.order.tree</field>
|
||||||
<field name="model">purchase.order</field>
|
<field name="model">purchase.order</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree fonts="bold:needaction_pending==True" colors="grey:state=='cancel';blue:state in ('wait','confirmed');red:state in ('except_invoice','except_picking')" string="Purchase Order">
|
<tree fonts="bold:needaction_pending==True" colors="grey:state=='cancel';blue:state in (confirmed');red:state in ('except_invoice','except_picking')" string="Purchase Order">
|
||||||
<field name="needaction_pending" invisible="1"/>
|
<field name="needaction_pending" invisible="1"/>
|
||||||
<field name="name" string="Reference"/>
|
<field name="name" string="Reference"/>
|
||||||
<field name="date_order" />
|
<field name="date_order" />
|
||||||
|
|
|
@ -274,10 +274,10 @@
|
||||||
<para style="terp_default_Right_9">[[ formatLang(line.product_qty ) ]] [[ line.product_uom.name ]] </para>
|
<para style="terp_default_Right_9">[[ formatLang(line.product_qty ) ]] [[ line.product_uom.name ]] </para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Right_9">[[ formatLang(line.price_unit, digits=get_digits(dp='Purchase Price') ) ]]</para>
|
<para style="terp_default_Right_9">[[ formatLang(line.price_unit, digits=get_digits(dp='Product Price') ) ]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Right_9">[[ formatLang(line.price_subtotal, digits=get_digits(dp='Purchase Price'), currency_obj=o.pricelist_id.currency_id ) ]]</para>
|
<para style="terp_default_Right_9">[[ formatLang(line.price_subtotal, digits=get_digits(dp='Account'), currency_obj=o.pricelist_id.currency_id ) ]]</para>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</blockTable>
|
</blockTable>
|
||||||
|
@ -293,7 +293,7 @@
|
||||||
<para style="terp_default_9">Net Total :</para>
|
<para style="terp_default_9">Net Total :</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed, digits=get_digits(dp='Purchase Price'), currency_obj=o.pricelist_id.currency_id ) ]]</para>
|
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed, digits=get_digits(dp='Account'), currency_obj=o.pricelist_id.currency_id ) ]]</para>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -306,7 +306,7 @@
|
||||||
<para style="terp_default_9">Taxes :</para>
|
<para style="terp_default_9">Taxes :</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, dp='Purchase Price', currency_obj=o.pricelist_id.currency_id) ]]</para>
|
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]</para>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -319,7 +319,7 @@
|
||||||
<para style="terp_default_Bold_9">Total :</para>
|
<para style="terp_default_Bold_9">Total :</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Bold_9_Right">[[ formatLang(o.amount_total, digits=get_digits(dp='Purchase Price') , currency_obj=o.pricelist_id.currency_id) ]]</para>
|
<para style="terp_default_Bold_9_Right">[[ formatLang(o.amount_total, digits=get_digits(dp='Account') , currency_obj=o.pricelist_id.currency_id) ]]</para>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</blockTable>
|
</blockTable>
|
||||||
|
|
|
@ -35,7 +35,6 @@ class purchase_report(osv.osv):
|
||||||
'name': fields.char('Year',size=64,required=False, readonly=True),
|
'name': fields.char('Year',size=64,required=False, readonly=True),
|
||||||
'day': fields.char('Day', size=128, readonly=True),
|
'day': fields.char('Day', size=128, readonly=True),
|
||||||
'state': fields.selection([('draft', 'Request for Quotation'),
|
'state': fields.selection([('draft', 'Request for Quotation'),
|
||||||
('wait', 'Waiting'),
|
|
||||||
('confirmed', 'Waiting Supplier Ack'),
|
('confirmed', 'Waiting Supplier Ack'),
|
||||||
('approved', 'Approved'),
|
('approved', 'Approved'),
|
||||||
('except_picking', 'Shipping Exception'),
|
('except_picking', 'Shipping Exception'),
|
||||||
|
|
|
@ -59,21 +59,12 @@ class purchase_config_settings(osv.osv_memory):
|
||||||
help="""Purchase Requisitions are used when you want to request quotations from several suppliers for a given set of products.
|
help="""Purchase Requisitions are used when you want to request quotations from several suppliers for a given set of products.
|
||||||
You can configure per product if you directly do a Request for Quotation
|
You can configure per product if you directly do a Request for Quotation
|
||||||
to one supplier or if you want a purchase requisition to negotiate with several suppliers."""),
|
to one supplier or if you want a purchase requisition to negotiate with several suppliers."""),
|
||||||
'decimal_precision': fields.integer('specify decimal precision on price',help="As an example, a decimal precision of 2 will allow prices like: 9.99 EUR, whereas a decimal precision of 4 will allow prices like: 0.0231 EUR per unit."),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'default_invoice_method': 'manual',
|
'default_invoice_method': 'manual',
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_default_dp(self, cr, uid, fields, context=None):
|
|
||||||
dp = self.pool.get('ir.model.data').get_object(cr,uid, 'product','decimal_purchase')
|
|
||||||
return {'decimal_precision': dp.digits}
|
|
||||||
|
|
||||||
def set_default_dp(self, cr, uid, ids, context=None):
|
|
||||||
config = self.browse(cr, uid, ids[0], context)
|
|
||||||
dp = self.pool.get('ir.model.data').get_object(cr,uid, 'product','decimal_purchase')
|
|
||||||
dp.write({'digits': config.decimal_precision})
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,10 +32,6 @@
|
||||||
<label for="default_invoice_method"/>
|
<label for="default_invoice_method"/>
|
||||||
<field name="default_invoice_method" class="oe_inline"/>
|
<field name="default_invoice_method" class="oe_inline"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
<label for="decimal_precision"/>
|
|
||||||
<field name="decimal_precision" class="oe_inline"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</group>
|
||||||
<separator string="Purchase Order"/>
|
<separator string="Purchase Order"/>
|
||||||
|
|
|
@ -69,7 +69,7 @@ class purchase_requisition(osv.osv):
|
||||||
purchase_order_obj = self.pool.get('purchase.order')
|
purchase_order_obj = self.pool.get('purchase.order')
|
||||||
for purchase in self.browse(cr, uid, ids, context=context):
|
for purchase in self.browse(cr, uid, ids, context=context):
|
||||||
for purchase_id in purchase.purchase_ids:
|
for purchase_id in purchase.purchase_ids:
|
||||||
if str(purchase_id.state) in('draft','wait'):
|
if str(purchase_id.state) in('draft'):
|
||||||
purchase_order_obj.action_cancel(cr,uid,[purchase_id.id])
|
purchase_order_obj.action_cancel(cr,uid,[purchase_id.id])
|
||||||
self.write(cr, uid, ids, {'state': 'cancel'})
|
self.write(cr, uid, ids, {'state': 'cancel'})
|
||||||
self.cancel_send_note(cr, uid, ids, context=context)
|
self.cancel_send_note(cr, uid, ids, context=context)
|
||||||
|
|
|
@ -266,13 +266,13 @@
|
||||||
<para style="terp_default_Right_9">[[ formatLang(line.product_uos and line.product_uos_qty or line.product_uom_qty) ]] [[ line.product_uos and line.product_uos.name or line.product_uom.name ]]</para>
|
<para style="terp_default_Right_9">[[ formatLang(line.product_uos and line.product_uos_qty or line.product_uom_qty) ]] [[ line.product_uos and line.product_uos.name or line.product_uom.name ]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Right_9">[[ formatLang(line.price_unit ) ]]</para>
|
<para style="terp_default_Right_9">[[ formatLang(line.price_unit , digits=get_digits(dp='Product Price'))]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Centre_9">[[ formatLang(line.discount) ]]</para>
|
<para style="terp_default_Centre_9">[[ formatLang(line.discount, digits=get_digits(dp='Discount'))]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Right_9">[[ formatLang(line.price_subtotal, digits=get_digits(dp='Sale Price'), currency_obj=o.pricelist_id.currency_id) ]] </para>
|
<para style="terp_default_Right_9">[[ formatLang(line.price_subtotal, digits=get_digits(dp='Account'), currency_obj=o.pricelist_id.currency_id) ]] </para>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</blockTable>
|
</blockTable>
|
||||||
|
@ -288,7 +288,7 @@
|
||||||
<para style="terp_default_9">Net Total :</para>
|
<para style="terp_default_9">Net Total :</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed, dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]]</para>
|
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]</para>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -301,7 +301,7 @@
|
||||||
<para style="terp_default_9">Taxes :</para>
|
<para style="terp_default_9">Taxes :</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]]</para>
|
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]</para>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -314,7 +314,7 @@
|
||||||
<para style="terp_default_Bold_9">Total :</para>
|
<para style="terp_default_Bold_9">Total :</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total, dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]]</para>
|
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]</para>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</blockTable>
|
</blockTable>
|
||||||
|
|
|
@ -98,17 +98,7 @@ class sale_configuration(osv.osv_memory):
|
||||||
'module_project_timesheet': fields.boolean("Project Timesheet"),
|
'module_project_timesheet': fields.boolean("Project Timesheet"),
|
||||||
'module_project_mrp': fields.boolean("Project MRP"),
|
'module_project_mrp': fields.boolean("Project MRP"),
|
||||||
'module_project': fields.boolean("Project"),
|
'module_project': fields.boolean("Project"),
|
||||||
'decimal_precision': fields.integer("Decimal precision on prices:",help="As an example, a decimal precision of 2 will allow prices like: 9.99 EUR, whereas a decimal precision of 4 will allow prices like: 0.0231 EUR per unit."),
|
|
||||||
}
|
}
|
||||||
def _check_decimal(self, cr, uid, ids, context=None):
|
|
||||||
for decimal in self.browse(cr, uid, ids, context=context):
|
|
||||||
if decimal.decimal_precision > 20:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
_constraints = [
|
|
||||||
(_check_decimal, 'Digits must be between 0 to 20 ', ['decimal_precision']),
|
|
||||||
]
|
|
||||||
|
|
||||||
def default_get(self, cr, uid, fields, context=None):
|
def default_get(self, cr, uid, fields, context=None):
|
||||||
ir_model_data = self.pool.get('ir.model.data')
|
ir_model_data = self.pool.get('ir.model.data')
|
||||||
|
@ -139,14 +129,6 @@ class sale_configuration(osv.osv_memory):
|
||||||
'time_unit': _get_default_time_unit,
|
'time_unit': _get_default_time_unit,
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_default_dp(self, cr, uid, fields, context=None):
|
|
||||||
dp = self.pool.get('ir.model.data').get_object(cr, uid, 'product','decimal_sale')
|
|
||||||
return {'decimal_precision': dp.digits}
|
|
||||||
|
|
||||||
def set_default_dp(self, cr, uid, ids, context=None):
|
|
||||||
config = self.browse(cr, uid, ids[0], context)
|
|
||||||
dp = self.pool.get('ir.model.data').get_object(cr, uid, 'product','decimal_sale')
|
|
||||||
dp.write({'digits': config.decimal_precision})
|
|
||||||
|
|
||||||
def set_sale_defaults(self, cr, uid, ids, context=None):
|
def set_sale_defaults(self, cr, uid, ids, context=None):
|
||||||
ir_values = self.pool.get('ir.values')
|
ir_values = self.pool.get('ir.values')
|
||||||
|
|
|
@ -95,10 +95,6 @@
|
||||||
<field name="group_discount_per_so_line" class="oe_inline"/>
|
<field name="group_discount_per_so_line" class="oe_inline"/>
|
||||||
<label for="group_discount_per_so_line"/>
|
<label for="group_discount_per_so_line"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
<label for="decimal_precision"/>
|
|
||||||
<field name="decimal_precision" class="oe_inline"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
|
|
|
@ -247,19 +247,19 @@ class sale_order(osv.osv):
|
||||||
fnct_search=_invoiced_search, type='boolean', help="It indicates that an invoice has been paid."),
|
fnct_search=_invoiced_search, type='boolean', help="It indicates that an invoice has been paid."),
|
||||||
'note': fields.text('Terms and conditions'),
|
'note': fields.text('Terms and conditions'),
|
||||||
|
|
||||||
'amount_untaxed': fields.function(_amount_all, digits_compute= dp.get_precision('Sale Price'), string='Untaxed Amount',
|
'amount_untaxed': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Untaxed Amount',
|
||||||
store = {
|
store = {
|
||||||
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
||||||
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
||||||
},
|
},
|
||||||
multi='sums', help="The amount without tax."),
|
multi='sums', help="The amount without tax."),
|
||||||
'amount_tax': fields.function(_amount_all, digits_compute= dp.get_precision('Sale Price'), string='Taxes',
|
'amount_tax': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Taxes',
|
||||||
store = {
|
store = {
|
||||||
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
||||||
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
||||||
},
|
},
|
||||||
multi='sums', help="The tax amount."),
|
multi='sums', help="The tax amount."),
|
||||||
'amount_total': fields.function(_amount_all, digits_compute= dp.get_precision('Sale Price'), string='Total',
|
'amount_total': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Total',
|
||||||
store = {
|
store = {
|
||||||
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
||||||
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
||||||
|
@ -1114,8 +1114,8 @@ class sale_order_line(osv.osv):
|
||||||
'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True),
|
'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True),
|
||||||
'invoiced': fields.boolean('Invoiced', readonly=True),
|
'invoiced': fields.boolean('Invoiced', readonly=True),
|
||||||
'procurement_id': fields.many2one('procurement.order', 'Procurement'),
|
'procurement_id': fields.many2one('procurement.order', 'Procurement'),
|
||||||
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Sale Price'), readonly=True, states={'draft': [('readonly', False)]}),
|
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price'), readonly=True, states={'draft': [('readonly', False)]}),
|
||||||
'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute= dp.get_precision('Sale Price')),
|
'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute= dp.get_precision('Account')),
|
||||||
'tax_id': fields.many2many('account.tax', 'sale_order_tax', 'order_line_id', 'tax_id', 'Taxes', readonly=True, states={'draft': [('readonly', False)]}),
|
'tax_id': fields.many2many('account.tax', 'sale_order_tax', 'order_line_id', 'tax_id', 'Taxes', readonly=True, states={'draft': [('readonly', False)]}),
|
||||||
'type': fields.selection([('make_to_stock', 'from stock'), ('make_to_order', 'on order')], 'Procurement Method', required=True, readonly=True, states={'draft': [('readonly', False)]},
|
'type': fields.selection([('make_to_stock', 'from stock'), ('make_to_order', 'on order')], 'Procurement Method', required=True, readonly=True, states={'draft': [('readonly', False)]},
|
||||||
help="If 'on order', it triggers a procurement when the sale order is confirmed to create a task, purchase order or manufacturing order linked to this sale order line."),
|
help="If 'on order', it triggers a procurement when the sale order is confirmed to create a task, purchase order or manufacturing order linked to this sale order line."),
|
||||||
|
@ -1127,7 +1127,7 @@ class sale_order_line(osv.osv):
|
||||||
'product_uos': fields.many2one('product.uom', 'Product UoS'),
|
'product_uos': fields.many2one('product.uom', 'Product UoS'),
|
||||||
'product_packaging': fields.many2one('product.packaging', 'Packaging'),
|
'product_packaging': fields.many2one('product.packaging', 'Packaging'),
|
||||||
'move_ids': fields.one2many('stock.move', 'sale_line_id', 'Inventory Moves', readonly=True),
|
'move_ids': fields.one2many('stock.move', 'sale_line_id', 'Inventory Moves', readonly=True),
|
||||||
'discount': fields.float('Discount', digits=(16, 2), readonly=True, states={'draft': [('readonly', False)]}),
|
'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Discount'), readonly=True, states={'draft': [('readonly', False)]}),
|
||||||
'number_packages': fields.function(_number_packages, type='integer', string='Number Packages'),
|
'number_packages': fields.function(_number_packages, type='integer', string='Number Packages'),
|
||||||
'th_weight': fields.float('Weight', readonly=True, states={'draft': [('readonly', False)]}),
|
'th_weight': fields.float('Weight', readonly=True, states={'draft': [('readonly', False)]}),
|
||||||
'state': fields.selection([('cancel', 'Cancelled'),('draft', 'Draft'),('confirmed', 'Confirmed'),('exception', 'Exception'),('done', 'Done')], 'Status', required=True, readonly=True,
|
'state': fields.selection([('cancel', 'Cancelled'),('draft', 'Draft'),('confirmed', 'Confirmed'),('exception', 'Exception'),('done', 'Done')], 'Status', required=True, readonly=True,
|
||||||
|
@ -1205,7 +1205,7 @@ class sale_order_line(osv.osv):
|
||||||
pu = 0.0
|
pu = 0.0
|
||||||
if uosqty:
|
if uosqty:
|
||||||
pu = round(line.price_unit * line.product_uom_qty / uosqty,
|
pu = round(line.price_unit * line.product_uom_qty / uosqty,
|
||||||
self.pool.get('decimal.precision').precision_get(cr, uid, 'Sale Price'))
|
self.pool.get('decimal.precision').precision_get(cr, uid, 'Product Price'))
|
||||||
fpos = line.order_id.fiscal_position or False
|
fpos = line.order_id.fiscal_position or False
|
||||||
account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, account_id)
|
account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, account_id)
|
||||||
if not account_id:
|
if not account_id:
|
||||||
|
|
|
@ -39,7 +39,7 @@ class sale_advance_payment_inv(osv.osv_memory):
|
||||||
'product_id': fields.many2one('product.product', 'Advance Product',
|
'product_id': fields.many2one('product.product', 'Advance Product',
|
||||||
help="""Select a product of type service which is called 'Advance Product'.
|
help="""Select a product of type service which is called 'Advance Product'.
|
||||||
You may have to create it and set it as a default value on this field."""),
|
You may have to create it and set it as a default value on this field."""),
|
||||||
'amount': fields.float('Advance Amount', digits_compute= dp.get_precision('Sale Price'),
|
'amount': fields.float('Advance Amount', digits_compute= dp.get_precision('Account'),
|
||||||
help="The amount to be invoiced in advance."),
|
help="The amount to be invoiced in advance."),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,19 +35,19 @@ openerp.share = function(session) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function has_share(yes, no) {
|
function has_share(yes, no) {
|
||||||
if (!session.connection.share_flag) {
|
if (!session.session.share_flag) {
|
||||||
session.connection.share_flag = $.Deferred(function() {
|
session.session.share_flag = $.Deferred(function() {
|
||||||
var func = new session.web.Model("share.wizard").get_func("has_share");
|
var func = new session.web.Model("share.wizard").get_func("has_share");
|
||||||
func(session.connection.uid).pipe(function(res) {
|
func(session.session.uid).pipe(function(res) {
|
||||||
if(res) {
|
if(res) {
|
||||||
session.connection.share_flag.resolve();
|
session.session.share_flag.resolve();
|
||||||
} else {
|
} else {
|
||||||
session.connection.share_flag.reject();
|
session.session.share_flag.reject();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
session.connection.share_flag.done(yes).fail(no);
|
session.session.share_flag.done(yes).fail(no);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Extend the Sidebar to add Share and Embed links in the 'More' menu */
|
/* Extend the Sidebar to add Share and Embed links in the 'More' menu */
|
||||||
|
|
|
@ -78,7 +78,7 @@ openerp.web_linkedin = function(instance) {
|
||||||
}, _.bind(this.linkedin_disabled, this));
|
}, _.bind(this.linkedin_disabled, this));
|
||||||
},
|
},
|
||||||
linkedin_disabled: function() {
|
linkedin_disabled: function() {
|
||||||
if (instance.connection.uid !== 1) {
|
if (instance.session.uid !== 1) {
|
||||||
instance.web.dialog($(QWeb.render("LinkedIn.DisabledWarning")), {
|
instance.web.dialog($(QWeb.render("LinkedIn.DisabledWarning")), {
|
||||||
title: _t("LinkedIn is not enabled"),
|
title: _t("LinkedIn is not enabled"),
|
||||||
buttons: [
|
buttons: [
|
||||||
|
|
Loading…
Reference in New Issue