diff --git a/addons/account/account_installer.xml b/addons/account/account_installer.xml
index 4c6faae9e19..50e431935bc 100644
--- a/addons/account/account_installer.xml
+++ b/addons/account/account_installer.xml
@@ -19,26 +19,26 @@
position="attributes">
You can enhance OpenERP's basic accounting support with a few additional OpenERP applications.
-
+
Configure
23
-
-
-
+
+
+
-
+
-
-
-
-
-
+
+
-
-
-
-
-
+
+
+
+
+
@@ -88,12 +88,12 @@
account_installer_action_replace
tree
-
-
-
+
+
+
-
+
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index aa4ccfc74ff..1f86fb07b90 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -487,20 +487,5 @@
-
-
-
- res.partner.invoice.info.inherit
- res.partner
- form
-
-
-
-
-
-
-
-
-
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index b18e3e2f609..1b9e166ac81 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -1496,7 +1496,7 @@
-
+
Account Add wizard
@@ -1519,7 +1519,7 @@
res_model="account.addtmpl.wizard"
context="{'tmpl_ids': active_id}"
src_model="account.account.template"
- view_type="form" view_mode="form"/>
+ view_type="form" view_mode="form"/>
Generate Chart of Accounts from a Chart Template
- Generate Chart of Accounts from a Chart Template
-
-
- This will automatically configure your chart of accounts, bank accounts, taxes and journals according to the selected template
- 150
-
-
- 15
-
-
+
+
+ This will automatically configure your chart of accounts, bank accounts, taxes and journals according to the selected template
+ 150
+
+
+ 15
+
+
diff --git a/addons/account/partner.py b/addons/account/partner.py
index 215c4286315..2497aaa447c 100644
--- a/addons/account/partner.py
+++ b/addons/account/partner.py
@@ -89,7 +89,7 @@ class res_partner(osv.osv):
_inherit = 'res.partner'
_description = 'Partner'
def _credit_debit_get(self, cr, uid, ids, field_names, arg, context):
- query = self.pool.get('account.move.line')._query_get(cr, uid, context=context)
+ query = self.pool.get('account.move.line')._query_get(cr, 1, context=context)
cr.execute("""select
l.partner_id, a.type, sum(l.debit-l.credit)
from
diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml
index 7fbc1c14eb7..1512bd402b2 100644
--- a/addons/account/partner_view.xml
+++ b/addons/account/partner_view.xml
@@ -118,7 +118,6 @@
-
@@ -126,17 +125,14 @@
-
- res.partner.account.info.inherit
- res.partner
- form
-
-
-
-
-
-
-
-
+
+
diff --git a/addons/account/security/account_security.xml b/addons/account/security/account_security.xml
index beb3e4e8ebb..a572f6ca425 100644
--- a/addons/account/security/account_security.xml
+++ b/addons/account/security/account_security.xml
@@ -44,77 +44,77 @@
- Entry lines
+ Entry lines
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Journal Period
+ Journal Period
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Journal multi-company
+ Journal multi-company
- ['|','|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Analytic journal multi-company
+ Analytic journal multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Analytic journal multi-company
+ Analytic journal multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Period multi-company
+ Period multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Fiscal year multi-company
+ Fiscal year multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Account multi-company
+ Account multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Tax multi-company
+ Tax multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Tax code multi-company
+ Tax code multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Invoice multi-company
+ Invoice multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
diff --git a/addons/account/security/ir.model.access.csv b/addons/account/security/ir.model.access.csv
index 7458594d240..826e2076033 100644
--- a/addons/account/security/ir.model.access.csv
+++ b/addons/account/security/ir.model.access.csv
@@ -1,4 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_product_product_account_user","product.product.account.user","product.model_product_product","group_account_user",1,0,0,0
"access_account_payment_term","account.payment.term","model_account_payment_term","account.group_account_user",1,0,0,0
"access_account_payment_term_line","account.payment.term.line","model_account_payment_term_line","account.group_account_user",1,0,0,0
"access_account_account_type","account.account.type","model_account_account_type","account.group_account_user",1,0,0,0
@@ -69,7 +70,6 @@
"access_account_add_tmpl_wizard_system_manager","account.addtmpl.wizard system manager","model_account_addtmpl_wizard","base.group_system",1,1,1,1
"access_account_invoice_user","account.invoice user","model_account_invoice","base.group_user",1,0,0,0
"access_account_invoice_user","account.invoice.line user","model_account_invoice_line","base.group_user",1,0,0,0
-"access_account_invoice_user","account.invoice.tax user","model_account_invoice_tax","base.group_user",1,0,0,0
"access_account_payment_term_partner_manager","account.payment.term partner manager","model_account_payment_term","base.group_user",1,0,0,0
"access_account_payment_term_line_partner_manager","account.payment.term.line partner manager","model_account_payment_term_line","base.group_user",1,0,0,0
"access_account_account_product_manager","account.account product manager","model_account_account","product.group_product_manager",1,0,0,0
@@ -85,7 +85,7 @@
"access_account_fiscal_position_account_template","account.fiscal.position.account.template","model_account_fiscal_position_account_template","account.group_account_manager",1,1,1,1
"access_account_sequence_fiscal_year","account.sequence.fiscalyear","model_account_sequence_fiscalyear","account.group_account_user",1,1,1,1
"access_account_sequence_fiscal_year_user","account.sequence.fiscalyear user","model_account_sequence_fiscalyear","base.group_user",1,0,0,0
-"access_account_installer","account.installer","model_account_installer","base.group_user",1,0,0,0
+"access_account_installer","account.installer","model_account_installer","base.group_system",1,1,1,1
"access_report_account_receivable","report.account.receivable","model_report_account_receivable","account.group_account_manager",1,0,0,0
"access_temp_range","temp.range","model_temp_range","account.group_account_manager",1,0,0,0
"access_report_aged_receivable","report.aged.receivable","model_report_aged_receivable","account.group_account_manager",1,0,0,0
diff --git a/addons/account/wizard/account_automatic_reconcile.py b/addons/account/wizard/account_automatic_reconcile.py
index 2370c6dbe13..a1798ae9cbf 100644
--- a/addons/account/wizard/account_automatic_reconcile.py
+++ b/addons/account/wizard/account_automatic_reconcile.py
@@ -134,7 +134,6 @@ class account_automatic_reconcile(osv.osv_memory):
return (reconciled, len(credits)+len(debits))
def reconcile(self, cr, uid, ids, context=None):
- service = netsvc.LocalService("object_proxy")
move_line_obj = self.pool.get('account.move.line')
obj_model = self.pool.get('ir.model.data')
if context is None:
@@ -240,4 +239,4 @@ class account_automatic_reconcile(osv.osv_memory):
account_automatic_reconcile()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account/wizard/account_invoice_state_view.xml b/addons/account/wizard/account_invoice_state_view.xml
index d83c0c6f2dc..e0c22a0007f 100644
--- a/addons/account/wizard/account_invoice_state_view.xml
+++ b/addons/account/wizard/account_invoice_state_view.xml
@@ -1,22 +1,22 @@
-
+
account.invoice.confirm.form
account.invoice.confirm
form
-
-
+
+
-
-
+
+
-
+
-
+
Confirm Draft Invoices
account.invoice.confirm
form
@@ -25,7 +25,7 @@
new
-
+
Confirm Draft Invoices
@@ -33,24 +33,24 @@
action
account.invoice
-
+
-
+
account.invoice.cancel.form
account.invoice.cancel
form
-
-
+
+
-
-
+
+
-
+
-
+
Cancel Selected Invoices
account.invoice.cancel
form
@@ -59,7 +59,7 @@
new
-
+
Cancel Selected Invoices
@@ -67,7 +67,7 @@
action
account.invoice
-
+
-
-
\ No newline at end of file
+
+
diff --git a/addons/account_budget/wizard/account_budget_spread.py b/addons/account_budget/wizard/account_budget_spread.py
index ab2eb3d0bf6..f8a627ce070 100644
--- a/addons/account_budget/wizard/account_budget_spread.py
+++ b/addons/account_budget/wizard/account_budget_spread.py
@@ -32,13 +32,12 @@ class account_budget_spread(osv.osv_memory):
}
def check_spread(self, cr, uid, ids, context=None):
- service = netsvc.LocalService("object_proxy")
if context is None:
context = {}
- data = self.read(cr, uid, ids, [])[0]
- res = service.execute(cr.dbname, uid, 'account.budget.post', 'spread', context['active_ids'], data['fiscalyear'], data['amount'])
+ data = self.browse(cr, uid, ids, context=context)[0]
+ res = self.pool.get('account.budget.post').spread(cr, uid, context['active_ids'], data.fiscalyear.id, data.amount)
return {}
account_budget_spread()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/auction/report/auction_invoice.py b/addons/auction/report/auction_invoice.py
index f367d8df88e..b8c508237a5 100644
--- a/addons/auction/report/auction_invoice.py
+++ b/addons/auction/report/auction_invoice.py
@@ -27,8 +27,7 @@ class auction_invoice(report_int):
report_int.__init__(self, name)
def create(self,cr, uid, ids, datas, context):
- service = netsvc.LocalService("object_proxy")
- lots = service.execute(cr.dbname,uid, 'auction.lots', 'read', ids, ['ach_inv_id'])
+ lots = self.pool.get('auction.lots').read(cr,uid, ids, ['ach_inv_id'], context=context)
invoices = {}
for l in lots:
diff --git a/addons/base_action_rule/security/ir.model.access.csv b/addons/base_action_rule/security/ir.model.access.csv
index 99e4fc07c4b..a8e43372e23 100644
--- a/addons/base_action_rule/security/ir.model.access.csv
+++ b/addons/base_action_rule/security/ir.model.access.csv
@@ -1,2 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_base_action_rule","base.action.rule","model_base_action_rule",,1,1,1,1
+"access_base_action_rule","base.action.rule","model_base_action_rule",,1,0,0,0
+"access_base_action_rule_config","base.action.rule config","model_base_action_rule",base.group_system,1,0,0,0
diff --git a/addons/base_calendar/base_calendar_view.xml b/addons/base_calendar/base_calendar_view.xml
index 79c8a0207a3..56e45c9ccf9 100644
--- a/addons/base_calendar/base_calendar_view.xml
+++ b/addons/base_calendar/base_calendar_view.xml
@@ -2,7 +2,7 @@
-
+
calendar.attendee.form
@@ -10,12 +10,12 @@
form
-
-
-
+
+
+
-
+
@@ -68,7 +68,7 @@
-
+
calendar.attendee.tree
@@ -87,7 +87,7 @@
-
+
calendar.attendee.search
@@ -103,52 +103,52 @@
separator="1" help="Declined Invitations" />
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
- Event Invitations
- ir.actions.act_window
- calendar.attendee
- form
- tree,form
-
- {'default_sent_by_uid': uid}
-
+
+ Event Invitations
+ ir.actions.act_window
+ calendar.attendee
+ form
+ tree,form
+
+ {'default_sent_by_uid': uid}
+
-
+
+ parent="base.menu_base_config" sequence="15" />
-
+
-
-
+
-
+
res.alarm.form
res.alarm
form
@@ -165,7 +165,7 @@
-
+
res.alarm.tree
@@ -189,198 +189,199 @@
tree,form
-
+
+
-
- Event Form
- calendar.event
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ Event Form
+ calendar.event
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
- Event Tree
- calendar.event
- tree
-
-
-
-
-
-
-
-
-
-
-
+
+ Event Tree
+ calendar.event
+ tree
+
+
+
+
+
+
+
+
+
+
+
-
+
-
- Events Calendar
- calendar.event
- calendar
-
-
-
-
-
-
-
-
-
+
+ Events Calendar
+ calendar.event
+ calendar
+
+
+
+
+
+
+
+
+
-
+
-
- Calendar Events Search
- calendar.event
- search
-
+
+ Calendar Events Search
+ calendar.event
+ search
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+
-
- Events
- ir.actions.act_window
- calendar.event
- form
- tree,form,calendar
-
-
+
+ Events
+ ir.actions.act_window
+ calendar.event
+ form
+ tree,form,calendar
+
+
-
+
-
diff --git a/addons/base_calendar/security/ir.model.access.csv b/addons/base_calendar/security/ir.model.access.csv
old mode 100755
new mode 100644
index eba4e092f14..a95b1e1a129
--- a/addons/base_calendar/security/ir.model.access.csv
+++ b/addons/base_calendar/security/ir.model.access.csv
@@ -1,9 +1,9 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_calendar_attendee","calendar.attendee","model_calendar_attendee",,1,1,1,1
-"access_calendar_alarm","calendar.alarm","model_calendar_alarm",,1,1,1,1
-"access_res_alarm","res.alarm","model_res_alarm",,1,1,1,1
-"access_calendar_event_all","calendar.event","model_calendar_event",,1,1,1,1
-"access_calendar_todo","calendar.todo","model_calendar_todo",,1,1,1,1
-"access_base_calendar_invite_attendee","base_calendar.invite.attendee","model_base_calendar_invite_attendee",,1,1,1,1
-"access_calendar_event_edit_all","calendar_event_edit_all","model_calendar_event_edit_all",,1,1,1,1
-"access_base_calendar_set_exrule","base.calendar.set.exrule","model_base_calendar_set_exrule",,1,1,1,1
+"access_calendar_attendee","calendar.attendee","model_calendar_attendee",base.group_user,1,1,1,1
+"access_calendar_alarm","calendar.alarm","model_calendar_alarm",base.group_user,1,1,1,1
+"access_res_alarm","res.alarm","model_res_alarm",base.group_user,1,1,1,1
+"access_calendar_event_all","calendar.event","model_calendar_event",base.group_user,1,1,1,1
+"access_calendar_todo","calendar.todo","model_calendar_todo",base.group_user,1,1,1,1
+"access_base_calendar_invite_attendee","base_calendar.invite.attendee","model_base_calendar_invite_attendee",base.group_user,1,1,1,1
+"access_calendar_event_edit_all","calendar_event_edit_all","model_calendar_event_edit_all",base.group_user,1,1,1,1
+"access_base_calendar_set_exrule","base.calendar.set.exrule","model_base_calendar_set_exrule",base.group_user,1,1,1,1
diff --git a/addons/base_setup/base_setup_installer.xml b/addons/base_setup/base_setup_installer.xml
index 7a543f5466f..cbe4c9d24a2 100644
--- a/addons/base_setup/base_setup_installer.xml
+++ b/addons/base_setup/base_setup_installer.xml
@@ -18,10 +18,10 @@
If you don't think you need any of these right now, you can easily install them later on.
-
- 15
-
-
+
+ 15
+
+
Install Generic Modules
@@ -29,7 +29,7 @@ If you don't think you need any of these right now, you can easily install them
-
+
@@ -60,11 +60,11 @@ If you don't think you need any of these right now, you can easily install them
base_setup_installer_action_replace
tree
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/addons/base_setup/base_setup_todo.xml b/addons/base_setup/base_setup_todo.xml
index 2d6b400d2c5..5ec9be53d76 100644
--- a/addons/base_setup/base_setup_todo.xml
+++ b/addons/base_setup/base_setup_todo.xml
@@ -10,45 +10,45 @@
Main Company Setup
-
- Information of your company will be used to custiomise your documents like Invoices, Sale Orders,...
-
-
- Configure Your Company
-
-
- 25
-
-
+
+ Information of your company will be used to custiomise your documents like Invoices, Sale Orders,...
+
+
+ Configure Your Company
+
+
+ 25
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
diff --git a/addons/base_setup/security/ir.model.access.csv b/addons/base_setup/security/ir.model.access.csv
index 912e3c1c634..9cc4e8bda68 100644
--- a/addons/base_setup/security/ir.model.access.csv
+++ b/addons/base_setup/security/ir.model.access.csv
@@ -1,4 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-"access_base_setup_installer","base.setup.installer","model_base_setup_installer",,1,0,0,0
-"access_base_setup_company","base.setup.company","model_base_setup_company",,1,0,0,0
-"access_base_setup_config","base.setup.config","model_base_setup_config",,1,0,0,0
+"access_base_setup_installer","base.setup.installer","model_base_setup_installer",base.group_system,1,1,1,1
+"access_base_setup_company","base.setup.company","model_base_setup_company",base.group_system,1,1,1,1
+"access_base_setup_config","base.setup.config","model_base_setup_config",base.group_system,1,1,1,1
diff --git a/addons/board_purchase/board_purchase_view.xml b/addons/board_purchase/board_purchase_view.xml
index 5548b3f2838..8e08ee7134d 100644
--- a/addons/board_purchase/board_purchase_view.xml
+++ b/addons/board_purchase/board_purchase_view.xml
@@ -2,13 +2,13 @@
-
+
-
+
Draft Purchases
ir.actions.act_window
purchase.order
@@ -17,7 +17,7 @@
[('date_order','>',time.strftime('%Y-01-01 00:00:00')),('date_order','<',time.strftime('%Y-12-31 23:59:59')), ('state','=','draft')]
-
+
Quotation Request
ir.actions.act_window
purchase.order
@@ -47,7 +47,7 @@
-
+
Purchase Dashboard
board.board
form
@@ -55,7 +55,7 @@
menu
-
-
-
+
@@ -311,7 +311,7 @@
-
+
diff --git a/addons/crm/crm_mailgate.py b/addons/crm/crm_mailgate.py
index 3415011cb7f..04a837e9bf4 100644
--- a/addons/crm/crm_mailgate.py
+++ b/addons/crm/crm_mailgate.py
@@ -32,11 +32,12 @@ from tools.translate import _
import tools
from osv import fields,osv,orm
from osv.orm import except_orm
+import collections
from tools import command_re
-class crm_cases(osv.osv):
- """ crm cases """
+class mailgate_thread(osv.osv):
+ """ mailgate_thread """
_name = "mailgate.thread"
_inherit = "mailgate.thread"
@@ -127,7 +128,7 @@ class crm_cases(osv.osv):
#getattr(self, act)(cr, uid, select)
return res
- def emails_get(self, cr, uid, ids, context={}):
+ def emails_get(self, cr, uid, ids, context=None):
"""
Get Emails
@@ -137,16 +138,24 @@ class crm_cases(osv.osv):
@param ids: List of email’s IDs
@param context: A standard dictionary for contextual values
"""
- res = []
+ res = {}
+
if isinstance(ids, (str, int, long)):
- select = [ids]
+ select = [long(ids)]
else:
select = ids
- for case in self.browse(cr, uid, select):
- user_email = (case.user_id and case.user_id.address_id and case.user_id.address_id.email) or False
- res += [(user_email, case.email_from, case.email_cc or False, getattr(case,'priority') and case.priority or False)]
- if isinstance(ids, (str, int, long)):
- return len(res) and res[0] or False
+
+ for thread in self.browse(cr, uid, select, context=context):
+ values = collections.defaultdict(set)
+
+ for message in thread.message_ids:
+ user_email = (message.user_id and message.user_id.address_id and message.user_id.address_id.email) or False
+ values['user_email'].add(user_email)
+ values['email_from'].add(message.email_from)
+ values['email_cc'].add(message.email_cc or False)
+
+ res[str(thread.id)] = dict((key,list(values[key])) for key, value in values.iteritems())
+
return res
def msg_send(self, cr, uid, id, *args, **argv):
@@ -161,4 +170,4 @@ class crm_cases(osv.osv):
"""
return True
-crm_cases()
+mailgate_thread()
diff --git a/addons/crm/crm_meeting_menu.xml b/addons/crm/crm_meeting_menu.xml
index aaae9541613..ec58c116baf 100644
--- a/addons/crm/crm_meeting_menu.xml
+++ b/addons/crm/crm_meeting_menu.xml
@@ -38,7 +38,7 @@
-
+
gantt
@@ -85,33 +85,33 @@
+ parent="base.menu_base_partner" sequence="3" />
+ action="crm_case_categ_meet" parent="menu_meeting_sale"
+ sequence="1" />
-
+
Calendar
ir.ui.menu
-
+
- Meeting Invitations
- ir.actions.act_window
- calendar.attendee
- form
- tree,form
-
+ Meeting Invitations
+ ir.actions.act_window
+ calendar.attendee
+ form
+ tree,form
+
[('ref','like','crm.meeting,')]
- {'default_sent_by_uid': uid}
-
+ {'default_sent_by_uid': uid}
+
+ name="Meeting Invitations" parent="crm.menu_meeting_sale"
+ sequence="10" action="action_view_attendee_form"
+ groups="base.group_extended" />
diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml
index cd3b7866a89..34bdafe1c58 100644
--- a/addons/crm/crm_meeting_view.xml
+++ b/addons/crm/crm_meeting_view.xml
@@ -2,7 +2,7 @@
-
+
Meeting Categories
@@ -16,7 +16,7 @@
-
+
CRM - Meetings Form
@@ -26,7 +26,7 @@
+ required="1" colspan="2" />
+ name="%(base_calendar.action_base_calendar_set_exrule)d" icon="gtk-zoom-out" type="action"
+ context="{'model' : 'crm.meeting'}"
+ attrs="{'invisible':[('rrule_type','in', ('none', False))]}"/>
@@ -133,7 +133,7 @@
-
-
+
CRM - Meetings Tree
@@ -222,7 +222,7 @@
-
+
CRM - Meetings Calendar
@@ -238,7 +238,7 @@
-
+
CRM - Meetings Gantt
@@ -254,7 +254,7 @@
-
+
CRM - Meetings Search
@@ -274,29 +274,29 @@
domain="[('section_id','=',context.get('section_id',False))]"
help="My Sale Team" />
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
calendar.attendee.form.inherit
@@ -310,7 +310,7 @@
-
+
calendar.attendee.tree.inherit
diff --git a/addons/crm/crm_opportunity.py b/addons/crm/crm_opportunity.py
index ce9b661fa1a..50af3cf88cd 100644
--- a/addons/crm/crm_opportunity.py
+++ b/addons/crm/crm_opportunity.py
@@ -51,8 +51,9 @@ class crm_opportunity(osv.osv):
'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128),
'phone': fields.char("Phone", size=64),
'date_deadline': fields.date('Expected Closing'),
- 'date_action': fields.date('Next Action'),
- }
+ 'date_action': fields.date('Next Action Date'),
+ 'title_action': fields.char('Next Action', size=64),
+ }
def case_close(self, cr, uid, ids, *args):
"""Overrides close for crm_case for setting probability and close date
@param self: The object pointer
diff --git a/addons/crm/crm_opportunity_menu.xml b/addons/crm/crm_opportunity_menu.xml
index a1cdce906af..cb24990416f 100644
--- a/addons/crm/crm_opportunity_menu.xml
+++ b/addons/crm/crm_opportunity_menu.xml
@@ -2,7 +2,7 @@
-
-
Opportunities
crm.lead
- tree,form,graph
- ['|',('type','=','opportunity'),('state','=','draft')]
- {'search_default_user_id':uid,'search_default_current':1}
+ tree,form,graph,calendar
+ [('type','=','opportunity')]
+ {'search_default_user_id':uid,'search_default_current':1, 'default_type': 'opportunity'}
- {'search_default_current':1, 'default_type': 'opportunity'}
@@ -55,11 +54,11 @@
+ parent="base.menu_base_partner" sequence="1" />
+ parent="base.menu_sales" action="crm_case_category_act_oppor11"
+ sequence="2" />
diff --git a/addons/crm/crm_opportunity_view.xml b/addons/crm/crm_opportunity_view.xml
index 5fbfa766cbf..08530fcae27 100644
--- a/addons/crm/crm_opportunity_view.xml
+++ b/addons/crm/crm_opportunity_view.xml
@@ -32,7 +32,7 @@
id="menu_crm_opportunity_stage_act" name="Stages"
parent="menu_crm_config_opportunity" />
-
+
Opportunity Resource Type
@@ -81,8 +81,10 @@
name="%(opportunity2phonecall_act)d" icon="gtk-redo" type="action" />
+
-
+
+
@@ -133,6 +135,27 @@
icon="gtk-convert" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -160,10 +183,10 @@
icon="gtk-undo" type="action" />
-
-
-
-
+
+
+
+
+
-
-
-
+
-
-
+
+
diff --git a/addons/crm/crm_phonecall_view.xml b/addons/crm/crm_phonecall_view.xml
index db8adda789c..59b8013b167 100644
--- a/addons/crm/crm_phonecall_view.xml
+++ b/addons/crm/crm_phonecall_view.xml
@@ -261,7 +261,7 @@
-
+
diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml
index f854981858c..19e3f731606 100644
--- a/addons/crm/crm_view.xml
+++ b/addons/crm/crm_view.xml
@@ -2,22 +2,22 @@
+ parent="base.menu_base_config" sequence="1"/>
+ parent="base.menu_crm_config_sales" sequence="1"/>
+ parent="base.menu_base_config" sequence="4"/>
+ parent="base.menu_base_partner" sequence="8" />
@@ -57,7 +57,7 @@
-
+
crm.case.section.tree
@@ -73,7 +73,7 @@
-
+
Sales Team
@@ -82,7 +82,7 @@
-
+
crm.case.stage.tree
@@ -99,7 +99,7 @@
-
+
crm.case.stage.form
@@ -120,7 +120,7 @@
-
+
Stages
@@ -144,7 +144,7 @@
-
+
crm.case.categ.tree
@@ -158,7 +158,7 @@
-
+
Categories
@@ -173,7 +173,7 @@
-
+
crm.case.resource.type.tree
@@ -188,7 +188,7 @@
-
+
crm.case.resource.type.form
@@ -203,7 +203,7 @@
-
+
Resource Type
@@ -220,7 +220,7 @@
-
+
crm.case.log.tree
@@ -240,7 +240,7 @@
-
+
crm.segmentation.line.tree
@@ -257,7 +257,7 @@
-
+
crm.segmentation.line.form
@@ -277,7 +277,7 @@
-
+
crm.segmentation.form
@@ -322,7 +322,7 @@
-
+
crm.segmentation.tree
@@ -383,7 +383,7 @@
-
+
view.res.partner.form.crm.inherited1
diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml
index f6ac9238b3c..0601cd47c71 100644
--- a/addons/crm/report/crm_lead_report_view.xml
+++ b/addons/crm/report/crm_lead_report_view.xml
@@ -232,11 +232,9 @@
-
diff --git a/addons/crm/report/crm_phonecall_report_view.xml b/addons/crm/report/crm_phonecall_report_view.xml
index ddc50460e31..f1f5eb4a490 100644
--- a/addons/crm/report/crm_phonecall_report_view.xml
+++ b/addons/crm/report/crm_phonecall_report_view.xml
@@ -187,9 +187,8 @@
-
diff --git a/addons/crm/res_partner_view.xml b/addons/crm/res_partner_view.xml
index 254d2c8f3b4..769cb5d5c81 100644
--- a/addons/crm/res_partner_view.xml
+++ b/addons/crm/res_partner_view.xml
@@ -4,58 +4,62 @@
-
- res.partner.crm.info.inherit
- res.partner
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/crm/security/ir.model.access.csv b/addons/crm/security/ir.model.access.csv
index bbd437dba47..8befbd8c084 100644
--- a/addons/crm/security/ir.model.access.csv
+++ b/addons/crm/security/ir.model.access.csv
@@ -1,19 +1,23 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_crm_segmentation_user","crm.segmentation user","model_crm_segmentation","crm.group_crm_user",1,0,0,0
+"access_crm_segmentation_line_user","crm.segmentation.line user","model_crm_segmentation_line","crm.group_crm_user",1,0,0,0
"access_crm_segmentation","crm.segmentation","model_crm_segmentation","crm.group_crm_manager",1,1,1,1
"access_crm_segmentation_line","crm.segmentation.line","model_crm_segmentation_line","crm.group_crm_manager",1,1,1,1
"access_crm_case_section","crm.case.section","model_crm_case_section","crm.group_crm_user",1,0,0,0
"access_crm_case_categ","crm.case.categ","model_crm_case_categ","crm.group_crm_user",1,0,0,0
-"access_crm_meeting","crm.meeting","model_crm_meeting","crm.group_crm_manager",1,1,1,1
-"access_crm_lead","crm.lead","model_crm_lead","crm.group_crm_manager",1,1,1,1
-"access_crm_phonecall","crm.phonecall","model_crm_phonecall","crm.group_crm_manager",1,1,1,1
+"access_crm_meeting","crm.meeting","model_crm_meeting","crm.group_crm_user",1,1,1,1
+"access_crm_lead","crm.lead","model_crm_lead","crm.group_crm_user",1,1,1,1
+"access_crm_phonecall","crm.phonecall","model_crm_phonecall","crm.group_crm_user",1,1,1,1
+"access_crm_case_section_user","crm.case.section.user","model_crm_case_section","crm.group_crm_user",1,0,0,0
"access_crm_case_section_manager","crm.case.section.manager","model_crm_case_section","crm.group_crm_manager",1,1,1,1
+"access_crm_case_categ_user","crm.case.categ.user","model_crm_case_categ","crm.group_crm_user",1,0,0,0
"access_crm_case_categ_manager","crm.case.categ.manager","model_crm_case_categ","crm.group_crm_manager",1,1,1,1
"access_crm_case_stage","crm.case.stage","model_crm_case_stage","crm.group_crm_user",1,0,0,0
"access_crm_case_stage_manager","crm.case.stage","model_crm_case_stage","crm.group_crm_manager",1,1,1,1
"access_crm_case_resource_type_user","crm_case_resource_type user","model_crm_case_resource_type","crm.group_crm_user",1,0,0,0
"access_crm_case_resource_type_manager","crm_case_resource_type manager","model_crm_case_resource_type","crm.group_crm_manager",1,1,1,1
-"access_crm_lead_report_user","crm.lead.report","model_crm_lead_report","crm.group_crm_user",1,0,0,0
-"access_crm_phonecall_report_user","crm.phonecall.report","model_crm_phonecall_report","crm.group_crm_user",1,0,0,0
+"access_crm_lead_report_manager","crm.lead.report","model_crm_lead_report","crm.group_crm_manager",1,0,0,0
+"access_crm_phonecall_report_manager","crm.phonecall.report","model_crm_phonecall_report","crm.group_crm_manager",1,0,0,0
"access_crm_lead2partner","crm.lead2partner","model_crm_lead2partner","crm.group_crm_user",1,1,1,1
"access_crm_lead2opportunity","crm.lead2opportunity","model_crm_lead2opportunity","crm.group_crm_user",1,1,1,1
"access_crm_opportunity2phonecall","crm.opportunity2phonecall","model_crm_opportunity2phonecall","crm.group_crm_user",1,1,1,1
@@ -24,6 +28,11 @@
"access_crm_send_mail_attachment","crm.send.mail.attachment","model_crm_send_mail_attachment","crm.group_crm_user",1,1,1,1
"access_crm_partner2opportunity","crm.partner2opportunity","model_crm_partner2opportunity","crm.group_crm_user",1,1,1,1
"access_crm_lead2opportunity_partner","crm.lead2opportunity.partner","model_crm_lead2opportunity_partner","crm.group_crm_user",1,1,1,1
-"access_crm_installer","crm.installer.rule","model_crm_installer","crm.group_crm_user",1,1,1,1
-"access_crm_lead_forward_to_partner","crm.lead.forward.to.partner","model_crm_lead_forward_to_partner","crm.group_crm_user",2,2,2,2
+"access_crm_installer","crm.installer.rule","model_crm_installer","base.group_system",1,1,1,1
+"access_crm_lead_forward_to_partner","crm.lead.forward.to.partner","model_crm_lead_forward_to_partner","crm.group_crm_user",1,1,1,1
"access_mailgate_thread","mailgate.thread","model_mailgate_thread","crm.group_crm_user",1,1,1,1
+"access_res_partner","res.partner.crm.user","base.model_res_partner","crm.group_crm_user",1,0,0,0
+"access_res_partner_address","res.partner.address.crm.user","base.model_res_partner_address","crm.group_crm_user",1,0,0,0
+"access_res_partner_category","res.partner.category.crm.user","base.model_res_partner_category","crm.group_crm_user",1,0,0,0
+"mail_gateway_mailgate_message","mail_gateway.mailgate.message","mail_gateway.model_mailgate_message","crm.group_crm_user",1,1,1,1
+"mail_gateway_mailgate_thread","mail_gateway.mailgate.thread","model_mailgate_thread","crm.group_crm_user",1,1,1,1
diff --git a/addons/crm_profiling/wizard/open_questionnaire.py b/addons/crm_profiling/wizard/open_questionnaire.py
index 0fc50b9186a..91b82a02d1a 100644
--- a/addons/crm_profiling/wizard/open_questionnaire.py
+++ b/addons/crm_profiling/wizard/open_questionnaire.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
import pooler
@@ -50,11 +50,11 @@ class open_questionnaire(wizard.interface):
states = {
'init': {
'actions': [],
- 'result': {'type': 'form', 'arch': _questionnaire_choice_arch, 'fields': _questionnaire_choice_fields, 'state':[('end', 'Cancel'), ('open', 'Open Questionnaire')]}
+ 'result': {'type': 'form', 'arch': _questionnaire_choice_arch, 'fields': _questionnaire_choice_fields, 'state':[('end', 'Cancel','gtk-cancel'), ('open', 'Open Questionnaire','terp-camera_test')]}
},
'open': {
'actions': [build_form],
- 'result': {'type': 'form', 'arch':_QUEST_FORM, 'fields': _QUEST_FIELDS, 'state':[('end', 'Cancel'), ('compute', 'Save Data')]}
+ 'result': {'type': 'form', 'arch':_QUEST_FORM, 'fields': _QUEST_FIELDS, 'state':[('end', 'Cancel','gtk-cancel'), ('compute', 'Save Data','terp-stock_format-scientific')]}
},
'compute': {
'actions': [],
diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml
index 427f5bfd6f2..e367148213d 100644
--- a/addons/delivery/delivery_view.xml
+++ b/addons/delivery/delivery_view.xml
@@ -67,7 +67,7 @@
-
+
@@ -243,18 +243,6 @@
-
- stock.move.tree.weight
- tree
- stock.move
-
-
-
-
-
-
-
-
stock.move.form.weight
form
@@ -267,18 +255,6 @@
-
- stock.move.reception.packing.tree.weight
- tree
- stock.move
-
-
-
-
-
-
-
-
stock.move.reception.packing.form.weight
form
@@ -297,8 +273,8 @@
-
-
+
+
diff --git a/addons/delivery/i18n/ru.po b/addons/delivery/i18n/ru.po
index fa64529594b..b43f11ed5d9 100644
--- a/addons/delivery/i18n/ru.po
+++ b/addons/delivery/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-04-23 09:08+0000\n"
-"Last-Translator: grisha \n"
+"PO-Revision-Date: 2010-06-11 16:12+0000\n"
+"Last-Translator: Sios \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-24 03:52+0000\n"
+"X-Launchpad-Export-Date: 2010-06-12 03:44+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: delivery
diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml
index d912534bbc2..3f1e09ae76c 100644
--- a/addons/document/document_view.xml
+++ b/addons/document/document_view.xml
@@ -3,7 +3,7 @@
-
+
@@ -13,15 +13,15 @@
form
-
-
-
-
-
-
+
+
+
+
+
+
-
+
@@ -71,13 +71,13 @@
-
+
-
+
@@ -237,19 +237,19 @@
help="less 1 month modified/created attachments"
domain="[('create_date','<=', time.strftime('%%Y-%%m-%%d')),('create_date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
/>
-
-
+
+
-
-
-
-
+
+
+
+
-
+
diff --git a/addons/document_ftp/__init__.py b/addons/document_ftp/__init__.py
index 45ec4a6b67f..af514df8985 100644
--- a/addons/document_ftp/__init__.py
+++ b/addons/document_ftp/__init__.py
@@ -18,7 +18,7 @@
# along with this program. If not, see .
#
##############################################################################
-import doc_conf_wizard
import ftpserver
+import wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/document_ftp/__openerp__.py b/addons/document_ftp/__openerp__.py
index 18042dabf93..92ecac1d4ed 100644
--- a/addons/document_ftp/__openerp__.py
+++ b/addons/document_ftp/__openerp__.py
@@ -33,7 +33,8 @@
'depends': ['base', 'document'],
'init_xml': [],
'update_xml': [
- 'document_ftp_view.xml',
+ 'wizard/ftp_browse_view.xml',
+ 'wizard/document_configuration_view.xml',
'security/ir.model.access.csv'
],
'demo_xml': [],
diff --git a/addons/document_ftp/doc_conf_wizard.py b/addons/document_ftp/doc_conf_wizard.py
deleted file mode 100644
index 1399bc276b5..00000000000
--- a/addons/document_ftp/doc_conf_wizard.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# -*- 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 .
-#
-##############################################################################
-
-import base64
-
-from osv import osv, fields
-from osv.orm import except_orm
-import urlparse
-
-import os
-
-class document_configuration_wizard(osv.osv_memory):
-
- _name='document.configuration.wizard'
- _description = 'Auto Directory Configuration'
- _inherit = 'res.config'
- _rec_name = 'host'
- _columns = {
- 'host': fields.char('Address', size=64,
- help="Server address or IP.", required=True),
- }
-
- def detect_ip_addr(self, cr, uid, context=None):
- def _detect_ip_addr(self, cr, uid, context=None):
- from array import array
- import socket
- from struct import pack, unpack
-
- try:
- import fcntl
- except ImportError:
- fcntl = None
-
- if not fcntl: # not UNIX:
- host = socket.gethostname()
- ip_addr = socket.gethostbyname(host)
- else: # UNIX:
- # get all interfaces:
- nbytes = 128 * 32
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- names = array('B', '\0' * nbytes)
- outbytes = unpack('iL', fcntl.ioctl( s.fileno(), 0x8912, pack('iL', nbytes, names.buffer_info()[0])))[0]
- namestr = names.tostring()
- ifaces = [namestr[i:i+32].split('\0', 1)[0] for i in range(0, outbytes, 32)]
-
- for ifname in [iface for iface in ifaces if iface != 'lo']:
- ip_addr = socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, pack('256s', ifname[:15]))[20:24])
- break
- return ip_addr
-
- try:
- ip_addr = _detect_ip_addr(self, cr, uid, context)
- except:
- ip_addr = 'localhost'
- return ip_addr
-
- _defaults = {
- 'host': detect_ip_addr,
- }
-
- def execute(self, cr, uid, ids, context=None):
- conf = self.browse(cr, uid, ids[0], context)
- obj=self.pool.get('document.directory')
- objid=self.pool.get('ir.model.data')
-
- if self.pool.get('sale.order'):
- id = objid._get_id(cr, uid, 'document', 'dir_sale_order_all')
- id = objid.browse(cr, uid, id, context=context).res_id
- mid = self.pool.get('ir.model').search(cr, uid, [('model','=','sale.order')])
- obj.write(cr, uid, [id], {
- 'type':'ressource',
- 'ressource_type_id': mid[0],
- 'domain': '[]',
- })
- aid = objid._get_id(cr, uid, 'sale', 'report_sale_order')
- aid = objid.browse(cr, uid, aid, context=context).res_id
-
- self.pool.get('document.directory.content').create(cr, uid, {
- 'name': "Print Order",
- 'suffix': "_print",
- 'report_id': aid,
- 'extension': '.pdf',
- 'include_name': 1,
- 'directory_id': id,
- })
- id = objid._get_id(cr, uid, 'document', 'dir_sale_order_quote')
- id = objid.browse(cr, uid, id, context=context).res_id
- obj.write(cr, uid, [id], {
- 'type':'ressource',
- 'ressource_type_id': mid[0],
- 'domain': "[('state','=','draft')]",
- })
-
- if self.pool.get('product.product'):
- id = objid._get_id(cr, uid, 'document', 'dir_product')
- id = objid.browse(cr, uid, id, context=context).res_id
- mid = self.pool.get('ir.model').search(cr, uid, [('model','=','product.product')])
- obj.write(cr, uid, [id], {
- 'type':'ressource',
- 'ressource_type_id': mid[0],
- })
-
- if self.pool.get('stock.location'):
- aid = objid._get_id(cr, uid, 'stock', 'report_product_history')
- aid = objid.browse(cr, uid, aid, context=context).res_id
-
- self.pool.get('document.directory.content').create(cr, uid, {
- 'name': "Product Stock",
- 'suffix': "_stock_forecast",
- 'report_id': aid,
- 'extension': '.pdf',
- 'include_name': 1,
- 'directory_id': id,
- })
-
- if self.pool.get('account.analytic.account'):
- id = objid._get_id(cr, uid, 'document', 'dir_project')
- id = objid.browse(cr, uid, id, context=context).res_id
- mid = self.pool.get('ir.model').search(cr, uid, [('model','=','account.analytic.account')])
- obj.write(cr, uid, [id], {
- 'type':'ressource',
- 'ressource_type_id': mid[0],
- 'domain': '[]',
- 'ressource_tree': 1
- })
-
- # Update the action for FTP browse.
- aid = objid._get_id(cr, uid, 'document_ftp', 'action_document_browse')
- aid = objid.browse(cr, uid, aid, context=context).res_id
- self.pool.get('ir.actions.url').write(cr, uid, [aid], {'url': 'ftp://'+(conf.host or 'localhost')+':8021/'})
-document_configuration_wizard()
diff --git a/addons/document_ftp/wizard/__init__.py b/addons/document_ftp/wizard/__init__.py
new file mode 100644
index 00000000000..22971249113
--- /dev/null
+++ b/addons/document_ftp/wizard/__init__.py
@@ -0,0 +1,24 @@
+# -*- 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 .
+#
+##############################################################################
+import ftp_browse
+import document_configuration
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/document_ftp/wizard/document_configuration.py b/addons/document_ftp/wizard/document_configuration.py
new file mode 100644
index 00000000000..e7966c2e3a4
--- /dev/null
+++ b/addons/document_ftp/wizard/document_configuration.py
@@ -0,0 +1,121 @@
+# -*- 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 osv, fields
+from document_ftp import ftpserver
+class document_configuration(osv.osv_memory):
+
+ _name='document.configuration'
+ _description = 'Auto Directory Configuration'
+ _inherit = 'res.config'
+
+ _columns = {
+ 'sale_order' : fields.boolean('Sale Order', help="Auto directory configuration for Sale Orders and Quotation with report."),
+ 'product' : fields.boolean('Product', help="Auto directory configuration for Products."),
+ 'project': fields.boolean('Project', help="Auto directory configuration for Projects."),
+ }
+
+
+ def execute(self, cr, uid, ids, context=None):
+ conf_id = ids and ids[0] or False
+ conf = self.browse(cr, uid, conf_id, context)
+ dir_pool = self.pool.get('document.directory')
+ data_pool = self.pool.get('ir.model.data')
+ model_pool = self.pool.get('ir.model')
+ content_pool = self.pool.get('document.directory.content')
+ if conf.sale_order and self.pool.get('sale.order'):
+ # Sale order
+ dir_data_id = data_pool._get_id(cr, uid, 'document', 'dir_sale_order_all')
+ if dir_data_id:
+ sale_dir_id = data_pool.browse(cr, uid, dir_data_id, context=context).res_id
+ else:
+ sale_dir_id = data_pool.create(cr, uid, {'name': 'Sale Orders'})
+ mid = model_pool.search(cr, uid, [('model','=','sale.order')])
+ dir_pool.write(cr, uid, [sale_dir_id], {
+ 'type':'ressource',
+ 'ressource_type_id': mid[0],
+ 'domain': '[]',
+ })
+ # Qutation
+ dir_data_id = data_pool._get_id(cr, uid, 'document', 'dir_sale_order_quote')
+ if dir_data_id:
+ quta_dir_id = data_pool.browse(cr, uid, dir_data_id, context=context).res_id
+ else:
+ quta_dir_id = data_pool.create(cr, uid, {'name': 'Sale Quotations'})
+
+ dir_pool.write(cr, uid, [quta_dir_id], {
+ 'type':'ressource',
+ 'ressource_type_id': mid[0],
+ 'domain': "[('state','=','draft')]",
+ })
+ # Sale Order Report
+ order_report_data_id = data_pool._get_id(cr, uid, 'sale', 'report_sale_order')
+ if order_report_data_id:
+ order_report_id = data_pool.browse(cr, uid, order_report_data_id, context=context).res_id
+
+ content_pool.create(cr, uid, {
+ 'name': "Print Order",
+ 'suffix': "_print",
+ 'report_id': order_report_id,
+ 'extension': '.pdf',
+ 'include_name': 1,
+ 'directory_id': sale_dir_id,
+ })
+
+ content_pool.create(cr, uid, {
+ 'name': "Print Qutation",
+ 'suffix': "_print",
+ 'report_id': order_report_id,
+ 'extension': '.pdf',
+ 'include_name': 1,
+ 'directory_id': quta_dir_id,
+ })
+
+
+ if conf.product and self.pool.get('product.product'):
+ # Product
+ dir_data_id = data_pool._get_id(cr, uid, 'document', 'dir_product')
+ if dir_data_id:
+ product_dir_id = data_pool.browse(cr, uid, dir_data_id, context=context).res_id
+ else:
+ product_dir_id = data_pool.create(cr, uid, {'name': 'Products'})
+
+ mid = model_pool.search(cr, uid, [('model','=','product.product')])
+ dir_pool.write(cr, uid, [product_dir_id], {
+ 'type':'ressource',
+ 'ressource_type_id': mid[0],
+ })
+
+ if conf.project and self.pool.get('account.analytic.account'):
+ # Project
+ dir_data_id = data_pool._get_id(cr, uid, 'document', 'dir_project')
+ if dir_data_id:
+ project_dir_id = data_pool.browse(cr, uid, dir_data_id, context=context).res_id
+ else:
+ project_dir_id = data_pool.create(cr, uid, {'name': 'Projects'})
+
+ mid = model_pool.search(cr, uid, [('model','=','account.analytic.account')])
+ dir_pool.write(cr, uid, [project_dir_id], {
+ 'type':'ressource',
+ 'ressource_type_id': mid[0],
+ 'domain': '[]',
+ 'ressource_tree': 1
+ })
+document_configuration()
diff --git a/addons/document_ftp/document_ftp_view.xml b/addons/document_ftp/wizard/document_configuration_view.xml
similarity index 67%
rename from addons/document_ftp/document_ftp_view.xml
rename to addons/document_ftp/wizard/document_configuration_view.xml
index d3f4c09498c..c6f40deb429 100644
--- a/addons/document_ftp/document_ftp_view.xml
+++ b/addons/document_ftp/wizard/document_configuration_view.xml
@@ -1,22 +1,8 @@
-
- Browse Files
- ftp://localhost:8021/
-
-
-
-
-
Auto Configure Directory
- document.configuration.wizard
+ document.configuration
form
@@ -25,17 +11,21 @@
Auto Configure
- FTP Server Configuration
+ Resource Directory Configuration
- Choose the address for the Document Management System's FTP server.
+ Choose the following Resouces to auto directory configuration.
12
-
+
+
+
+
+
@@ -45,7 +35,7 @@
Auto Configure Directory
ir.actions.act_window
- document.configuration.wizard
+ document.configuration
form
form
diff --git a/addons/document_ftp/wizard/ftp_browse.py b/addons/document_ftp/wizard/ftp_browse.py
new file mode 100644
index 00000000000..06c9766997b
--- /dev/null
+++ b/addons/document_ftp/wizard/ftp_browse.py
@@ -0,0 +1,53 @@
+# -*- 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 osv, fields
+from tools.translate import _
+
+from document_ftp import ftpserver
+class document_ftp_browse(osv.osv_memory):
+ _name = 'document.ftp.browse'
+ _description = 'Document FTP Browse'
+
+ _columns = {
+ 'url' : fields.char('FTP Server', size=64, required=True),
+ }
+
+ def default_get(self, cr, uid, fields, context=None):
+ res = {}
+ if 'url' in fields:
+ user_pool = self.pool.get('res.users')
+ current_user = user_pool.browse(cr, uid, uid, context=context)
+ res['url'] = '%s@%s:%d'%(current_user.login, ftpserver.HOST, ftpserver.PORT)
+ return res
+
+ def browse_ftp(self, cr, uid, ids, context):
+ data_id = ids and ids[0] or False
+ data = self.browse(cr, uid, data_id, context)
+ ftp_url = 'ftp://'
+ final_url = ftp_url + data.url
+ return {
+ 'type': 'ir.actions.act_url',
+ 'url':final_url,
+ 'target': 'new'
+ }
+document_ftp_browse()
+
diff --git a/addons/document_ftp/wizard/ftp_browse_view.xml b/addons/document_ftp/wizard/ftp_browse_view.xml
new file mode 100644
index 00000000000..a32f93e096f
--- /dev/null
+++ b/addons/document_ftp/wizard/ftp_browse_view.xml
@@ -0,0 +1,40 @@
+
+
+
+
+ Document FTP Browse
+ document.ftp.browse
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Document Browse
+ ir.actions.act_window
+ document.ftp.browse
+
+ form
+ form
+ new
+
+
+
+
+
+
diff --git a/addons/email_template/__init__.py b/addons/email_template/__init__.py
old mode 100755
new mode 100644
diff --git a/addons/email_template/__openerp__.py b/addons/email_template/__openerp__.py
old mode 100755
new mode 100644
index 9c5f7bb5c70..ef50f631e3e
--- a/addons/email_template/__openerp__.py
+++ b/addons/email_template/__openerp__.py
@@ -16,6 +16,7 @@
'email_template_view.xml',
'email_template_mailbox_view.xml',
'wizard/email_template_send_wizard_view.xml',
+ 'security/ir.model.access.csv'
],
"installable": True,
"active": False,
diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py
old mode 100755
new mode 100644
index 1cef7aac6e3..2d34a095ff5
--- a/addons/email_template/email_template.py
+++ b/addons/email_template/email_template.py
@@ -17,10 +17,10 @@ try:
TEMPLATE_ENGINES.append(('mako', 'Mako Templates'))
except:
LOGGER.notifyChannel(
- _("Email Template"),
- netsvc.LOG_ERROR,
- _("Mako templates not installed")
- )
+ _("Email Template"),
+ netsvc.LOG_WARNING,
+ _("Mako templates not installed")
+ )
try:
from django.template import Context, Template as DjangoTemplate
#Workaround for bug:
@@ -31,10 +31,10 @@ try:
TEMPLATE_ENGINES.append(('django', 'Django Template'))
except:
LOGGER.notifyChannel(
- _("Email Template"),
- netsvc.LOG_ERROR,
- _("Django templates not installed")
- )
+ _("Email Template"),
+ netsvc.LOG_WARNING,
+ _("Django templates not installed")
+ )
import email_template_engines
import tools
@@ -468,7 +468,7 @@ class email_template(osv.osv):
context)
return True
- def generate_mailbox_item_from_template(self,
+ def _generate_mailbox_item_from_template(self,
cursor,
user,
template,
@@ -559,6 +559,8 @@ class email_template(osv.osv):
'folder':'drafts',
'mail_type':'multipart/alternative'
}
+ if not mailbox_values['account_id']:
+ raise Exception("Unable to send the mail. No account linked to the template.")
#Use signatures if allowed
if template.use_sign:
sign = self.pool.get('res.users').read(cursor,
@@ -570,13 +572,17 @@ class email_template(osv.osv):
mailbox_values['body_text'] += sign
if mailbox_values['body_html']:
mailbox_values['body_html'] += sign
+ print 'Creating', mailbox_values
mailbox_id = self.pool.get('email_template.mailbox').create(
cursor,
user,
mailbox_values,
context)
+
+ print 'Sending', mailbox_id
+ self.pool.get('email_template.mailbox').send_this_mail(cursor, user, [mailbox_id], context)
return mailbox_id
-
+
def generate_mail(self,
cursor,
user,
@@ -588,6 +594,7 @@ class email_template(osv.osv):
template = self.browse(cursor, user, template_id, context=context)
if not template:
raise Exception("The requested template could not be loaded")
+ print 'loaded', record_ids
for record_id in record_ids:
mailbox_id = self._generate_mailbox_item_from_template(
cursor,
@@ -595,6 +602,7 @@ class email_template(osv.osv):
template,
record_id,
context)
+ print 'loaded'
mail = self.pool.get('email_template.mailbox').browse(
cursor,
user,
@@ -616,7 +624,7 @@ class email_template(osv.osv):
mailbox_id,
{'folder':'outbox'},
context=context
- )
+ )
return True
email_template()
diff --git a/addons/email_template/email_template_account.py b/addons/email_template/email_template_account.py
old mode 100755
new mode 100644
diff --git a/addons/email_template/email_template_account_view.xml b/addons/email_template/email_template_account_view.xml
old mode 100755
new mode 100644
index 7a0bc84538f..9a35328b25c
--- a/addons/email_template/email_template_account_view.xml
+++ b/addons/email_template/email_template_account_view.xml
@@ -1,69 +1,69 @@
-
+
-
- email_template.account.form
- email_template.account
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ email_template.account.form
+ email_template.account
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- email_template.account.tree
- email_template.account
- tree
-
-
-
-
-
-
-
-
-
-
-
-
+
+ email_template.account.tree
+ email_template.account
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
email_template.account.search
@@ -85,21 +85,21 @@
-
- Accounts
- email_template.account
- form
- form,tree
-
+
+ Accounts
+ email_template.account
+ form
+ form,tree
+
{'group_by': [], 'search_default_draft': 1, 'search_default_my': 1}
-
+
-
+
-
+
-
+
diff --git a/addons/email_template/email_template_engines.py b/addons/email_template/email_template_engines.py
old mode 100755
new mode 100644
diff --git a/addons/email_template/email_template_mailbox.py b/addons/email_template/email_template_mailbox.py
old mode 100755
new mode 100644
index 45eef77729e..fe9ca334d21
--- a/addons/email_template/email_template_mailbox.py
+++ b/addons/email_template/email_template_mailbox.py
@@ -41,9 +41,7 @@ class email_template_mailbox(osv.osv):
return True
def send_this_mail(self, cr, uid, ids=None, context=None):
- if ids is None:
- ids = []
- for id in ids:
+ for id in (ids or []):
try:
account_obj = self.pool.get('email_template.account')
values = self.read(cr, uid, id, [], context)
diff --git a/addons/email_template/email_template_mailbox_view.xml b/addons/email_template/email_template_mailbox_view.xml
old mode 100755
new mode 100644
index c521320bf3a..93a1a9958d4
--- a/addons/email_template/email_template_mailbox_view.xml
+++ b/addons/email_template/email_template_mailbox_view.xml
@@ -1,81 +1,81 @@
-
-
-
- email_template.mailbox.form
- email_template.mailbox
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ email_template.mailbox.form
+ email_template.mailbox
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- email_template.mailbox.tree
- email_template.mailbox
- tree
-
-
-
-
-
-
-
-
-
-
+
+
+ email_template.mailbox.tree
+ email_template.mailbox
+ tree
+
+
+
+
+
+
+
+
+
+
email_template.mailbox.search
@@ -109,14 +109,14 @@
-
-
-
+
+
+
-
+
-
+
diff --git a/addons/email_template/email_template_scheduler_data.xml b/addons/email_template/email_template_scheduler_data.xml
old mode 100755
new mode 100644
diff --git a/addons/email_template/email_template_view.xml b/addons/email_template/email_template_view.xml
old mode 100755
new mode 100644
index 5158d7a5544..49090bd62c5
--- a/addons/email_template/email_template_view.xml
+++ b/addons/email_template/email_template_view.xml
@@ -1,147 +1,147 @@
-
-
-
- email_template.preview.form
- email_template.preview
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ email_template.preview.form
+ email_template.preview
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Template Preview
- email_template.preview
- email_template.preview
- ir.actions.act_window
- form
- form
-
- new
- {'ids':active_id}
-
-
+
+ Template Preview
+ email_template.preview
+ email_template.preview
+ ir.actions.act_window
+ form
+ form
+
+ new
+ {'ids':active_id}
+
+
-
- email.template.form
- email.template
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ email.template.form
+ email.template
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- email.template.tree
- email.template
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ email.template.tree
+ email.template
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
email.template.search
@@ -161,19 +161,19 @@
-
- Email Templates
- email.template
- form
- form,tree
-
+
+ Email Templates
+ email.template
+ form
+ form,tree
+
-
+
-
+
-
+
diff --git a/addons/email_template/email_template_workflow.xml b/addons/email_template/email_template_workflow.xml
old mode 100755
new mode 100644
index 4d3176f0ae0..911b8bf49ff
--- a/addons/email_template/email_template_workflow.xml
+++ b/addons/email_template/email_template_workflow.xml
@@ -11,24 +11,24 @@
email_template.account
True
-
+
-
+
True
draft
- function
+ function
write({'state':'draft'})
-
+
approval
function
do_approval()
-
+
suspended
@@ -40,16 +40,16 @@
True
-
+
-
+
button_approval
-
+
@@ -67,6 +67,6 @@
get_never
-
+
diff --git a/addons/email_template/html2text.py b/addons/email_template/html2text.py
old mode 100755
new mode 100644
diff --git a/addons/email_template/security/email_template_security.xml b/addons/email_template/security/email_template_security.xml
index 90067252eca..9dc788f6780 100755
--- a/addons/email_template/security/email_template_security.xml
+++ b/addons/email_template/security/email_template_security.xml
@@ -1,19 +1,10 @@
-
+
-
- Email Template / Settings_Manager
-
+
+ Marketing / Email Template
+
-
- Email Template / External_users
-
-
-
- Email Template / Internal_users
-
-
-
-
+
diff --git a/addons/email_template/security/ir.model.access.csv b/addons/email_template/security/ir.model.access.csv
new file mode 100644
index 00000000000..958c43f42cd
--- /dev/null
+++ b/addons/email_template/security/ir.model.access.csv
@@ -0,0 +1,7 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_email_template_engines","email_template.engines","model_email_template_engines","email_template.res_groups_email_template_admin",1,1,1,1
+"access_email_template_account","email_template.account","model_email_template_account","email_template.res_groups_email_template_admin",1,1,1,1
+"access_email_template","email.template","model_email_template","email_template.res_groups_email_template_admin",1,1,1,1
+"access_email_template_preview","email_template.preview","model_email_template_preview","email_template.res_groups_email_template_admin",1,1,1,1
+"access_email_template_mailbox","email_template.mailbox","model_email_template_mailbox","email_template.res_groups_email_template_admin",1,1,1,1
+"access_email_template_send_wizard","email_template.send.wizard","model_email_template_send_wizard","email_template.res_groups_email_template_admin",1,1,1,1
diff --git a/addons/google_map/i18n/ru.po b/addons/google_map/i18n/ru.po
index 1543a8f1523..6e3e44985e5 100644
--- a/addons/google_map/i18n/ru.po
+++ b/addons/google_map/i18n/ru.po
@@ -7,19 +7,19 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-10-09 07:48+0000\n"
-"Last-Translator: Sardorbek Pulatov (pROCKrammer) \n"
+"PO-Revision-Date: 2010-06-13 13:02+0000\n"
+"Last-Translator: Alex L. \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 03:55+0000\n"
+"X-Launchpad-Export-Date: 2010-06-14 03:42+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: google_map
#: model:ir.actions.wizard,name:google_map.wizard_google_map
msgid "Launch Google Map"
-msgstr ""
+msgstr "Запустить Google Map"
#. module: google_map
#: constraint:ir.ui.view:0
@@ -39,6 +39,9 @@ msgid ""
"so that we can directly open google map from the\n"
"url widget."
msgstr ""
+"Модуль добавляет поле с Google картой в адрес партнера\n"
+"поэтому мы можем открыть карту Google непосредственно из\n"
+"адреса виджета."
#. module: google_map
#: view:res.partner:0
diff --git a/addons/hr/hr_department_view.xml b/addons/hr/hr_department_view.xml
index 977cc22f005..70576149592 100644
--- a/addons/hr/hr_department_view.xml
+++ b/addons/hr/hr_department_view.xml
@@ -51,7 +51,7 @@
-
+
@@ -73,7 +73,7 @@
-
+
res.users.form
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index 75da20cef20..f6a03030a6f 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -6,10 +6,16 @@
icon="terp-hr"
name="Human Resources"
sequence="6"/>
+
-
-
Initial Jobs Demand
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index 5183587e992..ef5fcd3387f 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -13,23 +13,22 @@
# ------------------------------------------------------
- Applicant Categories
- crm.case.categ
- form
-
- [('object_id.model', '=', 'hr.applicant')]
- {'object_id':'hr.applicant'}
+ Applicant Categories
+ crm.case.categ
+ form
+
+ [('object_id.model', '=', 'hr.applicant')]
+ {'object_id':'hr.applicant'}
# ------------------------------------------------------
# Stage
# ------------------------------------------------------
Applicant Stages
- crm.case.stage
+ hr.recruitment.stage
form
-
- [('object_id.model', '=', 'hr.applicant')]
- {'object_id':'hr.applicant'}
+ []
+ {}
@@ -84,9 +83,9 @@
-
-
-
+
+
+
@@ -96,7 +95,7 @@
-
+
@@ -187,9 +186,9 @@
+ name="%(crm.action_crm_send_mail)d"
+ context="{'mail':'new', 'model': 'hr.applicant'}"
+ icon="gtk-go-forward" type="action" />
@@ -237,7 +236,7 @@
-
+
@@ -282,56 +281,56 @@
-
- hr.recruitment.stage.tree
- hr.recruitment.stage
- tree
-
-
-
-
-
-
-
+
+ hr.recruitment.stage.tree
+ hr.recruitment.stage
+ tree
+
+
+
+
+
+
+
-
- hr.recruitment.stage.form
- hr.recruitment.stage
- form
-
-
-
-
-
-
-
-
-
-
+
+ hr.recruitment.stage.form
+ hr.recruitment.stage
+ form
+
+
+
+
+
+
+
+
+
+
-
- Stages
- hr.recruitment.stage
- form
-
-
+
+ Stages
+ hr.recruitment.stage
+ form
+
+
-
+
-
+
diff --git a/addons/hr_recruitment/security/ir.model.access.csv b/addons/hr_recruitment/security/ir.model.access.csv
index f8898499c4d..40e82cb1a15 100644
--- a/addons/hr_recruitment/security/ir.model.access.csv
+++ b/addons/hr_recruitment/security/ir.model.access.csv
@@ -1,3 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_hr_applicant","hr.applicant","model_hr_applicant","hr.group_hr_manager",1,1,1,1
-"access_hr_recruitment_report","hr.recruitment.report","model_hr_recruitment_report",,1,0,0,0
+"access_hr_applicant","hr.applicant","model_hr_applicant","hr.group_hr_user",1,1,1,1
+"access_hr_recruitment_report","hr.recruitment.report","model_hr_recruitment_report","hr.group_hr_manager",1,0,0,0
diff --git a/addons/hr_timesheet/security/ir.model.access.csv b/addons/hr_timesheet/security/ir.model.access.csv
index ca5bf104fe8..ce51366f383 100644
--- a/addons/hr_timesheet/security/ir.model.access.csv
+++ b/addons/hr_timesheet/security/ir.model.access.csv
@@ -1,4 +1,7 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_hr_analytic_timesheet","hr.analytic.timesheet","model_hr_analytic_timesheet","hr.group_hr_user",1,1,1,1
"access_hr_account_analytic_line","account.account.analytic.line","account.model_account_analytic_line","hr.group_hr_user",1,1,1,0
-"access_account_analytic_journal","account.account.analytic.journal","account.model_account_analytic_journal","hr.group_hr_user",1,0,0,0
\ No newline at end of file
+"access_account_analytic_journal","account.account.analytic.journal","account.model_account_analytic_journal","hr.group_hr_user",1,0,0,0
+"access_hr_sign_in_project","hr.sign.in.project attendance","model_hr_sign_in_project","hr_attendance.group_hr_attendance",1,0,0,0
+"access_hr_analytal_timesheet_employee","hr.analytical.timesheet.employee","model_hr_analytical_timesheet_employee","hr.group_hr_manager",1,1,1,1
+"access_hr_analytal_timesheet_user","hr.analytical.timesheet.user","model_hr_analytical_timesheet_users","hr.group_hr_user",1,1,1,1
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
index a603cc3f24e..b56ecd75769 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
@@ -20,7 +20,7 @@
-
+
account.analytic.account.form
account.analytic.account
@@ -32,7 +32,7 @@
-
+
hr.analytic.timesheet.form
hr.analytic.timesheet
@@ -117,9 +117,9 @@
tree,form
[('to_invoice','<>',False)]
-
@@ -178,9 +178,9 @@
form
-
diff --git a/addons/hr_timesheet_invoice/security/ir.model.access.csv b/addons/hr_timesheet_invoice/security/ir.model.access.csv
index 6349b4f766c..f6d344cfb31 100644
--- a/addons/hr_timesheet_invoice/security/ir.model.access.csv
+++ b/addons/hr_timesheet_invoice/security/ir.model.access.csv
@@ -3,9 +3,10 @@
"access_hr_timesheet_invoice_factor_acc_inv","hr_timesheet_invoice.factor.account.invoice","model_hr_timesheet_invoice_factor","account.group_account_invoice",1,1,1,1
"access_report_analytic_account_close","report.analytic.account.close","model_report_analytic_account_close","account.group_account_manager",1,0,0,0
"access_report_account_analytic_line_to_invoice","report.account.analytic.line.to.invoice","model_report_account_analytic_line_to_invoice","account.group_account_manager",1,0,0,0
-"access_report_timesheet_user","report_timesheet.user","model_report_timesheet_user","base.group_user",1,0,0,0
-"access_report_timesheet_account","report_timesheet.account","model_report_timesheet_account","base.group_user",1,0,0,0
-"access_report_timesheet_account_date","report_timesheet.account.date","model_report_timesheet_account_date","base.group_user",1,0,0,0
-"access_report_timesheet_invoice","report_timesheet.invoice","model_report_timesheet_invoice","base.group_user",1,0,0,0
-"access_report_random_timesheet","report_random_timesheet","model_report_random_timesheet","base.group_user",1,0,0,0
-"access_report_random_timesheet_lines","random_timesheet_lines","model_random_timesheet_lines","base.group_user",1,0,0,0
+"access_report_timesheet_user","report_timesheet.user","model_report_timesheet_user","hr.group_hr_manager",1,0,0,0
+"access_report_timesheet_account","report_timesheet.account","model_report_timesheet_account","hr.group_hr_manager",1,0,0,0
+"access_report_timesheet_account_date","report_timesheet.account.date","model_report_timesheet_account_date","hr.group_hr_manager",1,0,0,0
+"access_report_timesheet_invoice","report_timesheet.invoice","model_report_timesheet_invoice","hr.group_hr_manager",1,0,0,0
+"access_report_random_timesheet","report_random_timesheet","model_report_random_timesheet","hr.group_hr_manager",1,0,0,0
+"access_report_random_timesheet_lines","random_timesheet_lines","model_random_timesheet_lines","hr.group_hr_manager",1,0,0,0
+"access_hr_timesheet_analytic_profit","hr_timesheet_analytic_profit","model_hr_timesheet_analytic_profit","account.group_account_invoice",1,1,1,1
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
index f686daf575e..51edeea837b 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
@@ -195,7 +195,7 @@
-
+
+ id="menu_give_vote"
+ action="action_idea_select"/>
@@ -128,11 +128,11 @@
form
-
-
-
-
-
+
+
+
+
+
@@ -147,18 +147,18 @@
idea.vote
search
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -270,7 +270,7 @@
-
+
diff --git a/addons/knowledge/security/ir.model.access.csv b/addons/knowledge/security/ir.model.access.csv
index 4fcaaad82cd..9abb2d03be7 100644
--- a/addons/knowledge/security/ir.model.access.csv
+++ b/addons/knowledge/security/ir.model.access.csv
@@ -1,2 +1,2 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_knowledge_installer","knowledge.installer","model_knowledge_installer",base.group_user,1,0,0,0
+"access_knowledge_installer","knowledge.installer","model_knowledge_installer",base.group_system,1,1,1,1
diff --git a/addons/l10n_be/security/ir.model.access.csv b/addons/l10n_be/security/ir.model.access.csv
index fbb5c74c18c..04d498b5785 100644
--- a/addons/l10n_be/security/ir.model.access.csv
+++ b/addons/l10n_be/security/ir.model.access.csv
@@ -1,6 +1,6 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_vat_listing_clients","vat.listing.clients","model_vat_listing_clients",,1,1,1,1
-"access_partner_vat_intra","partner.vat.intra","model_partner_vat_intra",,1,1,1,1
-"access_partner_vat","partner.vat","model_partner_vat",,1,1,1,1
-"access_partner_vat_list","partner.vat.list","model_partner_vat_list",,1,1,1,1
-"access_l1on_be_vat_declaration","l1on_be.vat.declaration","model_l1on_be_vat_declaration",,1,1,1,1
+"access_vat_listing_clients","vat.listing.clients","model_vat_listing_clients",account.group_account_user,1,1,1,1
+"access_partner_vat_intra","partner.vat.intra","model_partner_vat_intra",account.group_account_user,1,1,1,1
+"access_partner_vat","partner.vat","model_partner_vat",account.group_account_user,1,1,1,1
+"access_partner_vat_list","partner.vat.list","model_partner_vat_list",account.group_account_user,1,1,1,1
+"access_l1on_be_vat_declaration","l1on_be.vat.declaration","model_l1on_be_vat_declaration",account.group_account_user,1,1,1,1
diff --git a/addons/mail_gateway/mail_gateway.py b/addons/mail_gateway/mail_gateway.py
index f57caf6b879..49fcfc8bd5e 100644
--- a/addons/mail_gateway/mail_gateway.py
+++ b/addons/mail_gateway/mail_gateway.py
@@ -66,7 +66,7 @@ class mailgate_thread(osv.osv):
'res_id': fields.integer('Resource ID'),
}
- def __history(self, cr, uid, cases, keyword, history=False, subject=None, email=False, details=None, email_from=False, message_id=False, attach=[], context={}):
+ def _history(self, cr, uid, cases, keyword, history=False, subject=None, email=False, details=None, email_from=False, message_id=False, attach=None, context=None):
"""
@param self: The object pointer
@param cr: the current row, from the database cursor,
@@ -80,9 +80,13 @@ class mailgate_thread(osv.osv):
@param context: A standard dictionary for contextual values"""
if context is None:
context = {}
+ if attach is None:
+ attach = []
+
# The mailgate sends the ids of the cases and not the object list
- if all(isinstance(case_id, (int, long)) for case_id in cases) and context.get('model'):
- cases = self.pool.get(context['model']).browse(cr, uid, cases, context=context)
+
+ if all(isinstance(case_id, (int, long)) for case_id in cases):
+ cases = self.browse(cr, uid, cases, context=context)
att_obj = self.pool.get('ir.attachment')
obj = self.pool.get('mailgate.message')
@@ -94,7 +98,7 @@ class mailgate_thread(osv.osv):
'model' : case._name,
'res_id': case.id,
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
- 'thread_id': case.thread_id.id,
+ 'thread_id': case.thread_id.id,
'message_id': message_id,
}
attachments = []
@@ -125,8 +129,7 @@ class mailgate_thread(osv.osv):
case._table.log(cr, uid, case.id, case._description + " '" + case.name + "': " + keyword, context=context)
return True
- _history = __history
- history = __history
+ __history = history = _history
mailgate_thread()
diff --git a/addons/mail_gateway/scripts/openerp_mailgate/openerp_mailgate.py b/addons/mail_gateway/scripts/openerp_mailgate/openerp_mailgate.py
index f77fccadaee..0698be88eaf 100755
--- a/addons/mail_gateway/scripts/openerp_mailgate/openerp_mailgate.py
+++ b/addons/mail_gateway/scripts/openerp_mailgate/openerp_mailgate.py
@@ -3,7 +3,8 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
+# Copyright (C) 2004-2009 Tiny SPRL ().
+# Copyright (C) 2010-TODAY OpenERP S.A. (http://www.openerp.com)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -88,9 +89,9 @@ class email_parser(object):
return ''.join(map(lambda x:self._to_decode(x[0], [x[1]]), s or []))
def msg_send(self, msg, emails, priority=None):
- if not len(emails):
+ if not emails:
return False
- del msg['To']
+
msg['To'] = emails[0]
if len(emails)>1:
if 'Cc' in msg:
@@ -141,7 +142,6 @@ class email_parser(object):
return res_id, msg_mails
if __name__ == '__main__':
- import sys, optparse
parser = optparse.OptionParser(usage='usage: %prog [options]', version='%prog v1.0')
group = optparse.OptionGroup(parser, "Note",
"This program parse a mail from standard input and communicate "
diff --git a/addons/marketing/__openerp__.py b/addons/marketing/__openerp__.py
index ee6abca5355..6db46333985 100644
--- a/addons/marketing/__openerp__.py
+++ b/addons/marketing/__openerp__.py
@@ -29,7 +29,10 @@
"description": "Menu for Marketing",
'website': 'http://www.openerp.com',
'init_xml': [],
- 'update_xml': ['marketing_view.xml'],
+ 'update_xml': [
+ 'marketing_view.xml',
+ 'security/ir.model.access.csv'
+ ],
'demo_xml': [],
'installable': True,
'active': False,
diff --git a/addons/marketing/marketing_view.xml b/addons/marketing/marketing_view.xml
index 7d8a46a8a92..800b85f7c49 100644
--- a/addons/marketing/marketing_view.xml
+++ b/addons/marketing/marketing_view.xml
@@ -29,8 +29,9 @@
Configure
-
+
+
diff --git a/addons/marketing/marketing_wizard.py b/addons/marketing/marketing_wizard.py
index 8eb1d1a01f4..78b4e78ff6c 100644
--- a/addons/marketing/marketing_wizard.py
+++ b/addons/marketing/marketing_wizard.py
@@ -25,7 +25,8 @@ class marketing_installer(osv.osv_memory):
_name = 'marketing.installer'
_inherit = 'res.config.installer'
_columns = {
- # Generic modules
+ 'email_template':fields.boolean('Automated E-Mails',
+ help="Helps you to design templates of emails and integrate them in your different processes."),
'marketing_campaign':fields.boolean('Marketing Campaigns',
help="Helps you to manage marketing campaigns and automate actions and communication steps."),
'marketing_campaign_mailchimp':fields.boolean('Mailchimp Integration',
diff --git a/addons/marketing/security/ir.model.access.csv b/addons/marketing/security/ir.model.access.csv
new file mode 100644
index 00000000000..2a712aab4fd
--- /dev/null
+++ b/addons/marketing/security/ir.model.access.csv
@@ -0,0 +1,3 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_marketing_installer","marketing.installer","model_marketing_installer","base.group_system",1,1,1,1
+"access_res_config_installer","access_marketing_installer","base.model_res_config_installer","base.group_system",1,1,1,1
diff --git a/addons/marketing_campaign/__init__.py b/addons/marketing_campaign/__init__.py
old mode 100755
new mode 100644
diff --git a/addons/marketing_campaign/__openerp__.py b/addons/marketing_campaign/__openerp__.py
old mode 100755
new mode 100644
index 992731c1332..8abbf9eb706
--- a/addons/marketing_campaign/__openerp__.py
+++ b/addons/marketing_campaign/__openerp__.py
@@ -39,6 +39,8 @@
'marketing_campaign_data.xml',
'marketing_campaign_workflow.xml',
'report/campaign_analysis_view.xml',
+ "security/marketing_campaign_security.xml",
+ "security/ir.model.access.csv"
],
'demo_xml': [
'marketing_campaign_demo.xml',
diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py
old mode 100755
new mode 100644
index 4773a190a41..36754bea803
--- a/addons/marketing_campaign/marketing_campaign.py
+++ b/addons/marketing_campaign/marketing_campaign.py
@@ -101,7 +101,7 @@ class marketing_campaign_segment(osv.osv):
_columns = {
'name': fields.char('Name', size=64,required=True),
'campaign_id': fields.many2one('marketing.campaign', 'Campaign',
- required=True),
+ required=True, select=1),
'object_id': fields.related('campaign_id','object_id',
type='many2one', relation='ir.model',
string='Object'),
@@ -200,7 +200,7 @@ class marketing_campaign_activity(osv.osv):
_columns = {
'name': fields.char('Name', size=128, required=True),
'campaign_id': fields.many2one('marketing.campaign', 'Campaign',
- required = True, ondelete='cascade'),
+ required = True, ondelete='cascade', select=1),
'object_id': fields.related('campaign_id','object_id',
type='many2one', relation='ir.model',
string='Object'),
@@ -242,7 +242,7 @@ class marketing_campaign_activity(osv.osv):
self._actions = {'paper' : self.process_wi_report,
'email' : self.process_wi_email,
'server_action' : self.process_wi_action,
- }
+ }
return super(marketing_campaign_activity, self).__init__(*args)
def search(self, cr, uid, args, offset=0, limit=None, order=None,
@@ -259,7 +259,7 @@ class marketing_campaign_activity(osv.osv):
return super(marketing_campaign_activity, self).search(cr, uid, args,
offset, limit, order, context, count)
- def process_wi_report(self, cr, uid, activity, workitem):
+ def process_wi_report(self, cr, uid, activity, workitem, context={}):
service = netsvc.LocalService('report.%s'%activity.report_id.report_name)
(report_data, format) = service.create(cr, uid, [], {}, {})
attach_vals = {
@@ -274,46 +274,58 @@ class marketing_campaign_activity(osv.osv):
self.pool.get('ir.attachment').create(cr, uid, attach_vals)
return True
- def process_wi_email(self, cr, uid, activity, workitem):
- template = activity.email_template_id
- accounts = template.enforce_from_account
- if not template.enforce_from_account:
- return {'error_msg' : "There is no account defined for the email"}
- if not workitem.partner_id.email:
- return {'error_msg' : "There is no email defined for the partner"}
- vals = {
- 'email_from': tools.ustr(accounts.name) + "<" + tools.ustr(accounts.email_id) + ">",
- 'email_to': workitem.partner_id.email,
- 'subject': template.def_subject,
- 'body_text': template.def_body_text,
- 'body_html': template.def_body_html,
- 'account_id':accounts.id,
- 'state':'na',
- 'mail_type':'multipart/alternative' #Options:'multipart/mixed','multipart/alternative','text/plain','text/html'
- }
-# if accounts.use_sign:
-# signature = self.pool.get('res.users').read(cr, uid, uid, ['signature'], context)['signature']
-# if signature:
-# vals['pem_body_text'] = tools.ustr(vals['pem_body_text'] or '') + signature
-# vals['pem_body_html'] = tools.ustr(vals['pem_body_html'] or '') + signature
+ def process_wi_email(self, cr, uid, activity, workitem, context=None):
+ print 'Sending Email Init', activity.name
+ return self.pool.get('email.template').generate_mail(cr, uid, activity.email_template_id.id, [workitem.res_id], context=context)
- #Create partly the mail and later update attachments
- mail_id = self.pool.get('email_template.mailbox').create(cr, uid, vals, context)
+ #if not template.enforce_from_account:
+ # self.pool.get('marketing.campaign.workitem').write(cr, uid, [workitem.id], {
+ # 'error_msg': 'There is no account defined for the email',
+ # 'state': 'exception'
+ # })
+ # return False
+ #if not workitem.partner_id.email:
+ # self.pool.get('marketing.campaign.workitem').write(cr, uid, [workitem.id], {
+ # 'error_msg': "There is no email defined for the partner",
+ # 'state': 'exception'
+ # })
+ # return False
+ #vals = {
+ # 'email_from': tools.ustr(accounts.name) + "<" + tools.ustr(accounts.email_id) + ">",
+ # 'email_to': template.email_to,
+ # 'email_cc': template.email_cc,
+ # 'email_bcc': template.email_bcc,
+ # 'subject': template.def_subject,
+ # 'body_text': template.def_body_text,
+ # 'body_html': template.def_body_html,
+ # 'account_id': accounts.id,
+ # 'state':'na',
+ # 'mail_type':'multipart/alternative' #Options:'multipart/mixed','multipart/alternative','text/plain','text/html'
+ #}
+# # if accounts.use_sign:
+# # signature = self.pool.get('res.users').read(cr, uid, uid, ['signature'], context)['signature']
+# # if signature:
+# # vals['pem_body_text'] = tools.ustr(vals['pem_body_text'] or '') + signature
+# # vals['pem_body_html'] = tools.ustr(vals['pem_body_html'] or '') + signature
+
+ ##Create partly the mail and later update attachments
+ #print 'Sending Email', vals
+ #mail_id = self.pool.get('email_template.mailbox').create(cr, uid, vals, context)
return True
-
- def process_wi_action(self, cr, uid, activity, workitem):
+
+ def process_wi_action(self, cr, uid, activity, workitem, context={}):
context = {}
server_obj = self.pool.get('ir.actions.server')
- server_obj.run(cr, uid, [activity.server_action_id.id], context)
+ server_obj.run(cr, uid, [activity.server_action_id.id], context)
return True
-
def process(self, cr, uid, act_id, wi_id, context={}):
activity = self.browse(cr, uid, act_id)
+ print 'Process', activity.name
workitem_obj = self.pool.get('marketing.campaign.workitem')
- workitem = workitem_obj.browse(cr, uid, wi_id)
- self._actions[activity.type](cr, uid, activity, workitem)
- return True
+ workitem = workitem_obj.browse(cr, uid, wi_id, context=context)
+ print 'WI', workitem, activity.type
+ return self._actions[activity.type](cr, uid, activity, workitem, context)
marketing_campaign_activity()
@@ -324,7 +336,7 @@ class marketing_campaign_transition(osv.osv):
_columns = {
'activity_from_id': fields.many2one('marketing.campaign.activity',
- 'Source Activity'),
+ 'Source Activity', select=1),
'activity_to_id': fields.many2one('marketing.campaign.activity',
'Destination Activity'),
'interval_nbr': fields.integer('Interval No.'),
@@ -366,12 +378,12 @@ class marketing_campaign_workitem(osv.osv):
'campaign_id': fields.related('segment_id', 'campaign_id',
type='many2one', relation='marketing.campaign', string='Campaign', readonly=True),
'object_id': fields.related('segment_id', 'campaign_id', 'object_id',
- type='many2one', relation='ir.model', string='Object'),
- 'res_id': fields.integer('Resource ID'),
+ type='many2one', relation='ir.model', string='Object', select=1),
+ 'res_id': fields.integer('Resource ID', select=1),
'res_name': fields.function(_res_name_get, method=True, string='Resource Name', type="char", size=64),
'date': fields.datetime('Execution Date'),
- 'partner_id': fields.many2one('res.partner', 'Partner'),
- 'state': fields.selection([('todo', 'ToDo'), ('inprogress', 'In Progress'),
+ 'partner_id': fields.many2one('res.partner', 'Partner', select=1),
+ 'state': fields.selection([('todo', 'To Do'), ('inprogress', 'In Progress'),
('exception', 'Exception'), ('done', 'Done'),
('cancelled', 'Cancelled')], 'State'),
@@ -400,8 +412,14 @@ class marketing_campaign_workitem(osv.osv):
self.create(cr, uid, workitem_vals)
return True
+ def button_draft(self, cr, uid, workitem_ids, context={}):
+ for wi in self.browse(cr, uid, workitem_ids, context=context):
+ if wi.state=='exception':
+ self.write(cr, uid, [wi.id], {'state':'todo'}, context=context)
+ return True
+
def button_cancel(self, cr, uid, workitem_ids, context={}):
- for wi in self.browse(cr, uid, workitem_ids):
+ for wi in self.browse(cr, uid, workitem_ids, context=context):
if wi.state in ('todo','exception'):
self.write(cr, uid, [wi.id], {'state':'cancelled'}, context=context)
return True
@@ -419,14 +437,18 @@ class marketing_campaign_workitem(osv.osv):
}
expr = eval(str(wi.activity_id.condition), eval_context)
if expr:
- try :
+ try:
+ result = True
if wi.campaign_id.mode in ('manual','active'):
- self.pool.get('marketing.campaign.activity').process(
+ result = self.pool.get('marketing.campaign.activity').process(
cr, uid, wi.activity_id.id, wi.id, context)
- self.write(cr, uid, wi.id, {'state': 'done'})
- self.process_chain(cr, uid, wi.id, context)
+ if result:
+ self.write(cr, uid, wi.id, {'state': 'done'})
+ self.process_chain(cr, uid, wi.id, context)
+ else:
+ self.write(cr, uid, wi.id, {'state': 'exception'})
except Exception,e:
- self.write(cr, uid, wi.id, {'state': 'exception'})
+ self.write(cr, uid, wi.id, {'state': 'exception', 'error_msg': str(e)})
else :
self.write(cr, uid, wi.id, {'state': 'cancelled'})
@@ -444,9 +466,9 @@ class marketing_campaign_workitem(osv.osv):
workitem_ids = self.search(cr, uid, [('state', '=', 'todo')])
else:
# manual states are not processed automatically
- pass
- if workitem_ids:
- self.process(cr, uid, workitem_ids, context)
+ workitem_ids = []
+ if workitem_ids:
+ self.process(cr, uid, workitem_ids, context)
marketing_campaign_workitem()
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
old mode 100755
new mode 100644
index ea25e0d3163..0ab2add38ba
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -182,15 +182,15 @@
-
+
-
-
+
+
@@ -397,11 +397,16 @@
+
+
+
+
+
-
+
diff --git a/addons/marketing_campaign/security/ir.model.access.csv b/addons/marketing_campaign/security/ir.model.access.csv
new file mode 100644
index 00000000000..dfafc2cd8a5
--- /dev/null
+++ b/addons/marketing_campaign/security/ir.model.access.csv
@@ -0,0 +1,7 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_marketing_campaign_admin","marketing.campaign","model_marketing_campaign","marketing_campaign.res_groups_marketing_campaign",1,1,1,1
+"access_marketing_campaign_segment_campaignadmin","marketing.campaign.segment","model_marketing_campaign_segment","marketing_campaign.res_groups_marketing_campaign",1,1,1,1
+"access_marketing_campaign_activity_campaignadmin","marketing.campaign.activity","model_marketing_campaign_activity","marketing_campaign.res_groups_marketing_campaign",1,1,1,1
+"access_marketing_campaign_workitem_campaignadmin","marketing.campaign.workitem","model_marketing_campaign_workitem","marketing_campaign.res_groups_marketing_campaign",1,1,1,1
+"access_marketing_campaign_transition_campaignadmin","marketing.campaign.transition","model_marketing_campaign_transition","marketing_campaign.res_groups_marketing_campaign",1,1,1,1
+"access_marketing_campaign_analysis_campaignadmin","campaign.analysis","model_campaign_analysis","marketing_campaign.res_groups_marketing_campaign",1,0,0,0
diff --git a/addons/marketing_campaign/security/marketing_campaign_security.xml b/addons/marketing_campaign/security/marketing_campaign_security.xml
new file mode 100644
index 00000000000..e28fd4867ce
--- /dev/null
+++ b/addons/marketing_campaign/security/marketing_campaign_security.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ Marketing / Campaign
+
+
+
+
\ No newline at end of file
diff --git a/addons/mrp/i18n/hi.po b/addons/mrp/i18n/hi.po
index 7ac7081d791..2e356c5ca2a 100644
--- a/addons/mrp/i18n/hi.po
+++ b/addons/mrp/i18n/hi.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-06-10 09:51+0000\n"
+"PO-Revision-Date: 2010-06-11 10:07+0000\n"
"Last-Translator: vir (Open ERP) \n"
"Language-Team: Hindi \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-06-11 03:42+0000\n"
+"X-Launchpad-Export-Date: 2010-06-12 03:44+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp
@@ -460,7 +460,7 @@ msgstr ""
#. module: mrp
#: field:mrp.bom.revision,author_id:0
msgid "Author"
-msgstr ""
+msgstr "लेखक"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_stockproduct0
@@ -491,7 +491,7 @@ msgstr ""
#. module: mrp
#: field:mrp.procurement,message:0
msgid "Latest error"
-msgstr ""
+msgstr "नवीनतम त्रुटि"
#. module: mrp
#: field:mrp.bom,bom_lines:0
@@ -511,7 +511,7 @@ msgstr ""
#. module: mrp
#: view:mrp.production:0
msgid "Consumed Products"
-msgstr ""
+msgstr "खपत उत्पाद"
#. module: mrp
#: constraint:mrp.bom:0
@@ -538,12 +538,12 @@ msgstr ""
#. module: mrp
#: selection:mrp.procurement,state:0
msgid "Ready"
-msgstr ""
+msgstr "तैयार"
#. module: mrp
#: view:mrp.routing:0
msgid "Workcenter Operations"
-msgstr ""
+msgstr "Workcenter संचालन"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_production_action2_gantt
@@ -564,7 +564,7 @@ msgstr ""
#. module: mrp
#: field:mrp.production,date_finnished:0
msgid "End Date"
-msgstr ""
+msgstr "समाप्ति तिथि"
#. module: mrp
#: help:mrp.production,picking_id:0
@@ -576,7 +576,7 @@ msgstr ""
#. module: mrp
#: selection:mrp.production,state:0
msgid "In Production"
-msgstr ""
+msgstr "उत्पादन में"
#. module: mrp
#: field:stock.warehouse.orderpoint,qty_multiple:0
@@ -600,12 +600,12 @@ msgstr ""
#. module: mrp
#: wizard_button:mrp.workcenter.load,init,report:0
msgid "Print"
-msgstr ""
+msgstr "प्रिंट"
#. module: mrp
#: field:mrp.workcenter,type:0
msgid "Type"
-msgstr ""
+msgstr "प्रकार"
#. module: mrp
#: model:process.node,note:mrp.process_node_stockproduct0
@@ -616,7 +616,7 @@ msgstr ""
#. module: mrp
#: selection:mrp.workcenter.load,init,time_unit:0
msgid "Per month"
-msgstr ""
+msgstr "प्रति माह"
#. module: mrp
#: field:mrp.procurement,product_uos_qty:0
@@ -626,18 +626,18 @@ msgstr ""
#. module: mrp
#: rml:bom.structure:0
msgid "Product Name"
-msgstr ""
+msgstr "वस्तु का नाम"
#. module: mrp
#: rml:mrp.production.order:0
msgid "Printing date"
-msgstr ""
+msgstr "मुद्रण तारीख"
#. module: mrp
#: model:process.node,name:mrp.process_node_orderrfq0
#: model:process.node,name:mrp.process_node_rfq0
msgid "RFQ"
-msgstr ""
+msgstr "कोटेशन के लिए अनुरोध"
#. module: mrp
#: field:mrp.bom,revision_type:0
@@ -657,7 +657,7 @@ msgstr ""
#. module: mrp
#: field:stock.warehouse.orderpoint,product_min_qty:0
msgid "Min Quantity"
-msgstr ""
+msgstr "न्यूनतम मात्रा"
#. module: mrp
#: view:mrp.production:0
@@ -678,7 +678,7 @@ msgstr ""
#. module: mrp
#: model:process.transition,note:mrp.process_transition_servicemts0
msgid "If Product type is service and procure method is Make to stock"
-msgstr ""
+msgstr "अगर उत्पाद प्रकार सेवा है और खरीद विधि है स्टॉक बनाने के लिए"
#. module: mrp
#: model:process.node,note:mrp.process_node_serviceproduct0
@@ -689,7 +689,7 @@ msgstr ""
#. module: mrp
#: field:res.company,security_lead:0
msgid "Security Days"
-msgstr ""
+msgstr "सुरक्षा दिवस"
#. module: mrp
#: view:mrp.production:0
@@ -715,7 +715,7 @@ msgstr ""
#. module: mrp
#: selection:mrp.procurement,state:0
msgid "Exception"
-msgstr ""
+msgstr "अपवाद"
#. module: mrp
#: wizard_view:product.product.procurement,init:0
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index 293c8d58aa9..936a207caa3 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -41,7 +41,7 @@
id="menu_mrp_configuration"
name="Configuration"
parent="base.menu_mrp_root"
- groups="base.group_extended"
+ groups="group_mrp_manager"
sequence="50" />
@@ -250,7 +250,7 @@
-
+
@@ -283,7 +283,7 @@
-
+
mrp.bom.select
mrp.bom
search
@@ -291,9 +291,9 @@
-
-
-
+
+
+
@@ -402,26 +402,26 @@
-
-
+
-
+
-
+
-
-
+
+
+ Production Management
+ -->
mrp.production.tree
@@ -515,9 +515,9 @@
-
-
-
+
+
+
- procurement.order.form.inherit
- procurement.order
-
- form
-
-
-
-
-
+ procurement.order.form.inherit
+ procurement.order
+
+ form
+
+
+
+
+
).
+#
+# 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 .
+#
+##############################################################################
+
+import partner_geo_assign
diff --git a/addons/partner_geo_assign/__openerp__.py b/addons/partner_geo_assign/__openerp__.py
new file mode 100644
index 00000000000..2d18649236e
--- /dev/null
+++ b/addons/partner_geo_assign/__openerp__.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 .
+#
+##############################################################################
+
+
+{
+ 'name': 'Partner Geo-Localisation',
+ 'version': '1.0',
+ 'category': 'Generic Modules/Production',
+ 'description': """
+This is the module used by OpenERP SA to redirect customers to his partners,
+based on geolocalisation.
+ """,
+ 'author': 'OpenERP SA',
+ 'depends': ['crm'],
+ 'update_xml': ['res_partner_view.xml'],
+ 'demo_xml': [],
+ 'installable': True,
+ 'active': False,
+ 'certificate': False,
+}
diff --git a/addons/partner_geo_assign/partner_geo_assign.py b/addons/partner_geo_assign/partner_geo_assign.py
new file mode 100644
index 00000000000..2ed96e3125d
--- /dev/null
+++ b/addons/partner_geo_assign/partner_geo_assign.py
@@ -0,0 +1,113 @@
+# -*- 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 osv
+from osv import fields
+import urllib,re
+import random, time
+
+def geo_find(addr):
+ import urllib,re
+ regex = '([+-]?[0-9\.]+),([+-]?[0-9\.]+),([+-]?[0-9\.]+) '
+ url = 'http://maps.google.com/maps/geo?q=' + urllib.quote(addr) + '&output=xml&oe=utf8&sensor=false'
+ xml = urllib.urlopen(url).read()
+ if '' in xml:
+ print 'Error'
+ return None
+ result = re.search(regex, xml, re.M|re.I)
+ if not result:
+ print 'No Regex', xml
+ return None
+ return float(result.group(1)),float(result.group(2))
+
+class res_partner(osv.osv):
+ _inherit = "res.partner"
+ _columns = {
+ 'partner_latitude': fields.float('Geo Latitude', digits=(16,2)),
+ 'partner_longitude': fields.float('Geo Longitude', digits=(16,2)),
+ 'partner_weight': fields.integer('Weight',
+ help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
+ }
+ _defaults = {
+ 'partner_weight': lambda *args: 0
+ }
+ def geo_localize(self, cr, uid, ids, context=None):
+ regex = '([+-]?[0-9\.]+),([+-]?[0-9\.]+),([+-]?[0-9\.]+) '
+ for partner in self.browse(cr, uid, ids, context=context):
+ part = partner.address[0]
+ addr = ', '.join(filter(None, [part.street, part.street2, (part.zip or '')+' '+(part.city or ''), part.state_id and part.state_id.name, part.country_id and part.country_id.name]))
+ result = geo_find(addr)
+ if result:
+ print 'Write', {
+ 'partner_latitude': result[0],
+ 'partner_longitude': result[1]
+ }
+ self.write(cr, uid, [partner.id], {
+ 'partner_latitude': result[0],
+ 'partner_longitude': result[1]
+ }, context=context)
+ return True
+res_partner()
+
+class crm_lead(osv.osv):
+ _inherit = "crm.lead"
+ _columns = {
+ 'partner_latitude': fields.float('Geo Latitude', digits=(16,2)),
+ 'partner_longitude': fields.float('Geo Longitude', digits=(16,2)),
+ 'partner_assigned_id': fields.many2one('res.partner','Assigned Partner')
+ 'date_assign': fields.date('Assignation Date')
+ }
+ def assign_partner(self, cr, uid, ids, context=None):
+ for part in self.browse(cr, uid, ids, context=context):
+ if not part.country_id:
+ continue
+ addr = ', '.join(filter(None, [part.street, part.street2, (part.zip or '')+' '+(part.city or ''), part.state_id and part.state_id.name, part.country_id and part.country_id.name]))
+ result = geo_find(addr)
+ if result:
+ self.write(cr, uid, [part.id], {
+ 'partner_latitude': result[0],
+ 'partner_longitude': result[1]
+ }, context=context)
+
+ part_ids = self.pool.get('res.partner').search(cr, uid, [
+ ('partner_weight','>',0),
+ ('partner_latitude','>',result[0]-2), ('partner_latitude','<',result[0]+2),
+ ('partner_longitude','>',result[1]-1.5), ('partner_longitude','<',result[1]+1.5)
+ ], context=context)
+ if not part_ids:
+ part_ids = self.pool.get('res.partner').search(cr, uid, [
+ ('partner_weight','>',0),
+ ('partner_latitude','>',result[0]-4), ('partner_latitude','<',result[0]+4),
+ ('partner_longitude','>',result[1]-3), ('partner_longitude','<',result[1]+3)
+ ], context=context)
+ total = 0
+ toassign = []
+ for part2 in self.pool.get('res.partner').browse(cr, uid, part_ids, context=context):
+ total += part2.partner_weight
+ toassign.append( (part2.id, total) )
+ mypartner = random.randint(0,total)
+ for t in toassign:
+ if mypartner<=t[1]:
+ self.write(cr, uid, [part.id], {'partner_assigned_id': t[0], 'date_assign': time.strftime('%Y-%m-%d')}, context=context)
+ break
+ return True
+crm_lead()
+
diff --git a/addons/partner_geo_assign/res_partner_view.xml b/addons/partner_geo_assign/res_partner_view.xml
new file mode 100644
index 00000000000..d5f4f918d98
--- /dev/null
+++ b/addons/partner_geo_assign/res_partner_view.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+ crm.lead.geo_assign.inherit
+ crm.lead
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.geo.inherit
+ res.partner
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/point_of_sale/multi_company_demo.xml b/addons/point_of_sale/multi_company_demo.xml
index e0e58ad75d7..9ae66800ff9 100644
--- a/addons/point_of_sale/multi_company_demo.xml
+++ b/addons/point_of_sale/multi_company_demo.xml
@@ -1,32 +1,7 @@
-
- OpenERP Editor
-
-
- OpenERP Editor
-
-
- Free Business Solutions
- Web: http://tiny.be - Tel: (+32).81.81.37.00 - Bank: CPH 126-2013269-07
- IBAN: BE74 1262 0132 6907 - SWIFT: GKCCBEBB - VAT: BE0477.472.701
-
-
-
- OpenERP Integrator
-
-
-
- OpenERP Integrator
-
-
- Free Business Solutions
- Web: http://tiny.be - Tel: (+32).81.81.37.00 - Bank: CPH 126-2013269-07
- IBAN: BE74 1262 0132 6907 - SWIFT: GKCCBEBB - VAT: BE0477.472.701
-
-
diff --git a/addons/point_of_sale/multi_company_stock_data.xml b/addons/point_of_sale/multi_company_stock_data.xml
index a74ea0a56e9..cc8d30d080d 100644
--- a/addons/point_of_sale/multi_company_stock_data.xml
+++ b/addons/point_of_sale/multi_company_stock_data.xml
@@ -1,41 +1,5 @@
-
-
-
- property_stock_account_output
-
-
-
-
-
- property_stock_account_input
-
-
-
-
-
- property_stock_account_output_categ
-
-
-
-
-
- property_stock_account_input_categ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/point_of_sale/pos.py b/addons/point_of_sale/pos.py
index 5d4df5a5f10..e0e2d9c5c5d 100644
--- a/addons/point_of_sale/pos.py
+++ b/addons/point_of_sale/pos.py
@@ -193,10 +193,10 @@ class pos_order(osv.osv):
res[order.id]['amount_tax'])
else:
res[order.id]['amount_tax'] = reduce(lambda x, y: x+round(y['amount'], 2),
- tax_obj.compute(cr, uid, line.product_id.taxes_id,
+ tax_obj.compute_all(cr, uid, line.product_id.taxes_id,
line.price_unit * \
- (1-(line.discount or 0.0)/100.0), line.qty),
- res[order.id]['amount_tax'])
+ (1-(line.discount or 0.0)/100.0), line.qty)['taxes'],
+ res[order.id]['amount_tax'])
return res
@@ -789,8 +789,8 @@ class pos_order(osv.osv):
tax_amount = 0
taxes = [t for t in line.product_id.taxes_id]
if order.price_type=='tax_excluded':
- computed_taxes = account_tax_obj.compute(
- cr, uid, taxes, line.price_unit, line.qty)
+ computed_taxes = account_tax_obj.compute_all(
+ cr, uid, taxes, line.price_unit, line.qty)['taxes']
else:
computed_taxes = account_tax_obj.compute_inv(
cr, uid, taxes, line.price_unit, line.qty)
@@ -1058,7 +1058,7 @@ class pos_order_line(osv.osv):
for line in self.browse(cr, uid, ids):
tax_amount = 0.0
taxes = [t for t in line.product_id.taxes_id]
- computed_taxes = account_tax_obj.compute(cr, uid, taxes, line.price_unit, line.qty)
+ computed_taxes = account_tax_obj.compute_all(cr, uid, taxes, line.price_unit, line.qty)['taxes']
for tax in computed_taxes:
tax_amount += tax['amount']
price = self.price_by_product(cr, uid, ids, line.order_id.pricelist_id.id, line.product_id.id, line.qty, line.order_id.partner_id.id)
diff --git a/addons/point_of_sale/pos_data.xml b/addons/point_of_sale/pos_data.xml
index b36bd0827c2..14710cf8f37 100644
--- a/addons/point_of_sale/pos_data.xml
+++ b/addons/point_of_sale/pos_data.xml
@@ -1,58 +1,6 @@
-
- Paiement
-
-
- Acompte
-
- service
- 0.0
- 0.0
-
-
-
-
- Reparation
-
- service
- 100.0
- 100.0
-
-
-
-
-
- Bon
-
-
-
- GIFT
- produce
- 1.0
- 1.0
-
-
- 0.0
- Cheque cadeau
-
-
-
-
- PORT01
- produce
- 1.0
- 1.0
-
-
- 0.0
- Shipping cost
-
- service
- 0
-
-
diff --git a/addons/point_of_sale/pos_demo.xml b/addons/point_of_sale/pos_demo.xml
index b548f12d8e7..14710cf8f37 100644
--- a/addons/point_of_sale/pos_demo.xml
+++ b/addons/point_of_sale/pos_demo.xml
@@ -1,190 +1,6 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main Receivable
- x 40000
- receivable
-
-
-
-
-
-
-
-This chart of account is used for automated testing purpose. It is installed
-only if you selected demo data during your database creation. Modules can
-do black box testing on entries on this chart of account, without modifying
-your own chart of account.
-
-
-
-
diff --git a/addons/point_of_sale/pos_report.xml b/addons/point_of_sale/pos_report.xml
index 9123502d288..b079f6b9177 100644
--- a/addons/point_of_sale/pos_report.xml
+++ b/addons/point_of_sale/pos_report.xml
@@ -1,112 +1,112 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
diff --git a/addons/point_of_sale/pos_sequence.xml b/addons/point_of_sale/pos_sequence.xml
index 42bc4334b89..691b35a8f1a 100644
--- a/addons/point_of_sale/pos_sequence.xml
+++ b/addons/point_of_sale/pos_sequence.xml
@@ -2,42 +2,42 @@
- #
- # Sequences for pos.order
- #
+ #
+ # Sequences for pos.order
+ #
-
- POS Order
- pos.order
-
-
- POS Order
- pos.order
- POS/
- 3
-
+
+ POS Order
+ pos.order
+
+
+ POS Order
+ pos.order
+ POS/
+ 3
+
-
- POS Payment
- pos.payment
-
-
- POS Payment
- pos.payment
- Payment/
- 2
-
+
+ POS Payment
+ pos.payment
+
+
+ POS Payment
+ pos.payment
+ Payment/
+ 2
+
-
- POS order line
- pos.order.line
-
-
- POS order line
- pos.order.line
- Order Line/
- 2
-
+
+ POS order line
+ pos.order.line
+
+
+ POS order line
+ pos.order.line
+ Order Line/
+ 2
+
diff --git a/addons/point_of_sale/pos_view.xml b/addons/point_of_sale/pos_view.xml
index b3c784f6ea2..22e46933365 100644
--- a/addons/point_of_sale/pos_view.xml
+++ b/addons/point_of_sale/pos_view.xml
@@ -1,6 +1,9 @@
+
pos.order
@@ -9,11 +12,11 @@
-
-
-
+
+
+
-
+
@@ -90,7 +93,7 @@
-
+
@@ -112,7 +115,7 @@
-
+
@@ -156,7 +159,7 @@
-
+
@@ -169,7 +172,6 @@
-
@@ -186,7 +188,7 @@
['|',('state_2','=','to_verify'),('state','=','advance')]
{"search_default_user_id":uid}
-
+
@@ -199,7 +201,7 @@
[('state','!=', 'invoiced')]
{"search_default_user_id":uid}
-
+
@@ -212,7 +214,7 @@
tree,form
[('state','=', 'paid')]
{"search_default_user_id":uid}
-
+
Point of Sale
@@ -222,7 +224,7 @@
tree,form
[('date_order','<=', time.strftime('%Y-%m-%d 23:59:59'))]
{"search_default_user_id":uid}
-
+
@@ -232,7 +234,7 @@
form
tree,form
{"search_default_user_id":uid}
-
+
Opened Sales
@@ -241,7 +243,7 @@
form
form,tree
{"search_default_user_id":uid}
-
+
diff --git a/addons/point_of_sale/pos_workflow.xml b/addons/point_of_sale/pos_workflow.xml
index 11cd9481343..189b38e348f 100644
--- a/addons/point_of_sale/pos_workflow.xml
+++ b/addons/point_of_sale/pos_workflow.xml
@@ -1,84 +1,84 @@
-
- Pos workflow
- pos.order
- True
-
+
+ Pos workflow
+ pos.order
+ True
+
-
+
-
- POS - Confirmation
-
+
+ POS - Confirmation
+
-
-
- True
- draft
-
+
+
+ True
+ draft
+
-
-
- paid
- action_paid()
- function
-
+
+
+ paid
+ action_paid()
+ function
+
-
-
- done
- True
- action_done()
- function
-
+
+
+ done
+ True
+ action_done()
+ function
+
-
-
- invoiced
- True
- action_invoice()
- function
-
+
+
+ invoiced
+ True
+ action_invoice()
+ function
+
-
-
- cancel
- True
- action_cancel()
- function
-
+
+
+ cancel
+ True
+ action_cancel()
+ function
+
-
-
-
- test_paid()
- paid
-
+
+
+
+ test_paid()
+ paid
+
-
-
-
- done
-
+
+
+
+ done
+
-
-
-
- invoice
-
+
+
+
+ invoice
+
-
-
-
- cancel
-
+
+
+
+ cancel
+
diff --git a/addons/point_of_sale/posr_data.xml b/addons/point_of_sale/posr_data.xml
index de0ec465950..3ba8df59b13 100644
--- a/addons/point_of_sale/posr_data.xml
+++ b/addons/point_of_sale/posr_data.xml
@@ -1,74 +1,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/addons/point_of_sale/posrule_data.xml b/addons/point_of_sale/posrule_data.xml
index 905e78e6e7a..f2ac2d664af 100644
--- a/addons/point_of_sale/posrule_data.xml
+++ b/addons/point_of_sale/posrule_data.xml
@@ -1,505 +1,7 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- POS line
-
-
- ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
-
-
-
-
-
-
-
-
-
- ['|',('user_id','=',False),('user_id','=',[user.id])]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/addons/point_of_sale/posrule_data2.xml b/addons/point_of_sale/posrule_data2.xml
index 7ac787db54c..1010f75d055 100644
--- a/addons/point_of_sale/posrule_data2.xml
+++ b/addons/point_of_sale/posrule_data2.xml
@@ -1,592 +1,17 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/addons/point_of_sale/singer_statement_demo.xml b/addons/point_of_sale/singer_statement_demo.xml
index 68f889cddee..43b25437173 100644
--- a/addons/point_of_sale/singer_statement_demo.xml
+++ b/addons/point_of_sale/singer_statement_demo.xml
@@ -1,324 +1,7 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CashOut
-
- service
- True
- 0.0
- 0.0
-
-
-
-
-
-
- CashIn
-
- service
- True
- 0.0
- 0.0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cofinoga Shop2
- COF
- cash
-
-
-
-
-
-
-
-
- Sales Journal Shop 2
- SAJ
- sale
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cofinoga Shop1
- COF
- cash
-
-
-
-
-
-
-
-
- Sales Journal Shop1
- SAJ
- sale
-
-
-
-
-
-
-
-
-
- Cofinoga Central
- COF
- cash
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/addons/point_of_sale/statement_data.xml b/addons/point_of_sale/statement_data.xml
index 5172e0e70d4..3ba8df59b13 100644
--- a/addons/point_of_sale/statement_data.xml
+++ b/addons/point_of_sale/statement_data.xml
@@ -1,41 +1,6 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/addons/point_of_sale/statement_report.xml b/addons/point_of_sale/statement_report.xml
index 73b2c914dd3..fb1be16419e 100644
--- a/addons/point_of_sale/statement_report.xml
+++ b/addons/point_of_sale/statement_report.xml
@@ -1,69 +1,69 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/addons/point_of_sale/statement_rules.xml b/addons/point_of_sale/statement_rules.xml
index eba649f3ec5..3ba8df59b13 100644
--- a/addons/point_of_sale/statement_rules.xml
+++ b/addons/point_of_sale/statement_rules.xml
@@ -1,5 +1,6 @@
-
-
+
+
+
diff --git a/addons/point_of_sale/statement_view.xml b/addons/point_of_sale/statement_view.xml
index 69c3232f1a0..a4acd7429ec 100644
--- a/addons/point_of_sale/statement_view.xml
+++ b/addons/point_of_sale/statement_view.xml
@@ -55,32 +55,32 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -132,18 +132,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -185,18 +185,18 @@
[('user_id','=',uid)]
-
-
- tree
-
-
-
-
-
- form
-
-
-
+
+
+ tree
+
+
+
+
+
+ form
+
+
+
@@ -265,32 +265,32 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -332,45 +332,45 @@
[('state','=','draft'),('user_id','=',uid)]
-
-
- tree
-
-
-
-
-
- form
-
-
-
+
+
+ tree
+
+
+
+
+
+ form
+
+
+
-
+
All Cashboxes
ir.actions.act_window
account.bank.statement
form
-
-
- tree
-
-
-
-
-
- form
-
-
-
-
+
+
+ tree
+
+
+
+
+
+ form
+
+
+
+
-
+
All My Cashboxes
ir.actions.act_window
account.bank.statement
@@ -378,22 +378,22 @@
[('user_id','=',uid)]
-
- tree
-
-
-
+
+ tree
+
+
+
-
-
- form
-
-
-
-
-
+
+
+ form
+
+
+
+
+
-
+
Cashboxes to Close
ir.actions.act_window
account.bank.statement
@@ -401,44 +401,44 @@
tree,form
[('state','=','draft')]
-
-
- tree
-
-
-
-
-
- form
-
-
-
+
+
+ tree
+
+
+
+
+
+ form
+
+
+
-
+
-
+ action="action_report_all_closed_cashbox_of_the_day"
+ id="menu_all_closed_cashbox_of_the_day"
+ parent="menu_statement_tree_all"/>
-
+ action="action_report_all_closed_cashbox_of_the_day"
+ id="menu_all_closed_cashbox_of_the_day"
+ parent="menu_point_report_register"/>
-
+
diff --git a/addons/point_of_sale/statement_wizard.xml b/addons/point_of_sale/statement_wizard.xml
index dd9715db628..8220eda8bed 100644
--- a/addons/point_of_sale/statement_wizard.xml
+++ b/addons/point_of_sale/statement_wizard.xml
@@ -1,12 +1,13 @@
-
-
-
-
+ action="action_report_all_closed_cashbox_of_the_day"
+ id="menu_all_closed_cashbox_of_the_day"
+ parent="menu_point_report_register"/>
diff --git a/addons/product/i18n/vi.po b/addons/product/i18n/vi.po
index c6b06e8b29d..a2c65299744 100644
--- a/addons/product/i18n/vi.po
+++ b/addons/product/i18n/vi.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 16:40+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-06-13 07:00+0000\n"
+"Last-Translator: Vu Duc Tiep \n"
"Language-Team: Vietnamese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:10+0000\n"
+"X-Launchpad-Export-Date: 2010-06-14 03:42+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product
@@ -163,7 +163,7 @@ msgstr "Công ty"
#. module: product
#: field:product.template,rental:0
msgid "Rentable Product"
-msgstr ""
+msgstr "Sản phẩm có thể cho thuê"
#. module: product
#: field:product.product,lst_price:0
@@ -244,7 +244,7 @@ msgstr ""
#. module: product
#: model:process.transition,note:product.process_transition_supplierofproduct0
msgid "You can see the list of suppliers for that product."
-msgstr ""
+msgstr "Bạn có thể thấy danh sách các nhà cung cấp sản phầm này"
#. module: product
#: help:product.packaging,rows:0
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index 93a489245c4..edd5e9e3499 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -12,8 +12,8 @@
-
-
+
+
@@ -65,6 +65,7 @@
+
@@ -74,10 +75,9 @@
-
+
-
@@ -466,7 +466,7 @@
form
-
+
@@ -520,7 +520,6 @@
-
@@ -606,7 +605,7 @@
-
+
Products
ir.ui.menu
diff --git a/addons/product/security/ir.model.access.csv b/addons/product/security/ir.model.access.csv
index 062db9e34e8..f1c24509ac9 100644
--- a/addons/product/security/ir.model.access.csv
+++ b/addons/product/security/ir.model.access.csv
@@ -18,7 +18,6 @@
"access_product_ul_user","product.ul.user","model_product_ul","base.group_user",1,0,0,0
"access_product_category_user","product.category.user","model_product_category","base.group_user",1,0,0,0
"access_product_template_user","product.template.user","model_product_template","base.group_user",1,0,0,0
-"access_product_product_user","product.product.user","model_product_product","base.group_user",1,0,0,0
"access_product_packaging_user","product.packaging.user","model_product_packaging","base.group_user",1,0,0,0
"access_product_supplierinfo_user","product.supplierinfo.user","model_product_supplierinfo","base.group_user",1,0,0,0
"access_pricelist_partnerinfo_user","pricelist.partnerinfo.user","model_pricelist_partnerinfo","base.group_user",1,0,0,0
diff --git a/addons/profile_tools/security/ir.model.access.csv b/addons/profile_tools/security/ir.model.access.csv
index dbe55929ecc..a46b61c89a2 100644
--- a/addons/profile_tools/security/ir.model.access.csv
+++ b/addons/profile_tools/security/ir.model.access.csv
@@ -1,2 +1,2 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_misc_tools_installer","misc_tools.installer","model_misc_tools_installer",,1,1,1,1
+"access_misc_tools_installer","misc_tools.installer","model_misc_tools_installer",base.group_system,1,1,1,1
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index f58f026d484..004ed9ba429 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -40,8 +40,6 @@
-
-
@@ -50,12 +48,16 @@
-
+
+
+
+
@@ -240,7 +242,7 @@
-
+
@@ -415,10 +417,10 @@
-
+
-
+
@@ -540,27 +542,27 @@
- res.users.project.form1
- res.users
- form
-
-
-
-
-
-
-
+ res.users.project.form1
+ res.users
+ form
+
+
+
+
+
+
+
- view.users.form.project.modif.inherited1
- res.users
-
- form
-
-
+ view.users.form.project.modif.inherited1
+ res.users
+
+ form
+
+
-
+
@@ -607,11 +609,10 @@
-
-
-
-
-
+
+
+
+
@@ -639,6 +640,6 @@
-
+
diff --git a/addons/project/security/ir.model.access.csv b/addons/project/security/ir.model.access.csv
index 0cbe980f2e6..1a2fac38c6a 100644
--- a/addons/project/security/ir.model.access.csv
+++ b/addons/project/security/ir.model.access.csv
@@ -1,9 +1,9 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_project_project_manager","project.project manager","model_project_project","project.group_project_manager",1,1,1,1
-"access_account_analytic_account_manager","account.analytic.account","analytic.model_account_analytic_account","project.group_project_user",1,1,1,1
+"access_account_analytic_account_manager","account.analytic.account","analytic.model_account_analytic_account","project.group_project_manager",1,1,1,1
"access_project_project","project.project","model_project_project","project.group_project_user",1,0,0,0
"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","project.group_project_user",1,0,0,0
-"access_project_task_type_user","project.task.type user","model_project_task_type","project.group_project_user",1,0,0,1
+"access_project_task_type_user","project.task.type user","model_project_task_type","project.group_project_user",1,0,0,0
"access_project_task_type","project.task.type","model_project_task_type","project.group_project_manager",1,1,1,1
"access_project_task_manager","project.task manager","model_project_task","project.group_project_manager",1,1,1,1
"access_project_task","project.task","model_project_task","project.group_project_user",1,1,1,1
@@ -11,10 +11,18 @@
"access_project_task_work_manager","project.task.work.manager","model_project_task_work","project.group_project_manager",1,1,1,1
"access_config_compute_remaining","project.config.compute.remaining","model_config_compute_remaining","project.group_project_user",1,1,1,1
"access_config_compute_remaining_manager","project.config.compute.remaining.manager","model_config_compute_remaining","project.group_project_manager",1,1,1,1
-"access_project_message","project.message","model_project_message","project.group_project_user",1,0,0,0
-"access_project_installer","project.installer","model_project_installer","project.group_project_user",1,0,0,0
+"access_project_message","project.message","model_project_message","project.group_project_user",1,1,1,1
+"access_project_installer","project.installer","model_project_installer","base.group_system",1,1,1,1
"access_report_project_task_user","report.project.task.user","model_report_project_task_user","project.group_project_manager",1,0,0,0
"access_project_vs_remaining_hours","project.vs.remaining.hours","model_project_vs_remaining_hours","project.group_project_user",1,1,1,1
"access_task_by_days_vs_planned_hours","task.by.days.vs.planned.hour","model_task_by_days_vs_planned_hours","project.group_project_user",1,1,1,1
"access_task_by_days","task.by.days","model_task_by_days","project.group_project_user",1,1,1,1
-"access_close_task","close.task","model_close_task","project.group_project_manager",1,1,1,1
+"access_close_task","close.task","model_close_task","project.group_project_user",1,1,1,1
+"access_close_task_manager","close.task manager","model_close_task","project.group_project_manager",1,1,1,1
+"access_resource_calendar_project_user","resource.resource.calendar project user","resource.model_resource_calendar","project.group_project_user",1,0,0,0
+"access_resource_calendar_project_manager","resource.resource.calendar project manager","resource.model_resource_calendar","project.group_project_manager",1,1,1,1
+"access_fiscalyear_sequence_project_manager","account.sequence.fiscalyear project manager","account.model_account_sequence_fiscalyear","project.group_project_manager",1,1,0,0
+"access_partner_task user","base.res.partner user","base.model_res_partner","project.group_project_user",1,0,0,0
+"access_partner_task manager","base.res.partner manager","base.model_res_partner","project.group_project_manager",1,0,0,0
+"access_partner_address_task user","base.res.partner.address user","base.model_res_partner_address","project.group_project_user",1,0,0,0
+"access_partner_address_task manager","base.res.partner.address manager","base.model_res_partner_address","project.group_project_manager",1,0,0,0
diff --git a/addons/project/security/project_security.xml b/addons/project/security/project_security.xml
index 447ee1af39e..dbb28db165e 100644
--- a/addons/project/security/project_security.xml
+++ b/addons/project/security/project_security.xml
@@ -13,25 +13,25 @@
- Project multi-company
+ Project multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Task multi-company
+ Task multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Tasks According to User and Project
+ Tasks According to User and Project
['|','|','|',('user_id','=',False),('user_id','=',user.id),('project_id.members','=',user.id),('project_id.user_id','=',user.id)]
diff --git a/addons/project_caldav/project_caldav_view.xml b/addons/project_caldav/project_caldav_view.xml
index 541cc3c396e..885878cfcd8 100644
--- a/addons/project_caldav/project_caldav_view.xml
+++ b/addons/project_caldav/project_caldav_view.xml
@@ -2,100 +2,100 @@
-
- project.task.caldav.form
- project.task
-
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ project.task.caldav.form
+ project.task
+
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- project.task.caldav.form1
- project.task
-
- form
-
-
-
-
-
-
+
+ project.task.caldav.form1
+ project.task
+
+ form
+
+
+
+
+
+
-
- project.task.caldav.form2
- project.task
-
- form
-
-
-
-
-
-
-
-
-
+
+ project.task.caldav.form2
+ project.task
+
+ form
+
+
+
+
+
+
+
+
+
-
- project.task.caldav.form3
- project.task
-
- form
-
-
-
-
-
-
-
-
-
-
+
+ project.task.caldav.form3
+ project.task
+
+ form
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/project_gtd/security/ir.model.access.csv b/addons/project_gtd/security/ir.model.access.csv
index 52e1b466740..0398fbfb0ee 100644
--- a/addons/project_gtd/security/ir.model.access.csv
+++ b/addons/project_gtd/security/ir.model.access.csv
@@ -1,3 +1,7 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_project_gtd_context","project.gtd.context","model_project_gtd_context","group_project_getting",1,1,1,1
"access_project_gtd_timebox","project.gtd.timebox","model_project_gtd_timebox","group_project_getting",1,1,1,1
+"access_project_gtd_context_user","project.gtd.context project user","model_project_gtd_context","project.group_project_user",1,0,0,0
+"access_project_gtd_timebox_user","project.gtd.timebox project user","model_project_gtd_timebox","project.group_project_user",1,0,0,0
+"access_project_gtd_context_manager","project.gtd.context project manager","model_project_gtd_context","project.group_project_manager",1,1,1,1
+"access_project_gtd_timebox_manager","project.gtd.timebox project manager","model_project_gtd_timebox","project.group_project_manager",1,1,1,1
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index a5009b7eb47..673f4239971 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -106,9 +106,9 @@
+ name="%(crm.action_crm_send_mail)d"
+ context="{'mail':'new', 'model': 'project.issue'}"
+ icon="gtk-go-forward" type="action" />
@@ -187,10 +187,10 @@
-
+
-
+
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -298,12 +298,12 @@
-
+
-
+
diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py
index 212af8a30dc..57fbd1abb5f 100644
--- a/addons/project_long_term/project_long_term.py
+++ b/addons/project_long_term/project_long_term.py
@@ -256,115 +256,7 @@ class task(osv.osv):
_inherit = "project.task"
_columns = {
'phase_id': fields.many2one('project.phase', 'Project Phase'),
- 'occupation_rate': fields.float('Occupation Rate', help='The occupation rate fields indicates how much of his time a user is working on a task. A 100% occupation rate means the user works full time on the tasks. The ending date of a task is computed like this: Starting Date + Duration / Occupation Rate.'),
- 'planned_hours': fields.float('Planned Hours', required=True, help='Estimated time to do the task, usually set by the project manager when the task is in draft state.'),
}
- _defaults = {
- 'occupation_rate': '1'
- }
-
- def onchange_planned(self, cr, uid, ids, project, user_id=False, planned=0.0, effective=0.0, date_start=None, occupation_rate=0.0):
- result = {}
- resource = False
- resource_obj = self.pool.get('resource.resource')
- project_pool = self.pool.get('project.project')
- resource_calendar = self.pool.get('resource.calendar')
- if not project:
- return {'value' : result}
- if date_start:
- hrs = float(planned / float(occupation_rate))
- calendar_id = project_pool.browse(cr, uid, project).resource_calendar_id.id
- dt_start = mx.DateTime.strptime(date_start, '%Y-%m-%d %H:%M:%S')
- resource_id = resource_obj.search(cr, uid, [('user_id','=',user_id)])
- if resource_id:
- resource_data = resource_obj.browse(cr, uid, resource_id)[0]
- resource = resource_data.id
- hrs = planned / (float(occupation_rate) * resource_data.time_efficiency)
- if resource_data.calendar_id.id:
- calendar_id = resource_data.calendar_id.id
- work_times = resource_calendar.interval_get(cr, uid, calendar_id, dt_start, hrs or 0.0, resource or False)
- if work_times:
- result['date_end'] = work_times[-1][1].strftime('%Y-%m-%d %H:%M:%S')
- result['remaining_hours'] = planned - effective
- return {'value' : result}
-
- def _check_date_start(self, cr, uid, task, date_end, context={}):
- """
- Check And Compute date_end of task if change in date_start < older time.
- """
- resource_calendar_obj = self.pool.get('resource.calendar')
- resource_obj = self.pool.get('resource.resource')
- calendar_id = task.project_id.resource_calendar_id and task.project_id.resource_calendar_id.id or False
- hours = task.planned_hours / task.occupation_rate
- resource_id = resource_obj.search(cr, uid, [('user_id', '=', task.user_id.id)], context=context)
- if resource_id:
- resource = resource_obj.browse(cr, uid, resource_id[0], context=context)
- if resource.calendar_id.id:
- calendar_id = resource.calendar_id and resource.calendar_id.id or False
- hours = task.planned_hours / (float(task.occupation_rate) * resource.time_efficiency)
- work_times = resource_calendar_obj.interval_min_get(cr, uid, calendar_id, date_end, hours or 0.0, resource_id and resource_id[0] or False)
- dt_start = work_times[0][0].strftime('%Y-%m-%d %H:%M:%S')
- self.write(cr, uid, [task.id], {'date_start' : dt_start,'date_end' : date_end.strftime('%Y-%m-%d %H:%M:%S')})
-
- def _check_date_end(self, cr, uid, task, date_start, context={}):
- """
- Check And Compute date_end of task if change in date_end > older time.
- """
- resource_calendar_obj = self.pool.get('resource.calendar')
- resource_obj = self.pool.get('resource.resource')
- calendar_id = task.project_id.resource_calendar_id and task.project_id.resource_calendar_id.id or False
- hours = task.planned_hours / task.occupation_rate
- resource_id = resource_obj.search(cr,uid,[('user_id', '=', task.user_id.id)], context=context)
- if resource_id:
- resource = resource_obj.browse(cr, uid, resource_id[0], context=context)
- if resource.calendar_id.id:
- calendar_id = resource.calendar_id and resource.calendar_id.id or False
- hours = task.planned_hours / (float(task.occupation_rate) * resource.time_efficiency)
- work_times = resource_calendar_obj.interval_get(cr, uid, calendar_id, date_start, hours or 0.0, resource_id and resource_id[0] or False)
- dt_end = work_times[-1][1].strftime('%Y-%m-%d %H:%M:%S')
- self.write(cr, uid, [task.id], {'date_start': date_start.strftime('%Y-%m-%d %H:%M:%S'),'date_end' : dt_end}, context=context)
-
- def write(self, cr, uid, ids, vals, context={}):
- resource_calendar_obj = self.pool.get('resource.calendar')
- resource_obj = self.pool.get('resource.resource')
- if not context:
- context = {}
- if context.get('scheduler',False):
- return super(task, self).write(cr, uid, ids, vals, context=context)
-
- # Consider calendar and efficiency if the task is performed by a resource
- # otherwise consider the project's working calendar
- task_id = ids
- if isinstance(ids, list):
- task_id = ids[0]
- task_rec = self.browse(cr, uid, task_id, context=context)
- calendar_id = task_rec.project_id.resource_calendar_id and task_rec.project_id.resource_calendar_id.id or False
- hrs = task_rec.planned_hours / task_rec.occupation_rate
- resource_id = resource_obj.search(cr, uid, [('user_id', '=', task_rec.user_id.id)], context=context)
- if resource_id:
- resource = resource_obj.browse(cr, uid, resource_id[0], context=context)
- if resource.calendar_id.id:
- calendar_id = resource.calendar_id and resource.calendar_id.id or False
- hrs = task_rec.planned_hours / (float(task_rec.occupation_rate) * resource.time_efficiency)
-
- # Change the date_start and date_end
- # for previous and next tasks respectively based on valid condition
- if vals.get('date_start', False) and vals['date_start'] < task_rec.date_start:
- dt_start = mx.DateTime.strptime(vals['date_start'], '%Y-%m-%d %H:%M:%S')
- work_times = resource_calendar_obj.interval_get(cr, uid, calendar_id, dt_start, hrs or 0.0, resource.id or False)
- if work_times:
- vals['date_end'] = work_times[-1][1].strftime('%Y-%m-%d %H:%M:%S')
- for prv_task in task_rec.parent_ids:
- self._check_date_start(cr, uid, prv_task, dt_start)
- if vals.get('date_end', False) and vals['date_end'] > task_rec.date_end:
- dt_end = mx.DateTime.strptime(vals['date_end'], '%Y-%m-%d %H:%M:%S')
- work_times = resource_calendar_obj.interval_min_get(cr, uid, calendar_id, dt_end, hrs or 0.0, resource.id or False)
- if work_times:
- vals['date_start'] = work_times[0][0].strftime('%Y-%m-%d %H:%M:%S')
- for next_task in task_rec.child_ids:
- self._check_date_end(cr, uid, next_task, dt_end)
-
- return super(task, self).write(cr, uid, ids, vals, context=context)
task()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_long_term/project_long_term_demo.xml b/addons/project_long_term/project_long_term_demo.xml
index 24bc7ff9438..657658eba46 100644
--- a/addons/project_long_term/project_long_term_demo.xml
+++ b/addons/project_long_term/project_long_term_demo.xml
@@ -404,7 +404,6 @@
2
draft
-
@@ -424,7 +423,6 @@
2
draft
-
@@ -444,7 +442,6 @@
2
draft
-
@@ -464,7 +461,6 @@
2
draft
-
@@ -484,7 +480,6 @@
2
draft
-
@@ -504,7 +499,6 @@
2
draft
-
@@ -524,7 +518,6 @@
2
draft
-
@@ -544,7 +537,6 @@
2
draft
-
@@ -564,7 +556,6 @@
2
draft
-
@@ -584,7 +575,6 @@
2
draft
-
@@ -604,7 +594,6 @@
2
draft
-
@@ -623,7 +612,6 @@
2
draft
-
@@ -642,7 +630,6 @@
2
draft
-
@@ -661,7 +648,6 @@
2
draft
-
@@ -680,7 +666,6 @@
2
draft
-
@@ -699,7 +684,6 @@
2
draft
-
@@ -718,7 +702,6 @@
2
draft
-
@@ -737,7 +720,6 @@
2
draft
-
@@ -756,7 +738,6 @@
2
draft
-
@@ -776,7 +757,6 @@
2
draft
-
@@ -796,7 +776,6 @@
2
draft
-
@@ -816,7 +795,6 @@
2
draft
-
@@ -836,7 +814,6 @@
2
draft
-
@@ -856,7 +833,6 @@
2
draft
-
@@ -876,7 +852,6 @@
2
draft
-
@@ -897,7 +872,6 @@
2
draft
-
@@ -909,4 +883,4 @@
-
\ No newline at end of file
+
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index e681b0da57f..cafaefa9633 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -2,7 +2,7 @@
-
+
# ------------------------------------------------------
# Project Resource Allocation
@@ -29,7 +29,7 @@
-
+
@@ -42,8 +42,8 @@
-
-
+
+
@@ -59,7 +59,7 @@
project.resource.allocation
form
tree,form
- {'search_default_resource': 1}
+ {'search_default_resource': 1}
@@ -128,7 +128,7 @@
-
+
@@ -142,11 +142,10 @@
-
-
+
@@ -157,7 +156,7 @@
-
+
@@ -223,10 +222,10 @@
-
+
-
+
@@ -245,7 +244,7 @@
project.phase
form
gantt,tree,form,calendar
- {'search_default_responsible_id':uid}
+ {'search_default_responsible_id':uid}
@@ -270,32 +269,7 @@
# Project Task
# ------------------------------------------------------
-
- project.phase.task.form1
- project.task
- form
-
-
-
-
-
-
-
-
-
-
- project.phase.task.form2
- project.task
- form
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/project_long_term/security/ir.model.access.csv b/addons/project_long_term/security/ir.model.access.csv
index 7a91ce257ed..b829675772e 100644
--- a/addons/project_long_term/security/ir.model.access.csv
+++ b/addons/project_long_term/security/ir.model.access.csv
@@ -1,3 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_project_phase","project.phase","model_project_phase",,1,1,1,1
-"access_project_resource_allocation","project.resource.allocation","model_project_resource_allocation",,1,1,1,1
+"access_project_phase","project.phase","model_project_phase",project.group_project_user,1,1,1,1
+"access_project_resource_allocation","project.resource.allocation","model_project_resource_allocation",project.group_project_user,1,1,1,1
diff --git a/addons/project_long_term/wizard/project_compute_tasks.py b/addons/project_long_term/wizard/project_compute_tasks.py
index 9f2eb707c60..0816bf3c3f1 100644
--- a/addons/project_long_term/wizard/project_compute_tasks.py
+++ b/addons/project_long_term/wizard/project_compute_tasks.py
@@ -108,7 +108,7 @@ class project_compute_tasks(osv.osv_memory):
# Dynamic Creation of tasks
i = 0
for each_task in tasks:
- hours = str(each_task.planned_hours / each_task.occupation_rate)+ 'H'
+ hours = str(each_task.planned_hours )+ 'H'
if each_task.priority in priority_dict.keys():
priorty = priority_dict[each_task.priority]
if each_task.user_id:
@@ -139,4 +139,4 @@ class project_compute_tasks(osv.osv_memory):
return {}
project_compute_tasks()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_long_term/wizard/project_schedule_tasks.py b/addons/project_long_term/wizard/project_schedule_tasks.py
index 8ec2d4c16e0..d4d2da82cec 100644
--- a/addons/project_long_term/wizard/project_schedule_tasks.py
+++ b/addons/project_long_term/wizard/project_schedule_tasks.py
@@ -127,7 +127,7 @@ class project_schedule_task(osv.osv_memory):
# Dynamic creation of tasks
i = 0
for each_task in tasks:
- hours = str(each_task.planned_hours / each_task.occupation_rate)+ 'H'
+ hours = str(each_task.planned_hours )+ 'H'
if each_task.priority in priority_dict.keys():
priorty = priority_dict[each_task.priority]
if each_task.user_id:
diff --git a/addons/project_messages/security/ir.model.access.csv b/addons/project_messages/security/ir.model.access.csv
index 96782d5fc82..b79a32fb2f5 100644
--- a/addons/project_messages/security/ir.model.access.csv
+++ b/addons/project_messages/security/ir.model.access.csv
@@ -1,2 +1,2 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_project_messages","project.messages","model_project_messages",,1,1,1,1
+"access_project_messages","project.messages","model_project_messages",project.group_project_user,1,1,1,1
diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml
index fd9d586f21e..d7d2880714c 100644
--- a/addons/project_planning/project_planning_view.xml
+++ b/addons/project_planning/project_planning_view.xml
@@ -164,10 +164,10 @@
-
-
-
-
+
+
+
+
diff --git a/addons/purchase/partner_view.xml b/addons/purchase/partner_view.xml
index 58594493643..06ba97079eb 100644
--- a/addons/purchase/partner_view.xml
+++ b/addons/purchase/partner_view.xml
@@ -9,8 +9,8 @@
36
-
-
+
+
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 08507f9dfac..3958743bfcf 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -65,7 +65,6 @@ class purchase_order(osv.osv):
res[order.id]['amount_tax']=cur_obj.round(cr, uid, cur, val)
res[order.id]['amount_untaxed']=cur_obj.round(cr, uid, cur, val1)
res[order.id]['amount_total']=res[order.id]['amount_untaxed'] + res[order.id]['amount_tax']
- print res
return res
def _set_minimum_planned_date(self, cr, uid, ids, name, value, arg, context):
@@ -168,7 +167,7 @@ class purchase_order(osv.osv):
'state': fields.selection([('draft', 'Request for Quotation'), ('wait', 'Waiting'), ('confirmed', 'Waiting Supplier Ack'), ('approved', 'Approved'),('except_picking', 'Shipping Exception'), ('except_invoice', 'Invoice Exception'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, help="The state of the purchase order or the quotation request. A quotation is a purchase order in a 'Draft' state. Then the order has to be confirmed by the user, the state switch to 'Confirmed'. Then the supplier must confirm the order to change the state to 'Approved'. When the purchase order is paid and received, the state becomes 'Done'. If a cancel action occurs in the invoice or in the reception of goods, the state becomes in exception.", select=True),
'order_line': fields.one2many('purchase.order.line', 'order_id', 'Order Lines', states={'approved':[('readonly',True)],'done':[('readonly',True)]}),
'validator' : fields.many2one('res.users', 'Validated by', readonly=True),
- 'notes': fields.text('Notes', translate=True),
+ 'notes': fields.text('Notes'),
'invoice_id': fields.many2one('account.invoice', 'Invoice', readonly=True),
'picking_ids': fields.one2many('stock.picking', 'purchase_id', 'Picking List', readonly=True, help="This is the list of picking list that have been generated for this purchase"),
'shipped':fields.boolean('Received', readonly=True, select=True),
@@ -273,6 +272,8 @@ class purchase_order(osv.osv):
todo.append(line.id)
current_name = self.name_get(cr, uid, ids)[0][1]
self.pool.get('purchase.order.line').action_confirm(cr, uid, todo, context)
+ message = _('confirm Order') + " ' " + po.name
+ self.log(cr,uid,po,message)
for id in ids:
self.write(cr, uid, [id], {'state' : 'confirmed', 'validator' : uid})
return True
@@ -428,6 +429,7 @@ class purchase_order(osv.osv):
'product_uom': order_line.product_uom.id,
'product_uos': order_line.product_uom.id,
'date_planned': order_line.date_planned,
+ 'date_expected': order_line.date_planned,
'location_id': loc_id,
'location_dest_id': dest,
'picking_id': picking_id,
@@ -591,7 +593,7 @@ class purchase_order_line(osv.osv):
'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_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits_compute= dp.get_precision('Purchase Price')),
- 'notes': fields.text('Notes', translate=True),
+ 'notes': fields.text('Notes'),
'order_id': fields.many2one('purchase.order', 'Order Reference', select=True, required=True, ondelete='cascade'),
'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'),
@@ -633,7 +635,7 @@ class purchase_order_line(osv.osv):
prod= self.pool.get('product.product').browse(cr, uid,product)
lang=False
if partner_id:
- lang=self.pool.get('res.partner').read(cr, uid, partner_id)['lang']
+ lang=self.pool.get('res.partner').read(cr, uid, partner_id, ['lang'])['lang']
context={'lang':lang}
context['partner_id'] = partner_id
@@ -726,17 +728,16 @@ class procurement_order(osv.osv):
po_obj = self.pool.get('purchase.order')
for procurement in self.browse(cr, uid, ids):
res_id = procurement.move_id.id
- partner_list = sorted([(partner_id.sequence, partner_id) for partner_id in procurement.product_id.seller_ids if partner_id])
- partner_rec = partner_list and partner_list[0] and partner_list[0][1] or False
- partner = partner_rec.name or False
- partner_id = partner_rec.id or False
+ partner = procurement.product_id.seller_ids[0].name
+ partner_id = partner.id
+ partner_rec = procurement.product_id.seller_ids[0]
address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery']
pricelist_id = partner.property_product_pricelist_purchase.id
uom_id = procurement.product_id.uom_po_id.id
qty = uom_obj._compute_qty(cr, uid, procurement.product_uom.id, procurement.product_qty, uom_id)
- if partner_rec.qty:
+ if procurement.product_id.seller_ids[0].qty:
qty = max(qty,partner_rec.qty)
price = pricelist_obj.price_get(cr, uid, [pricelist_id], procurement.product_id.id, qty, False, {'uom': uom_id})[pricelist_id]
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 502c33bd5f9..8086a169d9d 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -3,7 +3,7 @@
-
@@ -21,7 +21,7 @@
parent="base.menu_purchase_root" sequence="4"/>
-
+
-
+
-
+
@@ -159,7 +159,7 @@
-
+
@@ -233,7 +233,13 @@
+
+
+
+
+
@@ -243,17 +249,14 @@
-
-
-
-
-
-
-
+
+
+
+
-
-
+
+
@@ -286,7 +289,7 @@
-
+
@@ -313,7 +316,7 @@
src_model="product.product"
groups="base.group_extended"/>
- procurement.order.form.inherit
- procurement.order
-
- form
-
-
-
-
-
+ procurement.order.form.inherit
+ procurement.order
+
+ form
+
+
+
+
+
diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py
index ff3d4bdcee8..d5688e5bd22 100644
--- a/addons/purchase/report/purchase_report.py
+++ b/addons/purchase/report/purchase_report.py
@@ -31,7 +31,7 @@ class purchase_report(osv.osv):
_description = "Purchases Orders"
_auto = False
_columns = {
- 'date': fields.date('Date order', readonly=True),
+ 'date': fields.date('Order Date', readonly=True),
'name': fields.char('Year',size=64,required=False, readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'state': fields.selection([
@@ -44,32 +44,26 @@ class purchase_report(osv.osv):
('done','Done'),
('cancel','Cancel')
], 'Order State', readonly=True),
- 'invoice_method': fields.selection([
- ('manual','Manual'),
- ('order','From Order'),
- ('picking','From Picking')
- ],'Invoicing Control', readonly=True),
'product_id':fields.many2one('product.product', 'Product', readonly=True),
'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse', readonly=True),
'location_id': fields.many2one('stock.location', 'Destination', readonly=True),
- 'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position',readonly=True),
'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
'partner_address_id':fields.many2one('res.partner.address', 'Address Contact Name', readonly=True),
'dest_address_id':fields.many2one('res.partner.address', 'Dest. Address Contact Name',readonly=True),
'pricelist_id':fields.many2one('product.pricelist', 'Pricelist', readonly=True),
'date_approve':fields.date('Date Approved', readonly=True),
'expected_date':fields.date('Expected Date', readonly=True),
- 'validator' : fields.many2one('res.users', 'Validated by', readonly=True),
+ 'validator' : fields.many2one('res.users', 'Validated By', readonly=True),
'company_id':fields.many2one('res.company', 'Company', readonly=True),
- 'shipped_qty':fields.integer('Received Qty', readonly=True),
- 'invoiced_qty':fields.integer('Invoiced Qty', readonly=True),
'user_id':fields.many2one('res.users', 'Responsible', readonly=True),
- 'delay':fields.float('Days to Close', digits=(16,2), readonly=True),
- 'delay_pass':fields.float('Overpassed expected', digits=(16,2), readonly=True),
+ 'delay':fields.float('Days to Validate', digits=(16,2), readonly=True, group_operator="avg"),
+ 'delay_pass':fields.float('Days to Deliver', digits=(16,2), readonly=True, group_operator="avg"),
'quantity': fields.float('# of Products', readonly=True),
'price_total': fields.float('Total Price', readonly=True),
- 'price_average': fields.float('Average Price', readonly=True),
- 'nbr': fields.integer('# of Ordered Lines', readonly=True),
+ 'price_average': fields.float('Unit Price', readonly=True, group_operator="avg"),
+ 'negociation': fields.float('Purchase-Standard Price', readonly=True, group_operator="avg"),
+ 'price_standard': fields.float('Products Value', readonly=True, group_operator="sum"),
+ 'nbr': fields.integer('# of PO Lines', readonly=True),
'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),
@@ -94,36 +88,34 @@ class purchase_report(osv.osv):
s.validator,
s.warehouse_id as warehouse_id,
s.partner_id as partner_id,
- s.fiscal_position,
s.create_uid as user_id,
s.company_id as company_id,
- s.invoice_method,
- s.shipped::integer as shipped_qty,
- l.invoiced::integer as invoiced_qty,
l.product_id,
s.location_id as location_id,
sum(l.product_qty*u.factor) as quantity,
extract(epoch from age(s.date_approve,s.date_order))/(24*60*60)::decimal(16,2) as delay,
- extract(epoch from age(s.minimum_planned_date,s.date_order))/(24*60*60)::decimal(16,2) as delay_pass,
+ extract(epoch from age(l.date_planned,s.date_order))/(24*60*60)::decimal(16,2) as delay_pass,
count(*) as nbr,
- l.price_unit*l.product_qty*u.factor as price_total,
+ (l.price_unit*l.product_qty*u.factor)::decimal(16,2) as price_total,
+ avg(100.0 * (l.price_unit*l.product_qty*u.factor) / (t.standard_price*l.product_qty*u.factor))::decimal(16,2) as negociation,
+ sum(t.standard_price*l.product_qty*u.factor)::decimal(16,2) as price_standard,
(sum(l.product_qty*l.price_unit)/sum(l.product_qty*u.factor))::decimal(16,2) as price_average
from purchase_order s
left join purchase_order_line l on (s.id=l.order_id)
+ left join product_product p on (l.product_id=p.id)
+ left join product_template t on (p.product_tmpl_id=t.id)
left join product_uom u on (u.id=l.product_uom)
where l.product_id is not null
group by
s.company_id,
s.create_uid,
- s.shipped,
- l.invoiced,
s.partner_id,
l.product_qty,
u.factor,
s.location_id,
l.price_unit,
s.date_approve,
- s.minimum_planned_date,
+ l.date_planned,
date_trunc('day',s.minimum_planned_date),
s.partner_address_id,
s.pricelist_id,
@@ -135,74 +127,8 @@ class purchase_report(osv.osv):
to_char(s.date_order, 'MM'),
to_char(s.date_order, 'YYYY-MM-DD'),
s.state,
- s.warehouse_id,
- s.fiscal_position,
- s.invoice_method
+ s.warehouse_id
)
""")
purchase_report()
-class purchase_order_qty_amount(osv.osv):
- _name = "purchase.order.qty.amount"
- _description = "Quantity and amount per month"
- _auto = False
- _columns = {
- '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),
- 'total_qty' : fields.float('Total Qty'),
- 'total_amount' : fields.float('Total Amount'),
-
- }
- def init(self, cr):
- tools.sql.drop_view_if_exists(cr, 'purchase_order_qty_amount')
- cr.execute("""
- create or replace view purchase_order_qty_amount as (
- select
- min(id) as id,
- to_char(create_date, 'MM') as month,
- sum(product_qty) as total_qty,
- sum(price_unit*product_qty) as total_amount
- from
- purchase_order_line
- where
- to_char(create_date,'YYYY') = to_char(current_date,'YYYY')
- group by
- to_char(create_date, 'MM')
-
- )
- """)
-purchase_order_qty_amount()
-
-class purchase_order_by_user(osv.osv):
- _name = "purchase.order.by.user"
- _description = "Purchase Order by user per month"
- _auto = False
- _columns = {
- 'name' : fields.char('User',size=64,required=True),
- '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),
- 'nbr' : fields.integer('Total Orders'),
-
- }
- _order = 'name desc'
- def init(self, cr):
- tools.sql.drop_view_if_exists(cr, 'purchase_order_by_user')
- cr.execute("""
- create or replace view purchase_order_by_user as (
- select
- min(po.id) as id,
- rs.name as name,
- count(po.id) as nbr,
- to_char(po.date_order, 'MM') as month
- from
- purchase_order as po,res_users as rs
- where
- po.create_uid = rs.id
- group by
- rs.name,po.date_order
-
- )
- """)
-purchase_order_by_user()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml
index db6cc6273de..b2bdf840c3d 100644
--- a/addons/purchase/report/purchase_report_view.xml
+++ b/addons/purchase/report/purchase_report_view.xml
@@ -8,7 +8,6 @@
-
@@ -20,13 +19,13 @@
tree
-
-
-
-
-
+
+
+
+
+
-
+
@@ -34,14 +33,14 @@
-
-
-
-
+
+
-
-
-
+
+
+
+
+
@@ -53,65 +52,56 @@
-
+
+ name="month"
+ domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
+ help="Tasks performed in this month"/>
+ string="Quotations"
+ name="quotes"
+ domain="[('state','=','draft')]"/>
-
-
-
+ string="Orders"
+ name="orders"
+ domain="[('state','<>','draft'),('state','<>','cancel')]"/>
-
+
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
-
+
-
+
-
@@ -127,77 +117,21 @@
purchase.report
form
tree,graph
-
- {'search_default_month':1,'search_default_Responsible':1,'group_by_no_leaf':1,'group_by':[]}
+ {'search_default_month':1,'search_default_group_partner_id':1,'search_default_group_product_id': 1, 'search_default_orders': 1, 'group_by_no_leaf':1,'group_by':[]}
-
- purchase.order.qty.amount.graph
- purchase.order.qty.amount
- graph
-
-
-
-
-
-
-
-
+
+ Receptions Analysis
+ report.stock.move
+ form
+ tree,graph
+ {'search_default_month':1, 'search_default_group_product':1, 'search_default_group_partner':1, 'search_default_done':1, 'search_default_in': 1, 'group_by':[], 'group_by_no_leaf':1}
+
+
-
- purchase.order.qty.amount.tree
- purchase.order.qty.amount
- tree
-
-
-
-
-
-
-
-
-
- Total Qty and Amount by month
- purchase.order.qty.amount
- form
- graph,tree
-
-
-
- purchase.order.by.user.graph
- purchase.order.by.user
- graph
-
-
-
-
-
-
-
-
-
-
- purchase.order.by.user.tree
- purchase.order.by.user
- tree
-
-
-
-
-
-
-
-
-
-
- Total Orders by User per month
- purchase.order.by.user
- form
- graph,tree
-
diff --git a/addons/purchase/security/ir.model.access.csv b/addons/purchase/security/ir.model.access.csv
index 9b0f8bc184e..c6a09d5d728 100644
--- a/addons/purchase/security/ir.model.access.csv
+++ b/addons/purchase/security/ir.model.access.csv
@@ -17,3 +17,10 @@
"access_stock_picking_purchase_user_manager","stock.picking","stock.model_stock_picking","purchase.group_purchase_manager",1,1,1,1
"access_stock_move_purchase_user_manager","stock.move","stock.model_stock_move","purchase.group_purchase_manager",1,1,1,1
"access_account_tax_purchase_user_manager","account.tax","account.model_account_tax","purchase.group_purchase_manager",1,0,0,0
+"access_product_product_purchase_user","product.product.purchase.user","product.model_product_product","group_purchase_user",1,0,0,0
+"access_account_invoice_purchase","account_invoice purchase","account.model_account_invoice","group_purchase_user",1,1,1,1
+"access_account_invoice_line_purchase","account_invoice.line purchase","account.model_account_invoice_line","group_purchase_user",1,1,1,1
+"access_account_fiscal_position_purchase_user","account.fiscal.position purchase","account.model_account_fiscal_position","group_purchase_user",1,0,0,0
+"access_account_sequence_fiscalyear_purchase_user","account.sequence.fiscalyear purchase","account.model_account_sequence_fiscalyear","group_purchase_user",1,1,1,1
+"access_res_partner_purchase_user","res.partner purchase","base.model_res_partner","group_purchase_user",1,0,0,0
+"access_res_partner_address_purchase_user","res.partner.address purchase","base.model_res_partner_address","group_purchase_user",1,0,0,0
diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml
index 186815c9bc3..172be8c06e8 100644
--- a/addons/purchase_requisition/purchase_requisition_view.xml
+++ b/addons/purchase_requisition/purchase_requisition_view.xml
@@ -39,7 +39,7 @@
-
+
@@ -52,41 +52,41 @@
-
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -110,7 +110,7 @@
-
+
purchase.requisition.list.select
purchase.requisition
search
@@ -118,22 +118,22 @@
-
+
-
+
-
+
-
+
@@ -145,8 +145,8 @@
ir.actions.act_window
purchase.requisition
form
- tree,form
- {"search_default_user_id":uid}
+ tree,form
+ {"search_default_user_id":uid}
diff --git a/addons/report_designer/security/ir.model.access.csv b/addons/report_designer/security/ir.model.access.csv
index 81d2854dc14..e6500199afe 100644
--- a/addons/report_designer/security/ir.model.access.csv
+++ b/addons/report_designer/security/ir.model.access.csv
@@ -1,2 +1,2 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_report_designer_installer","report_designer.installer","model_report_designer_installer",,1,1,1,1
+"access_report_designer_installer","report_designer.installer","model_report_designer_installer",base.group_system,1,1,1,1
diff --git a/addons/resource/resource_view.xml b/addons/resource/resource_view.xml
index df0974fd9ed..d00074cf54e 100644
--- a/addons/resource/resource_view.xml
+++ b/addons/resource/resource_view.xml
@@ -12,7 +12,7 @@
-
+
@@ -35,7 +35,7 @@
-
+
@@ -52,7 +52,7 @@
-
+
diff --git a/addons/resource/security/ir.model.access.csv b/addons/resource/security/ir.model.access.csv
index 796d29dcb94..f52b43adcaa 100644
--- a/addons/resource/security/ir.model.access.csv
+++ b/addons/resource/security/ir.model.access.csv
@@ -1,5 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_resource_calendar","resource.calendar","model_resource_calendar","base.group_user",1,0,0,0
-"access_resource_calendar_week","resource.calendar.week","model_resource_calendar_week","base.group_user",1,0,0,0
-"access_resource_resource","resource.resource","model_resource_resource","base.group_user",1,0,0,0
-"access_resource_calendar_leaves","resource.calendar.leaves","model_resource_calendar_leaves","base.group_user",1,0,0,0
\ No newline at end of file
+"access_resource_calendar","resource.calendar","model_resource_calendar","base.group_system",1,1,1,1
+"access_resource_calendar_week","resource.calendar.week","model_resource_calendar_week","base.group_system",1,1,1,1
+"access_resource_resource","resource.resource","model_resource_resource","base.group_system",1,1,1,1
+"access_resource_calendar_leaves","resource.calendar.leaves","model_resource_calendar_leaves","base.group_system",1,1,1,1
diff --git a/addons/sale/i18n/ru.po b/addons/sale/i18n/ru.po
index d6858cc9f75..ce9c8c51095 100644
--- a/addons/sale/i18n/ru.po
+++ b/addons/sale/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-02-04 05:56+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-06-11 16:29+0000\n"
+"Last-Translator: Sios \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:09+0000\n"
+"X-Launchpad-Export-Date: 2010-06-12 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale
@@ -117,7 +117,7 @@ msgstr ""
#. module: sale
#: model:ir.model,name:sale.model_sale_config_picking_policy
msgid "sale.config.picking_policy"
-msgstr ""
+msgstr "sale.config.picking_policy"
#. module: sale
#: model:process.transition.action,name:sale.process_transition_action_validate0
diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml
index f6090638891..9b8ed32ede4 100644
--- a/addons/sale/report/sale_report_view.xml
+++ b/addons/sale/report/sale_report_view.xml
@@ -128,6 +128,16 @@
+
+ Shipments Analysis
+ report.stock.move
+ form
+ tree,graph
+ {'search_default_month':1, 'search_default_group_product':1, 'search_default_group_partner':1, 'search_default_done':1, 'search_default_out': 1, 'group_by':[], 'group_by_no_leaf':1}
+
+
+
+
sale.order.by.clients.tree
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 4b6c766b671..07cb7e34b50 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -253,7 +253,7 @@ class sale_order(osv.osv):
'invoiced_rate': fields.function(_invoiced_rate, method=True, string='Invoiced', type='float'),
'invoiced': fields.function(_invoiced, method=True, string='Paid',
fnct_search=_invoiced_search, type='boolean'),
- 'note': fields.text('Notes', translate=True),
+ 'note': fields.text('Notes'),
'amount_untaxed': fields.function(_amount_all, method=True, digits_compute= dp.get_precision('Sale Price'), string='Untaxed Amount',
store = {
@@ -642,6 +642,7 @@ class sale_order(osv.osv):
'picking_id': picking_id,
'product_id': line.product_id.id,
'date_planned': date_planned,
+ 'date_expected': date_planned,
'product_qty': line.product_uom_qty,
'product_uom': line.product_uom.id,
'product_uos_qty': line.product_uos_qty,
@@ -822,7 +823,7 @@ class sale_order_line(osv.osv):
'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)]}),
'number_packages': fields.function(_number_packages, method=True, type='integer', string='Number Packages'),
- 'notes': fields.text('Notes', translate=True),
+ 'notes': fields.text('Notes'),
'th_weight': fields.float('Weight'),
'state': fields.selection([('draft', 'Draft'),('confirmed', 'Confirmed'),('done', 'Done'),('cancel', 'Cancelled'),('exception', 'Exception')], 'State', required=True, readonly=True,
help=' * The \'Draft\' state is set automatically when sale order in draft state. \
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index c2139bf617b..b61ba5a0f23 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -91,6 +91,15 @@
+
+
+
sale.order.form
sale.order
@@ -111,7 +120,7 @@
-
+
@@ -188,12 +197,12 @@
-
+
-
+
@@ -259,7 +268,7 @@
-
+
@@ -427,7 +436,7 @@
-
+
@@ -513,16 +522,16 @@
Sales Configuration
- Configure Sale Order Logistic
-
-
- Setup your sales workflow and default values.
-
+
+
+ Setup your sales workflow and default values.
+
- 15
-
-
+ 15
+
+
diff --git a/addons/sale/security/ir.model.access.csv b/addons/sale/security/ir.model.access.csv
index de0f55b80b1..7328793e2f3 100644
--- a/addons/sale/security/ir.model.access.csv
+++ b/addons/sale/security/ir.model.access.csv
@@ -16,12 +16,12 @@
"access_sale_order_line_stock_worker","sale.order.line stock worker","model_sale_order_line","stock.group_stock_user",1,1,0,0
"access_sale_order_manager","sale.order.manager","model_sale_order","group_sale_manager",1,1,1,1
"access_sale_order_line_manager","sale.order.line.manager","model_sale_order_line","group_sale_manager",1,1,1,1
-"access_sale_report","sale.report","model_sale_report","group_sale_user",1,1,1,0
-"access_sale_report_manager","sale.report","model_sale_report","group_sale_manager",1,1,1,1
+"access_sale_report_manager","sale.report","model_sale_report","group_sale_manager",1,0,0,0
"access_sale_order_line_make_invoice","sale.order.line.make.invoice","model_sale_order_line_make_invoice","group_sale_user",1,1,1,0
"access_sale_order_line_make_invoice_manager","sale.order.line.make.invoice","model_sale_order_line_make_invoice","group_sale_manager",1,1,1,1
"access_sale_advance_payment_inv","sale.advance.payment.inv","model_sale_advance_payment_inv","group_sale_user",1,1,1,0
"access_sale_advance_payment_inv_manager","sale.advance.payment.inv","model_sale_advance_payment_inv","group_sale_manager",1,1,1,1
"access_sale_open_invoice","sale.open.invoice","model_sale_open_invoice","group_sale_user",1,1,1,0
"access_sale_open_invoice_manager","sale.open.invoice","model_sale_open_invoice","group_sale_manager",1,1,1,1
-
+"access_product_product_sale_user","product.product.sale.user","model_product_product","group_sale_user",1,0,0,0
+"access_sale_account_journal","account.journal sale order.user","account.model_account_journal","group_sale_user",1,0,0,0
diff --git a/addons/sale/security/sale_security.xml b/addons/sale/security/sale_security.xml
index fd8b3e0d3c7..8e5c8360d07 100644
--- a/addons/sale/security/sale_security.xml
+++ b/addons/sale/security/sale_security.xml
@@ -14,14 +14,14 @@
- Sale Order multi-company
+ Sale Order multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
- Sale Order Line multi-company
+ Sale Order Line multi-company
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
diff --git a/addons/sale/wizard/sale_make_invoice_advance.xml b/addons/sale/wizard/sale_make_invoice_advance.xml
index 5fc8b993921..a4f48554166 100644
--- a/addons/sale/wizard/sale_make_invoice_advance.xml
+++ b/addons/sale/wizard/sale_make_invoice_advance.xml
@@ -1,59 +1,50 @@
-
- Sale Advance Payment Invoive
+
+ Deposit Invoice
sale.advance.payment.inv
form
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
+
Open Invoice
sale.open.invoice
form
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+
Open Invoice
ir.actions.act_window
sale.open.invoice
form
form
new
-
+
diff --git a/addons/sale_crm/sale_crm_view.xml b/addons/sale_crm/sale_crm_view.xml
index ad7b1e2485a..565fd687b4e 100644
--- a/addons/sale_crm/sale_crm_view.xml
+++ b/addons/sale_crm/sale_crm_view.xml
@@ -9,8 +9,7 @@
-
-
+
@@ -34,9 +33,9 @@
-
+
diff --git a/addons/sale_journal/sale_journal_view.xml b/addons/sale_journal/sale_journal_view.xml
index 7e4cc33b283..5b3d2de5652 100644
--- a/addons/sale_journal/sale_journal_view.xml
+++ b/addons/sale_journal/sale_journal_view.xml
@@ -3,467 +3,467 @@
-
- sale_journal.invoice.type.form
- sale_journal.invoice.type
- form
-
-
-
-
-
-
-
-
-
-
+
+ sale_journal.invoice.type.form
+ sale_journal.invoice.type
+ form
+
+
+
+
+
+
+
+
+
+
-
+
-
- sale_journal.invoice.type.tree
- sale_journal.invoice.type
- tree
-
-
-
-
-
-
-
+
+ sale_journal.invoice.type.tree
+ sale_journal.invoice.type
+ tree
+
+
+
+
+
+
+
-
+
-
- sale_journal.invoice.type
- form
- tree,form
-
+
+ sale_journal.invoice.type
+ form
+ tree,form
+
-
+
-
+
-
- sale_journal.sale.journal.form
- sale_journal.sale.journal
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ sale_journal.sale.journal.form
+ sale_journal.sale.journal
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- sale_journal.sale.journal.tree
- sale_journal.sale.journal
- tree
-
-
-
-
-
-
-
-
-
-
+
+ sale_journal.sale.journal.tree
+ sale_journal.sale.journal
+ tree
+
+
+
+
+
+
+
+
+
+
-
+
-
- sale_journal.sale.journal.search
- sale_journal.sale.journal
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ sale_journal.sale.journal.search
+ sale_journal.sale.journal
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- sale_journal.sale.journal
- form
- tree,form
-
-
+
+ sale_journal.sale.journal
+ form
+ tree,form
+
+
-
+
-
+
-
- sale.order.journal.view.form
- form
- sale.order
-
-
-
+
+ sale.order.journal.view.form
+ form
+ sale.order
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
- sale.order.journal.view.tree
- tree
- sale.order
-
-
-
-
-
-
-
-
+
+ sale.order.journal.view.tree
+ tree
+ sale.order
+
+
+
+
+
+
+
+
-
- stock.picking.journal.view.form
- form
- stock.picking
-
-
-
-
-
-
-
-
-
+
+ stock.picking.journal.view.form
+ form
+ stock.picking
+
+
+
+
+
+
+
+
+
-
- stock.picking.journal.view.tree
- tree
- stock.picking
-
-
-
-
-
-
-
-
-
+
+ stock.picking.journal.view.tree
+ tree
+ stock.picking
+
+
+
+
+
+
+
+
+
-
+
-
- stock.picking.journal.view.form
- form
- stock.picking
-
-
-
-
-
-
-
-
-
+
+ stock.picking.journal.view.form
+ form
+ stock.picking
+
+
+
+
+
+
+
+
+
-
+
-
- stock.picking.journal.view.tree
- tree
- stock.picking
-
-
-
-
-
-
-
-
-
+
+ stock.picking.journal.view.tree
+ tree
+ stock.picking
+
+
+
+
+
+
+
+
+
-
- stock.picking.journal.view.form
- form
- stock.picking
-
-
-
-
-
-
-
-
-
+
+ stock.picking.journal.view.form
+ form
+ stock.picking
+
+
+
+
+
+
+
+
+
-
- stock.picking.journal.view.tree
- tree
- stock.picking
-
-
-
-
-
-
-
-
-
+
+ stock.picking.journal.view.tree
+ tree
+ stock.picking
+
+
+
+
+
+
+
+
+
-
- stock.picking.journal.view.form
- form
- stock.picking
-
-
-
-
-
-
-
-
-
+
+ stock.picking.journal.view.form
+ form
+ stock.picking
+
+
+
+
+
+
+
+
+
-
- stock.picking.journal.view.tree
- tree
- stock.picking
-
-
-
-
-
-
-
-
-
+
+ stock.picking.journal.view.tree
+ tree
+ stock.picking
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
- res.partner.journal.property.form.inherit
- res.partner
- form
-
-
-
-
-
-
-
+
+ res.partner.journal.property.form.inherit
+ res.partner
+ form
+
+
+
+
+
+
+
-
-
-
+
+
+
-
- sale_journal.picking.journal.form
- sale_journal.picking.journal
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ sale_journal.picking.journal.form
+ sale_journal.picking.journal
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- sale_journal.picking.journal.tree
- sale_journal.picking.journal
- tree
-
-
-
-
-
-
-
-
-
-
+
+ sale_journal.picking.journal.tree
+ sale_journal.picking.journal
+ tree
+
+
+
+
+
+
+
+
+
+
-
- sale_journal.picking.journal.search
- sale_journal.picking.journal
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ sale_journal.picking.journal.search
+ sale_journal.picking.journal
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Picking Journals
- sale_journal.picking.journal
- form
- tree,form
-
-
+
+ Picking Journals
+ sale_journal.picking.journal
+ form
+ tree,form
+
+
-
+
-
- Picking by invoice_method
- sale_journal.invoice.type
- ir.actions.act_window
- tree
-
+
+ Picking by invoice_method
+ sale_journal.invoice.type
+ ir.actions.act_window
+ tree
+
-
- Picking to invoice
- stock.picking
- ir.actions.act_window
- form
- tree,form
- [('state','=','done'),('invoice_state','=','2binvoiced'),('invoice_type_id','=',active_id)]
-
+
+ Picking to invoice
+ stock.picking
+ ir.actions.act_window
+ form
+ tree,form
+ [('state','=','done'),('invoice_state','=','2binvoiced'),('invoice_type_id','=',active_id)]
+
-
- tree_but_open
- sale_journal.invoice.type
- Picking to invoice
-
-
-
+
+ tree_but_open
+ sale_journal.invoice.type
+ Picking to invoice
+
+
+
diff --git a/addons/scrum/scrum_view.xml b/addons/scrum/scrum_view.xml
index be16ecfa7e5..70c3e82ee56 100644
--- a/addons/scrum/scrum_view.xml
+++ b/addons/scrum/scrum_view.xml
@@ -137,8 +137,8 @@
-
-
+
+
-
+
@@ -184,7 +184,7 @@
scrum.sprint
tree
-
+
@@ -266,8 +266,8 @@
-
-
+
+
@@ -352,10 +352,10 @@
-
+
-
+
diff --git a/addons/scrum/security/ir.model.access.csv b/addons/scrum/security/ir.model.access.csv
index a52a9c2f3f2..76ba229e952 100644
--- a/addons/scrum/security/ir.model.access.csv
+++ b/addons/scrum/security/ir.model.access.csv
@@ -1,7 +1,9 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_scrum_sprint","scrum.sprint","model_scrum_sprint","project.group_project_user",1,,,
+"access_scrum_sprint","scrum.sprint","model_scrum_sprint","project.group_project_user",1,0,0,0
"access_scrum_product_backlog","scrum.product.backlog","model_scrum_product_backlog","project.group_project_user",1,1,1,1
-"access_scrum_meeting","scrum.meeting","model_scrum_meeting","project.group_project_user",1,,,
+"access_scrum_meeting","scrum.meeting","model_scrum_meeting","project.group_project_user",1,0,0,0
"access_scrum_meeting_manager","scrum.meeting.manager","model_scrum_meeting","project.group_project_manager",1,1,1,1
"access_scrum_sprint_manager","scrum.sprint.manager","model_scrum_sprint","project.group_project_manager",1,1,1,1
"access_scrum_product_backlog_manager","scrum.product.backlog manager","model_scrum_product_backlog","project.group_project_manager",1,1,1,1
+"access_product_uom_project_manager","product.uom project manager","product.model_product_uom","project.group_project_manager",1,1,1,1
+"access_product_uom_project_user","product.uom project user","product.model_product_uom","project.group_project_user",1,0,0,0
diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py
index ec7ce1c6cee..32adb5e84d2 100644
--- a/addons/stock/__openerp__.py
+++ b/addons/stock/__openerp__.py
@@ -64,7 +64,6 @@ Thanks to the double entry management, the inventory controlling is powerful and
"partner_view.xml",
"report/report_stock_move_view.xml",
"report/report_stock_view.xml",
- "report/report_stock_picking_view.xml",
"security/stock_security.xml",
"security/ir.model.access.csv",
],
@@ -73,4 +72,3 @@ Thanks to the double entry management, the inventory controlling is powerful and
'active': False,
'certificate': '0055421559965',
}
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/i18n/pl.po b/addons/stock/i18n/pl.po
index a4406384e8e..117d90e683a 100644
--- a/addons/stock/i18n/pl.po
+++ b/addons/stock/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-05-21 08:22+0000\n"
+"PO-Revision-Date: 2010-06-13 15:17+0000\n"
"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
+"X-Launchpad-Export-Date: 2010-06-14 03:42+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
@@ -120,7 +120,7 @@ msgstr "Otrzymane produkty"
#: model:ir.actions.act_window,name:stock.action_picking_tree4
#: model:ir.ui.menu,name:stock.menu_action_picking_tree4
msgid "Incoming Products"
-msgstr "Przyjmowanie produktów"
+msgstr "Przyjęcia zewnętrzne"
#. module: stock
#: field:stock.picking,name:0
@@ -592,7 +592,7 @@ msgstr ""
#: model:ir.actions.act_window,name:stock.action_picking_form
#: model:ir.ui.menu,name:stock.menu_action_picking_form
msgid "New Reception Packing"
-msgstr "Nowy odbiór listy przesunięć"
+msgstr "Nowe przyjęcia zewnętrzne"
#. module: stock
#: wizard_field:stock.move.track,init,quantity:0
@@ -837,7 +837,7 @@ msgstr ""
#: model:ir.actions.act_window,name:stock.action_picking_tree9
#: model:ir.ui.menu,name:stock.menu_action_picking_tree9
msgid "New Internal Packing"
-msgstr "Nowa lista przesunięć wewnętrznych"
+msgstr "Nowe przesunięcie wewnętrzne"
#. module: stock
#: view:stock.inventory:0
@@ -1330,7 +1330,7 @@ msgstr "Cel przesunięcia"
#: model:ir.actions.act_window,name:stock.action_inventory_form_new
#: model:ir.ui.menu,name:stock.menu_action_inventory_form_new
msgid "New Periodical Inventory"
-msgstr "Nowa inentaryzacja okresowa"
+msgstr "Nowa inwentaryzacja okresowa"
#. module: stock
#: field:stock.production.lot,revisions:0
@@ -1346,7 +1346,7 @@ msgstr "FIFO"
#: model:ir.actions.act_window,name:stock.action_picking_tree2_delivery
#: model:ir.ui.menu,name:stock.menu_picking_waiting_delivery
msgid "Delivery Orders to Process"
-msgstr "Zamówienia dostawy do przetworzenia"
+msgstr "Wydania zewnętrzne do obsługi"
#. module: stock
#: field:stock.move,priority:0
@@ -1493,7 +1493,7 @@ msgstr ""
#: model:ir.actions.act_window,name:stock.action_picking_tree3_delivery
#: model:ir.ui.menu,name:stock.menu_action_picking_tree3_delivery
msgid "Future Delivery Orders"
-msgstr "Przyszłe zamówienia dostawy"
+msgstr "Przyszłe wydania zewnętrzne"
#. module: stock
#: selection:stock.location,icon:0
@@ -1990,7 +1990,7 @@ msgstr ""
#: model:ir.actions.act_window,name:stock.action_picking_tree_delivery
#: model:ir.ui.menu,name:stock.menu_action_picking_tree_delivery
msgid "Delivery Orders"
-msgstr "Zamówienia dostawy"
+msgstr "Wydania zewnętrzne"
#. module: stock
#: selection:stock.location,icon:0
@@ -2197,7 +2197,7 @@ msgstr "Czy chcesz ustawić zapasy na 0 ?"
#. module: stock
#: selection:stock.picking,move_type:0
msgid "Direct Delivery"
-msgstr "Dostawa bezpośrednia"
+msgstr "Dostawa częściowa"
#. module: stock
#: selection:stock.location,icon:0
@@ -2345,7 +2345,7 @@ msgstr ""
#. module: stock
#: selection:stock.picking,type:0
msgid "Delivery"
-msgstr "Dostawa"
+msgstr "Wydanie zewnętrzne"
#. module: stock
#: model:ir.actions.act_window,name:stock.action5
diff --git a/addons/stock/partner_view.xml b/addons/stock/partner_view.xml
index be2ed4bfc55..9ba4073e2e2 100644
--- a/addons/stock/partner_view.xml
+++ b/addons/stock/partner_view.xml
@@ -12,10 +12,10 @@
-
-
-
-
+
+
+
+
diff --git a/addons/stock/product.py b/addons/stock/product.py
index 16db5f4e1f2..9a19d3e84c3 100644
--- a/addons/stock/product.py
+++ b/addons/stock/product.py
@@ -24,8 +24,7 @@ from tools.translate import _
class product_product(osv.osv):
- _inherit = "product.product"
-
+ _inherit = "product.product"
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.
@@ -71,8 +70,8 @@ class product_product(osv.osv):
product_obj=self.browse(cr,uid,ids)[0]
account_variation = product_obj.categ_id.property_stock_variation
move_ids = []
+ loc_ids = location_obj.search(cr, uid,[('usage','=','internal')])
for rec_id in ids:
- loc_ids = location_obj.search(cr, uid,[('usage','=','internal')])
for location in location_obj.browse(cr, uid, loc_ids):
c = context.copy()
c.update({
@@ -202,6 +201,8 @@ class product_product(osv.osv):
if context.get('location', False):
if type(context['location']) == type(1):
location_ids = [context['location']]
+ elif type(context['location']) in (type(''), type(u'')):
+ location_ids = self.pool.get('stock.location').search(cr, uid, [('name','ilike',context['location'])], context=context)
else:
location_ids = context['location']
else:
@@ -312,7 +313,7 @@ class product_product(osv.osv):
'track_production': fields.boolean('Track Production Lots' , help="Forces to use a Production Lot during production order"),
'track_incoming': fields.boolean('Track Incoming Lots', help="Forces to use a tracking lot during receptions"),
'track_outgoing': fields.boolean('Track Outgoing Lots', help="Forces to use a tracking lot during deliveries"),
- 'location_id': fields.dummy(string='Location', relation='stock.location', type='many2one', domain=[('usage','=','internal')]),
+ 'location_id': fields.dummy(string='Location', relation='stock.location', type='many2one'),
'valuation':fields.selection([('manual_periodic', 'Periodic (manual)'),
('real_time','Real Time (automatized)'),], 'Stock Valuation', help="Decide if the system must automatically creates account moves based on stock moves", required=True),
}
diff --git a/addons/stock/product_view.xml b/addons/stock/product_view.xml
index 4f6ede6c460..36ba20b3b05 100644
--- a/addons/stock/product_view.xml
+++ b/addons/stock/product_view.xml
@@ -8,8 +8,8 @@
search
-
-
+
+
@@ -43,9 +43,9 @@
-
-
-
+
+
+
@@ -115,9 +115,9 @@
-
-
-
+
+
+
diff --git a/addons/stock/report/__init__.py b/addons/stock/report/__init__.py
index a0a4bcb8ea5..381644fcd32 100644
--- a/addons/stock/report/__init__.py
+++ b/addons/stock/report/__init__.py
@@ -19,7 +19,6 @@
#
##############################################################################
-#import lot_overview
import product_stock
import lot_location
import ups
@@ -28,7 +27,4 @@ import lot_overview
import lot_overview_all
import report_stock
import report_stock_move
-import report_stock_picking
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/report/report_stock_move.py b/addons/stock/report/report_stock_move.py
index 8d905a4c4d7..c26f0c13006 100755
--- a/addons/stock/report/report_stock_move.py
+++ b/addons/stock/report/report_stock_move.py
@@ -34,19 +34,20 @@ class report_stock_move(osv.osv):
'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),
- 'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
+ 'partner_id':fields.many2one('res.partner.address', 'Partner', readonly=True),
'product_id':fields.many2one('product.product', 'Product', readonly=True),
+ 'company_id':fields.many2one('res.company', 'Company', readonly=True),
+ 'picking_id':fields.many2one('stock.picking', 'Packing', readonly=True),
+ 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True, select=True, help="Shipping type specify, goods coming in or going out."),
'location_id': fields.many2one('stock.location', 'Source Location', readonly=True, select=True, help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
'location_dest_id': fields.many2one('stock.location', 'Dest. Location', readonly=True, select=True, help="Location where the system will stock the finished products."),
+ 'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True),
'product_qty':fields.integer('Qty',readonly=True),
'value' : fields.float('Total Value', required=True),
- 'product_uom': fields.many2one('product.uom', 'Product UOM', readonly=True),
- 'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True,
- help='When the stock move is created it is in the \'Draft\' state.\n After that it is set to \'Confirmed\' state.\n If stock is available state is set to \'Avaiable\'.\n When the picking it done the state is \'Done\'.\
- \nThe state is \'Waiting\' if the move is waiting for another one.'),
- 'day_diff':fields.integer('Expected Performance',readonly=True),
+ 'day_diff2':fields.float('Delay (Days)',readonly=True, digits=(16,2), group_operator="avg"),
+ 'day_diff1':fields.float('Planned (Days)',readonly=True, digits=(16,2), group_operator="avg"),
+ 'day_diff':fields.float('Real (Days)',readonly=True, digits=(16,2), group_operator="avg"),
}
-
def init(self, cr):
tools.drop_view_if_exists(cr, 'report_stock_move')
cr.execute("""
@@ -56,8 +57,13 @@ class report_stock_move(osv.osv):
to_char(date_trunc('day',m.date_planned), 'YYYY') as year,
to_char(date_trunc('day',m.date_planned), 'MM') as month,
to_char(date_trunc('day',m.date_planned), 'YYYY-MM-DD') as day,
- (date(m.date_planned)-date(m.date_expected)) as day_diff,
+ avg(date(m.date_planned)-date(m.create_date)) as day_diff,
+ avg(date(m.date_expected)-date(m.create_date)) as day_diff1,
+ avg(date(m.date_planned)-date(m.date_expected)) as day_diff2,
m.address_id as partner_id,
+ m.picking_id as picking_id,
+ m.company_id as company_id,
+ p.type as type,
m.location_id as location_id,
m.location_dest_id as location_dest_id,
m.product_id as product_id,
@@ -65,11 +71,83 @@ class report_stock_move(osv.osv):
m.product_uom as product_uom,
sum(m.product_qty) as product_qty,
pt.standard_price * sum(m.product_qty) as value
- from stock_move m ,product_product pp,product_template pt
- where
- m.product_id=pp.id and pp.product_tmpl_id=pt.id
+ from
+ stock_move m
+ left join stock_picking p on (m.picking_id=p.id)
+ left join product_product pp on (m.product_id=pp.id)
+ left join product_template pt on (pp.product_tmpl_id=pt.id)
group by
m.id, m.product_id,m.address_id, m.location_id, m.location_dest_id,
- m.date_planned, m.state, m.product_uom,pt.standard_price,m.date_expected )
+ m.date_planned, m.state, m.product_uom,pt.standard_price,
+ m.picking_id, p.type, m.company_id
+ )
""")
report_stock_move()
+
+
+class report_stock_inventory(osv.osv):
+ _name = "report.stock.inventory"
+ _description = "Stock Statistics"
+ _auto = False
+ _columns = {
+ 'date_planned': fields.datetime('Date', readonly=True),
+ 'partner_id':fields.many2one('res.partner.address', 'Partner', readonly=True),
+ 'product_id':fields.many2one('product.product', 'Product', readonly=True),
+ 'location_id': fields.many2one('stock.location', 'Location', readonly=True),
+ 'prodlot_id': fields.many2one('stock.production.lot', 'Lot', readonly=True),
+ 'company_id': fields.many2one('res.company', 'Company', readonly=True),
+ 'product_qty':fields.float('Qty', digits=(16,2), readonly=True),
+ 'value' : fields.float('Total Value', digits=(16,2), required=True),
+ 'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True,
+ help='When the stock move is created it is in the \'Draft\' state.\n After that it is set to \'Confirmed\' state.\n If stock is available state is set to \'Avaiable\'.\n When the picking it done the state is \'Done\'.\
+ \nThe state is \'Waiting\' if the move is waiting for another one.'),
+ 'location_type': fields.selection([('supplier', 'Supplier Location'), ('view', 'View'), ('internal', 'Internal Location'), ('customer', 'Customer Location'), ('inventory', 'Inventory'), ('procurement', 'Procurement'), ('production', 'Production'), ('transit', 'Transit Location for Inter-Companies Transfers')], 'Location Type', required=True),
+ }
+ def init(self, cr):
+ tools.drop_view_if_exists(cr, 'report_stock_inventory')
+ cr.execute("""
+create or replace view report_stock_inventory as (
+ (select
+ min(m.id) as id, m.date_planned as date_planned,
+ m.address_id as partner_id, m.location_id as location_id,
+ m.product_id as product_id, l.usage as location_type,
+ m.company_id,
+ m.state as state, m.prodlot_id as prodlot_id,
+ sum(-m.product_qty*u.factor)::decimal(16,2) as product_qty,
+ sum(-pt.standard_price * m.product_qty * u.factor)::decimal(16,2) as value
+ from
+ stock_move m
+ left join stock_picking p on (m.picking_id=p.id)
+ left join product_product pp on (m.product_id=pp.id)
+ left join product_template pt on (pp.product_tmpl_id=pt.id)
+ left join product_uom u on (m.product_uom=u.id)
+ left join stock_location l on (m.location_id=l.id)
+ group by
+ m.id, m.product_id, m.address_id, m.location_id, m.prodlot_id,
+ m.date_planned, m.state, l.usage, m.company_id
+) union all (
+ select
+ -m.id as id, m.date_planned as date_planned,
+ m.address_id as partner_id, m.location_dest_id as location_id,
+ m.product_id as product_id, l.usage as location_type,
+ m.company_id,
+ m.state as state, m.prodlot_id as prodlot_id,
+ sum(m.product_qty*u.factor)::decimal(16,2) as product_qty,
+ sum(pt.standard_price * m.product_qty * u.factor)::decimal(16,2) as value
+ from
+ stock_move m
+ left join stock_picking p on (m.picking_id=p.id)
+ left join product_product pp on (m.product_id=pp.id)
+ left join product_template pt on (pp.product_tmpl_id=pt.id)
+ left join product_uom u on (m.product_uom=u.id)
+ left join stock_location l on (m.location_dest_id=l.id)
+ group by
+ m.id, m.product_id, m.address_id, m.location_id, m.location_dest_id,
+ m.prodlot_id, m.date_planned, m.state, l.usage, m.company_id
+ )
+);
+ """)
+report_stock_inventory()
+
+
+
diff --git a/addons/stock/report/report_stock_move_view.xml b/addons/stock/report/report_stock_move_view.xml
index 458fc250091..5adc3407b0f 100755
--- a/addons/stock/report/report_stock_move_view.xml
+++ b/addons/stock/report/report_stock_move_view.xml
@@ -1,25 +1,35 @@
+
+
+
report.stock.move.tree
report.stock.move
tree
-
-
-
+
+
-
+
+
+
+
-
-
+
+
-
+
+
+
@@ -29,9 +39,9 @@
report.stock.move
graph
-
+
-
+
@@ -41,50 +51,50 @@
report.stock.move
search
-
+
-
-
-
-
-
+ name="done"
+ icon="terp-dialog-close"
+ domain="[('state','=','done')]"
+ help = "Completed Stock-Moves"/>
+
-
-
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
+
+
+
+
@@ -92,9 +102,9 @@
-
-
-
+
+
+
@@ -102,20 +112,110 @@
- Stock Moves
+ Moves Analysis
report.stock.move
form
tree,graph
-
- {'search_default_product':1, 'search_default_src_location':1,'search_default_done':1,'group_by':[], 'group_by_no_leaf':1}
+
+ {'contact_display': 'partner', 'search_default_month':1, 'search_default_group_product':1,'search_default_done':1,'group_by':[], 'group_by_no_leaf':1}
+
+
+
+
+
+
+ report.stock.inventory.tree
+ report.stock.inventory
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+ report.stock.inventory.graph
+ report.stock.inventory
+ graph
+
+
+
+
+
+
+
+
+
+ report.stock.inventory.search
+ report.stock.inventory
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inventory Analysis
+ report.stock.inventory
+ form
+ tree,graph
+
+ {'contact_display': 'partner', 'search_default_real':1, 'search_default_location_type_internal':1,'search_default_group_product':1,'search_default_group_location':1,'group_by':[], 'group_by_no_leaf':1}
+
+
-
diff --git a/addons/stock/report/report_stock_picking.py b/addons/stock/report/report_stock_picking.py
deleted file mode 100644
index b6e2a3d3373..00000000000
--- a/addons/stock/report/report_stock_picking.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# -*- 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
-import tools
-
-class report_stock_picking(osv.osv):
- _name = "report.stock.picking"
- _description = "Stock Picking Report"
- _auto = False
- _columns = {
- 'year': fields.char('Year',size=64,required=False, readonly=True),
- '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),
- 'day': fields.char('Day', size=128, readonly=True),
- 'nbr': fields.integer('# of Lines', readonly=True),
- 'nbp': fields.integer('# of Picking', readonly=True),
- 'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
- 'product_qty': fields.float('# of Products', readonly=True),
- 'product_uos_qty': fields.float('# of Products', readonly=True),
- 'product_id': fields.many2one('product.product', 'Product', readonly=True),
- 'date': fields.date('Date', readonly=True),
- 'avg_days_to_deliver': fields.float('Avg Days to Deliver', digits=(16,2), readonly=True, group_operator="avg",
- help="Number of Avg Days to deliver"),
- 'state': fields.selection([('draft', 'Draft'),('auto', 'Waiting'),('confirmed', 'Confirmed'),('assigned', 'Available'),('done', 'Done'),('cancel', 'Cancelled')], 'State'),
- 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True),
- 'company_id': fields.many2one('res.company', 'Company', readonly=True),
- 'invoice_state': fields.selection([
- ("invoiced", "Invoiced"),
- ("2binvoiced", "To Be Invoiced"),
- ("none", "Not from Picking")], "Invoice Status",readonly=True),
- 'min_date': fields.date('Expected Date',help="Expected date for Picking. Default it takes current date"),
- 'order_date': fields.date('Order Date', help="Date of Order"),
- 'date_done': fields.date('Date Done', help="Date of completion"),
- 'location_id': fields.many2one('stock.location', 'Source Location', help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
- 'location_dest_id': fields.many2one('stock.location', 'Dest. Location', help="Location where the system will stock the finished products."),
- 'max_date': fields.date('Max.Expected Date'),
- 'product_uos': fields.many2one('product.uom', 'Product UOS'),
- 'product_uom': fields.many2one('product.uom', 'Product UOM'),
- }
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'report_stock_picking')
- cr.execute("""
- create or replace view report_stock_picking as (
- select
- min(sm.id) as id,
- date_trunc('day',sp.min_date) as min_date,
- date_trunc('day',sp.date) as order_date,
- date_trunc('day',sp.date_done) as date_done,
- date_trunc('day',sp.max_date) as max_date,
- to_char(sp.create_date, 'YYYY') as year,
- to_char(sp.create_date, 'MM') as month,
- to_char(sp.create_date, 'YYYY-MM-DD') as day,
- sp.address_id as partner_id,
- to_date(to_char(sp.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY') as date,
- count(sm.id) as nbr,
- count(distinct sp.id) as nbp,
- sum(sm.product_qty) as product_qty,
- sum(sm.product_uos_qty) as product_uos_qty,
- sm.product_id as product_id,
- sm.location_dest_id as location_dest_id,
- sm.location_id as location_id,
- sp.type,
- sm.product_uos,
- sm.product_uom,
- sp.invoice_state,
- sp.company_id as company_id,
- avg(extract('epoch' from (sp.date_done-sp.create_date)))/(3600*24) as avg_days_to_deliver,
- sp.state
- from stock_move as sm
- left join stock_picking as sp ON (sm.picking_id=sp.id)
- group by sp.type,
- sp.create_date,
- sp.address_id,
- sm.product_id,
- to_char(sp.create_date, 'YYYY'),
- sm.location_dest_id,
- sm.location_id,
- to_char(sp.create_date, 'MM'),
- to_char(sp.create_date, 'YYYY-MM-DD'),
- sm.product_uos,
- sm.product_uom,
- date_trunc('day',sp.min_date),
- date_trunc('day',sp.date),
- date_trunc('day',sp.date_done),
- date_trunc('day',sp.max_date),
- sp.invoice_state,
- sp.company_id,
- sp.state
-
- )""")
-report_stock_picking()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/report/report_stock_picking_view.xml b/addons/stock/report/report_stock_picking_view.xml
deleted file mode 100644
index a14298ff771..00000000000
--- a/addons/stock/report/report_stock_picking_view.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
-
-
- report.stock.picking.tree
- report.stock.picking
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- report.stock.picking.graph
- report.stock.picking
- graph
-
-
-
-
-
-
-
-
-
-
-
- report.stock.picking.select
- report.stock.picking
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Picking
- report.stock.picking
- form
- tree,graph
-
-
- {'search_default_Partner':1,'search_default_month':1,'group_by_no_leaf':1,'group_by':[]}
-
-
-
-
- tree
-
-
-
-
-
-
- graph
-
-
-
-
-
-
-
-
-
diff --git a/addons/stock/report/report_stock_view.xml b/addons/stock/report/report_stock_view.xml
index 34121d0c9ed..5732513e07a 100644
--- a/addons/stock/report/report_stock_view.xml
+++ b/addons/stock/report/report_stock_view.xml
@@ -2,104 +2,6 @@
-
- stock.report.prodlots.filter
- stock.report.prodlots
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- stock.report.prodlots.view
- stock.report.prodlots
- form
-
-
-
-
-
-
-
-
-
-
-
- stock.report.prodlots.view
- stock.report.prodlots
- tree
-
-
-
-
-
-
-
-
-
-
-
- stock.report.prodlots.view
- stock.report.prodlots
- graph
-
-
-
-
-
-
-
-
-
-
- Inventory by Location
- ir.actions.act_window
- stock.report.prodlots
- form
- tree,form
- {'full':'1','search_default_internal_locations':1}
-
-
-
- stock.report.tracklots.view
- stock.report.tracklots
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/stock/security/ir.model.access.csv b/addons/stock/security/ir.model.access.csv
index ca36c8460a7..4358e8ec9ab 100644
--- a/addons/stock/security/ir.model.access.csv
+++ b/addons/stock/security/ir.model.access.csv
@@ -1,5 +1,6 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_stock_incoterms_all","stock.incoterms all","model_stock_incoterms",,1,0,0,0
+"access_stock_incoterms_manager","stock.incoterms manager","model_stock_incoterms",stock.group_stock_manager,1,1,1,1
"access_stock_warehouse_manager","stock.warehouse.manager","model_stock_warehouse","stock.group_stock_manager",1,1,1,1
"access_stock_warehouse_user","stock.warehouse.user","model_stock_warehouse","base.group_user",1,0,0,0
"access_stock_location_manager","stock.location.manager","model_stock_location","stock.group_stock_manager",1,1,1,1
@@ -14,35 +15,27 @@
"access_stock_inventory_line","stock.inventory.line","model_stock_inventory_line","stock.group_stock_user",1,1,1,1
"access_stock_report_prodlots","stock.report.prodlots","model_stock_report_prodlots","stock.group_stock_manager",1,0,0,0
"access_stock_location_product_manager","stock.location product manager","model_stock_location","product.group_product_manager",1,0,0,0
-"access_stock_lines_date","report.stock.lines.date all","model_report_stock_lines_date",,1,0,0,0
+"access_stock_lines_date","report.stock.lines.date all","model_report_stock_lines_date",stock.group_stock_user,1,0,0,0
"access_stock_report_tracklots","stock.report.tracklots","model_stock_report_tracklots","stock.group_stock_user",1,1,1,1
-"access_report_products_to_received_planned","report.products.to.received.planned","model_report_products_to_received_planned","stock.group_stock_user",1,0,0,0
-"access_report_delivery_products_planned","report.delivery.products.planned","model_report_delivery_products_planned","stock.group_stock_user",1,0,0,0
-"access_stock_move_track","stock.move.track","model_stock_move_track","stock.group_stock_user",1,0,0,0
-"access_stock_move_consume","stock.move.consume","model_stock_move_consume","stock.group_stock_user",1,0,0,0
-"access_stock_move_scrap","stock.move.scrap","model_stock_move_scrap","stock.group_stock_user",1,0,0,0
-"access_stock_move_split","stock.move.split","model_stock_move_split","stock.group_stock_user",1,0,0,0
-"access_stock_move_split_lines","stock.move.split.lines","model_stock_move_split_lines","stock.group_stock_user",1,0,0,0
-"access_report_products_to_received_planned","report.products.to.received.planned","model_report_products_to_received_planned","stock.group_stock_user",1,0,0,0
-"access_report_delivery_products_planned","report.delivery.products.planned","model_report_delivery_products_planned","stock.group_stock_user",1,0,0,0
-"access_stock_move_track","stock.move.track","model_stock_move_track","stock.group_stock_user",1,0,0,0
-"access_stock_move_consume","stock.move.consume","model_stock_move_consume","stock.group_stock_user",1,0,0,0
-"access_stock_move_scrap","stock.move.scrap","model_stock_move_scrap","stock.group_stock_user",1,0,0,0
-"access_stock_move_split","stock.move.split","model_stock_move_split","stock.group_stock_user",1,0,0,0
-"access_stock_move_split_lines","stock.move.split.lines","model_stock_move_split_lines","stock.group_stock_user",1,0,0,0
-"access_stock_inventory_set_stock_zero","stock.inventory.set.stock.zero","model_stock_inventory_set_stock_zero","stock.group_stock_user",1,0,0,0
-"access_stock_fill_inventory","stock.fill.inventory","model_stock_fill_inventory","stock.group_stock_user",1,0,0,0
-"access_stock_inventory_line_split","stock.inventory.line.split","model_stock_inventory_line_split","stock.group_stock_user",1,0,0,0
-"access_stock_invoice_onshipping","stock.invoice.onshipping","model_stock_invoice_onshipping","stock.group_stock_user",1,0,0,0
+"access_report_products_to_received_planned","report.products.to.received.planned","model_report_products_to_received_planned","stock.group_stock_user",1,1,1,1
+"access_report_delivery_products_planned","report.delivery.products.planned","model_report_delivery_products_planned","stock.group_stock_user",1,1,1,1
+"access_stock_move_track","stock.move.track","model_stock_move_track","stock.group_stock_user",1,1,1,1
+"access_stock_move_consume","stock.move.consume","model_stock_move_consume","stock.group_stock_user",1,1,1,1
+"access_stock_move_scrap","stock.move.scrap","model_stock_move_scrap","stock.group_stock_user",1,1,1,1
+"access_stock_move_split","stock.move.split","model_stock_move_split","stock.group_stock_user",1,1,1,1
+"access_stock_move_split_lines","stock.move.split.lines","model_stock_move_split_lines","stock.group_stock_user",1,1,1,1
+"access_stock_inventory_set_stock_zero","stock.inventory.set.stock.zero","model_stock_inventory_set_stock_zero","stock.group_stock_user",1,1,1,1
+"access_stock_fill_inventory","stock.fill.inventory","model_stock_fill_inventory","stock.group_stock_user",1,1,1,1
+"access_stock_inventory_line_split","stock.inventory.line.split","model_stock_inventory_line_split","stock.group_stock_user",1,1,1,1
+"access_stock_invoice_onshipping","stock.invoice.onshipping","model_stock_invoice_onshipping","stock.group_stock_user",1,1,1,1
"access_stock_location_product","stock.location.product","model_stock_location_product","stock.group_stock_user",1,0,0,0
"access_report_stock_picking","report.stock.picking","model_report_stock_picking","stock.group_stock_user",1,0,0,0
-"access_stock_delivery","stock.delivery","model_stock_delivery","stock.group_stock_user",1,0,0,0
"access_stock_traceability_upstream","stock.traceability.upstream","model_stock_traceability_upstream","stock.group_stock_user",1,0,0,0
"access_stock_traceability_downstream","stock.traceability.downstream","model_stock_traceability_downstream","stock.group_stock_user",1,0,0,0
"access_stock_traceability_lot_upstream","stock.traceability.lot.upstream","model_stock_traceability_lot_upstream","stock.group_stock_user",1,0,0,0
"access_stock_traceability_lot_downstream","stock.traceability.lot.downstream","model_stock_traceability_lot_downstream","stock.group_stock_user",1,0,0,0
-"access_stock_partial_picking",stock.partial.picking","model_stock_partial_picking","stock.group_stock_user",1,0,0,0
-"access_stock_partial_move","stock.partial.move","model_stock_partial_move","stock.group_stock_user",1,0,0,0
+"access_stock_partial_picking",stock.partial.picking","model_stock_partial_picking",,1,1,1,1
+"access_stock_partial_move","stock.partial.move","model_stock_partial_move",,1,1,1,1
"access_stock_inventory_merge","stock.inventory.merge","model_stock_inventory_merge","stock.group_stock_user",1,0,0,0
"access_stock_change_standard_price","stock.change.standard.price","model_stock_change_standard_price","stock.group_stock_user",1,0,0,0
"access_action_traceability","action.traceability","model_action_traceability","stock.group_stock_user",1,0,0,0
diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml
index 4dad60a3c97..099e32a889b 100644
--- a/addons/stock/security/stock_security.xml
+++ b/addons/stock/security/stock_security.xml
@@ -3,10 +3,10 @@
- Stock / Manager
+ Inventory / Manager
- Stock / Worker
+ Inventory / Worker
@@ -716,7 +713,7 @@
-
+
@@ -822,9 +819,6 @@
-
-
-
@@ -907,7 +901,7 @@
calendar
-
+
#
# Sending Products
@@ -921,10 +915,10 @@
-
+
@@ -1005,9 +999,6 @@
-
-
-
@@ -1044,14 +1035,15 @@
-
-
+
+
+
+
-
-
-
+
+
@@ -1184,10 +1176,7 @@
-
-
-
-
+
@@ -1307,7 +1296,7 @@
{'contact_display': 'partner',"search_default_confirmed":1}
-
+
stock.move.tree
@@ -1320,7 +1309,15 @@
+
+
@@ -1347,7 +1344,8 @@
-
+
+
@@ -1377,9 +1375,6 @@
-
-
-
@@ -1454,15 +1449,21 @@
-
-
+
+
+
+
-
-
@@ -1482,7 +1483,8 @@
-
+
+
@@ -1513,9 +1515,6 @@
-
@@ -1529,37 +1528,38 @@
-
-
-
+
+
+
+
+
+
-
+
-
-
-
-
+
+
+
-
-
+
- Incoming Packings
+ Incoming Products
stock.move
ir.actions.act_window
form
tree,form
- [('picking_id','!=',False),('picking_id.type','=','in')]
+ [('picking_id.type','=','in')]
{"search_default_receive":1}
@@ -1738,7 +1738,7 @@
- Outcoming Shipments
+ Customers Packings
stock.picking
ir.actions.act_window
form
@@ -1766,7 +1766,7 @@
- Outcoming Packings
+ Outgoing Products
stock.move
ir.actions.act_window
form
diff --git a/addons/stock/wizard/stock_move.py b/addons/stock/wizard/stock_move.py
index bce550e74ff..0e670ee3e5d 100644
--- a/addons/stock/wizard/stock_move.py
+++ b/addons/stock/wizard/stock_move.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
@@ -25,25 +25,25 @@ from tools.translate import _
class stock_move_track(osv.osv_memory):
_name = "stock.move.track"
_description = "Track moves"
-
+
_columns = {
- 'tracking_prefix': fields.char('Tracking prefix', size=64),
+ 'tracking_prefix': fields.char('Tracking prefix', size=64),
'quantity': fields.float("Quantity per lot")
}
_defaults = {
'quantity': lambda *x: 1
}
-
+
def track_lines(self, cr, uid, ids, context={}):
""" To track stock moves lines
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param ids: An ID or list of IDs if we want more than one
- @param context: A standard dictionary
- @return:
- """
+ @param ids: An ID or list of IDs if we want more than one
+ @param context: A standard dictionary
+ @return:
+ """
datas = self.read(cr, uid, ids)[0]
move_obj = self.pool.get('stock.move')
move_obj._track_lines(cr, uid, context['active_id'], datas, context=context)
@@ -54,11 +54,11 @@ stock_move_track()
class stock_move_consume(osv.osv_memory):
_name = "stock.move.consume"
_description = "Consume Products"
-
+
_columns = {
- 'product_id': fields.many2one('product.product', 'Product', required=True, select=True),
- 'product_qty': fields.float('Quantity', required=True),
- 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True),
+ 'product_id': fields.many2one('product.product', 'Product', required=True, select=True),
+ 'product_qty': fields.float('Quantity', required=True),
+ 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True),
'location_id': fields.many2one('stock.location', 'Location', required=True)
}
@@ -67,37 +67,37 @@ class stock_move_consume(osv.osv_memory):
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param fields: List of fields for default value
- @param context: A standard dictionary
+ @param fields: List of fields for default value
+ @param context: A standard dictionary
@return: default values of fields
"""
- res = super(stock_move_consume, self).default_get(cr, uid, fields, context=context)
+ res = super(stock_move_consume, self).default_get(cr, uid, fields, context=context)
move = self.pool.get('stock.move').browse(cr, uid, context['active_id'], context=context)
if 'product_id' in fields:
- res.update({'product_id': move.product_id.id})
+ res.update({'product_id': move.product_id.id})
if 'product_uom' in fields:
- res.update({'product_uom': move.product_uom.id})
+ res.update({'product_uom': move.product_uom.id})
if 'product_qty' in fields:
res.update({'product_qty': move.product_qty})
if 'location_id' in fields:
res.update({'location_id': move.location_id.id})
-
- return res
-
+
+ return res
+
def do_move_consume(self, cr, uid, ids, context={}):
""" To move consumed products
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param ids: the ID or list of IDs if we want more than one
- @param context: A standard dictionary
- @return:
- """
+ @param ids: the ID or list of IDs if we want more than one
+ @param context: A standard dictionary
+ @return:
+ """
move_obj = self.pool.get('stock.move')
move_ids = context['active_ids']
- for data in self.read(cr, uid, ids):
- move_obj.action_consume(cr, uid, move_ids,
- data['product_qty'], data['location_id'],
+ for data in self.read(cr, uid, ids):
+ move_obj.action_consume(cr, uid, move_ids,
+ data['product_qty'], data['location_id'],
context=context)
return {}
@@ -108,7 +108,7 @@ class stock_move_scrap(osv.osv_memory):
_name = "stock.move.scrap"
_description = "Scrap Products"
_inherit = "stock.move.consume"
-
+
_defaults = {
'location_id': lambda *x: False
}
@@ -118,19 +118,19 @@ class stock_move_scrap(osv.osv_memory):
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param fields: List of fields for default value
- @param context: A standard dictionary
+ @param fields: List of fields for default value
+ @param context: A standard dictionary
@return: default values of fields
"""
- res = super(stock_move_consume, self).default_get(cr, uid, fields, context=context)
+ res = super(stock_move_consume, self).default_get(cr, uid, fields, context=context)
move = self.pool.get('stock.move').browse(cr, uid, context['active_id'], context=context)
location_obj = self.pool.get('stock.location')
scrpaed_location_ids = location_obj.search(cr, uid, [('scrap_location','=',True)])
-
+
if 'product_id' in fields:
- res.update({'product_id': move.product_id.id})
+ res.update({'product_id': move.product_id.id})
if 'product_uom' in fields:
- res.update({'product_uom': move.product_uom.id})
+ res.update({'product_uom': move.product_uom.id})
if 'product_qty' in fields:
res.update({'product_qty': move.product_qty})
if 'location_id' in fields:
@@ -138,23 +138,23 @@ class stock_move_scrap(osv.osv_memory):
res.update({'location_id': scrpaed_location_ids[0]})
else:
res.update({'location_id': False})
-
+
return res
-
+
def move_scrap(self, cr, uid, ids, context={}):
""" To move scraped products
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param ids: the ID or list of IDs if we want more than one
- @param context: A standard dictionary
- @return:
- """
- move_obj = self.pool.get('stock.move')
+ @param ids: the ID or list of IDs if we want more than one
+ @param context: A standard dictionary
+ @return:
+ """
+ move_obj = self.pool.get('stock.move')
move_ids = context['active_ids']
for data in self.read(cr, uid, ids):
- move_obj.action_scrap(cr, uid, move_ids,
- data['product_qty'], data['location_id'],
+ move_obj.action_scrap(cr, uid, move_ids,
+ data['product_qty'], data['location_id'],
context=context)
return {}
@@ -164,42 +164,42 @@ stock_move_scrap()
class split_in_production_lot(osv.osv_memory):
_name = "stock.move.split"
_description = "Split in Production lots"
-
+
def default_get(self, cr, uid, fields, context=None):
""" Get default values
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param fields: List of fields for default value
- @param context: A standard dictionary
+ @param fields: List of fields for default value
+ @param context: A standard dictionary
@return: Default values of fields
"""
-
- res = super(split_in_production_lot, self).default_get(cr, uid, fields, context=context)
- move = self.pool.get('stock.move').browse(cr, uid, context['active_id'], context=context)
+
+ res = super(split_in_production_lot, self).default_get(cr, uid, fields, context=context)
+ move = self.pool.get('stock.move').browse(cr, uid, context['active_id'], context=context)
if 'product_id' in fields:
- res.update({'product_id': move.product_id.id})
+ res.update({'product_id': move.product_id.id})
if 'qty' in fields:
- res.update({'qty': move.product_qty})
+ res.update({'qty': move.product_qty})
return res
-
+
_columns = {
- 'qty': fields.integer('Quantity'),
+ 'qty': fields.integer('Quantity'),
'product_id': fields.many2one('product.product', 'Product', required=True, select=True),
'line_ids': fields.one2many('stock.move.split.lines', 'lot_id', 'Lots Number'),
'line_exist_ids': fields.one2many('stock.move.split.lines.exist', 'lot_id', 'Lots Existing Numbers'),
'use_exist' : fields.boolean('Use Exist'),
}
-
+
def split_lot(self, cr, uid, ids, context=None):
""" To split a lot
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param ids: An ID or list of IDs if we want more than one
- @param context: A standard dictionary
- @return:
- """
+ @param ids: An ID or list of IDs if we want more than one
+ @param context: A standard dictionary
+ @return:
+ """
self.split(cr, uid, ids, context.get('active_ids'), context=context)
return {}
@@ -208,21 +208,21 @@ class split_in_production_lot(osv.osv_memory):
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param ids: the ID or list of IDs if we want more than one
+ @param ids: the ID or list of IDs if we want more than one
@param move_ids: the ID or list of IDs of stock move we want to split
- @param context: A standard dictionary
- @return:
- """
+ @param context: A standard dictionary
+ @return:
+ """
prodlot_obj = self.pool.get('stock.production.lot')
ir_sequence_obj = self.pool.get('ir.sequence')
move_obj = self.pool.get('stock.move')
- new_move = []
+ new_move = []
for data in self.browse(cr, uid, ids):
for move in move_obj.browse(cr, uid, move_ids):
move_qty = move.product_qty
quantity_rest = move.product_qty
uos_qty_rest = move.product_uos_qty
- new_move = []
+ new_move = []
if data.use_exist:
lines = [l for l in data.line_exist_ids if l]
else:
@@ -238,12 +238,17 @@ class split_in_production_lot(osv.osv_memory):
quantity_rest = quantity
break
default_val = {
- 'product_qty': quantity,
- 'product_uos_qty': uos_qty,
- 'state': move.state
+ 'product_qty': quantity,
+ 'product_uos_qty': uos_qty,
+ 'state': 'draft'
}
if quantity_rest > 0:
current_move = move_obj.copy(cr, uid, move.id, default_val)
+ move_obj.action_confirm(cr, uid, [current_move])
+ if move.state=='assigned':
+ move_obj.force_assign(cr, uid, [current_move])
+ elif move.state<>'confirmed':
+ move_obj.write(cr, uid, [current_move], {'state': move.state})
new_move.append(current_move)
if quantity_rest == 0:
current_move = move.id
@@ -255,19 +260,19 @@ class split_in_production_lot(osv.osv_memory):
if not prodlot_id:
# sequence = ir_sequence_obj.get(cr, uid, 'stock.lot.serial')
prodlot_id = prodlot_obj.create(cr, uid, {'name': line.name},
- # 'prefix' : line.name},
- {'product_id': move.product_id.id})
+ # 'prefix' : line.name},
+ {'product_id': move.product_id.id})
move_obj.write(cr, uid, [current_move], {'prodlot_id': prodlot_id})
- prodlot = prodlot_obj.browse(cr, uid, prodlot_id)
+ prodlot = prodlot_obj.browse(cr, uid, prodlot_id)
# ref = '%d' % (move.id)
# if prodlot.ref:
- # ref = '%s, %s' % (prodlot.ref, ref)
+ # ref = '%s, %s' % (prodlot.ref, ref)
# prodlot_obj.write(cr, uid, [prodlot_id], {'ref': ref})
-
+
update_val = {}
- if quantity_rest > 0:
+ if quantity_rest > 0:
update_val['product_qty'] = quantity_rest
- update_val['product_uos_qty'] = uos_qty_rest
+ update_val['product_uos_qty'] = uos_qty_rest
move_obj.write(cr, uid, [move.id], update_val)
return new_move
split_in_production_lot()
@@ -276,8 +281,8 @@ class stock_move_split_lines_exist(osv.osv_memory):
_name = "stock.move.split.lines.exist"
_description = "Exist Split lines"
_columns = {
- 'name': fields.char('Tracking serial', size=64),
- 'quantity': fields.integer('Quantity'),
+ 'name': fields.char('Tracking serial', size=64),
+ 'quantity': fields.integer('Quantity'),
'lot_id': fields.many2one('stock.move.split', 'Lot'),
'prodlot_id': fields.many2one('stock.production.lot', 'Production Lot'),
}
@@ -291,16 +296,14 @@ class stock_move_split_lines(osv.osv_memory):
_name = "stock.move.split.lines"
_description = "Split lines"
_columns = {
- 'name': fields.char('Tracking serial', size=64),
- 'quantity': fields.integer('Quantity'),
+ 'name': fields.char('Tracking serial', size=64),
+ 'quantity': fields.integer('Quantity'),
'use_exist' : fields.boolean('Use Exist'),
'lot_id': fields.many2one('stock.move.split', 'Lot'),
'action': fields.selection([('split','Split'),('keepinone','Keep in one lot')],'Action'),
}
-
_defaults = {
'quantity': lambda *x: 1,
- 'action' : lambda *x: 'split',
+ 'action' : lambda *x: 'split',
}
-
stock_move_split_lines()
diff --git a/addons/stock/wizard/stock_partial_move.py b/addons/stock/wizard/stock_partial_move.py
index 0f538748a98..b8efdc4ed77 100644
--- a/addons/stock/wizard/stock_partial_move.py
+++ b/addons/stock/wizard/stock_partial_move.py
@@ -27,21 +27,19 @@ import pooler
import time
class stock_partial_move(osv.osv_memory):
- _name = "stock.partial.move"
- _description = "Partial Move"
+ _name = "stock.partial.move"
+ _description = "Partial Move"
_columns = {
'date': fields.datetime('Date', required=True),
- 'partner_id': fields.many2one('res.partner',string="Partner", required=True),
- 'address_id': fields.many2one('res.partner.address', 'Delivery Address', help="Address where goods are to be delivered", required=True),
}
def view_init(self, cr, uid, fields_list, context=None):
res = super(stock_partial_move, self).view_init(cr, uid, fields_list, context=context)
- move_obj = self.pool.get('stock.move')
+ move_obj = self.pool.get('stock.move')
if not context:
context={}
moveids = []
- for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
+ for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
if m.state in ('done', 'cancel'):
continue
if 'move%s_product_id'%(m.id) not in self._columns:
@@ -56,55 +54,53 @@ class stock_partial_move(osv.osv_memory):
self._columns['move%s_product_price'%(m.id)] = fields.float("Price")
if 'move%s_product_currency'%(m.id) not in self._columns:
self._columns['move%s_product_currency'%(m.id)] = fields.many2one('res.currency',string="Currency")
- return res
+ return res
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False,submenu=False):
- result = super(stock_partial_move, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu)
+ result = super(stock_partial_move, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu)
move_obj = self.pool.get('stock.move')
- move_ids = context.get('active_ids', False)
+ move_ids = context.get('active_ids', False)
move_ids = move_obj.search(cr, uid, [('id','in',move_ids)])
_moves_arch_lst = """
-
-
"""
_moves_fields = result['fields']
- if move_ids and view_type in ['form']:
- for m in move_obj.browse(cr, uid, move_ids, context):
+ if move_ids and view_type in ['form']:
+ for m in move_obj.browse(cr, uid, move_ids, context):
if m.state in ('done', 'cancel'):
continue
_moves_fields.update({
'move%s_product_id'%(m.id) : {
'string': _('Product'),
- 'type' : 'many2one',
- 'relation': 'product.product',
- 'required' : True,
- 'readonly' : True,
+ 'type' : 'many2one',
+ 'relation': 'product.product',
+ 'required' : True,
+ 'readonly' : True,
},
'move%s_product_qty'%(m.id) : {
'string': _('Quantity'),
'type' : 'float',
- 'required': True,
+ 'required': True,
},
'move%s_product_uom'%(m.id) : {
'string': _('Product UOM'),
- 'type' : 'many2one',
- 'relation': 'product.uom',
- 'required' : True,
- 'readonly' : True,
+ 'type' : 'many2one',
+ 'relation': 'product.uom',
+ 'required' : True,
+ 'readonly' : True,
}
- })
-
+ })
+
_moves_arch_lst += """
"""%(m.id, m.id, m.id)
- if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
+ if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
_moves_fields.update({
'move%s_product_price'%(m.id) : {
'string': _('Price'),
@@ -112,9 +108,9 @@ class stock_partial_move(osv.osv_memory):
},
'move%s_product_currency'%(m.id): {
'string': _('Currency'),
- 'type' : 'float',
- 'type' : 'many2one',
- 'relation': 'res.currency',
+ 'type' : 'float',
+ 'type' : 'many2one',
+ 'relation': 'res.currency',
}
})
_moves_arch_lst += """
@@ -135,7 +131,7 @@ class stock_partial_move(osv.osv_memory):
"""
result['arch'] = _moves_arch_lst
- result['fields'] = _moves_fields
+ result['fields'] = _moves_fields
return result
def default_get(self, cr, uid, fields, context=None):
@@ -143,13 +139,13 @@ class stock_partial_move(osv.osv_memory):
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param fields: List of fields for which we want default values
- @param context: A standard dictionary
- @return: A dictionary which of fields with values.
- """
+ @param fields: List of fields for which we want default values
+ @param context: A standard dictionary
+ @return: A dictionary which of fields with values.
+ """
res = super(stock_partial_move, self).default_get(cr, uid, fields, context=context)
- move_obj = self.pool.get('stock.move')
+ move_obj = self.pool.get('stock.move')
if not context:
context={}
moveids = []
@@ -157,17 +153,9 @@ class stock_partial_move(osv.osv_memory):
res.update({'date': time.strftime('%Y-%m-%d %H:%M:%S')})
move_ids = context.get('active_ids', [])
move_ids = move_obj.search(cr, uid, [('id','in',move_ids)])
- for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
+ for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
if m.state in ('done', 'cancel'):
continue
- address_ids = list(set([(pick.address_id and pick.address_id.id, pick.address_id and pick.address_id.partner_id and pick.address_id.partner_id.id) for pick in move_obj.browse(cr, uid, move_ids)]))
- if len(address_ids) == 1:
- address_id = address_ids[0][0]
- partner_id = address_ids[0][1]
- res['address_id'] = address_ids[0][0]
- res['partner_id'] = address_ids[0][1]
- else:
- address_id = partner_id = False
if 'move%s_product_id'%(m.id) in fields:
res['move%s_product_id'%(m.id)] = m.product_id.id
if 'move%s_product_qty'%(m.id) in fields:
@@ -183,7 +171,7 @@ class stock_partial_move(osv.osv_memory):
currency = False
if hasattr(m.picking_id, 'sale_id') and m.picking_id.sale_id:
currency = m.picking_id.sale_id.pricelist_id.currency_id.id
-
+
if 'move%s_product_price'%(m.id) in fields:
res['move%s_product_price'%(m.id)] = price
if 'move%s_product_currency'%(m.id) in fields:
@@ -197,38 +185,37 @@ class stock_partial_move(osv.osv_memory):
currency = False
if hasattr(m.picking_id, 'purchase_id') and m.picking_id.purchase_id:
currency = m.picking_id.purchase_id.pricelist_id.currency_id.id
-
+
if 'move%s_product_price'%(m.id) in fields:
res['move%s_product_price'%(m.id)] = price
if 'move%s_product_currency'%(m.id) in fields:
res['move%s_product_currency'%(m.id)] = currency
- return res
+ print res
+ return res
def do_partial(self, cr, uid, ids, context):
""" Makes partial moves and pickings done.
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param fields: List of fields for which we want default values
- @param context: A standard dictionary
- @return: A dictionary which of fields with values.
- """
-
+ @param fields: List of fields for which we want default values
+ @param context: A standard dictionary
+ @return: A dictionary which of fields with values.
+ """
+
rec_id = context and context.get('active_id', False)
tracking_lot = context.get('tracking_lot', False)
if tracking_lot:
tracking = self.pool.get('stock.tracking')
- tracking_lot = tracking.get_create_tracking_lot(cr, uid,[rec_id], tracking_lot)
- context ['tracking_lot'] = tracking_lot
- move_obj = self.pool.get('stock.move')
+ tracking_lot = tracking.get_create_tracking_lot(cr, uid,[rec_id], tracking_lot)
+ context ['tracking_lot'] = tracking_lot
+ move_obj = self.pool.get('stock.move')
move_ids = context.get('active_ids', False)
partial = self.browse(cr, uid, ids[0], context)
partial_datas = {
- 'partner_id' : partial.partner_id and partial.partner_id.id or False,
- 'address_id' : partial.address_id and partial.address_id.id or False,
- 'delivery_date' : partial.date
+ 'delivery_date' : partial.date
}
- for m in move_obj.browse(cr, uid, move_ids):
+ for m in move_obj.browse(cr, uid, move_ids):
if m.state in ('done', 'cancel'):
continue
partial_datas['move%s'%(m.id)] = {
@@ -237,15 +224,15 @@ class stock_partial_move(osv.osv_memory):
'product_uom' : getattr(partial, 'move%s_product_uom'%(m.id)).id
}
- if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
- partial_datas['move%s'%(m.id)].update({
+ if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
+ partial_datas['move%s'%(m.id)].update({
'product_price' : getattr(partial, 'move%s_product_price'%(m.id)),
'product_currency': getattr(partial, 'move%s_product_currency'%(m.id)).id
- })
+ })
res = move_obj.do_partial(cr, uid, move_ids, partial_datas, context=context)
return {}
-
-stock_partial_move()
+
+stock_partial_move()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/wizard/stock_partial_move_view.xml b/addons/stock/wizard/stock_partial_move_view.xml
index 30b7f3fca0e..a7b4271a5b2 100644
--- a/addons/stock/wizard/stock_partial_move_view.xml
+++ b/addons/stock/wizard/stock_partial_move_view.xml
@@ -1,25 +1,14 @@
-
+
-
- Delivery Product
- stock.partial.move
- form
-
-
-
-
-
-
-
-
+
diff --git a/addons/stock/wizard/stock_partial_picking.py b/addons/stock/wizard/stock_partial_picking.py
index 0feac97010b..595215c2a49 100644
--- a/addons/stock/wizard/stock_partial_picking.py
+++ b/addons/stock/wizard/stock_partial_picking.py
@@ -30,17 +30,15 @@ class stock_partial_picking(osv.osv_memory):
_description = "Partial Picking"
_columns = {
'date': fields.datetime('Date', required=True),
- 'partner_id': fields.many2one('res.partner',string="Partner", required=True),
- 'address_id': fields.many2one('res.partner.address', 'Delivery Address', help="Address where goods are to be delivered", required=True),
}
def view_init(self, cr, uid, fields_list, context=None):
res = super(stock_partial_picking, self).view_init(cr, uid, fields_list, context=context)
- pick_obj = self.pool.get('stock.picking')
+ pick_obj = self.pool.get('stock.picking')
if not context:
context={}
moveids = []
- for pick in pick_obj.browse(cr, uid, context.get('active_ids', [])):
+ for pick in pick_obj.browse(cr, uid, context.get('active_ids', [])):
for m in pick.move_lines:
if m.state in ('done', 'cancel'):
continue
@@ -56,20 +54,18 @@ class stock_partial_picking(osv.osv_memory):
self._columns['move%s_product_price'%(m.id)] = fields.float("Price")
if 'move%s_product_currency'%(m.id) not in self._columns:
self._columns['move%s_product_currency'%(m.id)] = fields.many2one('res.currency',string="Currency")
- return res
+ return res
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False,submenu=False):
- result = super(stock_partial_picking, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu)
+ result = super(stock_partial_picking, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu)
pick_obj = self.pool.get('stock.picking')
- picking_ids = context.get('active_ids', False)
- _moves_arch_lst = """
-
-
-
-
-
+ picking_ids = context.get('active_ids', False)
+ _moves_arch_lst = """
+
+
+
- """
+ """
_moves_fields = result['fields']
if picking_ids and view_type in ['form']:
for pick in pick_obj.browse(cr, uid, picking_ids, context):
@@ -79,32 +75,32 @@ class stock_partial_picking(osv.osv_memory):
_moves_fields.update({
'move%s_product_id'%(m.id) : {
'string': _('Product'),
- 'type' : 'many2one',
- 'relation': 'product.product',
- 'required' : True,
- 'readonly' : True,
+ 'type' : 'many2one',
+ 'relation': 'product.product',
+ 'required' : True,
+ 'readonly' : True,
},
'move%s_product_qty'%(m.id) : {
'string': _('Quantity'),
'type' : 'float',
- 'required': True,
+ 'required': True,
},
'move%s_product_uom'%(m.id) : {
'string': _('Product UOM'),
- 'type' : 'many2one',
- 'relation': 'product.uom',
- 'required' : True,
- 'readonly' : True,
+ 'type' : 'many2one',
+ 'relation': 'product.uom',
+ 'required' : True,
+ 'readonly' : True,
}
- })
-
+ })
+
_moves_arch_lst += """
"""%(m.id, m.id, m.id)
- if (m.product_id.cost_method == 'average'):
+ if (m.product_id.cost_method == 'average'):
_moves_fields.update({
'move%s_product_price'%(m.id) : {
'string': _('Price'),
@@ -112,9 +108,9 @@ class stock_partial_picking(osv.osv_memory):
},
'move%s_product_currency'%(m.id): {
'string': _('Currency'),
- 'type' : 'float',
- 'type' : 'many2one',
- 'relation': 'res.currency',
+ 'type' : 'float',
+ 'type' : 'many2one',
+ 'relation': 'res.currency',
}
})
_moves_arch_lst += """
@@ -128,14 +124,14 @@ class stock_partial_picking(osv.osv_memory):
-
-
-
+
+
+
"""
result['arch'] = _moves_arch_lst
- result['fields'] = _moves_fields
+ result['fields'] = _moves_fields
return result
def default_get(self, cr, uid, fields, context=None):
@@ -143,23 +139,19 @@ class stock_partial_picking(osv.osv_memory):
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param fields: List of fields for which we want default values
- @param context: A standard dictionary
- @return: A dictionary which of fields with values.
- """
+ @param fields: List of fields for which we want default values
+ @param context: A standard dictionary
+ @return: A dictionary which of fields with values.
+ """
res = super(stock_partial_picking, self).default_get(cr, uid, fields, context=context)
- pick_obj = self.pool.get('stock.picking')
+ pick_obj = self.pool.get('stock.picking')
if not context:
context={}
moveids = []
if 'date' in fields:
res.update({'date': time.strftime('%Y-%m-%d %H:%M:%S')})
for pick in pick_obj.browse(cr, uid, context.get('active_ids', [])):
- if 'partner_id' in fields:
- res.update({'partner_id': pick.address_id.partner_id and pick.address_id.partner_id.id or False })
- if 'address_id' in fields:
- res.update({'address_id': pick.address_id.id})
for m in pick.move_lines:
if m.state in ('done', 'cancel'):
continue
@@ -187,24 +179,22 @@ class stock_partial_picking(osv.osv_memory):
res['move%s_product_price'%(m.id)] = price
if 'move%s_product_currency'%(m.id) in fields:
res['move%s_product_currency'%(m.id)] = currency
- return res
+ return res
- def do_partial(self, cr, uid, ids, context):
+ def do_partial(self, cr, uid, ids, context):
""" Makes partial moves and pickings done.
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
- @param fields: List of fields for which we want default values
- @param context: A standard dictionary
- @return: A dictionary which of fields with values.
- """
- pick_obj = self.pool.get('stock.picking')
+ @param fields: List of fields for which we want default values
+ @param context: A standard dictionary
+ @return: A dictionary which of fields with values.
+ """
+ pick_obj = self.pool.get('stock.picking')
picking_ids = context.get('active_ids', False)
partial = self.browse(cr, uid, ids[0], context)
partial_datas = {
- 'partner_id' : partial.partner_id and partial.partner_id.id or False,
- 'address_id' : partial.address_id and partial.address_id.id or False,
- 'delivery_date' : partial.date
+ 'delivery_date' : partial.date
}
for pick in pick_obj.browse(cr, uid, picking_ids):
for m in pick.move_lines:
@@ -216,26 +206,13 @@ class stock_partial_picking(osv.osv_memory):
'product_uom' : getattr(partial, 'move%s_product_uom'%(m.id)).id
}
- if (m.product_id.cost_method == 'average'):
- partial_datas['move%s'%(m.id)].update({
+ if (m.product_id.cost_method == 'average'):
+ partial_datas['move%s'%(m.id)].update({
'product_price' : getattr(partial, 'move%s_product_price'%(m.id)),
'product_currency': getattr(partial, 'move%s_product_currency'%(m.id)).id
- })
+ })
res = pick_obj.do_partial(cr, uid, picking_ids, partial_datas, context=context)
return {}
-
-stock_partial_picking()
-
-
-#_moves_arch_end = '''
-#
-#
-#
-# '''
-
-#_moves_fields_end = {
-# 'back_order_notification': {'string':'Back Order' ,'type':'text', 'readonly':True}
-# }
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+stock_partial_picking()
diff --git a/addons/stock/wizard/stock_partial_picking_view.xml b/addons/stock/wizard/stock_partial_picking_view.xml
index 2f901b9884d..b399576c83d 100644
--- a/addons/stock/wizard/stock_partial_picking_view.xml
+++ b/addons/stock/wizard/stock_partial_picking_view.xml
@@ -1,13 +1,13 @@
-
-
+
+
Making Picking
- stock.partial.picking
- form
- form
+ stock.partial.picking
+ form
+ form
new
-
+
diff --git a/addons/stock_location/mrp_pull.py b/addons/stock_location/mrp_pull.py
old mode 100755
new mode 100644
diff --git a/addons/stock_location/mrp_pull_workflow.xml b/addons/stock_location/mrp_pull_workflow.xml
old mode 100755
new mode 100644
diff --git a/addons/stock_location/security/ir.model.access.csv b/addons/stock_location/security/ir.model.access.csv
index e87f65004bb..188218b6e26 100644
--- a/addons/stock_location/security/ir.model.access.csv
+++ b/addons/stock_location/security/ir.model.access.csv
@@ -1,4 +1,7 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_product_pulled_flow_user","product_pulled_flow user","model_product_pulled_flow","stock.group_stock_user",1,0,0,0
+"access_product_pulled_flow_manager","product_pulled_flow manager","model_product_pulled_flow","stock.group_stock_manager",1,1,1,1
+"access_product_pulled_flow_partner_manager","product_pulled_flow partner manager","model_product_pulled_flow","product.group_product_manager",1,1,1,1
"access_stock_location_path_user","stock location path user","model_stock_location_path","stock.group_stock_user",1,0,0,0
"access_stock_location_path_manager","stock location path manager","model_stock_location_path","stock.group_stock_manager",1,1,1,1
"access_stock_location_path_partner_manager","stock.location.path partner manager","model_stock_location_path","product.group_product_manager",1,1,1,1
diff --git a/addons/stock_location/stock.py b/addons/stock_location/stock.py
index 8611b8dba6b..4aa4a1999ed 100644
--- a/addons/stock_location/stock.py
+++ b/addons/stock_location/stock.py
@@ -58,7 +58,7 @@ stock_location_path()
class product_pulled_flow(osv.osv):
_name = 'product.pulled.flow'
- _description = "Pulled Flows."
+ _description = "Pulled Flows"
_columns = {
'name': fields.char('Name', size=64, required=True, help="This field will fill the packing Origin and the name of its moves"),
'cancel_cascade': fields.boolean('Cancel Cascade', help="Allow you to cancel moves related to the product pull flow"),
diff --git a/addons/stock_planning/stock_planning_view.xml b/addons/stock_planning/stock_planning_view.xml
index 1bfb1d0f1aa..7eb19f8863c 100644
--- a/addons/stock_planning/stock_planning_view.xml
+++ b/addons/stock_planning/stock_planning_view.xml
@@ -95,7 +95,7 @@
-
+
@@ -132,7 +132,7 @@
-
+
-
-
+
+
-
-
+
+
-
+
@@ -240,11 +240,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -275,7 +275,7 @@
form
-
+
@@ -326,8 +326,8 @@
-
-
+
+
@@ -365,7 +365,7 @@
-
+
@@ -388,7 +388,7 @@
-
+
diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml
index a604b7c7c37..bd3f257c756 100644
--- a/addons/survey/survey_view.xml
+++ b/addons/survey/survey_view.xml
@@ -260,8 +260,8 @@
-
-
+
+
diff --git a/addons/thunderbird/security/ir.model.access.csv b/addons/thunderbird/security/ir.model.access.csv
index b7cc3262e2d..52f5efbcb7f 100644
--- a/addons/thunderbird/security/ir.model.access.csv
+++ b/addons/thunderbird/security/ir.model.access.csv
@@ -1,3 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_tinythunderbird_partner","tinythunderbird.partner","model_tinythunderbird_partner",,1,1,1,1
-"access_thunderbird_installer","thunderbird.installer","model_thunderbird_installer","base.group_user",1,1,1,1
+"access_thunderbird_installer","thunderbird.installer","model_thunderbird_installer","base.group_system",1,1,1,1
diff --git a/addons/wiki/__openerp__.py b/addons/wiki/__openerp__.py
index 8dd7779a290..d6414ca6a26 100644
--- a/addons/wiki/__openerp__.py
+++ b/addons/wiki/__openerp__.py
@@ -33,6 +33,7 @@
'depends': ['base'],
'init_xml': [],
'update_xml': [
+ 'security/wiki_security.xml',
'wizard/wiki_wiki_page_open_view.xml',
'wizard/wiki_create_menu_view.xml',
'wizard/wiki_make_index_view.xml',
diff --git a/addons/wiki/security/wiki_security.xml b/addons/wiki/security/wiki_security.xml
new file mode 100644
index 00000000000..ae68d019a42
--- /dev/null
+++ b/addons/wiki/security/wiki_security.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ wiki / Basic wiki editing
+
+
+
diff --git a/addons/wiki/wiki_view.xml b/addons/wiki/wiki_view.xml
index ca0eaccb449..05c6fb246fd 100644
--- a/addons/wiki/wiki_view.xml
+++ b/addons/wiki/wiki_view.xml
@@ -127,7 +127,7 @@
+ string="Basic Wiki Editing" icon="gtk-ok" groups="wiki.wiki_basic_group"/>
@@ -160,16 +160,15 @@
search
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/addons/wiki_sale_faq/wiki_sale_faq_data.xml b/addons/wiki_sale_faq/wiki_sale_faq_data.xml
index 4a8eea1cb38..576e9e8f4b0 100644
--- a/addons/wiki_sale_faq/wiki_sale_faq_data.xml
+++ b/addons/wiki_sale_faq/wiki_sale_faq_data.xml
@@ -21,6 +21,47 @@
-
+
+ Sales Management ?
+ Sales
+
+ 0
+ 0
+ 1
+ 2
+ Initial Page
+ == Question ==
+
+What's Sales Management ?
+
+== Answer ==
+
+Sales modules allow you to manage and classify your sales orders on a structural and hierarchical system. It gives you
+the ability to create new orders and to review the existing orders in their various states. Confirmation of an order can
+triggers delivery of the goods, and invoicing timing is defined by a setting in each individual order.
+
+Key Points:
+
+* Get all information needed by the salesman to do his quote in one screen
+* Complete follow-up and control of sales orders, deliveries and invoicing
+* Traceability of all customers operations
+
+
+Integration Benefits:
+
+* Automatic accounting (financial and analytic) entries creation,
+* Integrated with contracts, projects, master production shedule,
+* Integrated with different eCommerce platforms for online selling.
+* Design templates of re-useable offers with the report designer
+
+
+== External Links ==
+
+* The Open ERP Website: [http://openerp.com]
+* The Sale Documentation: [http://openerp.com]
+
+
+
+