diff --git a/addons/account/invoice.py b/addons/account/invoice.py index 8e236c6879c..ed9a62703df 100644 --- a/addons/account/invoice.py +++ b/addons/account/invoice.py @@ -194,7 +194,7 @@ class account_invoice(osv.osv): 'journal_id': fields.many2one('account.journal', 'Journal', required=True,readonly=True, states={'draft':[('readonly',False)]}), 'company_id': fields.many2one('res.company', 'Company', required=True), 'check_total': fields.float('Total', digits=(16,2), states={'open':[('readonly',True)],'close':[('readonly',True)]}), - 'reconciled': fields.function(_reconciled, method=True, string='Paid/Reconciled', type='boolean', help="The account moves of the invoice have been reconciled with account moves of the payment(s)."), + 'reconciled': fields.function(_reconciled, method=True, string='Paid/Reconciled', type='boolean', store=True, help="The account moves of the invoice have been reconciled with account moves of the payment(s)."), 'partner_bank': fields.many2one('res.partner.bank', 'Bank Account', help='The bank account to pay to or to be paid from'), 'move_lines':fields.function(_get_lines , method=True,type='many2many' , relation='account.move.line',string='Move Lines'), diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index 15db30b6a4b..e460c2872b4 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -407,22 +407,22 @@ class account_analytic_account(osv.osv): return res _columns ={ - 'ca_invoiced': fields.function(_ca_invoiced_calc, method=True, type='float', string='Invoiced amount'), - 'total_cost': fields.function(_total_cost_calc, method=True, type='float', string='Total cost'), - 'ca_to_invoice': fields.function(_ca_to_invoice_calc, method=True, type='float', string='Uninvoiced amount'), - 'ca_theorical': fields.function(_ca_theorical_calc, method=True, type='float', string='Theorical revenue'), - 'hours_quantity': fields.function(_hours_quantity_calc, method=True, type='float', string='Hours tot'), - 'last_invoice_date': fields.function(_last_invoice_date_calc, method=True, type='date', string='Last invoice date'), - 'last_worked_invoiced_date': fields.function(_last_worked_invoiced_date_calc, method=True, type='date', string='Last invoiced worked date'), - 'last_worked_date': fields.function(_last_worked_date_calc, method=True, type='date', string='Last worked date'), - 'hours_qtt_non_invoiced': fields.function(_hours_qtt_non_invoiced_calc, method=True, type='float', string='Uninvoiced hours'), - 'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, method=True, type='float', string='Invoiced hours'), - 'remaining_hours': fields.function(_remaining_hours_calc, method=True, type='float', string='Remaining hours'), - 'remaining_ca': fields.function(_remaining_ca_calc, method=True, type='float', string='Remaining revenue'), - 'revenue_per_hour': fields.function(_revenue_per_hour_calc, method=True, type='float', string='Revenue per hours (real)'), - 'real_margin': fields.function(_real_margin_calc, method=True, type='float', string='Real margin'), - 'theorical_margin': fields.function(_theorical_margin_calc, method=True, type='float', string='Theorical margin'), - 'real_margin_rate': fields.function(_real_margin_rate_calc, method=True, type='float', string='Real margin rate (%)'), + 'ca_invoiced': fields.function(_ca_invoiced_calc, method=True, type='float', string='Invoiced Amount', help="Total customer invoiced amount for this account."), + 'total_cost': fields.function(_total_cost_calc, method=True, type='float', string='Total Costs', help="Total of costs for this account. It includes real costs (from invoices) and indirect costs, like time spent on timesheets."), + 'ca_to_invoice': fields.function(_ca_to_invoice_calc, method=True, type='float', string='Uninvoiced Amount', help="If invoice from analytic account, the remaining amount you can invoice to the customer based on the total costs."), + 'ca_theorical': fields.function(_ca_theorical_calc, method=True, type='float', string='Theorical Revenue', help="Based on the costs you had on the project, what would have been the revenue of all these costs have been invoiced at the normal sale price provided by the pricelist."), + 'hours_quantity': fields.function(_hours_quantity_calc, method=True, type='float', string='Hours Tot', help="Number of hours on spent on the analytic account (from timesheet). It computes on all journal of type 'general'."), + 'last_invoice_date': fields.function(_last_invoice_date_calc, method=True, type='date', string='Last Invoice Date', help="Date of the last invoice created for this analytic account."), + 'last_worked_invoiced_date': fields.function(_last_worked_invoiced_date_calc, method=True, type='date', string='Last Invoiced Worked Date', help="If invoice from the costs, this is the date of the latest work or cost that have been invoiced."), + 'last_worked_date': fields.function(_last_worked_date_calc, method=True, type='date', string='Last Worked Date', help="Date of the latest work done on this account."), + 'hours_qtt_non_invoiced': fields.function(_hours_qtt_non_invoiced_calc, method=True, type='float', string='Uninvoiced Hours', help="Number of hours (from journal of type 'general') that can be invoiced if you invoice based on analytic account."), + 'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, method=True, type='float', string='Invoiced Hours', help="Number of hours that already have invoiced. If you don't invoice based on costs, it's the number of hours spent. If you invoice based on hours, it's the hours that have been invoiced."), + 'remaining_hours': fields.function(_remaining_hours_calc, method=True, type='float', string='Remaining Hours', help="Computed using the forumla: Maximum Quantity - Hours Tot."), + 'remaining_ca': fields.function(_remaining_ca_calc, method=True, type='float', string='Remaining Revenue', help="If you invoice based on costs, this is the revenue you will invoice to the customer when you will launch the invoicing wizard."), + 'revenue_per_hour': fields.function(_revenue_per_hour_calc, method=True, type='float', string='Revenue per Hours (real)', help="Computed using the formula: Invoiced Amount / Hours Tot."), + 'real_margin': fields.function(_real_margin_calc, method=True, type='float', string='Real Margin', help="Computed using the formula: Invoiced Amount - Total Costs."), + 'theorical_margin': fields.function(_theorical_margin_calc, method=True, type='float', string='Theorical Margin', help="Computed using the formula: (Theorical Revenue / Total Costs) * 100."), + 'real_margin_rate': fields.function(_real_margin_rate_calc, method=True, type='float', string='Real Margin Rate (%)', help="Computes using the formula: (Invoiced Amount / Total Costs) * 100."), 'month_ids': fields.function(_month, method=True, type='many2many', relation='account_analytic_analysis.summary.month', string='Month'), 'user_ids': fields.function(_user, method=True, type="many2many", relation='account_analytic_analysis.summary.user', string='User'), } diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml index ebe0d4638bb..fc953b9d74c 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml @@ -8,7 +8,7 @@ My managed accounts account.analytic.account form - tree,graph + tree,form,graph [('user_id','=',uid)] @@ -18,7 +18,7 @@ Uninvoiced entries of my accounts account.analytic.line form - tree,form + tree,form,graph [('invoice_id','=',False),('to_invoice','!=',False),('account_id.user_id','=',uid)] @@ -28,7 +28,7 @@ My Open Managed Accounts account.analytic.account form - tree,graph + tree,form,graph [('user_id','=',uid),('state','=','open')] @@ -38,7 +38,7 @@ My Pending Managed Accounts account.analytic.account form - tree,graph + tree,form,graph [('user_id','=',uid),('state','=','pending')] @@ -48,7 +48,7 @@ Overpassed accounts account.analytic.account form - tree,graph + tree,form,graph [('date','<=',time.strftime('%Y-%m-%d')),('state','=','open')] @@ -58,7 +58,7 @@ All Analytic Accounts account.analytic.account form - tree,graph + tree,form,graph [] @@ -69,45 +69,45 @@ Draft Analytic Accounts account.analytic.account form - tree,graph + tree,form,graph [('state','=','draft')] - + Open Analytic Accounts account.analytic.account form - tree,graph + tree,form,graph [('state','=','open')] - + Pending Analytic Accounts account.analytic.account form - tree,graph + tree,form,graph [('state','=','pending')] - + Simplified View Analytic Accounts account.analytic.account form - tree,graph + tree,form,graph [] - + diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml index fb4a3d774d2..748b4b53201 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml @@ -46,7 +46,7 @@ - + diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 12f9a17491f..edbabad208d 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -119,14 +119,13 @@ - Template projects + Template of Projects project.project form [('state','=','template')] - - + New Project diff --git a/addons/project/wizard/task_delegate.py b/addons/project/wizard/task_delegate.py index a6c2ed3649f..a2f2c3361b0 100644 --- a/addons/project/wizard/task_delegate.py +++ b/addons/project/wizard/task_delegate.py @@ -66,6 +66,7 @@ class wizard_delegate(wizard.interface): 'name': data['form']['name'], 'user_id': data['form']['user_id'], 'planned_hours': data['form']['planned_hours'], + 'remaining_hours': data['form']['planned_hours'], 'parent_id': data['id'], 'state': 'open', 'description': data['form']['include_info'] and task.description or '', diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 94c4ccbf00c..d202dd8ece9 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -671,6 +671,7 @@ class sale_order_line(osv.osv): 'notes': fields.text('Notes'), 'th_weight' : fields.float('Weight'), 'state': fields.selection([('draft','Draft'),('confirmed','Confirmed'),('done','Done'),('cancel','Canceled')], 'Status', required=True, readonly=True), + 'order_partner_id': fields.related('order_id', 'partner_id', type='many2one', relation='res.partner', string='Customer') } _order = 'sequence, id' _defaults = { diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 0e672a62112..44347f9fdc2 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -360,7 +360,8 @@ - + + @@ -368,6 +369,7 @@ + diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 5718c344e4d..3cc80113a17 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -612,6 +612,9 @@ class stock_picking(osv.osv): continue payment_term_id = False partner = picking.address_id and picking.address_id.partner_id + raise osv.except_osv(_('Error, no partner !'), + _('Please put a partner on the picking list if you want to generate invoice.')) + if type in ('out_invoice', 'out_refund'): account_id = partner.property_account_receivable.id if picking.sale_id and picking.sale_id.payment_term: diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index 5db7c283517..5789aa27465 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -264,15 +264,15 @@ - - @@ -794,7 +794,7 @@ - + @@ -1302,31 +1302,51 @@ form tree,form - + - + - - - + + + + + tree_but_open stock.location Products -     +     - - + + tree_but_open stock.location Open Products - -   - -       - + +   + +       + diff --git a/addons/subscription/subscription_view.xml b/addons/subscription/subscription_view.xml index 7e1d86575dd..223a94bdcf5 100644 --- a/addons/subscription/subscription_view.xml +++ b/addons/subscription/subscription_view.xml @@ -15,12 +15,14 @@ form
- + + + + + + + - - - - diff --git a/addons/warning/warning.py b/addons/warning/warning.py index be2c3f74ca1..fb7a91de9ec 100644 --- a/addons/warning/warning.py +++ b/addons/warning/warning.py @@ -35,13 +35,13 @@ class res_partner(osv.osv): _inherit = 'res.partner' _columns = { 'sale_warn' : fields.boolean('Sale Order'), - 'sale_warn_msg' : fields.char('Message for Sale Order', size=64), + 'sale_warn_msg' : fields.text('Message for Sale Order'), 'purchase_warn' : fields.boolean('Purchase Order'), - 'purchase_warn_msg' : fields.char('Message for Purchase Order', size=64), + 'purchase_warn_msg' : fields.text('Message for Purchase Order'), 'picking_warn' : fields.boolean('Stock Picking'), - 'picking_warn_msg' : fields.char('Message for Stock Picking', size=64), + 'picking_warn_msg' : fields.text('Message for Stock Picking'), 'invoice_warn' : fields.boolean('Invoice'), - 'invoice_warn_msg' : fields.char('Message for Invoice', size=64), + 'invoice_warn_msg' : fields.text('Message for Invoice'), } res_partner() @@ -131,11 +131,11 @@ stock_picking() class product_product(osv.osv): _inherit = 'product.product' _columns = { - 'sale_line_warn' : fields.boolean('Sale Order Line'), - 'sale_line_warn_msg' : fields.char('Message for Sale Order Line', size=64), - 'purchase_line_warn' : fields.boolean('Purchase Order Line'), - 'purchase_line_warn_msg' : fields.char('Message for Purchase Order Line', size=64), - } + 'sale_line_warn' : fields.boolean('Sale Order Line'), + 'sale_line_warn_msg' : fields.text('Message for Sale Order Line'), + 'purchase_line_warn' : fields.boolean('Purchase Order Line'), + 'purchase_line_warn_msg' : fields.text('Message for Purchase Order Line'), + } product_product() class sale_order_line(osv.osv): diff --git a/addons/warning/warning_view.xml b/addons/warning/warning_view.xml index 769ddc8d5d2..2adba29c996 100644 --- a/addons/warning/warning_view.xml +++ b/addons/warning/warning_view.xml @@ -1,30 +1,32 @@ - + res.partner.warning.form.inherit res.partner form - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + product.warning.form.inherit product.product @@ -32,15 +34,17 @@ - - - - - + + + + + + + - +