diff --git a/addons/account/account.py b/addons/account/account.py
index 26af7a5f9bd..d501f35cbc7 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -893,7 +893,7 @@ class account_fiscalyear(osv.osv):
'date_start': fields.date('Start Date', required=True),
'date_stop': fields.date('End Date', required=True),
'period_ids': fields.one2many('account.period', 'fiscalyear_id', 'Periods'),
- 'state': fields.selection([('draft','Open'), ('done','Closed')], 'State', readonly=True),
+ 'state': fields.selection([('draft','Open'), ('done','Closed')], 'Status', readonly=True),
}
_defaults = {
'state': 'draft',
@@ -990,7 +990,7 @@ class account_period(osv.osv):
'date_start': fields.date('Start of Period', required=True, states={'done':[('readonly',True)]}),
'date_stop': fields.date('End of Period', required=True, states={'done':[('readonly',True)]}),
'fiscalyear_id': fields.many2one('account.fiscalyear', 'Fiscal Year', required=True, states={'done':[('readonly',True)]}, select=True),
- 'state': fields.selection([('draft','Open'), ('done','Closed')], 'State', readonly=True,
+ 'state': fields.selection([('draft','Open'), ('done','Closed')], 'Status', readonly=True,
help='When monthly periods are created. The state is \'Draft\'. At the end of monthly period it is in \'Done\' state.'),
'company_id': fields.related('fiscalyear_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True)
}
@@ -1117,7 +1117,7 @@ class account_journal_period(osv.osv):
'period_id': fields.many2one('account.period', 'Period', required=True, ondelete="cascade"),
'icon': fields.function(_icon_get, string='Icon', type='char', size=32),
'active': fields.boolean('Active', required=True, help="If the active field is set to False, it will allow you to hide the journal period without removing it."),
- 'state': fields.selection([('draft','Draft'), ('printed','Printed'), ('done','Done')], 'State', required=True, readonly=True,
+ 'state': fields.selection([('draft','Draft'), ('printed','Printed'), ('done','Done')], 'Status', required=True, readonly=True,
help='When journal period is created. The state is \'Draft\'. If a report is printed it comes to \'Printed\' state. When all transactions are done, it comes in \'Done\' state.'),
'fiscalyear_id': fields.related('period_id', 'fiscalyear_id', string='Fiscal Year', type='many2one', relation='account.fiscalyear'),
'company_id': fields.related('journal_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True)
@@ -1264,7 +1264,7 @@ class account_move(osv.osv):
'ref': fields.char('Reference', size=64),
'period_id': fields.many2one('account.period', 'Period', required=True, states={'posted':[('readonly',True)]}),
'journal_id': fields.many2one('account.journal', 'Journal', required=True, states={'posted':[('readonly',True)]}),
- 'state': fields.selection([('draft','Unposted'), ('posted','Posted')], 'State', required=True, readonly=True,
+ 'state': fields.selection([('draft','Unposted'), ('posted','Posted')], 'Status', required=True, readonly=True,
help='All manually created new journal entries are usually in the state \'Unposted\', but you can set the option to skip that state on the related journal. In that case, they will be behave as journal entries automatically created by the system on document validation (invoices, bank statements...) and will be created in \'Posted\' state.'),
'line_id': fields.one2many('account.move.line', 'move_id', 'Entries', states={'posted':[('readonly',True)]}),
'to_check': fields.boolean('To Review', help='Check this box if you are unsure of that journal entry and if you want to note it as \'to be reviewed\' by an accounting expert.'),
@@ -2350,7 +2350,7 @@ class account_subscription(osv.osv):
'period_total': fields.integer('Number of Periods', required=True),
'period_nbr': fields.integer('Period', required=True),
'period_type': fields.selection([('day','days'),('month','month'),('year','year')], 'Period Type', required=True),
- 'state': fields.selection([('draft','Draft'),('running','Running'),('done','Done')], 'State', required=True, readonly=True),
+ 'state': fields.selection([('draft','Draft'),('running','Running'),('done','Done')], 'Status', required=True, readonly=True),
'lines_id': fields.one2many('account.subscription.line', 'subscription_id', 'Subscription Lines')
}
_defaults = {
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index 5601179e0fc..51e3d2dbe85 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -153,7 +153,7 @@ class account_bank_statement(osv.osv):
'state': fields.selection([('draft', 'New'),
('open','Open'), # used by cash statements
('confirm', 'Closed')],
- 'State', required=True, readonly="1",
+ 'Status', required=True, readonly="1",
help='When new statement is created the state will be \'Draft\'.\n'
'And after getting confirmation from the bank it will be in \'Confirmed\' state.'),
'currency': fields.function(_currency, string='Currency',
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index d0f7579a86e..9426d713188 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -201,12 +201,12 @@ class account_invoice(osv.osv):
'state': fields.selection([
('draft','Draft'),
+ ('cancel','Cancelled'),
('proforma','Pro-forma'),
('proforma2','Pro-forma'),
('open','Open'),
- ('paid','Paid'),
- ('cancel','Cancelled')
- ],'State', select=True, readonly=True,
+ ('paid','Paid')
+ ],'Status', select=True, readonly=True,
help=' * The \'Draft\' state is used when a user is encoding a new and unconfirmed Invoice. \
\n* The \'Pro-forma\' when invoice is in Pro-forma state,invoice does not have an invoice number. \
\n* The \'Open\' state is used when user create invoice,a invoice number is generated.Its in open state till user does not pay invoice. \
@@ -273,7 +273,7 @@ class account_invoice(osv.osv):
help="Remaining amount due."),
'payment_ids': fields.function(_compute_lines, relation='account.move.line', type="many2many", string='Payments'),
'move_name': fields.char('Journal Entry', size=64, readonly=True, states={'draft':[('readonly',False)]}),
- 'user_id': fields.many2one('res.users', 'Salesman', readonly=True, states={'draft':[('readonly',False)]}),
+ 'user_id': fields.many2one('res.users', 'Salesperson', readonly=True, states={'draft':[('readonly',False)]}),
'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position', readonly=True, states={'draft':[('readonly',False)]})
}
_defaults = {
@@ -1307,7 +1307,7 @@ class account_invoice_line(osv.osv):
_description = "Invoice Line"
_columns = {
'name': fields.char('Description', size=256, required=True),
- 'origin': fields.char('Origin', size=256, help="Reference of the document that produced this invoice."),
+ 'origin': fields.char('Source', size=256, help="Reference of the document that produced this invoice."),
'invoice_id': fields.many2one('account.invoice', 'Invoice Reference', ondelete='cascade', select=True),
'uos_id': fields.many2one('product.uom', 'Unit of Measure', ondelete='set null'),
'product_id': fields.many2one('product.product', 'Product', ondelete='set null'),
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 5a9e808bf2d..05da4af666e 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -144,8 +144,20 @@
form2
-
+
+
@@ -360,7 +374,7 @@
string="Reference"
filter_domain="['|', ('number','ilike',self),('origin','ilike',self)]"/>
-
+
@@ -375,7 +389,7 @@
-
+
diff --git a/addons/account/account_menuitem.xml b/addons/account/account_menuitem.xml
index 3713606c490..58830a19693 100644
--- a/addons/account/account_menuitem.xml
+++ b/addons/account/account_menuitem.xml
@@ -2,7 +2,7 @@
-
diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index 573b8f17524..892747c849f 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -508,7 +508,7 @@ class account_move_line(osv.osv):
'analytic_lines': fields.one2many('account.analytic.line', 'move_id', 'Analytic lines'),
'centralisation': fields.selection([('normal','Normal'),('credit','Credit Centralisation'),('debit','Debit Centralisation'),('currency','Currency Adjustment')], 'Centralisation', size=8),
'balance': fields.function(_balance, fnct_search=_balance_search, string='Balance'),
- 'state': fields.selection([('draft','Unbalanced'), ('valid','Valid')], 'State', readonly=True,
+ 'state': fields.selection([('draft','Unbalanced'), ('valid','Valid')], 'Status', readonly=True,
help='When new move line is created the state will be \'Draft\'.\n* When all the payments are done it will be in \'Valid\' state.'),
'tax_code_id': fields.many2one('account.tax.code', 'Tax Account', help="The Account can either be a base tax code or a tax code account."),
'tax_amount': fields.float('Tax/Base Amount', digits_compute=dp.get_precision('Account'), select=True, help="If the Tax account is a tax code account, this field will contain the taxed amount.If the tax account is base tax code, "\
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index 37b2d42d9c6..c1367e60498 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -11,8 +11,17 @@
account.fiscalyearform
-
Customer Code
diff --git a/addons/account/report/account_report.py b/addons/account/report/account_report.py
index 9f81f295d74..555d1ee7c25 100644
--- a/addons/account/report/account_report.py
+++ b/addons/account/report/account_report.py
@@ -175,7 +175,7 @@ class report_invoice_created(osv.osv):
('open','Open'),
('paid','Done'),
('cancel','Cancelled')
- ],'State', readonly=True),
+ ],'Status', readonly=True),
'origin': fields.char('Source Document', size=64, readonly=True, help="Reference of the document that generated this invoice report."),
'create_date': fields.datetime('Create Date', readonly=True)
}
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
index 964383246dd..0c28155b76d 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
@@ -43,7 +43,7 @@
-
+
diff --git a/addons/account_analytic_plans/account_analytic_plans_view.xml b/addons/account_analytic_plans/account_analytic_plans_view.xml
index 8282461e512..ae4db10803e 100644
--- a/addons/account_analytic_plans/account_analytic_plans_view.xml
+++ b/addons/account_analytic_plans/account_analytic_plans_view.xml
@@ -303,10 +303,10 @@
form
-
+
-
+
diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py
index 97aec1d8487..0799a59a423 100644
--- a/addons/account_asset/account_asset.py
+++ b/addons/account_asset/account_asset.py
@@ -223,7 +223,7 @@ class account_asset_asset(osv.osv):
'parent_id': fields.many2one('account.asset.asset', 'Parent Asset', readonly=True, states={'draft':[('readonly',False)]}),
'child_ids': fields.one2many('account.asset.asset', 'parent_id', 'Children Assets'),
'purchase_date': fields.date('Purchase Date', required=True, readonly=True, states={'draft':[('readonly',False)]}),
- 'state': fields.selection([('draft','Draft'),('open','Running'),('close','Close')], 'State', required=True,
+ 'state': fields.selection([('draft','Draft'),('open','Running'),('close','Close')], 'Status', required=True,
help="When an asset is created, the state is 'Draft'.\n" \
"If the asset is confirmed, the state goes in 'Running' and the depreciation lines can be posted in the accounting.\n" \
"You can manually close an asset when the depreciation is over. If the last line of depreciation is posted, the asset automatically goes in that state."),
diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml
index 6a969b12428..1affcf7a85c 100644
--- a/addons/account_asset/account_asset_view.xml
+++ b/addons/account_asset/account_asset_view.xml
@@ -78,8 +78,18 @@
account.asset.assetform
-
-
-
-
-
-
-
-
-
+
diff --git a/addons/account_cancel/account_cancel_view.xml b/addons/account_cancel/account_cancel_view.xml
index 72517c9d090..6a214fa56dd 100644
--- a/addons/account_cancel/account_cancel_view.xml
+++ b/addons/account_cancel/account_cancel_view.xml
@@ -19,7 +19,7 @@
form
-
+
@@ -31,7 +31,7 @@
form
-
+
diff --git a/addons/account_invoice_layout/account_invoice_layout_view.xml b/addons/account_invoice_layout/account_invoice_layout_view.xml
index f51120aa9da..5073568d674 100644
--- a/addons/account_invoice_layout/account_invoice_layout_view.xml
+++ b/addons/account_invoice_layout/account_invoice_layout_view.xml
@@ -47,7 +47,7 @@
form
-
+
diff --git a/addons/account_invoice_layout/report/report_account_invoice_layout.rml b/addons/account_invoice_layout/report/report_account_invoice_layout.rml
index eec4b974e2b..79bce6248d3 100644
--- a/addons/account_invoice_layout/report/report_account_invoice_layout.rml
+++ b/addons/account_invoice_layout/report/report_account_invoice_layout.rml
@@ -228,7 +228,7 @@
Invoice Date
- Origin
+ Source
Customer Code
diff --git a/addons/account_invoice_layout/report/special_message_invoice.rml b/addons/account_invoice_layout/report/special_message_invoice.rml
index 97a7f131df6..84049b18f0a 100644
--- a/addons/account_invoice_layout/report/special_message_invoice.rml
+++ b/addons/account_invoice_layout/report/special_message_invoice.rml
@@ -232,7 +232,7 @@
Invoice Date
- Origin
+ Source
Your Reference
diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py
index 70d3fbe54cc..80d7a5419e7 100644
--- a/addons/account_payment/account_payment.py
+++ b/addons/account_payment/account_payment.py
@@ -92,9 +92,9 @@ class payment_order(osv.osv):
'mode': fields.many2one('payment.mode', 'Payment mode', select=True, required=1, states={'done': [('readonly', True)]}, help='Select the Payment Mode to be applied.'),
'state': fields.selection([
('draft', 'Draft'),
- ('open', 'Confirmed'),
('cancel', 'Cancelled'),
- ('done', 'Done')], 'State', select=True,
+ ('open', 'Confirmed'),
+ ('done', 'Done')], 'Status', select=True,
help='When an order is placed the state is \'Draft\'.\n Once the bank is confirmed the state is set to \'Confirmed\'.\n Then the order is paid the state is \'Done\'.'),
'line_ids': fields.one2many('payment.line', 'order_id', 'Payment lines', states={'done': [('readonly', True)]}),
'total': fields.function(_total, string="Total", type='float'),
diff --git a/addons/account_payment/account_payment_view.xml b/addons/account_payment/account_payment_view.xml
index 71856dcf703..032ef38411a 100644
--- a/addons/account_payment/account_payment_view.xml
+++ b/addons/account_payment/account_payment_view.xml
@@ -100,8 +100,19 @@
payment.orderform
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -162,13 +173,7 @@
-
-
-
-
-
-
-
+
@@ -214,7 +219,7 @@
-
+
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 0191f5866ba..f2cffdf27cd 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -275,10 +275,10 @@ class account_voucher(osv.osv):
'company_id': fields.many2one('res.company', 'Company', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'state':fields.selection(
[('draft','Draft'),
+ ('cancel','Cancelled'),
('proforma','Pro-forma'),
- ('posted','Posted'),
- ('cancel','Cancelled')
- ], 'State', readonly=True, size=32,
+ ('posted','Posted')
+ ], 'Status', readonly=True, size=32,
help=' * The \'Draft\' state is used when a user is encoding a new and unconfirmed Voucher. \
\n* The \'Pro-forma\' when voucher is in Pro-forma state,voucher does not have an voucher number. \
\n* The \'Posted\' state is used when user create voucher,a voucher number is generated and voucher entries are created in account \
diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml
index e519d23b09e..349d4e70ed7 100644
--- a/addons/account_voucher/account_voucher_view.xml
+++ b/addons/account_voucher/account_voucher_view.xml
@@ -40,8 +40,19 @@
account.voucherform
-
@@ -470,7 +477,7 @@
domain="[]" context="{'group_by':'show_as'}" />
- menu
-
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index 8ab1e6e4ef0..eb6314c5103 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -30,10 +30,10 @@ from tools.translate import _
MAX_LEVEL = 15
AVAILABLE_STATES = [
('draft', 'New'),
- ('open', 'In Progress'),
('cancel', 'Cancelled'),
- ('done', 'Closed'),
+ ('open', 'In Progress'),
('pending', 'Pending'),
+ ('done', 'Closed')
]
AVAILABLE_PRIORITIES = [
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index ab33cb7c5e0..bf20deb0ce5 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -168,23 +168,23 @@ class crm_lead(crm_case, osv.osv):
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
'date_closed': fields.datetime('Closed', readonly=True),
'stage_id': fields.many2one('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"),
- 'user_id': fields.many2one('res.users', 'Salesman'),
- 'referred': fields.char('Referred by', size=64),
+ 'user_id': fields.many2one('res.users', 'Salesperson'),
+ 'referred': fields.char('Referred By', size=64),
'date_open': fields.datetime('Opened', readonly=True),
'day_open': fields.function(_compute_day, string='Days to Open', \
multi='day_open', type="float", store=True),
'day_close': fields.function(_compute_day, string='Days to Close', \
multi='day_close', type="float", store=True),
- 'state': fields.selection(crm.AVAILABLE_STATES, 'State', size=16, readonly=True,
+ 'state': fields.selection(crm.AVAILABLE_STATES, 'Status', size=16, readonly=True,
help='The state is set to \'Draft\', when a case is created.\
- \nIf the case is in progress the state is set to \'Open\'.\
+ \nIf the case is in progress the state is set to \'In progress\'.\
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', type='char', size=64),
# Only used for type opportunity
- 'probability': fields.float('Probability (%)',group_operator="avg"),
+ 'probability': fields.float('Success Rate (%)',group_operator="avg"),
'planned_revenue': fields.float('Expected Revenue'),
'ref': fields.reference('Reference', selection=crm._links_get, size=128),
'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128),
diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml
index 6241b831b66..140143e35e3 100644
--- a/addons/crm/crm_lead_view.xml
+++ b/addons/crm/crm_lead_view.xml
@@ -53,15 +53,16 @@
Payment Term
diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py
index d347da84adc..6beac7cfd38 100644
--- a/addons/sale/report/sale_report.py
+++ b/addons/sale/report/sale_report.py
@@ -44,7 +44,7 @@ class sale_report(osv.osv):
'partner_id': fields.many2one('res.partner', 'Partner', readonly=True),
'shop_id': fields.many2one('sale.shop', 'Shop', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
- 'user_id': fields.many2one('res.users', 'Salesman', readonly=True),
+ 'user_id': fields.many2one('res.users', 'Salesperson', readonly=True),
'price_total': fields.float('Total Price', readonly=True),
'delay': fields.float('Commitment Delay', digits=(16,2), readonly=True),
'categ_id': fields.many2one('product.category','Category of Product', readonly=True),
diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml
index a751d92c62a..4b3647a5ac2 100644
--- a/addons/sale/report/sale_report_view.xml
+++ b/addons/sale/report/sale_report_view.xml
@@ -95,7 +95,7 @@
-
+
@@ -104,7 +104,7 @@
-
+
diff --git a/addons/sale/res_partner.py b/addons/sale/res_partner.py
new file mode 100644
index 00000000000..84c1a9c96ad
--- /dev/null
+++ b/addons/sale/res_partner.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from osv import fields,osv
+from tools.translate import _
+
+class res_partner(osv.osv):
+ _inherit = 'res.partner'
+
+ def _sale_order_count(self, cr, uid, ids, field_name, arg, context=None):
+ res = {}
+ for partner in self.browse(cr, uid, ids, context):
+ res[partner.id] = len(partner.sale_order_ids)
+ return res
+
+ _columns = {
+ 'sale_order_count': fields.function(_sale_order_count, string='# of Sales Order', type='integer'),
+ 'sale_order_ids': fields.one2many('sale.order','partner_id','Sales Order')
+ }
+
diff --git a/addons/sale/res_partner_view.xml b/addons/sale/res_partner_view.xml
new file mode 100644
index 00000000000..6a011749282
--- /dev/null
+++ b/addons/sale/res_partner_view.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+ res.partner.kanban.saleorder.inherit
+ res.partner
+ kanban
+
+
+
+
+
+
+
+ Sales()
+
+
+
+
+
+
+
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 5144cb91402..a93e67585d6 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -204,18 +204,18 @@ class sale_order(osv.osv):
'client_order_ref': fields.char('Customer Reference', size=64),
'state': fields.selection([
('draft', 'Quotation'),
+ ('cancel', 'Cancelled'),
('waiting_date', 'Waiting Schedule'),
('manual', 'To Invoice'),
('progress', 'In Progress'),
('shipping_except', 'Shipping Exception'),
('invoice_except', 'Invoice Exception'),
('done', 'Done'),
- ('cancel', 'Cancelled')
], 'Order State', readonly=True, help="Gives the state of the quotation or sales order. \nThe exception state is automatically set when a cancel operation occurs in the invoice validation (Invoice Exception) or in the picking list process (Shipping Exception). \nThe 'Waiting Schedule' state is set when the invoice is confirmed but waiting for the scheduler to run on the order date.", select=True),
'date_order': fields.date('Date', required=True, readonly=True, select=True, states={'draft': [('readonly', False)]}),
'create_date': fields.datetime('Creation Date', readonly=True, select=True, help="Date on which sales order is created."),
'date_confirm': fields.date('Confirmation Date', readonly=True, select=True, help="Date on which sales order is confirmed."),
- 'user_id': fields.many2one('res.users', 'Salesman', states={'draft': [('readonly', False)]}, select=True),
+ 'user_id': fields.many2one('res.users', 'Salesperson', states={'draft': [('readonly', False)]}, select=True),
'partner_id': fields.many2one('res.partner', 'Customer', readonly=True, states={'draft': [('readonly', False)]}, required=True, change_default=True, select=True),
'partner_invoice_id': fields.many2one('res.partner', 'Invoice Address', readonly=True, required=True, states={'draft': [('readonly', False)]}, help="Invoice address for current sales order."),
'partner_shipping_id': fields.many2one('res.partner', 'Shipping Address', readonly=True, required=True, states={'draft': [('readonly', False)]}, help="Shipping address for current sales order."),
@@ -1025,14 +1025,14 @@ class sale_order_line(osv.osv):
'number_packages': fields.function(_number_packages, type='integer', string='Number Packages'),
'notes': fields.text('Notes'),
'th_weight': fields.float('Weight', readonly=True, states={'draft': [('readonly', False)]}),
- 'state': fields.selection([('cancel', 'Cancelled'),('draft', 'Draft'),('confirmed', 'Confirmed'),('exception', 'Exception'),('done', 'Done')], 'State', required=True, readonly=True,
+ 'state': fields.selection([('cancel', 'Cancelled'),('draft', 'Draft'),('confirmed', 'Confirmed'),('exception', 'Exception'),('done', 'Done')], 'Status', required=True, readonly=True,
help='* The \'Draft\' state is set when the related sales order in draft state. \
\n* The \'Confirmed\' state is set when the related sales order is confirmed. \
\n* The \'Exception\' state is set when the related sales order is set as exception. \
\n* The \'Done\' state is set when the sales order line has been picked. \
\n* The \'Cancelled\' state is set when a user cancel the sales order related.'),
'order_partner_id': fields.related('order_id', 'partner_id', type='many2one', relation='res.partner', store=True, string='Customer'),
- 'salesman_id':fields.related('order_id', 'user_id', type='many2one', relation='res.users', store=True, string='Salesman'),
+ 'salesman_id':fields.related('order_id', 'user_id', type='many2one', relation='res.users', store=True, string='Salesperson'),
'company_id': fields.related('order_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
}
_order = 'sequence, id'
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 0d466dd21fc..7a573993c45 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -1,6 +1,8 @@
-
+
+
+
sale.shop
@@ -96,23 +98,24 @@
@@ -477,7 +480,7 @@
-
+
diff --git a/addons/sale/stock_view.xml b/addons/sale/stock_view.xml
index 578a6fb5802..242d2c4cef6 100644
--- a/addons/sale/stock_view.xml
+++ b/addons/sale/stock_view.xml
@@ -19,7 +19,7 @@
form
-
+
diff --git a/addons/sale_crm/sale_crm_view.xml b/addons/sale_crm/sale_crm_view.xml
index 61ced66c4cb..3151c910e2f 100644
--- a/addons/sale_crm/sale_crm_view.xml
+++ b/addons/sale_crm/sale_crm_view.xml
@@ -10,7 +10,7 @@
-
+
diff --git a/addons/sale_mrp/sale_mrp_view.xml b/addons/sale_mrp/sale_mrp_view.xml
index d4d2c153d76..fbf2e7a9327 100644
--- a/addons/sale_mrp/sale_mrp_view.xml
+++ b/addons/sale_mrp/sale_mrp_view.xml
@@ -8,7 +8,7 @@
form
-
+
diff --git a/addons/stock/board_warehouse_view.xml b/addons/stock/board_warehouse_view.xml
index 9f15eba5389..38412228723 100644
--- a/addons/stock/board_warehouse_view.xml
+++ b/addons/stock/board_warehouse_view.xml
@@ -71,5 +71,6 @@
+
diff --git a/addons/stock/product.py b/addons/stock/product.py
index e7838bb490a..62fdbb24ca2 100644
--- a/addons/stock/product.py
+++ b/addons/stock/product.py
@@ -26,6 +26,27 @@ import decimal_precision as dp
class product_product(osv.osv):
_inherit = "product.product"
+ def _stock_move_count(self, cr, uid, ids, field_name, arg, context=None):
+ res = dict([(id, {'reception_count': 0, 'delivery_count': 0}) for id in ids])
+ move_pool=self.pool.get('stock.move')
+ moves = move_pool.read_group(cr, uid, [
+ ('product_id', 'in', ids),
+ ('picking_id.type', '=', 'in'),
+ ('state','in',('draft','confirmed','assigned','pending'))
+ ], ['product_id'], ['product_id'])
+ for move in moves:
+ product_id = move['product_id'][0]
+ res[product_id]['reception_count'] = move['product_id_count']
+ moves = move_pool.read_group(cr, uid, [
+ ('product_id', 'in', ids),
+ ('picking_id.type', '=', 'out'),
+ ('state','in',('draft','confirmed','assigned','pending'))
+ ], ['product_id'], ['product_id'])
+ for move in moves:
+ product_id = move['product_id'][0]
+ res[product_id]['reception_count'] = move['product_id_count']
+ return res
+
def get_product_accounts(self, cr, uid, product_id, context=None):
""" To get the stock input account, stock output account and stock journal related to product.
@param product_id: product id
@@ -331,6 +352,8 @@ class product_product(osv.osv):
return res
_columns = {
+ 'reception_count': fields.function(_stock_move_count, string="Reception", type='integer', multi='pickings'),
+ 'delivery_count': fields.function(_stock_move_count, string="Delivery", type='integer', multi='pickings'),
'qty_available': fields.function(_product_available, multi='qty_available',
type='float', digits_compute=dp.get_precision('Product Unit of Measure'),
string='Quantity On Hand',
diff --git a/addons/stock/product_view.xml b/addons/stock/product_view.xml
index 65a1a8c2ef3..aca84d33473 100644
--- a/addons/stock/product_view.xml
+++ b/addons/stock/product_view.xml
@@ -125,6 +125,32 @@
+
+
+ Receive Products
+ stock.move
+ ir.actions.act_window
+ form
+ tree,form
+ [('product_id','=',active_id),('picking_id.type','=','in')]
+
+
+
+ Here you can receive individual products, no matter what purchase order or picking order they come from. You will find the list of all products you are waiting for. Once you receive an order, you can filter based on the name of the supplier or the purchase order reference. Then you can confirm all products received using the buttons on the right of each line.
+
+
+
+ Receive Products
+ stock.move
+ ir.actions.act_window
+ form
+ tree,form
+ [('product_id','=',active_id),('picking_id.type','=','out')]
+
+
+
+ You will find in this list all products you have to deliver to your customers. You can process the deliveries directly from this list using the buttons on the right of each line. You can filter the products to deliver by customer, products or sale order (using the Origin field).
+ Product Kanban
@@ -136,6 +162,8 @@
+
+