diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 095d461ff3b..2dc7f96768f 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -304,7 +304,7 @@ class account_bank_statement(osv.osv): 'date': st_line.date, 'ref': st_line.ref, 'move_id': move_id, - 'partner_id': partner_id, + 'partner_id': par_id, 'account_id': acc_id, 'credit': credit, 'debit': debit, diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index d1b19910365..20aa198c63f 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -252,16 +252,6 @@ - - account.treasury.graph - account.account - - - - - - - Accounts account.account @@ -2537,7 +2527,7 @@ action = pool.get('res.config').next(cr, uid, [], context) - + diff --git a/addons/account/board_account_view.xml b/addons/account/board_account_view.xml index 563c3f5fc6c..abbc81ade2b 100644 --- a/addons/account/board_account_view.xml +++ b/addons/account/board_account_view.xml @@ -12,16 +12,6 @@ [('year','=',time.strftime('%Y'))] - - Treasury - account.account - form - graph,tree - [('type','=','liquidity')] - {'default_type': 'liquidity'} - - - board.account.form board.board @@ -31,9 +21,6 @@ - - - diff --git a/addons/account/wizard/account_move_journal.py b/addons/account/wizard/account_move_journal.py index 1353efca1f5..d87e4d04a0c 100644 --- a/addons/account/wizard/account_move_journal.py +++ b/addons/account/wizard/account_move_journal.py @@ -92,14 +92,14 @@ class account_move_journal(osv.osv_memory): journal = False if journal_id: - journal = journal_pool.read(cr, uid, [journal_id], ['name'])[0]['name'] + journal = journal_pool.read(cr, uid, journal_id, ['name'], context=context).name journal_string = _("Journal: %s") % tools.ustr(journal) else: journal_string = _("Journal: All") period = False if period_id: - period = period_pool.browse(cr, uid, [period_id], ['name'])[0]['name'] + period = period_pool.browse(cr, uid, period_id, context=context).name period_string = _("Period: %s") % tools.ustr(period) open_string = _("Open") diff --git a/addons/anonymization/anonymization.py b/addons/anonymization/anonymization.py index 47e168a12b8..6b6db168a4f 100644 --- a/addons/anonymization/anonymization.py +++ b/addons/anonymization/anonymization.py @@ -64,11 +64,13 @@ class ir_model_fields_anonymization(osv.osv): state = 'anonymized' # all fields are anonymized else: state = 'unstable' # fields are mixed: this should be fixed + return state def _check_write(self, cr, uid, context=None): # check that the field is created from the menu and not from an database update # otherwise the database update can crash: + if context.get('manual'): global_state = self._get_global_state(cr, uid, context=context) if global_state == 'anonymized': @@ -100,12 +102,16 @@ class ir_model_fields_anonymization(osv.osv): # check field state: all should be clear before we can add a new field to anonymize: self._check_write(cr, uid, context=context) + global_state = self._get_global_state(cr, uid, context=context) + if 'field_name' in vals and vals['field_name'] and 'model_name' in vals and vals['model_name']: vals['model_id'], vals['field_id'] = self._get_model_and_field_ids(cr, uid, vals, context=context) # check not existing fields: if not vals.get('field_id'): vals['state'] = 'not_existing' + else: + vals['state'] = global_state res = super(ir_model_fields_anonymization, self).create(cr, uid, vals, context=context) @@ -340,8 +346,9 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory): # remove the placeholer: eview.remove(placeholder) else: - # unstable ? - raise + msg = "The database anonymization is currently in an unstable state. Some fields are anonymized," + \ + " while some fields are not anonymized. You should try to solve this problem before trying to do anything else." + raise osv.except_osv('Error !', msg) res['arch'] = etree.tostring(eview) diff --git a/addons/base_calendar/crm_meeting.py b/addons/base_calendar/crm_meeting.py index e1c66148ae7..4ea4776ad9b 100644 --- a/addons/base_calendar/crm_meeting.py +++ b/addons/base_calendar/crm_meeting.py @@ -66,6 +66,11 @@ class crm_meeting(base_state, osv.Model): 'state': 'open', } + def copy(self, cr, uid, id, default=None, context=None): + default = default or {} + default['attendee_ids'] = False + return super(crm_meeting, self).copy(cr, uid, id, default, context) + # ---------------------------------------- # OpenChatter # ---------------------------------------- diff --git a/addons/event/event.py b/addons/event/event.py index 747981f854b..44def4f0c76 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -207,6 +207,8 @@ class event_event(osv.osv): 'main_speaker_id': fields.many2one('res.partner','Main Speaker', readonly=False, states={'done': [('readonly', True)]}, help="Speaker who will be giving speech at the event."), 'address_id': fields.many2one('res.partner','Location Address', readonly=False, states={'done': [('readonly', True)]}), 'street': fields.related('address_id','street',type='char',string='Street'), + 'street2': fields.related('address_id','street2',type='char',string='Street2'), + 'state_id': fields.related('address_id','state_id',type='many2one', relation="res.country.state", string='State'), 'zip': fields.related('address_id','zip',type='char',string='zip'), 'city': fields.related('address_id','city',type='char',string='city'), 'speaker_confirmed': fields.boolean('Speaker Confirmed', readonly=False, states={'done': [('readonly', True)]}), @@ -265,16 +267,20 @@ class event_event(osv.osv): def on_change_address_id(self, cr, uid, ids, address_id, context=None): values = { 'street' : False, + 'street2' : False, 'city' : False, 'zip' : False, + 'country_id' : False, + 'state_id' : False, } if isinstance(address_id, (long, int)): address = self.pool.get('res.partner').browse(cr, uid, address_id, context=context) - values.update({ 'street' : address.street, - + 'street2' : address.street2, 'city' : address.city, + 'country_id' : address.country_id and address.country_id.id, + 'state_id' : address.state_id and address.state_id.id, 'zip' : address.zip, }) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index e2ff2e67e87..fd396053d5d 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -101,7 +101,7 @@ - + @@ -111,52 +111,54 @@ - + - From to - - + - + - - - + + + + + + - - - - - Confirmed: , Unconfirmed: - + + - - + + + + + + + (confirmed: ) + + + - - - @@ -166,7 +168,7 @@ - + diff --git a/addons/hr_attendance/hr_attendance.py b/addons/hr_attendance/hr_attendance.py index d3bc79bda1a..8fdd2928fe6 100644 --- a/addons/hr_attendance/hr_attendance.py +++ b/addons/hr_attendance/hr_attendance.py @@ -55,7 +55,7 @@ class hr_attendance(osv.osv): 'name': fields.datetime('Date', required=True, select=1), 'action': fields.selection([('sign_in', 'Sign In'), ('sign_out', 'Sign Out'), ('action','Action')], 'Action', required=True), 'action_desc': fields.many2one("hr.action.reason", "Action Reason", domain="[('action_type', '=', action)]", help='Specifies the reason for Signing In/Signing Out in case of extra hours.'), - 'employee_id': fields.many2one('hr.employee', "Employee's Name", required=True, select=True), + 'employee_id': fields.many2one('hr.employee', "Employee", required=True, select=True), 'day': fields.function(_day_compute, type='char', string='Day', store=True, select=1, size=32), } _defaults = { diff --git a/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml b/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml index 99705b07a39..070079a4b80 100644 --- a/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml +++ b/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml @@ -13,7 +13,7 @@ product_id: product.product_product_consultant journal_id: hr_timesheet.analytic_journal - - I create my current timesheet for employee "Quentin Paolinon". + I create a timesheet for employee "Quentin Paolinon". - !record {model: hr_timesheet_sheet.sheet, id: hr_timesheet_sheet_sheet_deddk0}: date_current: !eval time.strftime('%Y-%m-%d') @@ -23,13 +23,17 @@ user_id: base.user_demo employee_id: 'hr.employee_qdp' - - Now, at the time of login, I create Attendances and perform "Sign In" action. + Quentin "Sign In" at around 9am. - - !python {model: hr_timesheet_sheet.sheet}: | - self.attendance_action_change(cr, uid, [ref('hr_timesheet_sheet_sheet_deddk0')], {}) - task_work = self.search(cr, uid, [("name","=","Quentin Paolinon")],context)[0] - task_ids = self.browse(cr, uid, task_work, context) - assert task_ids.state == "draft", "I State In Timesheet" + !record {model: hr.attendance, id: hr_attendance_1}: + action: sign_in + employee_id: 'hr.employee_qdp' + name: !eval datetime.now().strftime('%Y-%m-%d 09:%M:%S') +- + I test that Quentin in signed in +- + !assert {model: hr.employee, id: hr.employee_qdp}: + - state == 'present' - I want to check attendance and work of yesterday. I click on <- button. - @@ -57,10 +61,10 @@ - At the time of logout, I create attendance and perform "Sign Out". - - !record {model: hr.attendance, id: hr_attendance_1}: + !record {model: hr.attendance, id: hr_attendance_2}: action: sign_out employee_id: 'hr.employee_qdp' - name: !eval (datetime.now() + timedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S') + name: !eval datetime.now().strftime('%Y-%m-%d 17:30:00') - I create Timesheet Entry for time spend on today work. - @@ -103,10 +107,10 @@ general_account_id: account.a_expense journal_id: hr_timesheet.analytic_journal - - I set an allowed difference of 25 hours + I set an allowed difference of 1 hour - !record {model: res.company, id: base.main_company}: - timesheet_max_difference: 25.00 + timesheet_max_difference: 1.00 - I tried again to confirm the timesheet after modification. - diff --git a/addons/l10n_ec/__openerp__.py b/addons/l10n_ec/__openerp__.py index bd1448b802c..f27b76a5bca 100644 --- a/addons/l10n_ec/__openerp__.py +++ b/addons/l10n_ec/__openerp__.py @@ -27,7 +27,7 @@ This is the base module to manage the accounting chart for Ecuador in OpenERP. Accounting chart and localization for Ecuador. """, - 'author': 'OpenERP SA', + 'author': 'Gnuthink Co.Ltd.', 'depends': [ 'account', 'base_vat', diff --git a/addons/mail/data/mail_group_data.xml b/addons/mail/data/mail_group_data.xml index 53720926a5c..11d0ee7d04b 100644 --- a/addons/mail/data/mail_group_data.xml +++ b/addons/mail/data/mail_group_data.xml @@ -7,7 +7,7 @@ Discussion about best sales practices and deals. - All Employees + Whole Company Discussion about best sales practices and deals. diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index ec66b5692c0..d05893cf778 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -956,9 +956,16 @@ product.product - - + + False + + + When you sell this product, OpenERP will trigger a manufacturing + order using the bill of materials assigned to this product. + The delivery order will be ready once the production is done. + + diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 95b54b6baed..590718b48f0 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -314,9 +314,13 @@ class pos_session(osv.osv): # define some cash journal if no payment method exists if not pos_config.journal_ids: - cashids = self.pool.get('account.journal').search(cr, uid, [('journal_user', '=', True), ('type','=','cash')], context=context) + journal_proxy = self.pool.get('account.journal') + cashids = journal_proxy.search(cr, uid, [('journal_user', '=', True), ('type','=','cash')], context=context) if not cashids: - cashids = self.pool.get('account.journal').search(cr, uid, [('journal_user','=',True)], context=context) + cashids = journal_proxy.search(cr, uid, [('type', '=', 'cash')], context=context) + if not cashids: + cashids = journal_proxy.search(cr, uid, [('journal_user','=',True)], context=context) + jobj.write(cr, uid, [pos_config.id], {'journal_ids': [(6,0, cashids)]}) diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 80abb5444db..9c92145ed89 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -896,8 +896,8 @@ - - + @@ -906,7 +906,8 @@ - + @@ -916,7 +917,7 @@ - + @@ -933,7 +934,7 @@ - + @@ -1035,7 +1036,7 @@ - + diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml index 432ff13aaa5..bf73b383216 100644 --- a/addons/procurement/procurement_view.xml +++ b/addons/procurement/procurement_view.xml @@ -166,7 +166,11 @@ tree,form {'search_default_perm_exceptions':1} - Procurement Orders represent the need for a certain quantity of products, at a given time, in a given location. Sales Orders are one typical source of Procurement Orders (but these are distinct documents). Depending on the procurement parameters and the product configuration, the procurement engine will attempt to satisfy the need by reserving products from stock, ordering products from a supplier, or passing a manufacturing order, etc. A Procurement Exception occurs when the system cannot find a way to fulfill a procurement. Some exceptions will resolve themselves automatically, but others require manual intervention (those are identified by a specific error message). + + + Procurement Orders represent the need for a certain quantity of products, at a given time, in a given location. Sales Orders are one typical source of Procurement Orders (but these are distinct documents). Depending on the procurement parameters and the product configuration, the procurement engine will attempt to satisfy the need by reserving products from stock, ordering products from a supplier, or passing a manufacturing order, etc. A Procurement Exception occurs when the system cannot find a way to fulfill a procurement. Some exceptions will resolve themselves automatically, but others require manual intervention (those are identified by a specific error message). + + diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml index 13474351744..d04e6f17fe8 100644 --- a/addons/product/product_view.xml +++ b/addons/product/product_view.xml @@ -106,11 +106,31 @@ + - - + + + When you sell this service, nothing special will be trigered + to deliver the customer. + + + When you sell this product, OpenERP will use the available inventory + for the delivery order. + + If there are not enough quantities available, the delivery order + will wait for new products. You should create others rules + (orderpoints, manual purchase orders) to fulfill the inventory. + + + When you sell this product, a delivery order will be created. + OpenERP will consider that the required quantities are always + available as it's a consumable (the stock on hand may become negative). + + + + diff --git a/addons/project_mrp/project_mrp_view.xml b/addons/project_mrp/project_mrp_view.xml index ca1e1f893e7..51de9dd5cf3 100644 --- a/addons/project_mrp/project_mrp_view.xml +++ b/addons/project_mrp/project_mrp_view.xml @@ -36,9 +36,16 @@ product.product - - + + False + + + When you sell this service to a customer, a task will be + created to follow up the job to do. This task will appear + in the project related to the contract of the sale order. + + diff --git a/addons/project_timesheet/project_timesheet_data.xml.THIS b/addons/project_timesheet/project_timesheet_data.xml.THIS deleted file mode 100644 index fc6597595ae..00000000000 --- a/addons/project_timesheet/project_timesheet_data.xml.THIS +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 53f27245e7e..796fd1351a9 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -572,6 +572,20 @@ + + + When you sell this service to a customer, a draft purchase order + will be created in order to subcontract the job + to + . + + + When you sell this product, OpenERP will trigger a draft + purchase order to buy the required quantities to the supplier. + The delivery order will be ready after having received the + products. + + diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml index 842de65b68e..80685249849 100644 --- a/addons/purchase/report/purchase_report_view.xml +++ b/addons/purchase/report/purchase_report_view.xml @@ -72,7 +72,7 @@ - +
+ When you sell this product, OpenERP will trigger a manufacturing + order using the bill of materials assigned to this product. + The delivery order will be ready once the production is done. +
+ Procurement Orders represent the need for a certain quantity of products, at a given time, in a given location. Sales Orders are one typical source of Procurement Orders (but these are distinct documents). Depending on the procurement parameters and the product configuration, the procurement engine will attempt to satisfy the need by reserving products from stock, ordering products from a supplier, or passing a manufacturing order, etc. A Procurement Exception occurs when the system cannot find a way to fulfill a procurement. Some exceptions will resolve themselves automatically, but others require manual intervention (those are identified by a specific error message). +
+ When you sell this service, nothing special will be trigered + to deliver the customer. +
+ When you sell this product, OpenERP will use the available inventory + for the delivery order. + + If there are not enough quantities available, the delivery order + will wait for new products. You should create others rules + (orderpoints, manual purchase orders) to fulfill the inventory. +
+ When you sell this product, a delivery order will be created. + OpenERP will consider that the required quantities are always + available as it's a consumable (the stock on hand may become negative). +
+ When you sell this service to a customer, a task will be + created to follow up the job to do. This task will appear + in the project related to the contract of the sale order. +
+ When you sell this service to a customer, a draft purchase order + will be created in order to subcontract the job + to + . +
+ When you sell this product, OpenERP will trigger a draft + purchase order to buy the required quantities to the supplier. + The delivery order will be ready after having received the + products. +