- [[ repeatIn(get_employee(data['form']), 'o') ]] [[ get_employee_detail(o) ]]
-
-
-
+ [[ repeatIn(get_employee(data['form']), 'o') ]]
|
Employees Salary Details
- For [[ get_fiscalyear(data['form']['fiscalyear_id']) ]]
+ From [[ formatLang(data['form']['date_from'], date=True) ]] To [[ formatLang(data['form']['date_to'], date=True) ]]
|
@@ -292,7 +303,7 @@
[[ o.name ]]
- Other Id
+ Other No.
|
[[ o.otherid or '' ]]
@@ -331,47 +342,47 @@
- [[ repeatIn(get_periods(data['form']),'m') ]]
-
+ [[ repeatIn(get_periods(data['form']),'m') ]] [[ get_employee_detail(o) ]]
+
|
Title
|
- [[ m[0] ]]
+ [[ m[0] != 'None' and m[0] or '' ]]
|
- [[ m[1] ]]
+ [[ m[1] != 'None' and m[1] or '' ]]
|
- [[ m[2] ]]
+ [[ m[2] != 'None' and m[2] or '' ]]
|
- [[ m[3] ]]
+ [[ m[3] != 'None' and m[3] or '' ]]
|
- [[ m[4] ]]
+ [[ m[4] != 'None' and m[4] or '' ]]
|
- [[ m[5] ]]
+ [[ m[5] != 'None' and m[5] or '' ]]
|
- [[ m[6] ]]
+ [[ m[6] != 'None' and m[6] or '' ]]
|
- [[ m[7] ]]
+ [[ m[7] != 'None' and m[7] or '' ]]
|
- [[ m[8] ]]
+ [[ m[8] != 'None' and m[8] or '' ]]
|
- [[ m[9] ]]
+ [[ m[9] != 'None' and m[9] or '' ]]
|
- [[ m[10] ]]
+ [[ m[10] != 'None' and m[10] or '' ]]
|
- [[ m[11] ]]
+ [[ m[11] != 'None' and m[11] or '' ]]
|
Total
@@ -382,9 +393,6 @@
-
-
-
|
@@ -393,56 +401,53 @@
|
- [[ repeatIn(get_allow(),'e1') ]]
-
+ [[ repeatIn(get_allow(),'e1') ]]
+
|
[[ e1[0] ]]
|
- [[ formatLang(e1[1]) ]]
+ [[ formatLang(e1[1]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[2]) ]]
+ [[ formatLang(e1[2]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[3]) ]]
+ [[ formatLang(e1[3]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[4]) ]]
+ [[ formatLang(e1[4]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[5]) ]]
+ [[ formatLang(e1[5]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[6]) ]]
+ [[ formatLang(e1[6]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[7]) ]]
+ [[ formatLang(e1[7]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[8]) ]]
+ [[ formatLang(e1[8]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[9]) ]]
+ [[ formatLang(e1[9]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[10]) ]]
+ [[ formatLang(e1[10]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[11]) ]]
+ [[ formatLang(e1[11]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[12]) ]]
+ [[ formatLang(e1[12]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e1[13]) ]]
+ [[ formatLang(e1[13]) ]] [[ company.currency_id.symbol ]]
|
-
-
-
@@ -452,56 +457,53 @@
- [[ repeatIn(get_deduct(),'e2') ]]
-
+ [[ repeatIn(get_deduct(),'e2') ]]
+
|
[[ e2[0] ]]
|
- [[ formatLang(e2[1]) ]]
+ [[ formatLang(e2[1]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[2]) ]]
+ [[ formatLang(e2[2]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[3]) ]]
+ [[ formatLang(e2[3]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[4]) ]]
+ [[ formatLang(e2[4]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[5]) ]]
+ [[ formatLang(e2[5]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[6]) ]]
+ [[ formatLang(e2[6]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[7]) ]]
+ [[ formatLang(e2[7]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[8]) ]]
+ [[ formatLang(e2[8]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[9]) ]]
+ [[ formatLang(e2[9]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[10]) ]]
+ [[ formatLang(e2[10]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[11]) ]]
+ [[ formatLang(e2[11]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[12]) ]]
+ [[ formatLang(e2[12]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e2[13]) ]]
+ [[ formatLang(e2[13]) ]] [[ company.currency_id.symbol ]]
|
-
-
-
@@ -511,65 +513,56 @@
- [[ repeatIn(get_other(),'e3') ]]
-
+ [[ repeatIn(get_other(),'e3') ]]
+
|
[[ e3[0] ]]
|
- [[ formatLang(e3[1]) ]]
+ [[ formatLang(e3[1]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[2]) ]]
+ [[ formatLang(e3[2]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[3]) ]]
+ [[ formatLang(e3[3]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[4]) ]]
+ [[ formatLang(e3[4]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[5]) ]]
+ [[ formatLang(e3[5]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[6]) ]]
+ [[ formatLang(e3[6]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[7]) ]]
+ [[ formatLang(e3[7]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[8]) ]]
+ [[ formatLang(e3[8]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[9]) ]]
+ [[ formatLang(e3[9]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[10]) ]]
+ [[ formatLang(e3[10]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[11]) ]]
+ [[ formatLang(e3[11]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[12]) ]]
+ [[ formatLang(e3[12]) ]] [[ company.currency_id.symbol ]]
|
- [[ formatLang(e3[13]) ]]
+ [[ formatLang(e3[13]) ]] [[ company.currency_id.symbol ]]
|
-
-
-
-
-
-
-
-
-
-
+
|
[[ get_monthly_total()[0] ]]
@@ -619,11 +612,8 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/addons/hr_payroll/report/report_payroll_advice.rml b/addons/hr_payroll/report/report_payroll_advice.rml
index ff793469284..8fe18772c2f 100644
--- a/addons/hr_payroll/report/report_payroll_advice.rml
+++ b/addons/hr_payroll/report/report_payroll_advice.rml
@@ -151,7 +151,7 @@
|
|
- [[ o.bank or 'Bank' ]]
+ [[ o.bank_id and o.bank_id.name or 'Bank' ]]
|
@@ -199,10 +199,10 @@
Name of the Employee
|
- Amount([[ company.currency_id.code ]])
+ Amount
|
- By Sal([[ company.currency_id.code ]])
+ By Salary
|
Bank Account
diff --git a/addons/hr_payroll/report/report_payroll_register.py b/addons/hr_payroll/report/report_payroll_register.py
index b146e2900af..e991ede4903 100644
--- a/addons/hr_payroll/report/report_payroll_register.py
+++ b/addons/hr_payroll/report/report_payroll_register.py
@@ -37,22 +37,34 @@ class report_payroll_register(report_sxw.rml_parse):
self.deduct += line.deduction
self.net += line.net
- def get_basic(self):
+ def get_basic(self,obj):
+ for line in obj.line_ids:
+ self.basic += line.basic
return self.basic
- def get_other(self):
+ def get_other(self,obj):
+ for line in obj.line_ids:
+ self.other += line.other_pay
return self.other
- def get_allow(self):
+ def get_allow(self,obj):
+ for line in obj.line_ids:
+ self.allow += line.allounce
return self.allow
- def get_grows(self):
+ def get_grows(self,obj):
+ for line in obj.line_ids:
+ self.grows += line.grows
return self.grows
- def get_deduct(self):
+ def get_deduct(self,obj):
+ for line in obj.line_ids:
+ self.deduct += line.deduction
return self.deduct
- def get_net(self):
+ def get_net(self,obj):
+ for line in obj.line_ids:
+ self.net += line.net
return self.net
def get_month(self, indate):
diff --git a/addons/hr_payroll/report/report_payslip.py b/addons/hr_payroll/report/report_payslip.py
index e818e0f3727..7de5dfee0d9 100755
--- a/addons/hr_payroll/report/report_payslip.py
+++ b/addons/hr_payroll/report/report_payslip.py
@@ -49,7 +49,7 @@ class payslip_report(report_sxw.rml_parse):
res = []
ids = []
for id in range(len(obj)):
- if obj[id].category_id.type == 'other' and obj[id].type != 'leaves':
+ if obj[id].category_id.type in ('advance','loan','otherpay','otherdeduct','installment'):
ids.append(obj[id].id)
payslip_line = self.pool.get('hr.payslip.line')
if len(ids):
@@ -71,7 +71,7 @@ class payslip_report(report_sxw.rml_parse):
res = []
ids = []
for id in range(len(obj)):
- if obj[id].category_id.type == 'allow' and obj[id].type != 'leaves':
+ if obj[id].category_id.type == 'allowance' and obj[id].type != 'leaves':
ids.append(obj[id].id)
payslip_line = self.pool.get('hr.payslip.line')
if len(ids):
@@ -82,7 +82,7 @@ class payslip_report(report_sxw.rml_parse):
res = []
ids = []
for id in range(len(obj)):
- if obj[id].category_id.type == 'deduct' and obj[id].type != 'leaves':
+ if obj[id].category_id.type == 'deduction' and obj[id].type != 'leaves':
ids.append(obj[id].id)
payslip_line = self.pool.get('hr.payslip.line')
if len(ids):
diff --git a/addons/hr_payroll/report/report_year_report.rml b/addons/hr_payroll/report/report_year_report.rml
index 4c32436955a..212bb59e7b3 100755
--- a/addons/hr_payroll/report/report_year_report.rml
+++ b/addons/hr_payroll/report/report_year_report.rml
@@ -1,6 +1,6 @@
-
+
@@ -63,11 +63,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -128,64 +141,61 @@
Yearly Salary Details
- For [[ get_fiscalyear(data['form']['fiscalyear_id']) ]]
+ From [[ formatLang(data['form']['date_from'], date=True) ]] To [[ formatLang(data['form']['date_to'], date=True) ]]
- [[ repeatIn(get_periods(data['form']),'m') ]]
-
+ [[ repeatIn(get_periods(data['form']),'m') ]]
+
|
Name
|
- [[ m[0] ]]
+ [[ m[0] != 'None' and m[0] or '' ]]
|
- [[ m[1] ]]
+ [[ m[1] != 'None' and m[1] or '' ]]
|
- [[ m[2] ]]
+ [[ m[2] != 'None' and m[2] or '' ]]
|
- [[ m[3] ]]
+ [[ m[3] != 'None' and m[3] or '' ]]
|
- [[ m[4] ]]
+ [[ m[4] != 'None' and m[4] or '' ]]
|
- [[ m[5] ]]
+ [[ m[5] != 'None' and m[5] or '' ]]
|
- [[ m[6] ]]
+ [[ m[6] != 'None' and m[6] or '' ]]
|
- [[ m[7] ]]
+ [[ m[7] != 'None' and m[7] or '' ]]
|
- [[ m[8] ]]
+ [[ m[8] != 'None' and m[8] or '' ]]
|
- [[ m[9] ]]
+ [[ m[9] != 'None' and m[9] or '' ]]
|
- [[ m[10] ]]
+ [[ m[10] != 'None' and m[10] or '' ]]
|
- [[ m[11] ]]
+ [[ m[11] != 'None' and m[11] or '' ]]
|
- Total([[company.currency_id.code]])
+ Total
|
-
-
-
- [[ repeatIn(get_employee(data['form']),'e') ]]
-
+ [[ repeatIn(get_employee(data['form']),'e') ]]
+
|
[[ e[0] ]]
@@ -231,23 +241,14 @@
|
-
-
-
-
-
-
-
-
-
- [[ repeatIn(get_months_tol(),'t') ]]
-
+ [[ repeatIn(get_months_tol(),'t') ]]
+
|
- Total([[company.currency_id.code]])
+ Total
|
[[ formatLang(t[1]) ]] [[company.currency_id.symbol]]
@@ -294,8 +295,5 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/addons/hr_payroll/report/report_year_salary.py b/addons/hr_payroll/report/report_year_salary.py
index a85d7328973..0a7857582d4 100755
--- a/addons/hr_payroll/report/report_year_salary.py
+++ b/addons/hr_payroll/report/report_year_salary.py
@@ -15,26 +15,20 @@ class year_salary_report(rml_parse.rml_parse):
'get_employee' : self.get_employee,
'get_periods' : self.get_periods,
'get_months_tol' : self.get_months_tol,
- 'get_fiscalyear' : self.get_fiscalyear,
'get_total' : self.get_total,
})
self.mnths =[]
self.mnths_tol = []
- self.curr_fiscal_year_name=''
self.total=0.0
def get_periods(self,form):
- fiscalyear = pooler.get_pool(self.cr.dbname).get('account.fiscalyear')
- curr_fiscalyear_id = form['fiscalyear_id']
- curr_fiscalyear = fiscalyear.read(self.cr,self.uid,[form['fiscalyear_id']],['date_start','date_stop'])[0]
-
# Get start year-month-date and end year-month-date
- fy = int(curr_fiscalyear['date_start'][0:4])
- ly = int(curr_fiscalyear['date_stop'][0:4])
+ fy = int(form['date_from'][0:4])
+ ly = int(form['date_to'][0:4])
- fm = int(curr_fiscalyear['date_start'][5:7])
- lm = int(curr_fiscalyear['date_stop'][5:7])
+ fm = int(form['date_from'][5:7])
+ lm = int(form['date_to'][5:7])
no_months = (ly-fy)*12+lm-fm + 1
cm = fm
cy = fy
@@ -49,13 +43,11 @@ class year_salary_report(rml_parse.rml_parse):
cm = 0
cy = ly
cm = cm +1
+ for c in range(0,(12-no_months)):
+ mnth_name.append('None')
+ self.mnths.append('None')
return [mnth_name]
- def get_fiscalyear(self,fiscalyear_id):
- fiscalyear_obj = pooler.get_pool(self.cr.dbname).get('account.fiscalyear')
- return fiscalyear_obj.read(self.cr,self.uid,[fiscalyear_id],['name'])[0]['name']
-
-
def get_employee(self,form):
ls1=[]
ls = []
@@ -64,21 +56,19 @@ class year_salary_report(rml_parse.rml_parse):
emp = pooler.get_pool(self.cr.dbname).get('hr.employee')
emp_ids = form['employee_ids']
empll = emp.browse(self.cr,self.uid, emp_ids)
- fiscalyear_obj = pooler.get_pool(self.cr.dbname).get('account.fiscalyear').browse(self.cr, self.uid, form['fiscalyear_id'])
- period_ids_l = fiscalyear_obj.period_ids
- for period in period_ids_l:
- periods.append(period.id)
- periods_ids = ','.join(map(str, periods))
cnt = 1
for emp_id in empll:
ls1.append(emp_id.name)
tol = 0.0
for mnth in self.mnths:
- if len(mnth) != 7:
- mnth = '0' + str(mnth)
- query = "select net from hr_payslip where employee_id = "+str(emp_id.id)+" and to_char(date,'mm-yyyy') like '%"+mnth+"%' and state = 'done' and period_id in "+"("+ periods_ids +")" +""
- self.cr.execute(query)
- sal = self.cr.fetchall()
+ if mnth <> 'None':
+ if len(mnth) != 7:
+ mnth = '0' + str(mnth)
+ query = "select net from hr_payslip where employee_id = "+str(emp_id.id)+" and to_char(date,'mm-yyyy') like '%"+mnth+"%' and state = 'done' "
+ self.cr.execute(query)
+ sal = self.cr.fetchall()
+ else:
+ sal = [(0.0,)]
try:
ls1.append(sal[0][0])
except:
@@ -105,7 +95,7 @@ class year_salary_report(rml_parse.rml_parse):
self.total += item[count]
return self.total
-report_sxw.report_sxw('report.year.salary', 'hr.payslip', 'hr_payroll/report/report_year_report.rml', parser=year_salary_report,header=3)
+report_sxw.report_sxw('report.year.salary', 'hr.payslip', 'hr_payroll/report/report_year_report.rml', parser=year_salary_report,header='internal landscape')
diff --git a/addons/hr_payroll/report/rml_parse.py b/addons/hr_payroll/report/rml_parse.py
index 2e3ca9dc019..7abb29711b6 100755
--- a/addons/hr_payroll/report/rml_parse.py
+++ b/addons/hr_payroll/report/rml_parse.py
@@ -151,10 +151,10 @@ class rml_parse(report_sxw.rml_parse):
print Stringer
return Stringer
- def _add_header(self, node, header=1):
- if header==2:
+ def _add_header(self, node, header='external'):
+ if header=='internal':
rml_head = self.rml_header2
- elif header==3:
+ elif header=='internal landscape':
rml_head = self.rml_header3
else:
rml_head = self.rml_header
diff --git a/addons/hr_payroll/security/hr_security.xml b/addons/hr_payroll/security/hr_security.xml
index 23e57fecba8..339fb1961b9 100644
--- a/addons/hr_payroll/security/hr_security.xml
+++ b/addons/hr_payroll/security/hr_security.xml
@@ -2,9 +2,9 @@
-
- Human Resources / Payroll
-
+
+
+
\ No newline at end of file
diff --git a/addons/hr_payroll/security/ir.model.access.csv b/addons/hr_payroll/security/ir.model.access.csv
index f628fad1f1d..bafa1564e23 100644
--- a/addons/hr_payroll/security/ir.model.access.csv
+++ b/addons/hr_payroll/security/ir.model.access.csv
@@ -1,56 +1,20 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_hr_employee_category_payroll","hr.payroll.employee.category","hr.model_hr_employee_category","group_hr_payroll",1,0,0,0
-"access_hr_employee_payroll","hr.payroll.employee","hr.model_hr_employee","group_hr_payroll",1,0,0,0
-"aceess_hr_contract_wage_type","hr.contract.wage.type","model_hr_contract_wage_type","group_hr_payroll",1,1,1,1
-"access_hr_passport","hr.passport","model_hr_passport","group_hr_payroll",1,1,1,1
-"access_hr_payroll_structure","hr.payroll.structure","model_hr_payroll_structure","group_hr_payroll",1,1,1,1
-"access_hr_contract","hr.contract","model_hr_contract","group_hr_payroll",1,0,0,0
-"access_hr_payroll_register","hr.payroll.register","model_hr_payroll_register","group_hr_payroll",1,1,1,1
-"access_hr_payroll_advice","hr.payroll.advice","model_hr_payroll_advice","group_hr_payroll",1,1,1,1
-"access_hr_payroll_advice_line","hr.payroll.advice.line","model_hr_payroll_advice_line","group_hr_payroll",1,1,1,1
-"access_hr_contibution_register","hr.contibution.register","model_hr_contibution_register","group_hr_payroll",1,1,1,1
-"access_hr_contibution_register_line","hr.contibution.register.line","model_hr_contibution_register_line","group_hr_payroll",1,1,1,1
-"access_hr_allounce_deduction_category","hr.allounce.deduction.category","model_hr_allounce_deduction_categoty","group_hr_payroll",1,1,1,1
-"access_company_contribution","company.contribution","model_company_contribution","group_hr_payroll",1,1,1,1
-"access_company_contribution_line","company.contribution.line","model_company_contribution_line","group_hr_payroll",1,1,1,1
-"access_hr_holidays_status","hr.holidays.status","hr_holidays.model_hr_holidays_status","group_hr_payroll",1,0,0,0
-"access_hr_expense_expense","hr.expense.expense","hr_expense.model_hr_expense_expense","group_hr_payroll",1,0,0,0
-"access_hr_payslip","hr.payslip","model_hr_payslip","group_hr_payroll",1,1,1,1
-"access_hr_payslip_account_move","hr.payslip.account.move","model_hr_payslip_account_move","group_hr_payroll",1,1,1,1
-"access_hr_payslip_line_condition","hr.payslip.line.condition","model_hr_payslip_line_condition","group_hr_payroll",1,1,1,1
-"access_hr_payslip_line","hr.payslip.line","model_hr_payslip_line","group_hr_payroll",1,1,1,1
-"access_hr_payslip_line_line","hr.payslip.line.line","model_hr_payslip_line_line","group_hr_payroll",1,1,1,1
-"access_account_journal_payroll","hr.payroll.journal","account.model_account_journal","group_hr_payroll",1,0,0,0
-"access_account_journal_view_payroll","account.journal.view.payroll","account.model_account_journal_view","group_hr_payroll",1,0,0,0
-"access_account_journal_column_payroll","account.journal.column.payroll","account.model_account_journal_column","group_hr_payroll",1,0,0,0
-"access_account_fiscalyear_payroll","account.fiscalyear.payroll","account.model_account_fiscalyear","group_hr_payroll",1,0,0,0
-"access_hr_payslip_contract","hr.payslip.contract","model_hr_payslip","base.group_hr_contract",1,0,0,0
-"access_hr_payroll_structure_system","hr.payroll.structure.system","model_hr_payroll_structure","base.group_system",1,1,1,1
-"access_company_contribution","company.contribution","model_company_contribution","base.group_system",1,1,1,1
-"access_hr_passport_sys","hr.passport","model_hr_passport","base.group_system",1,1,1,1
-"access_res_partner_payroll","res.partner.payroll","base.model_res_partner","group_hr_payroll",1,1,1,1
-"access_hr_contibution_register_system","hr.contibution.register.system","model_hr_contibution_register","base.group_system",1,1,1,1
-"access_hr_contibution_register_line_system","hr.contibution.register.line.system","model_hr_contibution_register_line","base.group_system",1,1,1,1
-"access_hr_allounce_deduction_category_system","hr.allounce.deduction.category.system","model_hr_allounce_deduction_categoty","base.group_system",1,1,1,1
-"access_account_fiscalyear_manager","account.fiscalyear.payroll.manager","account.model_account_fiscalyear","base.group_hr_manager",1,1,1,1
+"access_hr_passport","hr.passport","model_hr_passport","base.group_hr_user",1,1,1,1
+"access_hr_payroll_structure","hr.payroll.structure","model_hr_payroll_structure","base.group_hr_user",1,1,1,1
+"access_hr_payroll_register","hr.payroll.register","model_hr_payroll_register","base.group_hr_user",1,1,1,1
+"access_hr_payroll_advice","hr.payroll.advice","model_hr_payroll_advice","base.group_hr_user",1,1,1,1
+"access_hr_payroll_advice_line","hr.payroll.advice.line","model_hr_payroll_advice_line","base.group_hr_user",1,1,1,1
+"access_hr_contibution_register","hr.contibution.register","model_hr_contibution_register","base.group_hr_user",1,1,1,1
+"access_hr_contibution_register_line","hr.contibution.register.line","model_hr_contibution_register_line","base.group_hr_user",1,1,1,1
+"access_hr_allounce_deduction_category","hr.allounce.deduction.category","model_hr_allounce_deduction_categoty","base.group_hr_user",1,1,1,1
+"access_company_contribution","company.contribution","model_company_contribution","base.group_hr_user",1,1,1,1
+"access_company_contribution_line","company.contribution.line","model_company_contribution_line","base.group_hr_user",1,1,1,1
+"access_hr_payslip","hr.payslip","model_hr_payslip","base.group_hr_user",1,1,1,1
+"access_hr_payslip_line","hr.payslip.line","model_hr_payslip_line","base.group_hr_user",1,1,1,1
+"access_hr_payslip_line_line","hr.payslip.line.line","model_hr_payslip_line_line","base.group_hr_user",1,1,1,1
+"access_res_partner_payroll","res.partner.payroll","base.model_res_partner","base.group_hr_user",1,1,1,1
"access_hr_payslip_manager","hr.payslip.manager","model_hr_payslip","base.group_hr_manager",1,1,1,1
"access_hr_payslip_line_manager","hr.payslip.line.manager","model_hr_payslip_line","base.group_hr_manager",1,1,1,1
"access_hr_payroll_structure_manager","hr.payroll.structure.manager","model_hr_payroll_structure","base.group_hr_manager",1,1,1,1
-"access_hr_allounce_deduction_category_manager","hr.allounce.deduction.category.manager","model_hr_allounce_deduction_categoty","base.group_hr_manager",1,1,1,1
"access_hr_passport_manager","hr.passport.manager","model_hr_passport","base.group_hr_manager",1,1,1,1
-"access_account_journal_manager","account.journal.manager","account.model_account_journal","base.group_hr_manager",1,1,1,1
-"access_account_journal_column_manager","account.journal.column.manager","account.model_account_journal_column","base.group_hr_manager",1,1,1,1
-"access_account_journal_view_manager","account.journal.view.manager","account.model_account_journal_view","base.group_hr_manager",1,1,1,1
-"access_hr_payslip_employee","hr.payslip.employee","model_hr_payslip","base.group_user",1,0,0,0
-"access_hr_payroll_register_system","hr.payroll.register.system","model_hr_payroll_register","base.group_system",1,0,0,0
-"access_hr_payroll_advice_system","hr.payroll.advice.system","model_hr_payroll_advice","base.group_system",1,0,0,0
-"access_hr_payslip_line_system","hr.payslip.line.system","model_hr_payslip_line","base.group_system",1,1,1,1
-"access_hr_payslip_account_move_system","hr.payslip.account.move.system","model_hr_payslip_account_move","base.group_system",1,0,0,0
-"access_hr_payroll_structure_contract","hr.payroll.structure.contract","model_hr_payroll_structure","base.group_hr_contract",1,1,1,1
-"access_hr_payslip_line_user","hr.payslip.line.user","model_hr_payslip_line","base.group_hr_user",1,1,1,0
-"access_hr_allounce_deduction_category_hr_user","hr.allounce.deduction.category.hr.user","model_hr_allounce_deduction_categoty","base.group_hr_user",1,1,1,0
-"access_hr_payroll_structure_hr_user","hr.payroll.structure.hr.user","model_hr_payroll_structure","base.group_hr_user",1,1,1,0
-"access_hr_payslip_line_line_hr_user","hr.payslip.line.line.hr.user","model_hr_payslip_line_line","base.group_hr_user",1,1,1,0
-"access_hr_payslip_line_line_hr_manager","hr.payslip.line.line.hr.manager","model_hr_payslip_line_line","base.group_hr_manager",1,1,1,1
-"access_hr_payslip_line_line_system","hr.payslip.line.line.system","model_hr_payslip_line_line","base.group_system",1,0,0,0
-"access_hr_payroll_advice_line_system","hr.payroll.advice.line.system","model_hr_payroll_advice_line","base.group_system",1,0,0,0
+"access_hr_contract_wage_type","hr.contract.wage.type user","hr_contract.model_hr_contract_wage_type","base.group_hr_user",1,1,1,1
diff --git a/addons/hr_payroll/test/payslip.yml b/addons/hr_payroll/test/payslip.yml
index 705270d7c82..ca204a62241 100644
--- a/addons/hr_payroll/test/payslip.yml
+++ b/addons/hr_payroll/test/payslip.yml
@@ -9,6 +9,7 @@
sequence: 0.0
name: Fortis
state: bank
+ bank: base.res_bank_1
-
I create a new employee “Richard”
-
diff --git a/addons/hr_payroll/wizard/__init__.py b/addons/hr_payroll/wizard/__init__.py
index 085903ad562..93222a2e343 100755
--- a/addons/hr_payroll/wizard/__init__.py
+++ b/addons/hr_payroll/wizard/__init__.py
@@ -22,5 +22,5 @@
import hr_payroll_employees_detail
-import hr_payroll_create_analytic
+#import hr_payroll_create_analytic
import hr_payroll_year_salary
diff --git a/addons/hr_payroll/wizard/hr_payroll_create_analytic.py b/addons/hr_payroll/wizard/hr_payroll_create_analytic.py
deleted file mode 100644
index 45c2d2c495e..00000000000
--- a/addons/hr_payroll/wizard/hr_payroll_create_analytic.py
+++ /dev/null
@@ -1,101 +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 time
-
-from osv import fields, osv
-from tools.translate import _
-
-class hr_payroll_create_analytic(osv.osv_memory):
- _name = "hr.payroll.create.analytic"
- _columns = {
- 'company_id': fields.many2one('res.company', 'Company'),
- 'type': fields.selection([('bydeg','By Employee Function'), ('byallded','By Allownce / Deduction')],'Type'),
- }
-
- def do_duplicate(self, cr, uid, ids, context=None):
- account_pool = self.pool.get('account.analytic.account')
- func_pool = self.pool.get('hr.employee.grade')
- ad_pool = self.pool.get('hr.allounce.deduction.categoty')
- if context is None:
- context = {}
- data = self.read(cr, uid, ids, context=context)[0]
- tpy = data['type']
- company = data['company_id']
-
- function_ids = func_pool.search(cr, uid, [], context=context)
- ad_ids = ad_pool.search(cr, uid, [], context=context)
-
- if tpy == 'bydeg':
- for function in func_pool.browse(cr, uid, function_ids, context=context):
- res = {
- 'name':function.name,
- 'company_id':company
- }
- fid = account_pool.create(cr, uid, res, context=context)
- res = {
- 'name':'Basic Salary',
- 'company_id':company,
- 'parent_id': fid
- }
- account_pool.create(cr, uid, res, context=context)
- for ad in ad_pool.browse(cr, uid, ad_ids, context=context):
- res = {
- 'name':ad.name,
- 'company_id':company,
- 'parent_id': fid
- }
- account_pool.create(cr, uid, res, context=context)
-
-
-
- elif tpy == 'byallded':
- res = {
- 'name':'Basic Salary',
- 'company_id':company
- }
- adid = account_pool.create(cr, uid, res, context=context)
- for function in func_pool.browse(cr, uid, function_ids, context=context):
- res = {
- 'name':function.name,
- 'company_id':company,
- 'parent_id': adid
- }
- account_pool.create(cr, uid, res, context=context)
-
- for ad in ad_pool.browse(cr, uid, ad_ids, context=context):
- res = {
- 'name':ad.name,
- 'company_id':company,
- }
- adid = account_pool.create(cr, uid, res, context=context)
- for function in func_pool.browse(cr, uid, function_ids, context=context):
- res = {
- 'name':function.name,
- 'company_id':company,
- 'parent_id': adid
- }
- account_pool.create(cr, uid, res, context=context)
-
- return {}
-hr_payroll_create_analytic()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_payroll/wizard/hr_payroll_create_analytic.xml b/addons/hr_payroll/wizard/hr_payroll_create_analytic.xml
deleted file mode 100644
index 8ef12aa586a..00000000000
--- a/addons/hr_payroll/wizard/hr_payroll_create_analytic.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
- Create Analytic
- hr.payroll.create.analytic
- form
-
-
-
-
-
-
- Create Analytic Structure
- ir.actions.act_window
- hr.payroll.create.analytic
- form
- form
- new
-
-
-
-
\ No newline at end of file
diff --git a/addons/hr_payroll/wizard/hr_payroll_employees_detail.py b/addons/hr_payroll/wizard/hr_payroll_employees_detail.py
index c2d0e3c4116..3cd204d76b3 100755
--- a/addons/hr_payroll/wizard/hr_payroll_employees_detail.py
+++ b/addons/hr_payroll/wizard/hr_payroll_employees_detail.py
@@ -29,18 +29,23 @@ class hr_payroll_employees_detail(osv.osv_memory):
_name ='hr.payroll.employees.detail'
_columns = {
'employee_ids': fields.many2many('hr.employee', 'payroll_emp_rel','payroll_id','emp_id', 'Employees',required=True),
- 'fiscalyear_id': fields.many2one('account.fiscalyear', 'Fiscal Year', required=True)
+ 'date_from': fields.date('Start Date', required=True),
+ 'date_to': fields.date('End Date', required=True),
+ #'fiscalyear_id': fields.many2one('account.fiscalyear', 'Fiscal Year', required=True)
}
- def _get_fiscalyear(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
- fiscal_ids = self.pool.get('account.fiscalyear').search(cr,uid,[], context=context)
- if fiscal_ids:
- return fiscal_ids[0]
- return False
+# def _get_fiscalyear(self, cr, uid, ids, context=None):
+# if context is None:
+# context = {}
+# fiscal_ids = self.pool.get('account.fiscalyear').search(cr,uid,[], context=context)
+# if fiscal_ids:
+# return fiscal_ids[0]
+# return False
_defaults = {
- 'fiscalyear_id':_get_fiscalyear,
+# 'fiscalyear_id':_get_fiscalyear,
+ 'date_from':time.strftime('%Y-01-01'),
+ 'date_to':time.strftime('%Y-%m-%d'),
+
}
def print_report(self, cr, uid, ids, context=None):
@@ -56,7 +61,7 @@ class hr_payroll_employees_detail(osv.osv_memory):
context = {}
datas = {'ids': context.get('active_ids', [])}
- res = self.read(cr, uid, ids, ['employee_ids', 'fiscalyear_id'], context=context)
+ res = self.read(cr, uid, ids, ['employee_ids', 'date_from', 'date_to'], context=context)
res = res and res[0] or {}
datas['form'] = res
return {
diff --git a/addons/hr_payroll/wizard/hr_payroll_employees_detail.xml b/addons/hr_payroll/wizard/hr_payroll_employees_detail.xml
index a6c539ddae8..e65278e1b94 100644
--- a/addons/hr_payroll/wizard/hr_payroll_employees_detail.xml
+++ b/addons/hr_payroll/wizard/hr_payroll_employees_detail.xml
@@ -7,12 +7,13 @@
form
@@ -395,33 +395,33 @@
-
-
-
-
-
+
+
-
@@ -433,7 +433,7 @@
tree
-
+
@@ -486,7 +486,7 @@
-
+
diff --git a/addons/hr_timesheet_invoice/report/report_analytic.py b/addons/hr_timesheet_invoice/report/report_analytic.py
index 0b3d1440f23..d2db7fd4027 100644
--- a/addons/hr_timesheet_invoice/report/report_analytic.py
+++ b/addons/hr_timesheet_invoice/report/report_analytic.py
@@ -21,6 +21,8 @@
from osv import fields,osv
import tools
+from decimal_precision import decimal_precision as dp
+
class report_analytic_account_close(osv.osv):
_name = "report.analytic.account.close"
@@ -70,8 +72,8 @@ class report_account_analytic_line_to_invoice(osv.osv):
'account_id':fields.many2one('account.analytic.account', 'Analytic account', readonly=True),
'product_uom_id':fields.many2one('product.uom', 'UoM', readonly=True),
'unit_amount': fields.float('Units', readonly=True),
- 'sale_price': fields.float('Sale price', readonly=True),
- 'amount': fields.float('Amount', readonly=True),
+ 'sale_price': fields.float('Sale price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
+ 'amount': fields.float('Amount', readonly=True, digits_compute=dp.get_precision('Account')),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
}
diff --git a/addons/hr_timesheet_invoice/report/report_analytic_view.xml b/addons/hr_timesheet_invoice/report/report_analytic_view.xml
index f5573a394ef..6b06ce4fcde 100644
--- a/addons/hr_timesheet_invoice/report/report_analytic_view.xml
+++ b/addons/hr_timesheet_invoice/report/report_analytic_view.xml
@@ -8,7 +8,7 @@
form
-
-
-
-
- hr.timesheet.sheet.tree.simplified
+ hr.timesheet.sheet.tree
hr_timesheet_sheet.sheet
tree
-
+
+
-
-
-
+
+
+
@@ -341,7 +322,9 @@
-
+
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_workflow.xml b/addons/hr_timesheet_sheet/hr_timesheet_workflow.xml
index 11af4574a4a..b664fd79c96 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_workflow.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_workflow.xml
@@ -1,21 +1,21 @@
-
+
-
+
Timesheets validation
-
+
-
+
hr_timesheet_sheet.sheet
hr_timesheet_sheet.sheet
True
-
+
new
@@ -42,7 +42,7 @@
write({'state':'done'})
True
-
+
@@ -56,13 +56,11 @@
done
-
cancel
-
diff --git a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml
index a2bf0aa24e5..7c259016fca 100644
--- a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml
+++ b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml
@@ -1,21 +1,21 @@
-
-
-
+
-
-
-
+
@@ -24,7 +24,7 @@
-
+
@@ -35,7 +35,7 @@
-
+
@@ -46,7 +46,7 @@
-
+
@@ -68,7 +68,7 @@
-
+
@@ -91,39 +91,32 @@
-
-
-
+
-
-
-
-
-
+
-
-
+
-
-
+
-
@@ -131,58 +124,55 @@
-
+
-
-
+
-
-
+
-
-
-
-
-
+
-
+
-
+
-
+
diff --git a/addons/hr_timesheet_sheet/report/__init__.py b/addons/hr_timesheet_sheet/report/__init__.py
index b06b0608356..8dac73f07ec 100644
--- a/addons/hr_timesheet_sheet/report/__init__.py
+++ b/addons/hr_timesheet_sheet/report/__init__.py
@@ -19,7 +19,5 @@
#
##############################################################################
-import timesheet_report
import hr_timesheet_report
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
index 9c0588f618e..05cba7f1e49 100644
--- a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
+++ b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
@@ -26,7 +26,7 @@
-
+
@@ -54,8 +54,8 @@
domain="[('date','<=', (datetime.date (int(time.strftime('%%Y')), datetime.date.today().month, 1) - datetime.timedelta (days = 1)).strftime('%%Y-%%m-%%d')),('date','>',(datetime.date (int(time.strftime('%%Y')), datetime.date.today().month-1, 1)).strftime('%%Y-%%m-%%d'))]"
help="Timesheet of last month"/>
-
-
+
+
@@ -71,8 +71,8 @@
-
-
+
+
@@ -80,7 +80,7 @@
-
+
diff --git a/addons/hr_timesheet_sheet/report/timesheet_report.py b/addons/hr_timesheet_sheet/report/timesheet_report.py
deleted file mode 100644
index a8c0440a053..00000000000
--- a/addons/hr_timesheet_sheet/report/timesheet_report.py
+++ /dev/null
@@ -1,122 +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 tools
-from osv import fields,osv
-
-class timesheet_report(osv.osv):
- _name = "timesheet.report"
- _description = "Timesheet"
- _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),
- 'name': fields.char('Description', size=64,readonly=True),
- 'product_id' : fields.many2one('product.product', 'Product'),
- 'general_account_id' : fields.many2one('account.account', 'General Account', readonly=True),
- 'user_id': fields.many2one('res.users', 'User',readonly=True),
- 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing',readonly=True),
- 'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True),
- 'nbr': fields.integer('#Nbr',readonly=True),
- 'total_diff': fields.float('#Total Diff',readonly=True),
- 'total_timesheet': fields.float('#Total Timesheet',readonly=True),
- 'total_attendance': fields.float('#Total Attendance',readonly=True),
- 'company_id': fields.many2one('res.company', 'Company',readonly=True),
- 'department_id':fields.many2one('hr.department','Department',readonly=True),
- 'date_from': fields.date('Date from',readonly=True,),
- 'date_to': fields.date('Date to',readonly=True),
- 'date_current': fields.date('Current date', required=True),
- 'state' : fields.selection([
- ('new', 'New'),
- ('draft','Draft'),
- ('confirm','Confirmed'),
- ('done','Done')], 'State', readonly=True),
- 'quantity': fields.float('#Quantity',readonly=True),
- 'cost': fields.float('#Cost',readonly=True),
- }
-
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'timesheet_report')
- cr.execute("""
- create or replace view timesheet_report as (
- select
- min(aal.id) as id,
- htss.date_current,
- htss.name,
- htss.date_from,
- htss.date_to,
- to_char(htss.date_current,'YYYY') as year,
- to_char(htss.date_current,'MM') as month,
- to_char(htss.date_current, 'YYYY-MM-DD') as day,
- count(*) as nbr,
- aal.unit_amount as quantity,
- aal.amount as cost,
- aal.account_id,
- aal.product_id,
- (SELECT sum(day.total_difference)
- FROM hr_timesheet_sheet_sheet AS sheet
- LEFT JOIN hr_timesheet_sheet_sheet_day AS day
- ON (sheet.id = day.sheet_id
- AND day.name = sheet.date_current) where sheet.id=htss.id) as total_diff,
- (SELECT sum(day.total_timesheet)
- FROM hr_timesheet_sheet_sheet AS sheet
- LEFT JOIN hr_timesheet_sheet_sheet_day AS day
- ON (sheet.id = day.sheet_id
- AND day.name = sheet.date_current) where sheet.id=htss.id) as total_timesheet,
- (SELECT sum(day.total_attendance)
- FROM hr_timesheet_sheet_sheet AS sheet
- LEFT JOIN hr_timesheet_sheet_sheet_day AS day
- ON (sheet.id = day.sheet_id
- AND day.name = sheet.date_current) where sheet.id=htss.id) as total_attendance,
- aal.to_invoice,
- aal.general_account_id,
- htss.user_id,
- htss.company_id,
- htss.department_id,
- htss.state
- from account_analytic_line as aal
- left join hr_analytic_timesheet as hat ON (hat.line_id=aal.id)
- left join hr_timesheet_sheet_sheet as htss ON (hat.line_id=htss.id)
- group by
- to_char(htss.date_current,'YYYY'),
- to_char(htss.date_current,'MM'),
- to_char(htss.date_current, 'YYYY-MM-DD'),
- aal.account_id,
- htss.date_from,
- htss.date_to,
- aal.unit_amount,
- aal.amount,
- htss.date_current,
- aal.to_invoice,
- aal.product_id,
- aal.general_account_id,
- htss.name,
- htss.company_id,
- htss.state,
- htss.id,
- htss.department_id,
- htss.user_id
- )
- """)
-timesheet_report()
diff --git a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml
deleted file mode 100644
index 08abc6db63b..00000000000
--- a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
- timesheet.report.graph
- timesheet.report
- graph
-
-
-
-
-
-
-
-
-
- timesheet.report.tree
- timesheet.report
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- timesheet.report.search
- timesheet.report
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Timesheet Sheet Analysis
- timesheet.report
- form
- tree,graph
- {'search_default_month':1,'search_default_User_id':1,'group_by_no_leaf':1,'group_by':[]}
-
-
-
-
-
diff --git a/addons/hr_timesheet_sheet/security/ir.model.access.csv b/addons/hr_timesheet_sheet/security/ir.model.access.csv
index 116396612e8..c11a3ce7099 100644
--- a/addons/hr_timesheet_sheet/security/ir.model.access.csv
+++ b/addons/hr_timesheet_sheet/security/ir.model.access.csv
@@ -1,13 +1,9 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_hr_timesheet_sheet_sheet_user","hr_timesheet_sheet.sheet.user","model_hr_timesheet_sheet_sheet","base.group_hr_user",1,1,1,1
+"access_hr_timesheet_sheet_sheet_system_user","hr_timesheet_sheet.sheet.system.user","model_hr_timesheet_sheet_sheet","base.group_user",1,0,0,0
"access_hr_timesheet_sheet_sheet_day","hr_timesheet_sheet.sheet.day","model_hr_timesheet_sheet_sheet_day","base.group_hr_user",1,1,1,1
"access_hr_timesheet_sheet_sheet_account","hr_timesheet_sheet.sheet.account","model_hr_timesheet_sheet_sheet_account","base.group_hr_user",1,1,1,1
"access_hr_timesheet_report","hr.timesheet.report","model_hr_timesheet_report","base.group_hr_manager",1,1,1,1
-"access_hr_timesheet_sheet_sheet_manager","hr_timesheet_sheet.sheet.manager","model_hr_timesheet_sheet_sheet","base.group_hr_manager",1,1,1,1
-"access_hr_timesheet_sheet_sheet_system","hr_timesheet_sheet.sheet.system","model_hr_timesheet_sheet_sheet","base.group_system",1,0,0,0
-"access_timesheet_report_employee","timesheet.report.employee","model_timesheet_report","base.group_user",1,1,1,0
-"access_hr_timesheet_sheet_sheet_employee","hr_timesheet_sheet.sheet.employee","model_hr_timesheet_sheet_sheet","base.group_user",1,1,1,0
-"access_hr_timesheet_sheet_sheet_day_manager","hr_timesheet_sheet.sheet.day.manager","model_hr_timesheet_sheet_sheet_day","base.group_hr_manager",1,1,1,1
-"access_hr_timesheet_sheet_sheet_account_manager","hr_timesheet_sheet.sheet.account.manager","model_hr_timesheet_sheet_sheet_account","base.group_hr_manager",1,1,1,1
-"access_hr_timesheet_sheet_sheet_day_employee","hr_timesheet_sheet.sheet.day.employee","model_hr_timesheet_sheet_sheet_day","base.group_user",1,0,0,0
-"access_hr_timesheet_sheet_sheet_account_employee","hr_timesheet_sheet.sheet.account.employee","model_hr_timesheet_sheet_sheet_account","base.group_user",1,0,0,0
+"access_timesheet_report_employee","timesheet.report.employee","model_timesheet_report","base.group_hr_user",1,1,1,1
+"access_hr_analytic_timesheet_system_user","hr.analytic.timesheet.system.user","model_hr_analytic_timesheet","base.group_user",1,0,0,0
+"access_hr_timesheet_sheet_sheet_day","hr.timesheet.sheet.sheet.day.user","model_hr_timesheet_sheet_sheet_day","base.group_user",1,0,0,0
diff --git a/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml b/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml
index bb5752d6c9e..808045eb677 100644
--- a/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml
+++ b/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml
@@ -70,6 +70,7 @@
name: Week-22(2010)
state: new
user_id: base.user_root
+ employee_id: 'hr_employee_employee0'
-
Now , at the time of login, I create Attendances and perform "Sign In" action.
-
diff --git a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current_view.xml b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current_view.xml
index 19eacdae472..f9944d0949f 100644
--- a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current_view.xml
+++ b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current_view.xml
@@ -6,7 +6,7 @@
hr.timesheet.current.open
form
-
+
@@ -17,7 +17,7 @@
- Current Timesheet
+ My Timesheet
hr.timesheet.current.open
form
tree,form
@@ -25,7 +25,11 @@
new
-
+
+
+
diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml
index b6e8b926a0c..456c4dd1f7a 100644
--- a/addons/idea/idea_view.xml
+++ b/addons/idea/idea_view.xml
@@ -65,7 +65,7 @@
+ id="base.menu_lunch_survey_root" sequence="20" groups="base.group_tool_manager"/>
@@ -90,7 +90,8 @@
+ action="action_idea_select"
+ groups="base.group_tool_user"/>
@@ -377,17 +378,17 @@
- Statistics on Votes
+ Vote Statistics
idea.vote.stat
form
graph,tree
-
+
+ id="menu_idea_vote_stat" action="action_idea_vote_stat" groups="base.group_tool_user"/>
diff --git a/addons/idea/report/report_vote_view.xml b/addons/idea/report/report_vote_view.xml
index 9556f86a281..c68c829794b 100644
--- a/addons/idea/report/report_vote_view.xml
+++ b/addons/idea/report/report_vote_view.xml
@@ -60,12 +60,12 @@
domain="[('idea_state','=',('cancel'))]"/>
-
+
-
-
+
+
@@ -74,9 +74,9 @@
-
-
-
+
+
+
@@ -91,7 +91,7 @@
{'search_default_User':1,'search_default_State':1,'group_by_no_leaf':1,'group_by':[]}
-
+
diff --git a/addons/idea/security/idea_security.xml b/addons/idea/security/idea_security.xml
index ef377c799c9..4b060c51e6c 100644
--- a/addons/idea/security/idea_security.xml
+++ b/addons/idea/security/idea_security.xml
@@ -2,10 +2,6 @@
-
- Sales / User
-
-
Tools / Manager
@@ -13,7 +9,6 @@
Tools / User
-
diff --git a/addons/idea/security/ir.model.access.csv b/addons/idea/security/ir.model.access.csv
index 30dc0850c3f..b76cc9bd58a 100644
--- a/addons/idea/security/ir.model.access.csv
+++ b/addons/idea/security/ir.model.access.csv
@@ -1,26 +1,8 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_idea_category","idea.category","model_idea_category","base.group_user",1,1,1,1
-"access_idea_idea","idea.idea","model_idea_idea","base.group_user",1,1,1,1
-"access_idea_vote","idea.vote","model_idea_vote","base.group_user",1,1,1,1
-"access_idea_vote_stat","idea.vote.stat","model_idea_vote_stat","base.group_user",1,1,1,1
-"access_idea_category_system","idea.category system","model_idea_category","base.group_system",1,1,1,1
-"access_idea_comment","idea.comment","model_idea_comment","base.group_system",1,1,1,1
-"access_idea_comment_base_user","idea.comment.base.user","model_idea_comment","base.group_user",1,1,1,1
-"access_report_vote","report.vote","model_report_vote","base.group_user",1,1,1,1
-"access_idea_idea_sale_salesman","idea.idea.sale","model_idea_idea","base.group_sale_salesman",1,1,1,1
-"access_idea_vote_sale_salesman","idea.vote.sale","model_idea_vote","base.group_sale_salesman",1,1,1,1
"access_idea_category_user","idea.category user","model_idea_category","base.group_tool_user",1,1,1,1
"access_idea_idea_user","idea.idea user","model_idea_idea","base.group_tool_user",1,1,1,1
"access_idea_vote_user","idea.vote user","model_idea_vote","base.group_tool_user",1,1,1,1
-"access_idea_category_manager","idea.category manager","model_idea_category","base.group_tool_manager",1,1,1,1
-"access_idea_idea_manager","idea.idea manager","model_idea_idea","base.group_tool_manager",1,1,1,1
"access_idea_vote_manager","idea.vote manager","model_idea_vote","base.group_tool_manager",1,1,1,1
"access_idea_vote_stat_user","idea.vote.stat user","model_idea_vote_stat","base.group_tool_user",1,1,1,1
"access_idea_comment_user","idea.comment user","model_idea_comment","base.group_tool_user",1,1,1,1
"access_report_vote_manager","report.vote manager","model_report_vote","base.group_tool_manager",1,1,1,1
-"access_idea_idea_system","idea.idea system","model_idea_idea","base.group_system",1,0,0,0
-"access_idea_vote_system","idea.vote system","model_idea_vote","base.group_system",1,0,0,0
-"access_report_vote_system","report.vote system","model_report_vote","base.group_system",1,0,0,0
-"access_idea_vote_stat_manager","idea.vote.stat manager","model_idea_vote_stat","base.group_tool_manager",1,1,1,1
-"access_idea_vote_stat_system","idea.vote.stat system","model_idea_vote_stat","base.group_system",1,1,1,1
-"access_idea_comment_manager","idea.comment.manager","model_idea_comment","base.group_tool_manager",1,1,1,1
diff --git a/addons/knowledge/i18n/de.po b/addons/knowledge/i18n/de.po
new file mode 100644
index 00000000000..c2a625e82c6
--- /dev/null
+++ b/addons/knowledge/i18n/de.po
@@ -0,0 +1,160 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 06:56+0000\n"
+"PO-Revision-Date: 2010-10-05 13:28+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: knowledge
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,wiki:0
+msgid "Collaborative Content (Wiki)"
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,wiki_quality_manual:0
+msgid "Creates an example skeleton for a standard quality manual."
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,document_ftp:0
+msgid "Shared Repositories (FTP)"
+msgstr ""
+
+#. module: knowledge
+#: model:ir.module.module,shortdesc:knowledge.module_meta_information
+msgid "Knowledge Management System"
+msgstr ""
+
+#. module: knowledge
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: knowledge
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: knowledge
+#: model:ir.ui.menu,name:knowledge.menu_document
+msgid "Knowledge"
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,document_webdav:0
+msgid ""
+"Provides a WebDAV access to your OpenERP's Document Management System. Lets "
+"you access attachments and virtual documents through your standard file "
+"browser."
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: knowledge
+#: view:knowledge.installer:0
+msgid "title"
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,document_ftp:0
+msgid ""
+"Provides an FTP access to your OpenERP's Document Management System. Lets "
+"you access attachments and virtual documents through a standard FTP client."
+msgstr ""
+
+#. module: knowledge
+#: model:ir.module.module,description:knowledge.module_meta_information
+msgid ""
+"Installer for knowledge-based tools\n"
+" "
+msgstr ""
+
+#. module: knowledge
+#: model:ir.ui.menu,name:knowledge.menu_document_configuration
+msgid "Configuration"
+msgstr ""
+
+#. module: knowledge
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: knowledge
+#: model:ir.actions.act_window,name:knowledge.action_knowledge_installer
+msgid "Knowledge Modules Installation"
+msgstr ""
+
+#. module: knowledge
+#: view:ir.actions.todo:0
+msgid "Launch"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,wiki_quality_manual:0
+msgid "Quality Manual"
+msgstr ""
+
+#. module: knowledge
+#: view:knowledge.installer:0
+msgid "Templates of Content"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,document_webdav:0
+msgid "Shared Repositories (WebDAV)"
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,wiki_faq:0
+msgid ""
+"Creates a skeleton internal FAQ pre-filled with documentation about "
+"OpenERP's Document Management System."
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,wiki_faq:0
+msgid "Internal FAQ"
+msgstr ""
+
+#. module: knowledge
+#: model:ir.ui.menu,name:knowledge.menu_document2
+msgid "Collaborative Content"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,config_logo:0
+msgid "Image"
+msgstr ""
+
+#. module: knowledge
+#: model:ir.model,name:knowledge.model_knowledge_installer
+msgid "knowledge.installer"
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,wiki:0
+msgid ""
+"Lets you create wiki pages and page groups in order to keep track of "
+"business knowledge and share it with and between your employees."
+msgstr ""
diff --git a/addons/knowledge/i18n/hi.po b/addons/knowledge/i18n/hi.po
new file mode 100644
index 00000000000..ac649466b76
--- /dev/null
+++ b/addons/knowledge/i18n/hi.po
@@ -0,0 +1,160 @@
+# Hindi translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 06:56+0000\n"
+"PO-Revision-Date: 2010-10-05 07:27+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-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: knowledge
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,wiki:0
+msgid "Collaborative Content (Wiki)"
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,wiki_quality_manual:0
+msgid "Creates an example skeleton for a standard quality manual."
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,document_ftp:0
+msgid "Shared Repositories (FTP)"
+msgstr ""
+
+#. module: knowledge
+#: model:ir.module.module,shortdesc:knowledge.module_meta_information
+msgid "Knowledge Management System"
+msgstr ""
+
+#. module: knowledge
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: knowledge
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "कार्य की परिभाषा में मॉडल का नाम अमान्य है."
+
+#. module: knowledge
+#: model:ir.ui.menu,name:knowledge.menu_document
+msgid "Knowledge"
+msgstr "ज्ञान"
+
+#. module: knowledge
+#: help:knowledge.installer,document_webdav:0
+msgid ""
+"Provides a WebDAV access to your OpenERP's Document Management System. Lets "
+"you access attachments and virtual documents through your standard file "
+"browser."
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: knowledge
+#: view:knowledge.installer:0
+msgid "title"
+msgstr "शीर्षक:"
+
+#. module: knowledge
+#: help:knowledge.installer,document_ftp:0
+msgid ""
+"Provides an FTP access to your OpenERP's Document Management System. Lets "
+"you access attachments and virtual documents through a standard FTP client."
+msgstr ""
+
+#. module: knowledge
+#: model:ir.module.module,description:knowledge.module_meta_information
+msgid ""
+"Installer for knowledge-based tools\n"
+" "
+msgstr ""
+
+#. module: knowledge
+#: model:ir.ui.menu,name:knowledge.menu_document_configuration
+msgid "Configuration"
+msgstr "कॉन्फ़िगरेशन"
+
+#. module: knowledge
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "संरचना देखने के लिए अमान्य XML!"
+
+#. module: knowledge
+#: model:ir.actions.act_window,name:knowledge.action_knowledge_installer
+msgid "Knowledge Modules Installation"
+msgstr ""
+
+#. module: knowledge
+#: view:ir.actions.todo:0
+msgid "Launch"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,wiki_quality_manual:0
+msgid "Quality Manual"
+msgstr ""
+
+#. module: knowledge
+#: view:knowledge.installer:0
+msgid "Templates of Content"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,document_webdav:0
+msgid "Shared Repositories (WebDAV)"
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,wiki_faq:0
+msgid ""
+"Creates a skeleton internal FAQ pre-filled with documentation about "
+"OpenERP's Document Management System."
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,wiki_faq:0
+msgid "Internal FAQ"
+msgstr ""
+
+#. module: knowledge
+#: model:ir.ui.menu,name:knowledge.menu_document2
+msgid "Collaborative Content"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,config_logo:0
+msgid "Image"
+msgstr "चित्र"
+
+#. module: knowledge
+#: model:ir.model,name:knowledge.model_knowledge_installer
+msgid "knowledge.installer"
+msgstr "knowledge.installer"
+
+#. module: knowledge
+#: help:knowledge.installer,wiki:0
+msgid ""
+"Lets you create wiki pages and page groups in order to keep track of "
+"business knowledge and share it with and between your employees."
+msgstr ""
diff --git a/addons/knowledge/i18n/nl.po b/addons/knowledge/i18n/nl.po
index dddbdd3e2fe..0a432783b9e 100644
--- a/addons/knowledge/i18n/nl.po
+++ b/addons/knowledge/i18n/nl.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-08-20 06:56+0000\n"
-"PO-Revision-Date: 2010-09-12 20:38+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2010-10-08 07:31+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Dutch \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:17+0000\n"
+"X-Launchpad-Export-Date: 2010-10-09 12:13+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: knowledge
@@ -22,41 +22,42 @@ msgstr ""
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"De objectnaam moet beginnen met x_ en mag geen speciale tekens bevatten!"
#. module: knowledge
#: field:knowledge.installer,wiki:0
msgid "Collaborative Content (Wiki)"
-msgstr ""
+msgstr "Gezamenlijke inhoud (Wiki)"
#. module: knowledge
#: help:knowledge.installer,wiki_quality_manual:0
msgid "Creates an example skeleton for a standard quality manual."
-msgstr ""
+msgstr "Maakt een voorbeeld raamwerk voor een standaard kwaliteitshandboek."
#. module: knowledge
#: field:knowledge.installer,document_ftp:0
msgid "Shared Repositories (FTP)"
-msgstr ""
+msgstr "Gedeelde Repositories (FTP)"
#. module: knowledge
#: model:ir.module.module,shortdesc:knowledge.module_meta_information
msgid "Knowledge Management System"
-msgstr ""
+msgstr "Kennis Management Systeem"
#. module: knowledge
#: constraint:ir.ui.menu:0
msgid "Error ! You can not create recursive Menu."
-msgstr ""
+msgstr "Fout ! U kunt geen recursief Menu maken."
#. module: knowledge
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Ongeldige modelnaam in de definitie van de actie."
#. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document
msgid "Knowledge"
-msgstr ""
+msgstr "Kennis"
#. module: knowledge
#: help:knowledge.installer,document_webdav:0
@@ -65,16 +66,18 @@ msgid ""
"you access attachments and virtual documents through your standard file "
"browser."
msgstr ""
+"Voorziet in WebDAV toegang tot uw OpenERP Document Management Systeem. Laat "
+"u bijlagen en virtuele documenten benaderen via uw standaard bestandsbeheer."
#. module: knowledge
#: field:knowledge.installer,progress:0
msgid "Configuration Progress"
-msgstr ""
+msgstr "Voortgang configuratie"
#. module: knowledge
#: view:knowledge.installer:0
msgid "title"
-msgstr ""
+msgstr "titel"
#. module: knowledge
#: help:knowledge.installer,document_ftp:0
@@ -82,6 +85,8 @@ msgid ""
"Provides an FTP access to your OpenERP's Document Management System. Lets "
"you access attachments and virtual documents through a standard FTP client."
msgstr ""
+"Voorziet in FTP toegang tot uw OpenERP Document Management Systeem. Laat u "
+"bijlagen en virtuele documenten benaderen via een standaard FTP client."
#. module: knowledge
#: model:ir.module.module,description:knowledge.module_meta_information
@@ -89,41 +94,43 @@ msgid ""
"Installer for knowledge-based tools\n"
" "
msgstr ""
+"Installer voor kennis gebaseerde tools\n"
+" "
#. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document_configuration
msgid "Configuration"
-msgstr ""
+msgstr "Configuratie"
#. module: knowledge
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
-msgstr ""
+msgstr "Ongeldige XML voor weergave opbouw!"
#. module: knowledge
#: model:ir.actions.act_window,name:knowledge.action_knowledge_installer
msgid "Knowledge Modules Installation"
-msgstr ""
+msgstr "Kennis modules installatie"
#. module: knowledge
#: view:ir.actions.todo:0
msgid "Launch"
-msgstr ""
+msgstr "Opstarten"
#. module: knowledge
#: field:knowledge.installer,wiki_quality_manual:0
msgid "Quality Manual"
-msgstr ""
+msgstr "Kwaliteitshandboek"
#. module: knowledge
#: view:knowledge.installer:0
msgid "Templates of Content"
-msgstr ""
+msgstr "Inhoudssjablonen"
#. module: knowledge
#: field:knowledge.installer,document_webdav:0
msgid "Shared Repositories (WebDAV)"
-msgstr ""
+msgstr "Gedeelde Repositories (WebDAV)"
#. module: knowledge
#: help:knowledge.installer,wiki_faq:0
@@ -131,26 +138,28 @@ msgid ""
"Creates a skeleton internal FAQ pre-filled with documentation about "
"OpenERP's Document Management System."
msgstr ""
+"Maakt een raamwerk 'veelgestelde vragen' voorgevuld met documentatie over "
+"OpenERP's Document Management Systeem."
#. module: knowledge
#: field:knowledge.installer,wiki_faq:0
msgid "Internal FAQ"
-msgstr ""
+msgstr "Veelgestelde vragen"
#. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document2
msgid "Collaborative Content"
-msgstr ""
+msgstr "Gezamenlijke inhoud"
#. module: knowledge
#: field:knowledge.installer,config_logo:0
msgid "Image"
-msgstr ""
+msgstr "Afbeelding"
#. module: knowledge
#: model:ir.model,name:knowledge.model_knowledge_installer
msgid "knowledge.installer"
-msgstr ""
+msgstr "knowledge.installer"
#. module: knowledge
#: help:knowledge.installer,wiki:0
@@ -158,3 +167,5 @@ msgid ""
"Lets you create wiki pages and page groups in order to keep track of "
"business knowledge and share it with and between your employees."
msgstr ""
+"Laat u wiki pagina's en pagina groepen maken om bedrijfskennis te volgen en "
+"te delen met en tussen uw medewerkers."
diff --git a/addons/knowledge/installer.py b/addons/knowledge/installer.py
index 7840ffbc276..e74c37f80d0 100644
--- a/addons/knowledge/installer.py
+++ b/addons/knowledge/installer.py
@@ -38,7 +38,7 @@ class knowledge_installer(osv.osv_memory):
help="Lets you create wiki pages and page groups in order "
"to keep track of business knowledge and share it with "
"and between your employees."),
- # Templates of Content
+ # Content templates
'wiki_faq':fields.boolean('Internal FAQ',
help="Creates a skeleton internal FAQ pre-filled with "
"documentation about OpenERP's Document Management "
diff --git a/addons/knowledge/knowledge_installer.xml b/addons/knowledge/knowledge_installer.xml
index 681bf2253d5..068fa9b413b 100644
--- a/addons/knowledge/knowledge_installer.xml
+++ b/addons/knowledge/knowledge_installer.xml
@@ -27,7 +27,7 @@
-
+
@@ -53,6 +53,7 @@
3
+ always
diff --git a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
index ae23bf926e9..e6e08e83b01 100644
--- a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
+++ b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
@@ -39,8 +39,8 @@ class l10n_be_vat_declaration(osv.osv_memory):
'tax_code_id': fields.many2one('account.tax.code', 'Tax Code', domain=[('parent_id', '=', False)]),
'msg': fields.text('File created', size=64, readonly=True),
'file_save': fields.binary('Save File'),
- 'ask_resitution': fields.boolean('Ask Restitution'),
- 'ask_payment': fields.boolean('Ask Payment'),
+ 'ask_resitution': fields.boolean('Ask Restitution',help='It indicates whether a resitution is to made or not?'),
+ 'ask_payment': fields.boolean('Ask Payment',help='It indicates whether a payment is to made or not?'),
'client_nihil': fields.boolean('Last Declaration of Enterprise',help='Tick this case only if it concerns only the last statement on the civil or cessation of activity'),
}
_defaults = {
@@ -65,7 +65,6 @@ class l10n_be_vat_declaration(osv.osv_memory):
obj_company = data_tax.tax_code_id.company_id
else:
obj_company = obj_user.browse(cr, uid, uid, context=context).company_id
- user_cmpny = obj_company.name
vat_no = obj_company.partner_id.vat
if not vat_no:
raise osv.except_osv(_('Data Insufficient'), _('No VAT Number Associated with Main Company!'))
@@ -78,10 +77,8 @@ class l10n_be_vat_declaration(osv.osv_memory):
address = post_code = city = country_code = ''
city, post_code, address, country_code = self.pool.get('res.company')._get_default_ad(obj_company.partner_id.address)
- year_id = obj_fyear.find(cr, uid)
account_period = obj_acc_period.browse(cr, uid, data['period_id'], context=context)
- period_code = account_period.code
send_ref = str(obj_company.partner_id.id) + str(account_period.date_start[5:7]) + str(account_period.date_stop[:4])
data_of_file = '\n'
diff --git a/addons/l10n_be/wizard/l10n_be_account_vat_declaration_view.xml b/addons/l10n_be/wizard/l10n_be_account_vat_declaration_view.xml
index f7f9ff9ed32..fe81a4f9848 100644
--- a/addons/l10n_be/wizard/l10n_be_account_vat_declaration_view.xml
+++ b/addons/l10n_be/wizard/l10n_be_account_vat_declaration_view.xml
@@ -13,24 +13,29 @@
form
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
Save XML
@@ -38,17 +43,14 @@
form
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml
index 19ec96e8023..7ae3a0ab73e 100644
--- a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml
+++ b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/addons/l10n_ch/wizard/bvr_import.py b/addons/l10n_ch/wizard/bvr_import.py
index 611b5720a96..3bcf4255f3f 100644
--- a/addons/l10n_ch/wizard/bvr_import.py
+++ b/addons/l10n_ch/wizard/bvr_import.py
@@ -72,13 +72,12 @@ def _reconstruct_invoice_ref(cursor, user, reference, context=None):
def _import(obj, cursor, user, data, context=None):
pool = pooler.get_pool(cursor.dbname)
+ statement_obj = pool.get('account.bank.statement')
statement_line_obj = pool.get('account.bank.statement.line')
# statement_reconcile_obj = pool.get('account.bank.statement.reconcile')
- voucher_obj = self.pool.get('account.voucher')
- voucher_line_obj = self.pool.get('account.voucher.line')
+ voucher_obj = pool.get('account.voucher')
+ voucher_line_obj = pool.get('account.voucher.line')
move_line_obj = pool.get('account.move.line')
- property_obj = pool.get('ir.property')
- model_fields_obj = pool.get('ir.model.fields')
attachment_obj = pool.get('ir.attachment')
file = data['form']['file']
statement_id = data['id']
@@ -137,22 +136,17 @@ def _import(obj, cursor, user, data, context=None):
total_cost += record['cost']
records.append(record)
- model_fields_ids = model_fields_obj.search(cursor, user, [
- ('name', 'in', ['property_account_receivable', 'property_account_payable']),
- ('model', '=', 'res.partner'),
- ], context=context)
- property_ids = property_obj.search(cursor, user, [
- ('fields_id', 'in', model_fields_ids),
- ('res_id', '=', False),
- ], context=context)
-
+# model_fields_ids = model_fields_obj.search(cursor, user, [
+# ('name', 'in', ['property_account_receivable', 'property_account_payable']),
+# ('model', '=', 'res.partner'),
+# ], context=context)
+# property_ids = property_obj.search(cursor, user, [
+# ('fields_id', 'in', model_fields_ids),
+# ('res_id', '=', False),
+# ], context=context)
account_receivable = False
account_payable = False
- for property in property_obj.browse(cursor, user, property_ids, context=context):
- if property.fields_id.name == 'property_account_receivable':
- account_receivable = int(property.value.split(',')[1])
- elif property.fields_id.name == 'property_account_payable':
- account_payable = int(property.value.split(',')[1])
+ statement = statement_obj.browse(cursor, user, statement_id, context=context)
for record in records:
# Remove the 11 first char because it can be adherent number
@@ -166,6 +160,7 @@ def _import(obj, cursor, user, data, context=None):
'type': (record['amount'] >= 0 and 'customer') or 'supplier',
'statement_id': statement_id,
}
+
line_ids = move_line_obj.search(cursor, user, [
('ref', 'like', reference),
('reconcile_id', '=', False),
@@ -174,22 +169,49 @@ def _import(obj, cursor, user, data, context=None):
if not line_ids:
line_ids = _reconstruct_invoice_ref(cursor, user, reference, None)
- line2reconcile = False
partner_id = False
account_id = False
for line in move_line_obj.browse(cursor, user, line_ids, context=context):
- if line.partner_id.id:
- partner_id = line.partner_id.id
+ account_receivable = line.partner_id.property_account_receivable.id
+ account_payable = line.partner_id.property_account_payable.id
+ partner_id = line.partner_id.id
+ move_id = line.move_id.id
if record['amount'] >= 0:
if round(record['amount'] - line.debit, 2) < 0.01:
- line2reconcile = line.id
+# line2reconcile = line.id
account_id = line.account_id.id
break
else:
if round(line.credit + record['amount'], 2) < 0.01:
- line2reconcile = line.id
+# line2reconcile = line.id
account_id = line.account_id.id
break
+ result = voucher_obj.onchange_partner_id(cursor, user, [], partner_id=partner_id, journal_id=statement.journal_id.id, price=abs(record['amount']), currency_id= statement.currency.id, ttype='payment', context=context)
+
+ voucher_res = { 'type': 'payment' ,
+ 'name': values['name'],
+ 'partner_id': partner_id,
+ 'journal_id': statement.journal_id.id,
+ 'account_id': result.get('account_id', statement.journal_id.default_credit_account_id.id),
+ 'company_id': statement.company_id.id,
+ 'currency_id': statement.currency.id,
+ 'date': record['date'] or time.strftime('%Y-%m-%d'),
+ 'amount': abs(record['amount']),
+ 'period_id': statement.period_id.id
+ }
+ voucher_id = voucher_obj.create(cursor, user, voucher_res, context=context)
+ context.update({'move_line_ids': line_ids})
+ values['voucher_id'] = voucher_id
+ voucher_line_dict = False
+ if result['value']['line_ids']:
+ for line_dict in result['value']['line_ids']:
+ move_line = move_line_obj.browse(cursor, user, line_dict['move_line_id'], context)
+ if move_id == move_line.move_id.id:
+ voucher_line_dict = line_dict
+ if voucher_line_dict:
+ voucher_line_dict.update({'voucher_id':voucher_id})
+ voucher_line_obj.create(cursor, user, voucher_line_dict, context=context)
+
if not account_id:
if record['amount'] >= 0:
account_id = account_receivable
@@ -201,30 +223,6 @@ def _import(obj, cursor, user, data, context=None):
values['account_id'] = account_id
values['partner_id'] = partner_id
- if line2reconcile:
- voucher_res = { 'type': 'payment' ,
- 'name': line.name,
- 'partner_id': line.partner_id.id,
- 'journal_id': statement.journal_id.id,
- 'account_id': account,
- 'company_id': statement.company_id.id,
- 'currency_id': statement.currency.id,
- 'date': line.date or time.strftime('%Y-%m-%d'),
- 'amount': abs(amount),
- 'period_id': statement.period_id.id
- }
- voucher_id = voucher_obj.create(cr, uid, voucher_res, context=context)
- result = voucher_obj.onchange_partner_id(cr, uid, [], partner_id=line.partner_id.id, journal_id=statement.journal_id.id, price=abs(amount), currency_id= statement.currency.id, ttype='payment')
- voucher_line_dict = False
- if result['value']['line_ids']:
- for line_dict in result['value']['line_ids']:
- move_line = self.pool.get('account.move.line').browse(cr, uid, line_dict['move_line_id'], context)
- if line.move_line_id.move_id.id == move_line.move_id.id:
- voucher_line_dict = line_dict
- if voucher_line_dict:
- voucher_line_dict.update({'voucher_id':voucher_id})
- voucher_line_obj.create(cr, uid, voucher_line_dict, context=context)
- values['voucher_id'] = voucher_id
# values['reconcile_id'] = statement_reconcile_obj.create(cursor, user, {
# 'line_ids': [(6, 0, [line2reconcile])],
# }, context=context)
diff --git a/addons/lunch/lunch.py b/addons/lunch/lunch.py
index ad2996315aa..5a777564408 100644
--- a/addons/lunch/lunch.py
+++ b/addons/lunch/lunch.py
@@ -99,7 +99,7 @@ class lunch_cashmove(osv.osv):
'amount': fields.float('Amount', digits=(16, 2)),
'box': fields.many2one('lunch.cashbox', 'Box Name', size=30, required=True),
'active': fields.boolean('Active'),
- 'create_date': fields.datetime('Created date', readonly=True),
+ 'create_date': fields.datetime('Creation Date', readonly=True),
}
_defaults = {
@@ -141,7 +141,7 @@ class lunch_order(osv.osv):
'state': fields.selection([('draft', 'Draft'), ('confirmed', 'Confirmed'), ], \
'State', readonly=True, select=True),
'price': fields.function(_price_get, method=True, string="Price"),
- 'category': fields.many2one('lunch.category','Category',readonly=True),
+ 'category': fields.many2one('lunch.category','Category'),
}
_defaults = {
diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml
index 6b0e4c4b8c7..0ecdea5c017 100644
--- a/addons/lunch/lunch_view.xml
+++ b/addons/lunch/lunch_view.xml
@@ -6,14 +6,14 @@
id="menu_lunch" sequence="1" />
+ id="base.menu_lunch_reporting" sequence="6" groups="base.group_tool_manager"/>
+ id="base.menu_lunch_survey_root" sequence="20" groups="base.group_tool_manager"/>
diff --git a/addons/lunch/security/ir.model.access.csv b/addons/lunch/security/ir.model.access.csv
index b936b26a55e..59670a8d1b1 100644
--- a/addons/lunch/security/ir.model.access.csv
+++ b/addons/lunch/security/ir.model.access.csv
@@ -1,20 +1,8 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_lunch_category","lunch.category","model_lunch_category","base.group_user",1,1,1,1
-"access_lunch_product","lunch.product","model_lunch_product","base.group_user",1,1,1,1
-"access_lunch_cashbox","lunch.cashbox","model_lunch_cashbox","base.group_user",1,1,1,1
-"access_lunch_order","lunch.order","model_lunch_order","base.group_user",1,1,1,1
-"access_report_lunch_amount","report.lunch.amount","model_report_lunch_amount","base.group_user",1,1,1,1
-"access_lunch_order_sale_salesman","lunch.order.sale","model_lunch_order","base.group_sale_salesman",1,1,1,1
"access_lunch_order_user","lunch.order user","model_lunch_order","base.group_tool_user",1,1,1,1
-"access_lunch_order_manager","lunch.order manager","model_lunch_order","base.group_tool_manager",1,1,1,1
"access_lunch_cashmove_user","lunch.cashmove user","model_lunch_cashmove","base.group_tool_user",1,1,1,1
-"access_lunch_cashmove_manager","lunch.cashmove manager","model_lunch_cashmove","base.group_tool_manager",1,1,1,1
"access_report_lunch_amount_manager","report.lunch.amount manager","model_report_lunch_amount","base.group_tool_manager",1,1,1,1
-"access_lunch_category_system","lunch.category system","model_lunch_category","base.group_system",1,1,1,1
-"access_lunch_product_system","lunch.product system","model_lunch_product","base.group_system",1,1,1,1
-"access_lunch_cashbox_system","lunch.cashbox system","model_lunch_cashbox","base.group_system",1,1,1,1
-"access_lunch_order_system","lunch.order system","model_lunch_order","base.group_system",1,0,0,0
-"access_lunch_cashmove_system","lunch.cashmove system","model_lunch_cashmove","base.group_system",1,0,0,0
+"access_lunch_category_manager","lunch.category.user","model_lunch_category","base.group_tool_user",1,1,1,1
"access_report_lunch_order_manager","report.lunch.order manager","model_report_lunch_order","base.group_tool_manager",1,1,1,1
"access_lunch_product_user","lunch.product user","model_lunch_product","base.group_tool_user",1,1,1,1
"access_lunch_cashbox_user","lunch.cashbox user","model_lunch_cashbox","base.group_tool_user",1,1,1,1
diff --git a/addons/lunch/security/lunch_security.xml b/addons/lunch/security/lunch_security.xml
index 6c3559fa138..0014f38182b 100644
--- a/addons/lunch/security/lunch_security.xml
+++ b/addons/lunch/security/lunch_security.xml
@@ -2,9 +2,6 @@
-
- Sales / User
-
Tools / Manager
diff --git a/addons/lunch/wizard/lunch_order_cancel_view.xml b/addons/lunch/wizard/lunch_order_cancel_view.xml
index d47cc6d8ee9..e50f4ad222c 100644
--- a/addons/lunch/wizard/lunch_order_cancel_view.xml
+++ b/addons/lunch/wizard/lunch_order_cancel_view.xml
@@ -34,7 +34,7 @@
+ view_mode="form" target="new" view_type="form"/>
diff --git a/addons/lunch/wizard/lunch_order_confirm_view.xml b/addons/lunch/wizard/lunch_order_confirm_view.xml
index dabcd7d5e84..eba7d12c846 100644
--- a/addons/lunch/wizard/lunch_order_confirm_view.xml
+++ b/addons/lunch/wizard/lunch_order_confirm_view.xml
@@ -36,7 +36,7 @@
+ view_mode="form" target="new" view_type="form"/>
diff --git a/addons/mail_gateway/mail_gateway.py b/addons/mail_gateway/mail_gateway.py
index 9900540acae..a116a18b56d 100644
--- a/addons/mail_gateway/mail_gateway.py
+++ b/addons/mail_gateway/mail_gateway.py
@@ -199,11 +199,11 @@ class mailgate_message(osv.osv):
if action_ids:
action_data = action_pool.read(cr, uid, action_ids[0], context=context)
action_data.update({
- 'res_id': res_id,
+ 'domain' : "[('id','=',%d)]"%(res_id),
'nodestroy': True
})
return action_data
-
+
def open_attachment(self, cr, uid, ids, context):
""" To Open attachments
@param self: The object pointer.
@@ -214,11 +214,12 @@ class mailgate_message(osv.osv):
"""
action_data = False
action_pool = self.pool.get('ir.actions.act_window')
+ message_pool = self.browse(cr ,uid, ids)[0]
action_ids = action_pool.search(cr, uid, [('res_model', '=', 'ir.attachment')])
if action_ids:
action_data = action_pool.read(cr, uid, action_ids[0], context=context)
action_data.update({
- 'domain': [('res_id','in',ids),('res_model','=',self._name)],
+ 'domain': [('res_id','=',message_pool.res_id),('res_model','=',message_pool.model)],
'nodestroy': True
})
return action_data
diff --git a/addons/mail_gateway/mail_gateway_view.xml b/addons/mail_gateway/mail_gateway_view.xml
index 706996ed55a..ab118295db5 100644
--- a/addons/mail_gateway/mail_gateway_view.xml
+++ b/addons/mail_gateway/mail_gateway_view.xml
@@ -135,16 +135,6 @@
-
- Emails
- mailgate.message
- tree,form
- form
- [('history', '=', True)]
-
- {"search_default_user_id":uid}
-
-
Mailgateway Threads
mailgate.thread
@@ -196,18 +186,9 @@
view_id="view_mailgate_message_tree"
/>
-
-
-
-
-
diff --git a/addons/mail_gateway/res_partner_view.xml b/addons/mail_gateway/res_partner_view.xml
index 3cb1bb7fe5a..dbae434d46f 100644
--- a/addons/mail_gateway/res_partner_view.xml
+++ b/addons/mail_gateway/res_partner_view.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/addons/marketing/i18n/de.po b/addons/marketing/i18n/de.po
new file mode 100644
index 00000000000..7761c2921ff
--- /dev/null
+++ b/addons/marketing/i18n/de.po
@@ -0,0 +1,116 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 07:04+0000\n"
+"PO-Revision-Date: 2010-10-05 13:29+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: marketing
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: marketing
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: marketing
+#: view:marketing.installer:0
+msgid "title"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,email_template:0
+msgid "Automated E-Mails"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,config_logo:0
+msgid "Image"
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,marketing_campaign:0
+msgid ""
+"Helps you to manage marketing campaigns and automate actions and "
+"communication steps."
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,marketing_campaign_mailchimp:0
+msgid ""
+"This modules integrate mailchimp.com's service with OpenERP to automate mass "
+"mailings."
+msgstr ""
+
+#. module: marketing
+#: model:ir.module.module,description:marketing.module_meta_information
+msgid "Menu for Marketing"
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,email_template:0
+msgid ""
+"Helps you to design templates of emails and integrate them in your different "
+"processes."
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,crm_profiling:0
+msgid ""
+"Helps you to perform segmentation within partners and design questionaires."
+msgstr ""
+
+#. module: marketing
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: marketing
+#: model:ir.module.module,shortdesc:marketing.module_meta_information
+msgid "Marketing"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,crm_profiling:0
+msgid "Profiling Tools"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,marketing_campaign:0
+msgid "Marketing Campaigns"
+msgstr ""
+
+#. module: marketing
+#: model:ir.model,name:marketing.model_marketing_installer
+msgid "marketing.installer"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,marketing_campaign_mailchimp:0
+msgid "Mailchimp Integration"
+msgstr ""
+
+#. module: marketing
+#: model:ir.actions.act_window,name:marketing.action_marketing_installer
+msgid "Marketing Modules Installation"
+msgstr ""
diff --git a/addons/marketing/i18n/nl.po b/addons/marketing/i18n/nl.po
index 75078a01151..d194189a5ee 100644
--- a/addons/marketing/i18n/nl.po
+++ b/addons/marketing/i18n/nl.po
@@ -8,45 +8,46 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-08-20 07:04+0000\n"
-"PO-Revision-Date: 2010-09-12 20:51+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2010-10-08 07:32+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Dutch \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:17+0000\n"
+"X-Launchpad-Export-Date: 2010-10-09 12:13+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: marketing
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
-msgstr ""
+msgstr "Ongeldige XML, kan overzicht niet weergeven!"
#. module: marketing
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"De objectnaam moet beginnen met x_ en mag geen speciale tekens bevatten!"
#. module: marketing
#: field:marketing.installer,progress:0
msgid "Configuration Progress"
-msgstr ""
+msgstr "Voortgang configuratie"
#. module: marketing
#: view:marketing.installer:0
msgid "title"
-msgstr ""
+msgstr "titel"
#. module: marketing
#: field:marketing.installer,email_template:0
msgid "Automated E-Mails"
-msgstr ""
+msgstr "Automatische e-mails"
#. module: marketing
#: field:marketing.installer,config_logo:0
msgid "Image"
-msgstr ""
+msgstr "Afbeelding"
#. module: marketing
#: help:marketing.installer,marketing_campaign:0
@@ -54,6 +55,8 @@ msgid ""
"Helps you to manage marketing campaigns and automate actions and "
"communication steps."
msgstr ""
+"Helpt u marketing campagnes te beheren en acties en communicatie stappen te "
+"automatiseren."
#. module: marketing
#: help:marketing.installer,marketing_campaign_mailchimp:0
@@ -61,11 +64,13 @@ msgid ""
"This modules integrate mailchimp.com's service with OpenERP to automate mass "
"mailings."
msgstr ""
+"Deze module integreert mailchimp.com's service met OpenERP om bulk mailings "
+"te automatiseren."
#. module: marketing
#: model:ir.module.module,description:marketing.module_meta_information
msgid "Menu for Marketing"
-msgstr ""
+msgstr "Menu voor marketing"
#. module: marketing
#: help:marketing.installer,email_template:0
@@ -73,44 +78,47 @@ msgid ""
"Helps you to design templates of emails and integrate them in your different "
"processes."
msgstr ""
+"Helpt u om email sjablonen te ontwerpen en te integreren in uw verschillende "
+"processen."
#. module: marketing
#: help:marketing.installer,crm_profiling:0
msgid ""
"Helps you to perform segmentation within partners and design questionaires."
msgstr ""
+"Helpt u om binnen relaties te segmenteren en vragenlijsten te ontwerpen."
#. module: marketing
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Ongeldige modelnaam in de definitie van de actie."
#. module: marketing
#: model:ir.module.module,shortdesc:marketing.module_meta_information
msgid "Marketing"
-msgstr ""
+msgstr "Marketing"
#. module: marketing
#: field:marketing.installer,crm_profiling:0
msgid "Profiling Tools"
-msgstr ""
+msgstr "Profilering gereedschappen"
#. module: marketing
#: field:marketing.installer,marketing_campaign:0
msgid "Marketing Campaigns"
-msgstr ""
+msgstr "Marketing Campagnes"
#. module: marketing
#: model:ir.model,name:marketing.model_marketing_installer
msgid "marketing.installer"
-msgstr ""
+msgstr "marketing.installer"
#. module: marketing
#: field:marketing.installer,marketing_campaign_mailchimp:0
msgid "Mailchimp Integration"
-msgstr ""
+msgstr "Mailchimp Integratie"
#. module: marketing
#: model:ir.actions.act_window,name:marketing.action_marketing_installer
msgid "Marketing Modules Installation"
-msgstr ""
+msgstr "Marketing modules installatie"
diff --git a/addons/marketing/i18n/ru.po b/addons/marketing/i18n/ru.po
new file mode 100644
index 00000000000..e0e0b256623
--- /dev/null
+++ b/addons/marketing/i18n/ru.po
@@ -0,0 +1,124 @@
+# Russian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 07:04+0000\n"
+"PO-Revision-Date: 2010-10-10 07:29+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Russian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-11 04:45+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: marketing
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Некорректный формат XML для просмотра архитектуры!"
+
+#. module: marketing
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Название объекта должно начинаться с x_ и не должно содержать специальных "
+"символов !"
+
+#. module: marketing
+#: field:marketing.installer,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: marketing
+#: view:marketing.installer:0
+msgid "title"
+msgstr "заголовок"
+
+#. module: marketing
+#: field:marketing.installer,email_template:0
+msgid "Automated E-Mails"
+msgstr "Автоматизированные рассылки"
+
+#. module: marketing
+#: field:marketing.installer,config_logo:0
+msgid "Image"
+msgstr "Изображение"
+
+#. module: marketing
+#: help:marketing.installer,marketing_campaign:0
+msgid ""
+"Helps you to manage marketing campaigns and automate actions and "
+"communication steps."
+msgstr ""
+"Помогает Вам настроить маркетинговые кампании и автоматизировать действия и "
+"этапы взамодействия"
+
+#. module: marketing
+#: help:marketing.installer,marketing_campaign_mailchimp:0
+msgid ""
+"This modules integrate mailchimp.com's service with OpenERP to automate mass "
+"mailings."
+msgstr ""
+"Этот модуль интегрирует в OpenERP сервисы mailchimp.com для автоматизации "
+"почтовых рассылок"
+
+#. module: marketing
+#: model:ir.module.module,description:marketing.module_meta_information
+msgid "Menu for Marketing"
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,email_template:0
+msgid ""
+"Helps you to design templates of emails and integrate them in your different "
+"processes."
+msgstr ""
+"Помогает разработать шаблоны сообщений электронной почты и интегрировать их "
+"в ваши процессы."
+
+#. module: marketing
+#: help:marketing.installer,crm_profiling:0
+msgid ""
+"Helps you to perform segmentation within partners and design questionaires."
+msgstr ""
+
+#. module: marketing
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Недопустимое имя модели в определении действия."
+
+#. module: marketing
+#: model:ir.module.module,shortdesc:marketing.module_meta_information
+msgid "Marketing"
+msgstr "Маркетинг"
+
+#. module: marketing
+#: field:marketing.installer,crm_profiling:0
+msgid "Profiling Tools"
+msgstr "Средства профилирования"
+
+#. module: marketing
+#: field:marketing.installer,marketing_campaign:0
+msgid "Marketing Campaigns"
+msgstr "Маркетинговые кампании"
+
+#. module: marketing
+#: model:ir.model,name:marketing.model_marketing_installer
+msgid "marketing.installer"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,marketing_campaign_mailchimp:0
+msgid "Mailchimp Integration"
+msgstr "Интеграция с сервисом MailChimp"
+
+#. module: marketing
+#: model:ir.actions.act_window,name:marketing.action_marketing_installer
+msgid "Marketing Modules Installation"
+msgstr "Установка модулей маркетинга"
diff --git a/addons/marketing/marketing_view.xml b/addons/marketing/marketing_view.xml
index b96ba8fb7e3..9edd7689484 100644
--- a/addons/marketing/marketing_view.xml
+++ b/addons/marketing/marketing_view.xml
@@ -29,10 +29,9 @@
Configure
+
-
-
@@ -51,6 +50,7 @@
3
+ always
diff --git a/addons/marketing/marketing_wizard.py b/addons/marketing/marketing_wizard.py
index 8d1a6fa50ed..4b95bbb86da 100644
--- a/addons/marketing/marketing_wizard.py
+++ b/addons/marketing/marketing_wizard.py
@@ -29,10 +29,8 @@ class marketing_installer(osv.osv_memory):
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',
- help="This modules integrate mailchimp.com's service with OpenERP to automate mass mailings."),
'crm_profiling':fields.boolean('Profiling Tools',
- help="Helps you to perform segmentation within partners and design segmentation questionnaires")
+ help="Helps you to perform segmentation of partners and design segmentation questionnaires")
}
marketing_installer()
diff --git a/addons/marketing_campaign/i18n/de.po b/addons/marketing_campaign/i18n/de.po
new file mode 100644
index 00000000000..2d9e2072807
--- /dev/null
+++ b/addons/marketing_campaign/i18n/de.po
@@ -0,0 +1,929 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 07:09+0000\n"
+"PO-Revision-Date: 2010-10-05 13:30+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "The current step for this item has no email or report to preview."
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,trigger:0
+msgid "Time"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+#: view:marketing.campaign.workitem:0
+msgid "Group By..."
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,trigger:0
+msgid "Trigger"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,count:0
+msgid "# of Actions"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+msgid "Campaign Editor"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "Today"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "March"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,object_id:0
+#: field:marketing.campaign.segment,object_id:0
+#: field:marketing.campaign.workitem,object_id:0
+msgid "Object"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+msgid "Set to Draft"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,to_ids:0
+msgid "Next Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Synchronization"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "This Year"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,partner_field_id:0
+msgid ""
+"The generated workitems will be linked to the partner related to the record. "
+"If the record is the partner itself left this field empty."
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "No preview"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Outgoing Transitions"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Reset"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,type:0
+msgid ""
+"Describe type of action to be performed on the Activity.Eg : Send email,Send "
+"paper.."
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Year(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,report_directory_id:0
+msgid "This folder is used to store the generated reports"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: selection:marketing.campaign,state:0
+#: selection:marketing.campaign.segment,state:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,trigger:0
+msgid "Automatic"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Activity Definition"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,keep_if_condition_not_met:0
+msgid "Keep as cancelled when condition not met"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,mode:0
+msgid ""
+"Test - It creates and process all the activities directly (without waiting "
+"for the delay on transitions) but does not send emails or produce reports.\n"
+"Test in Realtime - It creates and processes all the activities directly but "
+"does not send emails or produce reports.\n"
+"With Manual Confirmation - the campaigns runs normally, but the user has to "
+"validate all workitem manually.\n"
+"Normal - the campaign runs normally and automatically sends all emails and "
+"reports (be very careful with this mode, you're live!)"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,campaign_id:0
+#: view:marketing.campaign:0
+#: field:marketing.campaign.activity,campaign_id:0
+#: view:marketing.campaign.segment:0
+#: field:marketing.campaign.segment,campaign_id:0
+#: field:marketing.campaign.workitem,campaign_id:0
+msgid "Campaign"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,start:0
+msgid "Start"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,segment_id:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,segment_id:0
+msgid "Segment"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,sync_mode:0
+msgid "Workitem creation mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Month(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid ""
+"The campaign hasn't any starting activity nor any activity with a signal and "
+"no previous activity."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,partner_id:0
+#: model:ir.model,name:marketing_campaign.model_res_partner
+#: field:marketing.campaign.workitem,partner_id:0
+msgid "Partner"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.segment,sync_mode:0
+msgid "If record created after last sync"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Transitions"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Create After Sync"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Dates"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.segment,sync_mode:0
+msgid ""
+"Determines when new workitems should be created for records matching a "
+"segment."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: view:marketing.campaign:0
+#: field:marketing.campaign,state:0
+#: view:marketing.campaign.segment:0
+#: field:marketing.campaign.segment,state:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,state:0
+msgid "State"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.module.module,description:marketing_campaign.module_meta_information
+msgid ""
+"\n"
+"Allows you to setup leads automation through marketing campaigns. The "
+"campaigns\n"
+"are dynamic and multi-channels. The process:\n"
+"* Design marketing campaigns that incluces mail templates, reports to "
+"print,\n"
+" miscelleanous actions, etc.\n"
+"* Define segments that are selections of target people\n"
+"* Launch your campaign to automate communications.\n"
+"\n"
+"If you need demo data, you can install the module "
+"marketing_campaign_crm_demo.\n"
+" "
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,condition:0
+msgid ""
+"Python expression to decide whether the activity can be executed, otherwise "
+"it will be deleted or cancelled.The expression may use the following "
+"[browsable] variables:\n"
+" - activity: the campaign activity\n"
+" - workitem: the campaign workitem\n"
+" - object: the object this campaign item represents\n"
+" - transitions: list of campaign transitions outgoing from this activity\n"
+"...- re: Python regular expression module"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "Marketing Reports"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,type:0
+msgid "Type"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.workitem,res_name:0
+msgid "Resource Name"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+msgid "Run"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid ""
+"The campaign cannot be started: an email account is missing in the email "
+"activity '%s'"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,from_ids:0
+msgid "Previous Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,activity_from_id:0
+msgid "Previous Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Marketing Campaign Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,error_msg:0
+msgid "Error Message"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.action_campaign_analysis_all
+#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_form
+#: model:ir.ui.menu,name:marketing_campaign.menu_action_campaign_analysis_all
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_form
+#: view:marketing.campaign:0
+msgid "Campaigns"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,interval_type:0
+msgid "Interval Unit"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,country_id:0
+msgid "Country"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "July"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_configuration
+msgid "Configuration"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:ir.cron:0
+msgid "Invalid arguments"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Hour(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_segment
+msgid "Campaign Segment"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+#: view:marketing.campaign.workitem:0
+msgid "Cancel"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,keep_if_condition_not_met:0
+msgid ""
+"By activating this option, workitems that aren't executed because the "
+"condition is not met are marked as cancelled instead of being deleted."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "Exceptions"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:res.partner,workitem_ids:0
+msgid "Workitems"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,fixed_cost:0
+msgid "Fixed Cost"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,interval_nbr:0
+msgid "Interval Value"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,revenue:0
+#: field:marketing.campaign.activity,revenue:0
+msgid "Revenue"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "September"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "December"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,month:0
+msgid "Month"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,activity_to_id:0
+msgid "Next Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,email_template_id:0
+msgid "The e-mail to send when this activity is activated"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "This Month"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+msgid "Test Mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_ir_actions_report_xml
+msgid "ir.actions.report.xml"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+msgid "Manual Mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,server_action_id:0
+msgid "The action to perform when this activity is activated"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,partner_field_id:0
+msgid "Partner Field"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_campaign_analysis
+msgid "Campaign Analysis"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "Test in Realtime"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "Test Directly"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,report_directory_id:0
+msgid "Directory"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,sync_last_date:0
+msgid "Latest Synchronization"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: selection:marketing.campaign,state:0
+#: view:marketing.campaign.segment:0
+#: selection:marketing.campaign.segment,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,date_run:0
+msgid "Launching Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Preview"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+#: view:marketing.campaign.workitem:0
+msgid "Status"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Run Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Related Resource"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "August"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "Normal"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,start:0
+msgid "This activity is launched when the campaign starts."
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,signal:0
+msgid ""
+"An activity with a signal can be called programmatically. Be careful, the "
+"workitem is always created when a signal is sent"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "June"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.segment,sync_mode:0
+msgid "All records (no duplicates)"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,date:0
+#: view:marketing.campaign.workitem:0
+msgid "Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "November"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,condition:0
+msgid "Condition"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,report_id:0
+msgid "The report to generate when this activity is activated"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "Exception"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "October"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,fixed_cost:0
+msgid ""
+"Fixed cost for the campaign (used for campaign analysis), see also variable "
+"cost on activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "January"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,date:0
+msgid "Execution Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_workitem
+msgid "Campaign Workitem"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,ir_filter_id:0
+msgid "Filter"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Synchronize"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+#: field:marketing.campaign.activity,server_action_id:0
+#: selection:marketing.campaign.activity,type:0
+msgid "Action"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "Automatic transition"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:res.partner:0
+msgid "History"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,object_id:0
+msgid "Choose the model on which you want this campaign to be run"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.module.module,shortdesc:marketing_campaign.module_meta_information
+msgid "marketing_campaign"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Process"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#: selection:marketing.campaign.transition,trigger:0
+#, python-format
+msgid "Cosmetic"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.transition,trigger:0
+msgid "How is the destination workitem triggered"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: selection:marketing.campaign,state:0
+#: selection:marketing.campaign.segment,state:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "Done"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_email_template
+msgid "Email Templates for Models"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+msgid "Close"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "The campaign cannot be marked as done before all segments are done"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.workitem,res_id:0
+msgid "Resource ID"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_transition
+msgid "Campaign Transition"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: view:marketing.campaign.workitem:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "To Do"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Campaign Step"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_segment_form
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_segment_form
+#: view:marketing.campaign.segment:0
+msgid "Segments"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_segment_opened
+msgid "All Segments"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Incoming Transitions"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.activity,type:0
+msgid "E-mail"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid ""
+"The campaign cannot be started: the email account is not approved in the "
+"email activity '%s'"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Day(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,activity_ids:0
+#: view:marketing.campaign.activity:0
+msgid "Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "May"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Modified after Sync"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: selection:marketing.campaign,state:0
+#: view:marketing.campaign.segment:0
+#: selection:marketing.campaign.segment,state:0
+msgid "Running"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.activity,type:0
+msgid "Paper"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "After %(interval_nbr)d %(interval_type)s"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign
+msgid "Marketing Campaign"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,date_done:0
+msgid "End Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "February"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: field:marketing.campaign,object_id:0
+msgid "Resource"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,name:0
+#: field:marketing.campaign.activity,name:0
+#: field:marketing.campaign.segment,name:0
+#: field:marketing.campaign.transition,name:0
+msgid "Name"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "Email Preview"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,signal:0
+msgid "Signal"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.workitem,date:0
+msgid "If date is not set, this workitem have to be run manually"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "The campaign cannot be started: there are no activities in it"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "April"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: field:marketing.campaign,mode:0
+msgid "Mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,activity_id:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,activity_id:0
+msgid "Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_workitem
+#: model:ir.ui.menu,name:marketing_campaign.menu_action_marketing_campaign_workitem
+msgid "Campaign Followup"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_activity
+msgid "Campaign Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,variable_cost:0
+msgid "Variable Cost"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.segment,sync_mode:0
+msgid "If record modified after last sync (no duplicates)"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "With Manual Confirmation"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,total_cost:0
+msgid "Cost"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,year:0
+msgid "Year"
+msgstr ""
diff --git a/addons/marketing_campaign/i18n/ru.po b/addons/marketing_campaign/i18n/ru.po
new file mode 100644
index 00000000000..bbcc17a7e60
--- /dev/null
+++ b/addons/marketing_campaign/i18n/ru.po
@@ -0,0 +1,935 @@
+# Russian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 07:09+0000\n"
+"PO-Revision-Date: 2010-10-10 07:30+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Russian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-11 04:45+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "The current step for this item has no email or report to preview."
+msgstr ""
+"Текущий шаг для этого элемента не имеет доступных для предварительного "
+"просмотра отчетов иили шаблонов электронной почты"
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,trigger:0
+msgid "Time"
+msgstr "Время"
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+#: view:marketing.campaign.workitem:0
+msgid "Group By..."
+msgstr "Группировать по .."
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,trigger:0
+msgid "Trigger"
+msgstr "Активатор"
+
+#. module: marketing_campaign
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Недопустимое имя модели в определении действия."
+
+#. module: marketing_campaign
+#: field:campaign.analysis,count:0
+msgid "# of Actions"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+msgid "Campaign Editor"
+msgstr "Редактор кампаний"
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "Today"
+msgstr "Сегодня"
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "March"
+msgstr "Март"
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,object_id:0
+#: field:marketing.campaign.segment,object_id:0
+#: field:marketing.campaign.workitem,object_id:0
+msgid "Object"
+msgstr "Объект"
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+msgid "Set to Draft"
+msgstr "Сделать черновиком"
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,to_ids:0
+msgid "Next Activities"
+msgstr "Следующие действия"
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Synchronization"
+msgstr "Синхронизация"
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "This Year"
+msgstr "Этот год"
+
+#. module: marketing_campaign
+#: help:marketing.campaign,partner_field_id:0
+msgid ""
+"The generated workitems will be linked to the partner related to the record. "
+"If the record is the partner itself left this field empty."
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "No preview"
+msgstr "Без предпросмотра"
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Outgoing Transitions"
+msgstr "Исходящее перемещение"
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Reset"
+msgstr "Сброс"
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,type:0
+msgid ""
+"Describe type of action to be performed on the Activity.Eg : Send email,Send "
+"paper.."
+msgstr ""
+"Опишите тип действия которое необходимо выполнить. Например: Отправить "
+"электронную почту, отправить буклет ..."
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Year(s)"
+msgstr "Год (а)"
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,report_directory_id:0
+msgid "This folder is used to store the generated reports"
+msgstr "Сгенереированные отчеты будут сохранены в этой папке"
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: selection:marketing.campaign,state:0
+#: selection:marketing.campaign.segment,state:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "Cancelled"
+msgstr "Отменено"
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,trigger:0
+msgid "Automatic"
+msgstr "Автоматически"
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Activity Definition"
+msgstr "Определение действия"
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,keep_if_condition_not_met:0
+msgid "Keep as cancelled when condition not met"
+msgstr "Оставить как отмененное если условие не выполнено."
+
+#. module: marketing_campaign
+#: help:marketing.campaign,mode:0
+msgid ""
+"Test - It creates and process all the activities directly (without waiting "
+"for the delay on transitions) but does not send emails or produce reports.\n"
+"Test in Realtime - It creates and processes all the activities directly but "
+"does not send emails or produce reports.\n"
+"With Manual Confirmation - the campaigns runs normally, but the user has to "
+"validate all workitem manually.\n"
+"Normal - the campaign runs normally and automatically sends all emails and "
+"reports (be very careful with this mode, you're live!)"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,campaign_id:0
+#: view:marketing.campaign:0
+#: field:marketing.campaign.activity,campaign_id:0
+#: view:marketing.campaign.segment:0
+#: field:marketing.campaign.segment,campaign_id:0
+#: field:marketing.campaign.workitem,campaign_id:0
+msgid "Campaign"
+msgstr "Кампания"
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,start:0
+msgid "Start"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,segment_id:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,segment_id:0
+msgid "Segment"
+msgstr "Сегмент"
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,sync_mode:0
+msgid "Workitem creation mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Month(s)"
+msgstr "Месяц (ы)"
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid ""
+"The campaign hasn't any starting activity nor any activity with a signal and "
+"no previous activity."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,partner_id:0
+#: model:ir.model,name:marketing_campaign.model_res_partner
+#: field:marketing.campaign.workitem,partner_id:0
+msgid "Partner"
+msgstr "Партнёр"
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.segment,sync_mode:0
+msgid "If record created after last sync"
+msgstr "Если запись сделана после последней синхронизации"
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Transitions"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Create After Sync"
+msgstr "Создать После Синхронизации"
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Dates"
+msgstr "Даты"
+
+#. module: marketing_campaign
+#: help:marketing.campaign.segment,sync_mode:0
+msgid ""
+"Determines when new workitems should be created for records matching a "
+"segment."
+msgstr ""
+"Определяет, должен ли рабочий элемент создаваться для записи соответствующей "
+"сегменту"
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: view:marketing.campaign:0
+#: field:marketing.campaign,state:0
+#: view:marketing.campaign.segment:0
+#: field:marketing.campaign.segment,state:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,state:0
+msgid "State"
+msgstr "Статус"
+
+#. module: marketing_campaign
+#: model:ir.module.module,description:marketing_campaign.module_meta_information
+msgid ""
+"\n"
+"Allows you to setup leads automation through marketing campaigns. The "
+"campaigns\n"
+"are dynamic and multi-channels. The process:\n"
+"* Design marketing campaigns that incluces mail templates, reports to "
+"print,\n"
+" miscelleanous actions, etc.\n"
+"* Define segments that are selections of target people\n"
+"* Launch your campaign to automate communications.\n"
+"\n"
+"If you need demo data, you can install the module "
+"marketing_campaign_crm_demo.\n"
+" "
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,condition:0
+msgid ""
+"Python expression to decide whether the activity can be executed, otherwise "
+"it will be deleted or cancelled.The expression may use the following "
+"[browsable] variables:\n"
+" - activity: the campaign activity\n"
+" - workitem: the campaign workitem\n"
+" - object: the object this campaign item represents\n"
+" - transitions: list of campaign transitions outgoing from this activity\n"
+"...- re: Python regular expression module"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "Marketing Reports"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,type:0
+msgid "Type"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.workitem,res_name:0
+msgid "Resource Name"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+msgid "Run"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid ""
+"The campaign cannot be started: an email account is missing in the email "
+"activity '%s'"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,from_ids:0
+msgid "Previous Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,activity_from_id:0
+msgid "Previous Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Marketing Campaign Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,error_msg:0
+msgid "Error Message"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.action_campaign_analysis_all
+#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_form
+#: model:ir.ui.menu,name:marketing_campaign.menu_action_campaign_analysis_all
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_form
+#: view:marketing.campaign:0
+msgid "Campaigns"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,interval_type:0
+msgid "Interval Unit"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,country_id:0
+msgid "Country"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "July"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_configuration
+msgid "Configuration"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:ir.cron:0
+msgid "Invalid arguments"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Hour(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_segment
+msgid "Campaign Segment"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+#: view:marketing.campaign.workitem:0
+msgid "Cancel"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,keep_if_condition_not_met:0
+msgid ""
+"By activating this option, workitems that aren't executed because the "
+"condition is not met are marked as cancelled instead of being deleted."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "Exceptions"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:res.partner,workitem_ids:0
+msgid "Workitems"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,fixed_cost:0
+msgid "Fixed Cost"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,interval_nbr:0
+msgid "Interval Value"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,revenue:0
+#: field:marketing.campaign.activity,revenue:0
+msgid "Revenue"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "September"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "December"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,month:0
+msgid "Month"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,activity_to_id:0
+msgid "Next Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,email_template_id:0
+msgid "The e-mail to send when this activity is activated"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "This Month"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+msgid "Test Mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_ir_actions_report_xml
+msgid "ir.actions.report.xml"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+msgid "Manual Mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,server_action_id:0
+msgid "The action to perform when this activity is activated"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,partner_field_id:0
+msgid "Partner Field"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_campaign_analysis
+msgid "Campaign Analysis"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "Test in Realtime"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "Test Directly"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,report_directory_id:0
+msgid "Directory"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,sync_last_date:0
+msgid "Latest Synchronization"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: selection:marketing.campaign,state:0
+#: view:marketing.campaign.segment:0
+#: selection:marketing.campaign.segment,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,date_run:0
+msgid "Launching Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Preview"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+#: view:marketing.campaign.workitem:0
+msgid "Status"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Run Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Related Resource"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "August"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "Normal"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,start:0
+msgid "This activity is launched when the campaign starts."
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,signal:0
+msgid ""
+"An activity with a signal can be called programmatically. Be careful, the "
+"workitem is always created when a signal is sent"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "June"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.segment,sync_mode:0
+msgid "All records (no duplicates)"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,date:0
+#: view:marketing.campaign.workitem:0
+msgid "Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "November"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,condition:0
+msgid "Condition"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,report_id:0
+msgid "The report to generate when this activity is activated"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "Exception"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "October"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,fixed_cost:0
+msgid ""
+"Fixed cost for the campaign (used for campaign analysis), see also variable "
+"cost on activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "January"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,date:0
+msgid "Execution Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_workitem
+msgid "Campaign Workitem"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,ir_filter_id:0
+msgid "Filter"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Synchronize"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+#: field:marketing.campaign.activity,server_action_id:0
+#: selection:marketing.campaign.activity,type:0
+msgid "Action"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "Automatic transition"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:res.partner:0
+msgid "History"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,object_id:0
+msgid "Choose the model on which you want this campaign to be run"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.module.module,shortdesc:marketing_campaign.module_meta_information
+msgid "marketing_campaign"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Process"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#: selection:marketing.campaign.transition,trigger:0
+#, python-format
+msgid "Cosmetic"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.transition,trigger:0
+msgid "How is the destination workitem triggered"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: selection:marketing.campaign,state:0
+#: selection:marketing.campaign.segment,state:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "Done"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_email_template
+msgid "Email Templates for Models"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+msgid "Close"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "The campaign cannot be marked as done before all segments are done"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.workitem,res_id:0
+msgid "Resource ID"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_transition
+msgid "Campaign Transition"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: view:marketing.campaign.workitem:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "To Do"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Campaign Step"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_segment_form
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_segment_form
+#: view:marketing.campaign.segment:0
+msgid "Segments"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_segment_opened
+msgid "All Segments"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Incoming Transitions"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.activity,type:0
+msgid "E-mail"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid ""
+"The campaign cannot be started: the email account is not approved in the "
+"email activity '%s'"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Day(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,activity_ids:0
+#: view:marketing.campaign.activity:0
+msgid "Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "May"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Modified after Sync"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: selection:marketing.campaign,state:0
+#: view:marketing.campaign.segment:0
+#: selection:marketing.campaign.segment,state:0
+msgid "Running"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.activity,type:0
+msgid "Paper"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "After %(interval_nbr)d %(interval_type)s"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign
+msgid "Marketing Campaign"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,date_done:0
+msgid "End Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "February"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: field:marketing.campaign,object_id:0
+msgid "Resource"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,name:0
+#: field:marketing.campaign.activity,name:0
+#: field:marketing.campaign.segment,name:0
+#: field:marketing.campaign.transition,name:0
+msgid "Name"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "Email Preview"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,signal:0
+msgid "Signal"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.workitem,date:0
+msgid "If date is not set, this workitem have to be run manually"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:0
+#, python-format
+msgid "The campaign cannot be started: there are no activities in it"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "April"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: field:marketing.campaign,mode:0
+msgid "Mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,activity_id:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,activity_id:0
+msgid "Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_workitem
+#: model:ir.ui.menu,name:marketing_campaign.menu_action_marketing_campaign_workitem
+msgid "Campaign Followup"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_activity
+msgid "Campaign Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,variable_cost:0
+msgid "Variable Cost"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.segment,sync_mode:0
+msgid "If record modified after last sync (no duplicates)"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "With Manual Confirmation"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,total_cost:0
+msgid "Cost"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,year:0
+msgid "Year"
+msgstr ""
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index 614055dddcd..b23826969a8 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -36,10 +36,10 @@
+
-
@@ -161,9 +161,9 @@
+
-
@@ -382,9 +382,9 @@
+
-
diff --git a/addons/marketing_campaign/report/campaign_analysis_view.xml b/addons/marketing_campaign/report/campaign_analysis_view.xml
index aa994fcfc48..fd5a8c0908f 100644
--- a/addons/marketing_campaign/report/campaign_analysis_view.xml
+++ b/addons/marketing_campaign/report/campaign_analysis_view.xml
@@ -84,8 +84,8 @@
-
-
+
+
diff --git a/addons/marketing_campaign_crm_demo/i18n/de.po b/addons/marketing_campaign_crm_demo/i18n/de.po
new file mode 100644
index 00000000000..33f699d828a
--- /dev/null
+++ b/addons/marketing_campaign_crm_demo/i18n/de.po
@@ -0,0 +1,171 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 08:14+0000\n"
+"PO-Revision-Date: 2010-10-05 13:30+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: marketing_campaign_crm_demo
+#: model:ir.actions.report.xml,name:marketing_campaign_crm_demo.mc_crm_lead_demo_report
+msgid "Marketing campaign demo report"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_1
+msgid ""
+"Hello,Thanks for generous interest you have shown in the "
+"openERP.Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: constraint:document.directory:0
+msgid "Error! You can not create recursive Directories."
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:ir.module.module,description:marketing_campaign_crm_demo.module_meta_information
+msgid "Demo data for the module marketing_campaign."
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_4
+msgid ""
+"Hello,Thanks for showing intrest and buying the OpenERP book.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_2
+msgid "Propose to subscribe to the OpenERP Discovery Day on May 2010"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_6
+msgid "Propose paid training to Silver partners"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_1
+msgid "Thanks for showing interest in OpenERP"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_4
+msgid "Thanks for buying the OpenERP book"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_5
+msgid "Propose a free technical training to Gold partners"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_7
+msgid ""
+"Hello, We have very good offer that might suit you.\n"
+" For our silver partners,We are offering Gold partnership.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: rml:crm.lead.demo:0
+msgid "Partner :"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_8
+msgid ""
+"Hello, Thanks for showing intrest and for subscribing to technical "
+"training.If any further information required kindly revert back.I really "
+"appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: rml:crm.lead.demo:0
+msgid "Company :"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_8
+msgid "Thanks for subscribing to technical training"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_3
+msgid "Thanks for subscribing to the OpenERP Discovery Day"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_5
+msgid ""
+"Hello, We have very good offer that might suit you.\n"
+" For our gold partners,We are arranging free technical training "
+"on june,2010.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_3
+msgid ""
+"Hello,Thanks for showing intrest and for subscribing to the OpenERP "
+"Discovery Day.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_2
+msgid ""
+"Hello,We have very good offer that might suit you.\n"
+" We propose you to subscribe to the OpenERP Discovery Day on May "
+"2010.\n"
+" If any further information required kindly revert back.\n"
+" We really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_6
+msgid ""
+"Hello, We have very good offer that might suit you.\n"
+" For our silver partners,We are paid technical training on "
+"june,2010.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy
+msgid "Dummy Action"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:ir.module.module,shortdesc:marketing_campaign_crm_demo.module_meta_information
+msgid "marketing_campaign_crm_demo"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_7
+msgid "Propose gold partnership to silver partners"
+msgstr ""
diff --git a/addons/marketing_campaign_crm_demo/i18n/ru.po b/addons/marketing_campaign_crm_demo/i18n/ru.po
index 8223d4de855..c0982592ac9 100644
--- a/addons/marketing_campaign_crm_demo/i18n/ru.po
+++ b/addons/marketing_campaign_crm_demo/i18n/ru.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-08-20 08:14+0000\n"
-"PO-Revision-Date: 2010-09-29 13:22+0000\n"
+"PO-Revision-Date: 2010-09-30 06:47+0000\n"
"Last-Translator: Chertykov Denis \n"
"Language-Team: Russian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-30 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-10-01 08:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: marketing_campaign_crm_demo
diff --git a/addons/marketing_campaign_mailchimp/__init__.py b/addons/marketing_campaign_mailchimp/__init__.py
deleted file mode 100644
index 808e5fc281f..00000000000
--- a/addons/marketing_campaign_mailchimp/__init__.py
+++ /dev/null
@@ -1,24 +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 marketing_campaign_mailchimp
-import wizard
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/marketing_campaign_mailchimp/__openerp__.py b/addons/marketing_campaign_mailchimp/__openerp__.py
deleted file mode 100644
index b046b4ef782..00000000000
--- a/addons/marketing_campaign_mailchimp/__openerp__.py
+++ /dev/null
@@ -1,44 +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 .
-#
-##############################################################################
-
-
-{
- "name" : "",
- "version" : "1.1",
- "depends" : ['marketing_campaign'],
- "author" : "OpenERP SA",
- "category": 'Generic Modules/Marketing',
- "description": """
- This module provides integration of the mailchimp.com marketing campaign and mailing-list service, connecting via Mailchimp's WebServices API.
- You can define multiple Mailchimp accounts and then use them as you wish through a new type of activity, providing direct connection to your Mailchimp Lists.""",
- 'website': 'http://www.openerp.com',
- 'init_xml': [],
- 'update_xml': [
- "security/ir.model.access.csv",
- 'marketing_campaign_mailchimp_view.xml',
- 'wizard/create_list_view.xml',
- ],
- 'demo_xml': [],
- 'installable': True,
- 'active': False,
-}
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/marketing_campaign_mailchimp/marketing_campaign_mailchimp.py b/addons/marketing_campaign_mailchimp/marketing_campaign_mailchimp.py
deleted file mode 100644
index 2b482867694..00000000000
--- a/addons/marketing_campaign_mailchimp/marketing_campaign_mailchimp.py
+++ /dev/null
@@ -1,211 +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 urllib
-import urllib2
-import simplejson as json
-import time
-
-from osv import fields, osv
-
-mailchimp_url = 'http://%s.api.mailchimp.com/1.2'
-
-class mailchimp_account(osv.osv):
- _name = "mailchimp.account"
-
- _columns = {
- 'name': fields.char('Account Name', size=64),
- 'username': fields.char('Username', size=64, required=True),
- 'password': fields.char('Password', size=64, required=True),
- 'apikey': fields.char('API Key', size=128),
- 'data_center': fields.selection([('us1', 'US1'), ('us2', 'US2'),
- ('uk1', 'UK1')], 'Data Center'),
- 'state': fields.selection([('draft', 'Draft'), ('approved', 'Approved'),
- ('cancelled', 'Cancelled')], 'State', readonly=True)
- }
-
- _defaults = {
- 'state': lambda *a: 'draft'
- }
-
- def get_response(self, cr, uid, mailchimp_id, method, params={}):
- mailchimp_account = self.browse(cr, uid, mailchimp_id)
- params['output'] = 'json'
- if method == 'login':
- params['username'] = mailchimp_account.username
- params['password'] = mailchimp_account.password
- else :
- params['apikey'] = mailchimp_account.apikey
- url = mailchimp_url%mailchimp_account.data_center+ '/?method=%s'%method
- params = urllib.urlencode(params, doseq=True)
- response = urllib2.urlopen(url, params)
- return json.loads(response.read())
-
- def button_approve(self, cr, uid, ids, context):
- acc_obj = self.browse(cr, uid, ids)[0]
- vals = {}
- if not acc_obj.apikey:
- method = 'login'
- else:
- method = 'ping'
- response = self.get_response(cr, uid, acc_obj.id, method)
- if 'error' not in response:
- if method == 'login' :
- vals['apikey'] = response
- vals['state'] = 'approved'
- self.write(cr, uid, ids, vals)
- else :
- raise osv.except_osv('Error!!!',
- "Can't approved accoutnt : %s"%response['error'])
- return True
-
- def button_cancel(self, cr, uid, ids, context):
- self.write(cr, uid, ids, {'state': 'cancelled'})
- return True
-
- def add_partner_list(self, cr, uid, account_id, list_id, partner_ids):
- vals = {} # just dictionary with partner_id and updated in list or not
- for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids):
- params = {
- 'id' : list_id,
- 'email_address' : partner.email,
- 'email_type':'text',
- 'merge_vars[FNAME]':partner.name ,
- 'merge_vars[date]' : time.strftime('%Y-%m-%d'),
- 'merge_vars[phone]' : partner.phone,
- 'merge_vars[website]' : partner.website,
- 'merge_vars[address][country]' : partner.country.code,
- 'merge_vars[address][city]' : partner.city,
- 'double_optin':False
- }
- vals[partner.id] = self.get_response(cr, uid, account_id,
- 'listSubscribe', params)
- return vals
-
-mailchimp_account()
-
-class mailchimp_list(osv.osv_memory):
- _name = "mailchimp.list"
- _description = "Mailchimp list"
-
- _columns = {
- 'mailchimp_account_id': fields.many2one('mailchimp.account',
- 'Mailchimp Account', required=True),
- 'name': fields.char('Name', size=64)
- }
-
-mailchimp_list()
-
-class marketing_campaign(osv.osv):
- _inherit = "marketing.campaign"
-
- _columns = {
- 'mailchimp_account_id': fields.many2one(
- 'mailchimp.account', 'Account'),
- 'mailchimp_campaign': fields.char('campaign', size=64),
- }
-marketing_campaign()
-
-
-class marketing_campaign_activity(osv.osv):
- _inherit = "marketing.campaign.activity"
-
- _columns = {
- 'mailchimp_account_id': fields.many2one(
- 'mailchimp.account', 'Account'),
- 'mailchimp_list': fields.char('List', size=64),
- }
-
- def onchange_mailchimp(self, cr, uid, ids, mailchimp_account_id):
- if mailchimp_account_id:
- return {'value':{'mailchimp_list':''}}
- return {'value':{}}
-
- def onchange_mailchimp_list(self, cr, uid, ids, mailchimp_account_id,
- mailchimp_list):
- if mailchimp_account_id and mailchimp_list:
- lists = self.pool.get('mailchimp.account').get_response(cr,
- uid, mailchimp_account_id, 'lists')
- list_names = [l['name'] for l in lists]
- if mailchimp_list not in list_names:
- raise osv.except_osv('Error!!!',"Lists doesn't exists")
- else :
- return {}
- return {'value':{}}
-
- def _process_wi_mailchimp(self, cr, uid, activity, workitem, context=None):
- mailchimp_account_id = activity.mailchimp_account_id.id
- list_name = activity.mailchimp_list
- mc_acc_obj = self.pool.get('mailchimp.account')
- lists = mc_acc_obj.get_response(cr, uid, mailchimp_account_id, 'lists')
- list_id = ''
- for l in lists :
- if l['name'] == list_name:
- list_id = l['id']
- break;
- res_model = workitem.object_id.model
- res_id = workitem.res_id
- model_obj = self.pool.get(res_model).browse(cr, uid, res_id)
- params ={}
- if res_model == 'res.partner' :
- params.update({
- 'email_address' : model_obj.email,
- 'merge_vars[FNAME]':model_obj.name and model_obj.name or '',
- 'merge_vars[website]' : model_obj.website,
- 'merge_vars[address][country]' : model_obj.country.code,
- })
- elif res_model == 'crm.lead' :
- params.update({
- 'email_address' : model_obj.email_from,
- 'merge_vars[FNAME]':model_obj.partner_name and \
- model_obj.partner_name or '',
- 'merge_vars[address][country]' : model_obj.country_id and \
- model_obj.country_id.code or ''
- })
- if params['email_address'] :
- user = mc_acc_obj.get_response(cr, uid, mailchimp_account_id,
- 'listMemberInfo', {
- 'id' : list_id,
- 'email_address': params['email_address']
- })
- # if there s no user with the specify email it will return error code
- # and thus we add that user otherwise user is alredy subscribe and there
- # is no need to subscribe user again
- if 'error' in user:
- params.update({
- 'id' : list_id,
- 'email_type':'text',
- 'double_optin':False,
- 'merge_vars[date]' : time.strftime('%Y-%m-%d'),
- 'merge_vars[address][city]' : model_obj.city and model_obj.city or '',
- 'merge_vars[phone]' : model_obj.phone and model_obj.phone or '',
- })
- mc_acc_obj.get_response(cr, uid, mailchimp_account_id, 'listSubscribe', params)
- # TODO handle mailchimp error
- return True
- else :
- return {'error_msg' : "Invalid Email Address"}
-
- def __init__(self, *args):
- super(marketing_campaign_activity, self).__init__(*args)
- self._action_types.append(('mailchimp', 'Mailchimp'))
-
-marketing_campaign_activity()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/marketing_campaign_mailchimp/marketing_campaign_mailchimp_view.xml b/addons/marketing_campaign_mailchimp/marketing_campaign_mailchimp_view.xml
deleted file mode 100644
index a340c5c9d68..00000000000
--- a/addons/marketing_campaign_mailchimp/marketing_campaign_mailchimp_view.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
- marketing.campaign.activity.form.inherit
- marketing.campaign.activity
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- mailchimp.account.tree
- mailchimp.account
- tree
-
-
-
-
-
-
-
-
-
-
-
- mailchimp.account.form
- mailchimp.account
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Mailchimp Accounts
- ir.actions.act_window
- mailchimp.account
- form
- tree,form
-
-
-
-
-
-
-
diff --git a/addons/marketing_campaign_mailchimp/security/ir.model.access.csv b/addons/marketing_campaign_mailchimp/security/ir.model.access.csv
deleted file mode 100644
index 893cd2e9e2c..00000000000
--- a/addons/marketing_campaign_mailchimp/security/ir.model.access.csv
+++ /dev/null
@@ -1,4 +0,0 @@
-"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_mailchimp_account_user","mailchimp.account.user","marketing_campaign_mailchimp.model_mailchimp_account","base.res_groups_email_template_admin",1,1,1,1
-"access_mailchimp_account_system","mailchimp.account.user","marketing_campaign_mailchimp.model_mailchimp_account","base.res_groups_email_template_admin",1,0,0,0
-"access_mailchimp_account_user","mailchimp_account_user","model_mailchimp_account","base.res_groups_email_template_admin",1,1,1,1
diff --git a/addons/marketing_campaign_mailchimp/security/marketing_security.xml b/addons/marketing_campaign_mailchimp/security/marketing_security.xml
deleted file mode 100644
index 59cbf65a63d..00000000000
--- a/addons/marketing_campaign_mailchimp/security/marketing_security.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
- Marketing / User
-
-
-
-
diff --git a/addons/marketing_campaign_mailchimp/wizard/create_list.py b/addons/marketing_campaign_mailchimp/wizard/create_list.py
deleted file mode 100755
index 03a69a8ac89..00000000000
--- a/addons/marketing_campaign_mailchimp/wizard/create_list.py
+++ /dev/null
@@ -1,61 +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
-from tools.translate import _
-import netsvc
-
-class create_list(osv.osv_memory):
- _name = "create.list"
- _description = "Create List of mailchimp"
-# crm.lead remain
- _columns = {
- 'mailchimp_account_id': fields.many2one('mailchimp.account',
- 'Mailchimp Account', required=True),
- 'mailchimp_list_id': fields.many2one('mailchimp.list', 'List'),
- 'list_name': fields.char('Name',size = 64),
- 'partner_ids': fields.many2many('res.partner',
- 'create_list_partner_rel',
- 'cust_list_id', 'partner_id',
- 'Partner'),
-
- }
-
- def onchange_mailchimp_account_id(self, cr, uid, ids, mailchimp_account_id,
- action):
- return {'value':{}}
-
- def create_list(self, cr, uid, ids, context=None):
- create_list_obj = self.browse(cr, uid, ids[0])
- mailchimp_account_obj = self.pool.get('mailchimp.account')
- account_id = create_list_obj.mailchimp_account_id
- lists = mailchimp_account_obj.get_response(cr, uid, account_id.id, 'lists')
- lists = dict([(l['name'],l['id']) for l in lists])
- if create_list_obj.list_name not in lists.keys():
- raise osv.except_osv(_('UserError'),
- _('There is no list define in account %s') % (account_id.name))
- list_id = lists[create_list_obj.list_name]
- mailchimp_account_obj.add_partner_list(cr, uid, account_id.id, list_id,
- create_list_obj.partner_ids)
- return {}
-create_list()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/marketing_campaign_mailchimp/wizard/create_list_view.xml b/addons/marketing_campaign_mailchimp/wizard/create_list_view.xml
deleted file mode 100755
index 6d8f8fe9296..00000000000
--- a/addons/marketing_campaign_mailchimp/wizard/create_list_view.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
- create.list.form
- create.list
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Manual Mailchimp List Update
- ir.actions.act_window
- create.list
- form
-
- new
-
-
-
-
-
-
diff --git a/addons/membership/__openerp__.py b/addons/membership/__openerp__.py
index fa9052f884c..2a6ce2b7eb6 100644
--- a/addons/membership/__openerp__.py
+++ b/addons/membership/__openerp__.py
@@ -44,11 +44,10 @@ invoice and send propositions for membership renewal.
'wizard/membership_invoice_view.xml',
'membership_view.xml',
'report/report_membership_view.xml',
- 'wizard/membership_unpaid_invoice_view.xml',
'process/membership_process.xml'
],
'demo_xml': ['membership_demo.xml'],
- 'test': ['test/test_membership.yml'],
+ 'test': ['test/test_membership.yml'],
'installable': True,
'active': False,
'certificate': '0042907796381',
diff --git a/addons/membership/demo_data.xml b/addons/membership/demo_data.xml
index 6031e76d3da..6809702a113 100644
--- a/addons/membership/demo_data.xml
+++ b/addons/membership/demo_data.xml
@@ -14,7 +14,6 @@ result = price_unit * 0.10"" name="python_compute_inv"/>
-
diff --git a/addons/membership/membership.py b/addons/membership/membership.py
index 7bb84ef9ebb..8f68149f9e3 100644
--- a/addons/membership/membership.py
+++ b/addons/membership/membership.py
@@ -19,12 +19,12 @@
#
##############################################################################
+import time
+
from osv import fields, osv
from tools import config
-import time
-from tools.translate import _
import decimal_precision as dp
-
+from tools.translate import _
STATE = [
('none', 'Non Member'),
@@ -49,6 +49,14 @@ STATE_PRIOR = {
class membership_line(osv.osv):
'''Member line'''
+ def _get_membership_lines(self, cr, uid, ids, context=None):
+ list_membership_line = []
+ member_line_obj = self.pool.get('membership.membership_line')
+ for invoice in self.pool.get('account.invoice').browse(cr, uid, ids, context=context):
+ if invoice.invoice_line:
+ list_membership_line += member_line_obj.search(cr, uid, [('account_invoice_line', 'in', [ l.id for l in invoice.invoice_line])], context=context)
+ return list_membership_line
+
def _check_membership_date(self, cr, uid, ids, context=None):
"""Check if membership product is not in the past
@param self: The object pointer
@@ -60,13 +68,13 @@ class membership_line(osv.osv):
cr.execute('''
SELECT MIN(ml.date_to - ai.date_invoice)
- FROM membership_membership_line ml
- JOIN account_invoice_line ail ON (
- ml.account_invoice_line = ail.id
- )
- JOIN account_invoice ai ON (
+ FROM membership_membership_line ml
+ JOIN account_invoice_line ail ON (
+ ml.account_invoice_line = ail.id
+ )
+ JOIN account_invoice ai ON (
ai.id = ail.invoice_id)
- WHERE ml.id IN %s''',(tuple(ids),))
+ WHERE ml.id IN %s''',(tuple(ids),))
res = cr.fetchall()
for r in res:
if r[0] and r[0] < 0:
@@ -84,7 +92,8 @@ class membership_line(osv.osv):
@param return: Dictionary of state Value
"""
res = {}
- for line in self.browse(cr, uid, ids):
+ inv_obj = self.pool.get('account.invoice')
+ for line in self.browse(cr, uid, ids, context=context):
cr.execute('''
SELECT i.state, i.id FROM
account_invoice i
@@ -111,7 +120,7 @@ class membership_line(osv.osv):
state = 'invoiced'
elif istate == 'paid':
state = 'paid'
- inv = self.pool.get('account.invoice').browse(cr, uid, fetched[1])
+ inv = inv_obj.browse(cr, uid, fetched[1], context=context)
for payment in inv.payment_ids:
if payment.invoice and payment.invoice.type == 'out_refund':
state = 'canceled'
@@ -125,7 +134,7 @@ class membership_line(osv.osv):
_name = 'membership.membership_line'
_columns = {
'partner': fields.many2one('res.partner', 'Partner', ondelete='cascade', select=1),
- 'membership_id': fields.many2one('product.product', string="Membership", required=True),
+ 'membership_id': fields.many2one('product.product', string="Membership Product", required=True),
'date_from': fields.date('From', readonly=True),
'date_to': fields.date('To', readonly=True),
'date_cancel' : fields.date('Cancel date'),
@@ -133,7 +142,13 @@ class membership_line(osv.osv):
'member_price':fields.float('Member Price', digits_compute= dp.get_precision('Sale Price'), required=True),
'account_invoice_line': fields.many2one('account.invoice.line', 'Account Invoice line', readonly=True),
'account_invoice_id': fields.related('account_invoice_line', 'invoice_id', type='many2one', relation='account.invoice', string='Invoice', readonly=True),
- 'state': fields.function(_state, method=True, string='State', type='selection', selection=STATE),
+ 'state': fields.function(
+ _state, method=True,
+ string='Membership State', type='selection',
+ selection=STATE, store = {
+ 'account.invoice':(_get_membership_lines, ['state'], 10),
+ }),
+ 'company_id': fields.related('account_invoice_line', 'invoice_id', 'company_id', type="many2one", relation="res.company", string="Company", readonly=True, store=True)
}
_rec_name = 'partner'
_order = 'id desc'
@@ -151,7 +166,7 @@ class Partner(osv.osv):
def _get_partner_id(self, cr, uid, ids, context=None):
member_line_obj = self.pool.get('membership.membership_line')
res_obj = self.pool.get('res.partner')
- data_inv = member_line_obj.browse(cr, uid, ids, context)
+ data_inv = member_line_obj.browse(cr, uid, ids, context=context)
list_partner = []
for data in data_inv:
list_partner.append(data.partner.id)
@@ -164,7 +179,7 @@ class Partner(osv.osv):
def _get_invoice_partner(self, cr, uid, ids, context=None):
inv_obj = self.pool.get('account.invoice')
res_obj = self.pool.get('res.partner')
- data_inv = inv_obj.browse(cr, uid, ids, context)
+ data_inv = inv_obj.browse(cr, uid, ids, context=context)
list_partner = []
for data in data_inv:
list_partner.append(data.partner_id.id)
@@ -189,7 +204,7 @@ class Partner(osv.osv):
res[id] = 'none'
today = time.strftime('%Y-%m-%d')
for id in ids:
- partner_data = self.browse(cr, uid, id)
+ partner_data = self.browse(cr, uid, id, context=context)
if partner_data.membership_cancel and today > partner_data.membership_cancel:
res[id] = 'canceled'
continue
@@ -236,57 +251,51 @@ class Partner(osv.osv):
if partner_data.free_member and s!=0:
res[id] = 'free'
if partner_data.associate_member:
- res_state = self._membership_state(cr, uid, [partner_data.associate_member.id], name, args, context)
+ res_state = self._membership_state(cr, uid, [partner_data.associate_member.id], name, args, context=context)
res[id] = res_state[partner_data.associate_member.id]
return res
def _membership_date(self, cr, uid, ids, name, args, context=None):
-
"""Return date of membership"""
-
name = name[0]
res = {}
member_line_obj = self.pool.get('membership.membership_line')
-
- for partner in self.browse(cr, uid, ids):
-
+ for partner in self.browse(cr, uid, ids, context=context):
if partner.associate_member:
partner_id = partner.associate_member.id
else:
partner_id = partner.id
-
res[partner.id] = {
'membership_start': False,
'membership_stop': False,
'membership_cancel': False
}
-
if name == 'membership_start':
line_id = member_line_obj.search(cr, uid, [('partner', '=', partner_id)],
- limit=1, order='date_from')
+ limit=1, order='date_from', context=context)
if line_id:
res[partner.id]['membership_start'] = member_line_obj.read(cr, uid, line_id[0],
- ['date_from'])['date_from']
+ ['date_from'], context=context)['date_from']
if name == 'membership_stop':
line_id1 = member_line_obj.search(cr, uid, [('partner', '=', partner_id)],
- limit=1, order='date_to desc')
+ limit=1, order='date_to desc', context=context)
if line_id1:
res[partner.id]['membership_stop'] = member_line_obj.read(cr, uid, line_id1[0],
- ['date_to'])['date_to']
+ ['date_to'], context=context)['date_to']
+
if name == 'membership_cancel':
if partner.membership_state == 'canceled':
- line_id2 = member_line_obj.search(cr, uid, [('partner', '=', partner.id)],limit=1, order='date_cancel')
+ line_id2 = member_line_obj.search(cr, uid, [('partner', '=', partner.id)], limit=1, order='date_cancel', context=context)
if line_id2:
- res[partner.id]['membership_cancel'] = member_line_obj.read(cr, uid, line_id2[0],['date_cancel'])['date_cancel']
-
+ res[partner.id]['membership_cancel'] = member_line_obj.read(cr, uid, line_id2[0], ['date_cancel'], context=context)['date_cancel']
return res
- def _get_partners(self, cr, uid, ids, context={}):
+ def _get_partners(self, cr, uid, ids, context=None):
ids2 = ids
while ids2:
ids2 = self.search(cr, uid, [('associate_member','in',ids2)], context=context)
- ids+=ids2
+ ids += ids2
return ids
def __get_membership_state(self, *args, **kwargs):
@@ -298,48 +307,44 @@ class Partner(osv.osv):
'free_member': fields.boolean('Free member'),
'membership_amount': fields.float(
'Membership amount', digits=(16, 2),
- help='The price negociated by the partner'),
+ help = 'The price negociated by the partner'),
'membership_state': fields.function(
__get_membership_state, method = True,
string = 'Current Membership State', type = 'selection',
- selection = STATE ,store = {
- 'account.invoice':(_get_invoice_partner,['state'], 10),
- 'membership.membership_line':(_get_partner_id,['state'], 10),
- 'res.partner':(_get_partners, ['free_member', 'membership_state','associate_member'], 10)
- }
- ),
+ selection = STATE,
+ store = {
+ 'account.invoice': (_get_invoice_partner, ['state'], 10),
+ 'membership.membership_line': (_get_partner_id, ['state'], 10),
+ 'res.partner': (_get_partners, ['free_member', 'membership_state', 'associate_member'], 10)
+ }),
'membership_start': fields.function(
- _membership_date, method=True, multi='membeship_start',
+ _membership_date, method = True, multi = 'membeship_start',
string = 'Start membership date', type = 'date',
store = {
- 'account.invoice':(_get_invoice_partner,['state'], 10),
- 'membership.membership_line':(_get_partner_id,['state'], 10, ),
- 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
- }
- ),
+ 'account.invoice': (_get_invoice_partner, ['state'], 10),
+ 'membership.membership_line': (_get_partner_id, ['state'], 10, ),
+ 'res.partner': (lambda self, cr, uid, ids, c={}: ids, ['free_member'], 10)
+ }),
'membership_stop': fields.function(
_membership_date, method = True,
string = 'Stop membership date', type = 'date', multi='membership_stop',
store = {
- 'account.invoice':(_get_invoice_partner,['state'], 10),
- 'membership.membership_line':(_get_partner_id,['state'], 10),
- 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
- }
- ),
-
+ 'account.invoice': (_get_invoice_partner, ['state'], 10),
+ 'membership.membership_line': (_get_partner_id, ['state'], 10),
+ 'res.partner': (lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
+ }),
'membership_cancel': fields.function(
_membership_date, method = True,
string = 'Cancel membership date', type='date', multi='membership_cancel',
store = {
- 'account.invoice':(_get_invoice_partner,['state'], 11),
- 'membership.membership_line':(_get_partner_id,['state'], 10),
- 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
- }
- ),
+ 'account.invoice': (_get_invoice_partner, ['state'], 11),
+ 'membership.membership_line': (_get_partner_id, ['state'], 10),
+ 'res.partner': (lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
+ }),
}
_defaults = {
- 'free_member': lambda *a: False,
- 'membership_cancel' : lambda *d : False,
+ 'free_member': False,
+ 'membership_cancel' : False,
}
def _check_recursion(self, cr, uid, ids):
@@ -347,7 +352,7 @@ class Partner(osv.osv):
"""
level = 100
while len(ids):
- cr.execute('select distinct associate_member from res_partner where id IN %s',(tuple(ids),))
+ cr.execute('SELECT DISTINCT associate_member FROM res_partner WHERE id IN %s', (tuple(ids),))
ids = filter(None, map(lambda x:x[0], cr.fetchall()))
if not level:
return False
@@ -365,7 +370,7 @@ class Partner(osv.osv):
context = {}
default = default.copy()
default['member_lines'] = []
- return super(Partner, self).copy(cr, uid, id, default, context)
+ return super(Partner, self).copy(cr, uid, id, default, context=context)
def create_membership_invoice(self, cr, uid, ids, product_id=None, datas=None, context=None):
""" Create Customer Invoice of Membership for partners.
@@ -373,7 +378,6 @@ class Partner(osv.osv):
datas = {'membership_product_id': None, 'amount':None}
"""
invoice_obj = self.pool.get('account.invoice')
- product_obj = self.pool.get('product.product')
invoice_line_obj = self.pool.get('account.invoice.line')
invoice_tax_obj = self.pool.get('account.invoice.tax')
product_id = product_id or datas.get('membership_product_id',False)
@@ -395,7 +399,7 @@ class Partner(osv.osv):
_("Partner doesn't have an address to make the invoice."))
quantity = 1
line_value = {
- 'product_id' : product_id,
+ 'product_id': product_id,
}
line_dict = invoice_line_obj.product_id_change(cr, uid, {},
@@ -406,15 +410,14 @@ class Partner(osv.osv):
line_value['invoice_line_tax_id'] = tax_tab
invoice_id = invoice_obj.create(cr, uid, {
- 'partner_id' : partner.id,
+ 'partner_id': partner.id,
'address_invoice_id': addr.get('invoice', False),
'account_id': account_id,
'fiscal_position': fpos_id or False
- }
- )
+ }, context=context)
line_value['invoice_id'] = invoice_id
invoice_line_id = invoice_line_obj.create(cr, uid, line_value, context=context)
- invoice_obj.write(cr, uid, invoice_id, {'invoice_line':[(6,0,[invoice_line_id])]}, context=context)
+ invoice_obj.write(cr, uid, invoice_id, {'invoice_line': [(6, 0, [invoice_line_id])]}, context=context)
invoice_list.append(invoice_id)
if line_value['invoice_line_tax_id']:
tax_value = invoice_tax_obj.compute(cr, uid, invoice_id).values()
@@ -437,12 +440,12 @@ class Product(osv.osv):
model_obj = self.pool.get('ir.model.data')
if ('product' in context) and (context['product']=='membership_product'):
- model_data_ids_form = model_obj.search(cr,user,[('model','=','ir.ui.view'),('name','in',['membership_products_form','membership_products_tree'])])
- resource_id_form = model_obj.read(cr, user, model_data_ids_form, fields=['res_id','name'])
- dict_model={}
+ model_data_ids_form = model_obj.search(cr, user, [('model','=','ir.ui.view'), ('name','in',['membership_products_form', 'membership_products_tree'])], context=context)
+ resource_id_form = model_obj.read(cr, user, model_data_ids_form, fields=['res_id', 'name'], context=context)
+ dict_model = {}
for i in resource_id_form:
- dict_model[i['name']]=i['res_id']
- if view_type=='form':
+ dict_model[i['name']] = i['res_id']
+ if view_type == 'form':
view_id = dict_model['membership_products_form']
else:
view_id = dict_model['membership_products_tree']
@@ -457,28 +460,25 @@ class Product(osv.osv):
}
_defaults = {
- 'membership': lambda *args: False
+ 'membership': False
}
Product()
class Invoice(osv.osv):
'''Invoice'''
-
_inherit = 'account.invoice'
- def action_cancel(self, cr, uid, ids, context=None):
+ def action_cancel(self, cr, uid, ids, *args):
'''Create a 'date_cancel' on the membership_line object'''
- if context is None:
- context = {}
member_line_obj = self.pool.get('membership.membership_line')
today = time.strftime('%Y-%m-%d')
for invoice in self.browse(cr, uid, ids):
mlines = member_line_obj.search(cr, uid,
[('account_invoice_line','in',
- [ l.id for l in invoice.invoice_line])], context)
- member_line_obj.write(cr, uid, mlines, {'date_cancel':today}, context)
- return super(Invoice, self).action_cancel(cr, uid, ids, context)
+ [ l.id for l in invoice.invoice_line])])
+ member_line_obj.write(cr, uid, mlines, {'date_cancel': today})
+ return super(Invoice, self).action_cancel(cr, uid, ids)
Invoice()
class account_invoice_line(osv.osv):
@@ -491,9 +491,9 @@ class account_invoice_line(osv.osv):
context={}
res = super(account_invoice_line, self).write(cr, uid, ids, vals, context=context)
member_line_obj = self.pool.get('membership.membership_line')
- for line in self.browse(cr, uid, ids):
+ for line in self.browse(cr, uid, ids, context=context):
if line.invoice_id.type == 'out_invoice':
- ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',line.id)])
+ ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',line.id)], context=context)
if line.product_id and line.product_id.membership and not ml_ids:
# Product line has changed to a membership product
date_from = line.product_id.membership_date_from
@@ -508,7 +508,7 @@ class account_invoice_line(osv.osv):
'date_from': date_from,
'date_to': date_to,
'account_invoice_line': line.id,
- })
+ }, context=context)
if line.product_id and not line.product_id.membership and ml_ids:
# Product line has changed to a non membership product
member_line_obj.unlink(cr, uid, ml_ids, context=context)
@@ -521,19 +521,18 @@ class account_invoice_line(osv.osv):
context={}
member_line_obj = self.pool.get('membership.membership_line')
for id in ids:
- ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',id)])
+ ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',id)], context=context)
member_line_obj.unlink(cr, uid, ml_ids, context=context)
return super(account_invoice_line, self).unlink(cr, uid, ids, context=context)
- def create(self, cr, uid, vals, context={}):
+ def create(self, cr, uid, vals, context=None):
"""Overrides orm create method
"""
- result = super(account_invoice_line, self).create(cr, uid, vals, context)
- line = self.browse(cr, uid, result)
+ result = super(account_invoice_line, self).create(cr, uid, vals, context=context)
+ line = self.browse(cr, uid, result, context=context)
member_line_obj = self.pool.get('membership.membership_line')
if line.invoice_id.type == 'out_invoice':
-
- ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',line.id)])
+ ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',line.id)], context=context)
if line.product_id and line.product_id.membership and not ml_ids:
# Product line is a membership product
date_from = line.product_id.membership_date_from
@@ -548,7 +547,7 @@ class account_invoice_line(osv.osv):
'date_from': date_from,
'date_to': date_to,
'account_invoice_line': line.id,
- })
+ }, context=context)
return result
account_invoice_line()
diff --git a/addons/membership/membership_demo.xml b/addons/membership/membership_demo.xml
index fa8dda9e5cb..9479543305a 100644
--- a/addons/membership/membership_demo.xml
+++ b/addons/membership/membership_demo.xml
@@ -6,7 +6,7 @@
True
-
+
Golden Membership
180
@@ -15,7 +15,7 @@
True
-
+
Silver Membership
80
@@ -24,7 +24,7 @@
True
-
+
Basic Membership
40
@@ -33,7 +33,7 @@
-
+
True
diff --git a/addons/membership/membership_view.xml b/addons/membership/membership_view.xml
index a4db3754cc4..afa1ee9bebe 100644
--- a/addons/membership/membership_view.xml
+++ b/addons/membership/membership_view.xml
@@ -8,6 +8,32 @@
+
+ membership.product.search.form
+ product.product
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Membership products
product.product
@@ -19,31 +45,59 @@
+
+
+
- Memberships
+ Membership Products
product.product
form
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- Membership product
+ Membership Products
product.product
@@ -59,10 +113,11 @@
- Memberships
+ Membership Products
product.product
[('membership','=',True), ('type', '=', 'service')]
{'membership':True, 'type':'service'}
+
@@ -81,13 +136,12 @@
-
-
-
-
-
+
@@ -99,10 +153,11 @@
+
-
+
@@ -113,14 +168,15 @@
search
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -133,12 +189,14 @@
-
-
-
+
+
+
+
+
-
-
+
+
@@ -149,6 +207,7 @@
res.partner
{"search_default_old": 1}
+ {"search_default_all_members": 1}
@@ -161,6 +220,7 @@
form
+
@@ -190,7 +250,7 @@
-
+
diff --git a/addons/membership/process/membership_process.xml b/addons/membership/process/membership_process.xml
index 4a6df4c0e03..730f01bd36b 100644
--- a/addons/membership/process/membership_process.xml
+++ b/addons/membership/process/membership_process.xml
@@ -1,21 +1,21 @@
-
+
-
+
-
+
-
+
@@ -25,7 +25,7 @@
-
+
@@ -35,7 +35,7 @@
-
+
@@ -45,7 +45,7 @@
-
+
@@ -56,7 +56,7 @@
-
+
@@ -67,7 +67,7 @@
-
+
@@ -78,62 +78,57 @@
-
+
-
+
-
-
+
-
-
+
-
+
-
-
+
-
-
+
-
-
+
\ No newline at end of file
diff --git a/addons/membership/report/report_membership.py b/addons/membership/report/report_membership.py
index 1bfdce82404..b631ef64d9b 100644
--- a/addons/membership/report/report_membership.py
+++ b/addons/membership/report/report_membership.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,12 +15,24 @@
# 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 .
#
##############################################################################
from osv import fields, osv
import tools
+import decimal_precision as dp
+
+
+STATE = [
+ ('none', 'Non Member'),
+ ('canceled', 'Cancelled Member'),
+ ('old', 'Old Member'),
+ ('waiting', 'Waiting Member'),
+ ('invoiced', 'Invoiced Member'),
+ ('free', 'Free Member'),
+ ('paid', 'Paid Member'),
+]
class report_membership(osv.osv):
@@ -38,27 +50,21 @@ class report_membership(osv.osv):
('07', 'July'), ('08', 'August'),\
('09', 'September'), ('10', 'October'),\
('11', 'November'), ('12', 'December')], 'Month', readonly=True),
- 'date': fields.datetime('Create Date', readonly=True),
- 'canceled_number': fields.integer('Canceled', readonly=True),
- 'waiting_number': fields.integer('Waiting', readonly=True),
- 'invoiced_number': fields.integer('Invoiced', readonly=True),
- 'paid_number': fields.integer('Paid', readonly=True),
- 'canceled_amount': fields.float('Canceled', digits=(16, 2), readonly=True),
- 'waiting_amount': fields.float('Waiting', digits=(16, 2), readonly=True),
- 'invoiced_amount': fields.float('Invoiced', digits=(16, 2), readonly=True),
- 'paid_amount': fields.float('Paid', digits=(16, 2), readonly=True),
- 'currency': fields.many2one('res.currency', 'Currency', readonly=True,
- select=2),
-
- 'state':fields.selection([('draft', 'Non Member'),
- ('cancel', 'Cancelled Member'),
- ('done', 'Old Member'),
- ('open', 'Invoiced Member'),
- ('free', 'Free Member'), ('paid', 'Paid Member')], 'State'),
- 'partner_id': fields.many2one('res.partner', 'Members', readonly=True, select=3),
- 'membership_id': fields.many2one('product.product', 'Membership', readonly=True, select=3)
-
-
+ 'date_from': fields.datetime('Start Date', readonly=True, help="Start membership date"),
+ 'date_to': fields.datetime('End Date', readonly=True, help="End membership date"),
+ 'num_canceled': fields.integer('# Canceled', readonly=True),
+ 'num_old': fields.integer('# Old', readonly=True),
+ 'num_waiting': fields.integer('# Waiting', readonly=True),
+ 'num_invoiced': fields.integer('# Invoiced', readonly=True),
+ 'num_free': fields.integer('# Free', readonly=True),
+ 'num_paid': fields.integer('# Paid', readonly=True),
+ 'tot_pending': fields.float('Pending Amount', digits_compute= dp.get_precision('Account'), readonly=True),
+ 'tot_earned': fields.float('Earned Amount', digits_compute= dp.get_precision('Account'), readonly=True),
+ 'state':fields.selection(STATE, 'Membership State'),
+ 'partner_id': fields.many2one('res.partner', 'Members', readonly=True),
+ 'membership_id': fields.many2one('product.product', 'Membership Product', readonly=True),
+ 'user_id': fields.many2one('res.users', 'Salesman', readonly=True),
+ 'company_id': fields.many2one('res.company', 'Company', readonly=True)
}
def init(self, cr):
@@ -67,61 +73,62 @@ class report_membership(osv.osv):
cr.execute("""
CREATE OR REPLACE VIEW report_membership AS (
SELECT
- MIN(id) as id,
- COUNT(ncanceled) as canceled_number,
- COUNT(npaid) as paid_number,
- COUNT(ninvoiced) as invoiced_number,
- COUNT(nwaiting) as waiting_number,
- SUM(acanceled) as canceled_amount,
- SUM(apaid) as paid_amount,
- SUM(ainvoiced) as invoiced_amount,
- SUM(awaiting) as waiting_amount,
+ MIN(id) AS id,
+ COUNT(num_canceled) AS num_canceled,
+ COUNT(num_old) AS num_old,
+ COUNT(num_waiting) AS num_waiting,
+ COUNT(num_invoiced) AS num_invoiced,
+ COUNT(num_free) AS num_free,
+ COUNT(num_paid) AS num_paid,
+ SUM(tot_pending) AS tot_pending,
+ SUM(tot_earned) AS tot_earned,
year,
month,
- date,
+ date_from,
+ date_to,
partner_id,
membership_id,
- state,
- currency
-
- FROM (SELECT
- CASE WHEN ai.state = 'cancel' THEN ml.id END AS ncanceled,
- CASE WHEN ai.state = 'paid' THEN ml.id END AS npaid,
- CASE WHEN ai.state = 'open' THEN ml.id END AS ninvoiced,
- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
- THEN ml.id END AS nwaiting,
- CASE WHEN ai.state = 'cancel'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS acanceled,
- CASE WHEN ai.state = 'paid'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS apaid,
- CASE WHEN ai.state = 'open'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS ainvoiced,
- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS awaiting,
+ company_id,
+ user_id,
+ state
+ FROM
+ (SELECT
+ CASE WHEN ml.state = 'canceled' THEN ml.id END AS num_canceled,
+ CASE WHEN ml.state = 'old' THEN ml.id END AS num_old,
+ CASE WHEN ml.state = 'waiting' THEN ml.id END AS num_waiting,
+ CASE WHEN ml.state = 'invoiced' THEN ml.id END AS num_invoiced,
+ CASE WHEN ml.state = 'free' THEN ml.id END AS num_free,
+ CASE WHEN ml.state = 'paid' THEN ml.id END AS num_paid,
+ CASE WHEN ml.state IN ('waiting', 'invoiced') THEN SUM(il.price_subtotal) ELSE 0 END AS tot_pending,
+ CASE WHEN ml.state IN ('old', 'paid') THEN SUM(il.price_subtotal) ELSE 0 END AS tot_earned,
TO_CHAR(ml.date_from, 'YYYY') AS year,
- TO_CHAR(ml.date_from, 'MM')as month,
- TO_CHAR(ml.date_from, 'YYYY-MM-DD') as date,
- ai.partner_id AS partner_id,
- ai.currency_id AS currency,
- ai.state as state,
+ TO_CHAR(ml.date_from, 'MM') AS month,
+ TO_CHAR(ml.date_from, 'YYYY-MM-DD') AS date_from,
+ TO_CHAR(ml.date_to, 'YYYY-MM-DD') AS date_to,
+ ml.partner AS partner_id,
MIN(ml.id) AS id,
- ml.membership_id AS membership_id
+ ml.membership_id AS membership_id,
+ p.user_id AS user_id,
+ ml.company_id AS company_id,
+ ml.state AS state
FROM membership_membership_line ml
- JOIN (account_invoice_line ail
- LEFT JOIN account_invoice ai
- ON (ail.invoice_id = ai.id))
- ON (ml.account_invoice_line = ail.id)
- JOIN res_partner p
- ON (ml.partner = p.id)
- GROUP BY TO_CHAR(ml.date_from, 'YYYY'), TO_CHAR(ml.date_from, 'MM'), TO_CHAR(ml.date_from, 'YYYY-MM-DD'), ai.state, ai.partner_id,
- ai.currency_id, ml.id, ml.membership_id) AS foo
- GROUP BY year, month, date, currency, partner_id, membership_id, state)
+ LEFT JOIN account_invoice_line il ON (ml.account_invoice_line = il.id)
+ LEFT JOIN account_invoice ai ON (il.invoice_id = ai.id)
+ LEFT JOIN res_partner p ON (ml.partner = p.id)
+ GROUP BY
+ TO_CHAR(ml.date_from, 'YYYY'),
+ TO_CHAR(ml.date_from, 'MM'),
+ TO_CHAR(ml.date_from, 'YYYY-MM-DD'),
+ TO_CHAR(ml.date_to, 'YYYY-MM-DD'),
+ ml.partner,
+ ml.id,
+ p.user_id,
+ ml.company_id,
+ ml.state,
+ ml.membership_id) AS foo
+ GROUP BY year, month, date_from, date_to, partner_id, user_id, membership_id, company_id, state)
""")
-
+
report_membership()
-#
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/membership/report/report_membership_view.xml b/addons/membership/report/report_membership_view.xml
index 90330a92a55..291efee4834 100644
--- a/addons/membership/report/report_membership_view.xml
+++ b/addons/membership/report/report_membership_view.xml
@@ -10,15 +10,24 @@
tree
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -31,45 +40,43 @@
+ domain="[('date_from','<=', time.strftime('%%Y-%%m-%%d')), ('date_from','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]"/>
+ domain="[('date_from','<=', time.strftime('%%Y-%%m-%%d')), ('date_from','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"/>
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
-
+ domain="[]" context="{'group_by':'month'}"/>
-
+
report.membership.graph1
report.membership
@@ -89,7 +96,7 @@
report.membership
form
- {"search_default_member":1}
+ {"search_default_member":1, 'search_default_Revenue':1}
@@ -107,9 +114,10 @@
-
+ id="menu_report_membership"
+ groups="base.group_partner_manager"/>
-
+
diff --git a/addons/membership/security/ir.model.access.csv b/addons/membership/security/ir.model.access.csv
index 6cf3eb755c2..f3d91646c44 100644
--- a/addons/membership/security/ir.model.access.csv
+++ b/addons/membership/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_membership_membership_line_partner_manager","membership.membership_line partner_manager","model_membership_membership_line","base.group_partner_manager",1,0,0,0
+"access_membership_membership_line_partner_manager","membership.membership_line partner_manager","model_membership_membership_line","base.group_partner_manager",1,1,1,1
"access_membership_membership_line","membership.membership_line","model_membership_membership_line",,1,0,0,0
"access_report_membership","report.membership","model_report_membership","base.group_partner_manager",1,0,0,0
diff --git a/addons/membership/wizard/__init__.py b/addons/membership/wizard/__init__.py
index 07d484d7125..7ad7cc32008 100644
--- a/addons/membership/wizard/__init__.py
+++ b/addons/membership/wizard/__init__.py
@@ -20,5 +20,4 @@
##############################################################################
import membership_invoice
-import membership_unpaid_invoice
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/membership/wizard/membership_invoice.py b/addons/membership/wizard/membership_invoice.py
index 7536bd4b942..9b9fddc2313 100644
--- a/addons/membership/wizard/membership_invoice.py
+++ b/addons/membership/wizard/membership_invoice.py
@@ -18,6 +18,7 @@
# along with this program. If not, see .
#
##############################################################################
+
import time
from osv import fields, osv
@@ -27,12 +28,12 @@ import decimal_precision as dp
class membership_invoice(osv.osv_memory):
"""Membership Invoice"""
-
+
_name = "membership.invoice"
_description = "Membership Invoice"
_columns = {
'product_id': fields.many2one('product.product','Membership', required=True),
- 'member_price':fields.float('Member Price', digits_compute= dp.get_precision('Sale Price'), required=True),
+ 'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Sale Price'), required=True),
}
def onchange_product(self, cr, uid, ids, product_id):
"""This function returns value of product's member price based on product id.
diff --git a/addons/membership/wizard/membership_unpaid_invoice.py b/addons/membership/wizard/membership_unpaid_invoice.py
deleted file mode 100644
index 0dbbbb3c952..00000000000
--- a/addons/membership/wizard/membership_unpaid_invoice.py
+++ /dev/null
@@ -1,59 +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 time
-
-from osv import fields, osv
-
-class member_unpaid_invoice(osv.osv_memory):
- _name = "membership.unpaid.invoice"
- _description = "List of Unpaid Partner"
- _columns ={
- 'product': fields.many2one('product.product','Membership', size=64,required=True, help='Select Membership.'),
- }
-
- def invoice_membership(self, cr, uid, ids, context):
- model_obj = self.pool.get('ir.model.data')
- partners = []
- result = model_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
- res = model_obj.read(cr, uid, result, ['res_id'], context=context)
- for data in self.read(cr, uid, ids, context=context):
- cr.execute('''select p.id from res_partner as p \
- left join account_invoice as i on p.id=i.partner_id \
- left join account_invoice_line as il on i.id=il.invoice_id \
- left join product_product as pr on pr.id=il.product_id \
- where i.state = 'open' and pr.id=%s \
- group by p.id''' % (data['product']))
- map(lambda x: partners.append(x[0]),cr.fetchall())
-
- return {
- 'domain': [('id', 'in', partners)],
- 'name': 'Unpaid Members',
- 'view_type': 'form',
- 'view_mode': 'tree,form',
- 'res_model': 'res.partner',
- 'type': 'ir.actions.act_window',
- 'res_id' : partners,
- 'search_view_id' : res['res_id']
- }
-
-member_unpaid_invoice()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/membership/wizard/membership_unpaid_invoice_view.xml b/addons/membership/wizard/membership_unpaid_invoice_view.xml
deleted file mode 100644
index 9c5db96d5e3..00000000000
--- a/addons/membership/wizard/membership_unpaid_invoice_view.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
- unpaid.invoice.view.form
- membership.unpaid.invoice
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- List Unpaid Members
- membership.unpaid.invoice
- form
- tree,form
-
- new
-
-
-
-
-
-
diff --git a/addons/mrp/__openerp__.py b/addons/mrp/__openerp__.py
index c56466501e0..f267764970a 100644
--- a/addons/mrp/__openerp__.py
+++ b/addons/mrp/__openerp__.py
@@ -85,7 +85,6 @@
],
'demo_xml': [
'mrp_demo.xml',
- 'board_manufacturing_demo.xml'
],
'test': [
'test/mrp_procurement.yml',
diff --git a/addons/mrp/board_manufacturing_demo.xml b/addons/mrp/board_manufacturing_demo.xml
deleted file mode 100644
index af8f07d2871..00000000000
--- a/addons/mrp/board_manufacturing_demo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/addons/mrp/board_manufacturing_view.xml b/addons/mrp/board_manufacturing_view.xml
index aa8bd2ab69e..c5474670d9b 100644
--- a/addons/mrp/board_manufacturing_view.xml
+++ b/addons/mrp/board_manufacturing_view.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/addons/mrp/i18n/ar.po b/addons/mrp/i18n/ar.po
index f2b3d711f2e..3c0a5730203 100644
--- a/addons/mrp/i18n/ar.po
+++ b/addons/mrp/i18n/ar.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/bg.po b/addons/mrp/i18n/bg.po
index 44e7b102d18..a1bd0ba39d7 100644
--- a/addons/mrp/i18n/bg.po
+++ b/addons/mrp/i18n/bg.po
@@ -565,7 +565,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/bs.po b/addons/mrp/i18n/bs.po
index 4d3fd7169e9..6114a513680 100644
--- a/addons/mrp/i18n/bs.po
+++ b/addons/mrp/i18n/bs.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/ca.po b/addons/mrp/i18n/ca.po
index 6a674f9d1c3..ed1ee7ba401 100644
--- a/addons/mrp/i18n/ca.po
+++ b/addons/mrp/i18n/ca.po
@@ -584,7 +584,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Temps en hores per realitzar un cicle."
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Data final"
diff --git a/addons/mrp/i18n/cs.po b/addons/mrp/i18n/cs.po
index cf9c4b7dbc1..012d1c2eae0 100644
--- a/addons/mrp/i18n/cs.po
+++ b/addons/mrp/i18n/cs.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/de.po b/addons/mrp/i18n/de.po
index e6a45d18a49..2e84ba9f1e2 100644
--- a/addons/mrp/i18n/de.po
+++ b/addons/mrp/i18n/de.po
@@ -585,7 +585,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Zeit in Stunden für einen (Auftrags-) Zyklus"
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Endedatum"
diff --git a/addons/mrp/i18n/el.po b/addons/mrp/i18n/el.po
index fc5cb55363f..6904be353b3 100644
--- a/addons/mrp/i18n/el.po
+++ b/addons/mrp/i18n/el.po
@@ -585,7 +585,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Χρόνος ενός κύκλου σε ώρες"
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Ημερ/νία Τέλους"
diff --git a/addons/mrp/i18n/es.po b/addons/mrp/i18n/es.po
index 9212132769a..d2568c453cf 100644
--- a/addons/mrp/i18n/es.po
+++ b/addons/mrp/i18n/es.po
@@ -585,7 +585,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Tiempo en horas para realizar un ciclo."
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Fecha final"
diff --git a/addons/mrp/i18n/es_AR.po b/addons/mrp/i18n/es_AR.po
index c1c0ee7e6b9..6146c57db3d 100644
--- a/addons/mrp/i18n/es_AR.po
+++ b/addons/mrp/i18n/es_AR.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/es_EC.po b/addons/mrp/i18n/es_EC.po
index d86a3f54173..ff994127269 100644
--- a/addons/mrp/i18n/es_EC.po
+++ b/addons/mrp/i18n/es_EC.po
@@ -585,7 +585,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Tiempo en horas para realizar un ciclo."
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Fecha final"
diff --git a/addons/mrp/i18n/et.po b/addons/mrp/i18n/et.po
index 434a4622aa5..1e78dd6168b 100644
--- a/addons/mrp/i18n/et.po
+++ b/addons/mrp/i18n/et.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Aeg tundides mis kulub ühes tsükklis."
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Lõppkuupäev"
diff --git a/addons/mrp/i18n/fi.po b/addons/mrp/i18n/fi.po
index 8610bec1dea..1d33d2dedff 100644
--- a/addons/mrp/i18n/fi.po
+++ b/addons/mrp/i18n/fi.po
@@ -580,7 +580,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Yhden kierron kesto tunneissa."
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Lopetuspäivämäärä"
diff --git a/addons/mrp/i18n/fr.po b/addons/mrp/i18n/fr.po
index 51287167558..a39551a404d 100644
--- a/addons/mrp/i18n/fr.po
+++ b/addons/mrp/i18n/fr.po
@@ -600,7 +600,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Temps nécessaire à la réalisation d'un cycle"
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Date de fin"
diff --git a/addons/mrp/i18n/hi.po b/addons/mrp/i18n/hi.po
index 96be03f1000..d8352b7d12d 100644
--- a/addons/mrp/i18n/hi.po
+++ b/addons/mrp/i18n/hi.po
@@ -562,7 +562,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "समाप्ति तिथि"
diff --git a/addons/mrp/i18n/hr.po b/addons/mrp/i18n/hr.po
index 652303d8bb4..17504495bf8 100644
--- a/addons/mrp/i18n/hr.po
+++ b/addons/mrp/i18n/hr.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/hu.po b/addons/mrp/i18n/hu.po
index 10d9b0da8ba..fb78fa66ed3 100644
--- a/addons/mrp/i18n/hu.po
+++ b/addons/mrp/i18n/hu.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/id.po b/addons/mrp/i18n/id.po
index c91d0f8438e..23308aeca00 100644
--- a/addons/mrp/i18n/id.po
+++ b/addons/mrp/i18n/id.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/it.po b/addons/mrp/i18n/it.po
index c001e0a2d6e..148820c77f9 100644
--- a/addons/mrp/i18n/it.po
+++ b/addons/mrp/i18n/it.po
@@ -586,7 +586,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Tempo in ore per completare un ciclo."
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Data di fine"
diff --git a/addons/mrp/i18n/ko.po b/addons/mrp/i18n/ko.po
index 1068e604527..8df359442fb 100644
--- a/addons/mrp/i18n/ko.po
+++ b/addons/mrp/i18n/ko.po
@@ -567,7 +567,7 @@ msgid "Time in hours for doing one cycle."
msgstr "한 사이클을 수행하는 시간"
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "마감 날짜"
diff --git a/addons/mrp/i18n/lt.po b/addons/mrp/i18n/lt.po
index 677f640b861..faae3ef23ce 100644
--- a/addons/mrp/i18n/lt.po
+++ b/addons/mrp/i18n/lt.po
@@ -575,7 +575,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Vieno ciklo laikas valandomis."
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Pabaigos data"
diff --git a/addons/mrp/i18n/mrp.pot b/addons/mrp/i18n/mrp.pot
index d576151f247..913acfe3f9f 100644
--- a/addons/mrp/i18n/mrp.pot
+++ b/addons/mrp/i18n/mrp.pot
@@ -546,7 +546,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/nl.po b/addons/mrp/i18n/nl.po
index 97c4f6ee79c..4faad6c115e 100644
--- a/addons/mrp/i18n/nl.po
+++ b/addons/mrp/i18n/nl.po
@@ -584,7 +584,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Tijd in uren voor één productiecyclus."
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Einddatum"
diff --git a/addons/mrp/i18n/nl_BE.po b/addons/mrp/i18n/nl_BE.po
index a6bea998b5f..a4df723195a 100644
--- a/addons/mrp/i18n/nl_BE.po
+++ b/addons/mrp/i18n/nl_BE.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/pl.po b/addons/mrp/i18n/pl.po
index d65d0617e75..37985293f94 100644
--- a/addons/mrp/i18n/pl.po
+++ b/addons/mrp/i18n/pl.po
@@ -582,7 +582,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Czas wykonania jednego cyklu w godzinach"
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Data końcowa"
diff --git a/addons/mrp/i18n/pt.po b/addons/mrp/i18n/pt.po
index 71ea973805e..39c9c359335 100644
--- a/addons/mrp/i18n/pt.po
+++ b/addons/mrp/i18n/pt.po
@@ -564,7 +564,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Data de finalização"
diff --git a/addons/mrp/i18n/pt_BR.po b/addons/mrp/i18n/pt_BR.po
index b348ca0faee..ba0de24330e 100644
--- a/addons/mrp/i18n/pt_BR.po
+++ b/addons/mrp/i18n/pt_BR.po
@@ -567,7 +567,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Tempo em hora para fazer um ciclo."
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Data final"
diff --git a/addons/mrp/i18n/ro.po b/addons/mrp/i18n/ro.po
index 11f24dae6c9..346792757ce 100644
--- a/addons/mrp/i18n/ro.po
+++ b/addons/mrp/i18n/ro.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/ru.po b/addons/mrp/i18n/ru.po
index 3f227b676ac..b0a01bfe8f2 100644
--- a/addons/mrp/i18n/ru.po
+++ b/addons/mrp/i18n/ru.po
@@ -567,7 +567,7 @@ msgid "Time in hours for doing one cycle."
msgstr "Время в часах на выполнение одного цикла"
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Дата окончания"
diff --git a/addons/mrp/i18n/sk.po b/addons/mrp/i18n/sk.po
index e9bdba85b42..5cad0bfc519 100644
--- a/addons/mrp/i18n/sk.po
+++ b/addons/mrp/i18n/sk.po
@@ -562,7 +562,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/sl.po b/addons/mrp/i18n/sl.po
index 1c314829f6a..16c4b4c8067 100644
--- a/addons/mrp/i18n/sl.po
+++ b/addons/mrp/i18n/sl.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Končni datum"
diff --git a/addons/mrp/i18n/sq.po b/addons/mrp/i18n/sq.po
index ba8543fe2f7..bbd4051e28a 100644
--- a/addons/mrp/i18n/sq.po
+++ b/addons/mrp/i18n/sq.po
@@ -562,7 +562,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/sv.po b/addons/mrp/i18n/sv.po
index d3865dd7691..c086b7f24f1 100644
--- a/addons/mrp/i18n/sv.po
+++ b/addons/mrp/i18n/sv.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Slutdatum"
diff --git a/addons/mrp/i18n/tlh.po b/addons/mrp/i18n/tlh.po
index 81ba3486333..5ac8e02d5aa 100644
--- a/addons/mrp/i18n/tlh.po
+++ b/addons/mrp/i18n/tlh.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/tr.po b/addons/mrp/i18n/tr.po
index be3a69b6415..ee6b7017c3b 100644
--- a/addons/mrp/i18n/tr.po
+++ b/addons/mrp/i18n/tr.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Bitiş Tarihi"
diff --git a/addons/mrp/i18n/uk.po b/addons/mrp/i18n/uk.po
index a5824ca6d96..fcbd14cb9e7 100644
--- a/addons/mrp/i18n/uk.po
+++ b/addons/mrp/i18n/uk.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "Кінцева дата"
diff --git a/addons/mrp/i18n/vi.po b/addons/mrp/i18n/vi.po
index 516438d2dfc..6c620e01062 100644
--- a/addons/mrp/i18n/vi.po
+++ b/addons/mrp/i18n/vi.po
@@ -562,7 +562,7 @@ msgid "Time in hours for doing one cycle."
msgstr ""
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/zh_CN.po b/addons/mrp/i18n/zh_CN.po
index b4b04af2f15..1fb75aececc 100644
--- a/addons/mrp/i18n/zh_CN.po
+++ b/addons/mrp/i18n/zh_CN.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr "一个周期的工作小时数"
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr "结束日期"
diff --git a/addons/mrp/i18n/zh_HK.po b/addons/mrp/i18n/zh_HK.po
index 88ec10de504..43c27d45606 100644
--- a/addons/mrp/i18n/zh_HK.po
+++ b/addons/mrp/i18n/zh_HK.po
@@ -562,7 +562,7 @@ msgid "Time in hours for doing one cycle."
msgstr "一個循環所須的小時數"
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/i18n/zh_TW.po b/addons/mrp/i18n/zh_TW.po
index b0be94ac800..08120747e9a 100644
--- a/addons/mrp/i18n/zh_TW.po
+++ b/addons/mrp/i18n/zh_TW.po
@@ -561,7 +561,7 @@ msgid "Time in hours for doing one cycle."
msgstr "一個循環所須的小時數"
#. module: mrp
-#: field:mrp.production,date_finnished:0
+#: field:mrp.production,date_finished:0
msgid "End Date"
msgstr ""
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 1a71114c336..5f2695cf3a7 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -456,7 +456,7 @@ class mrp_production(osv.osv):
'date_planned_date': fields.function(_production_date, method=True, type='date', string='Scheduled Date'),
'date_planned': fields.datetime('Scheduled date', required=True, select=1),
'date_start': fields.datetime('Start Date'),
- 'date_finnished': fields.datetime('End Date'),
+ 'date_finished': fields.datetime('End Date'),
'bom_id': fields.many2one('mrp.bom', 'Bill of Material', domain=[('bom_id','=',False)]),
'routing_id': fields.many2one('mrp.routing', string='Routing', on_delete='set null', help="The list of operations (list of workcenters) to produce the finished product. The routing is mainly used to compute workcenter costs during operations and to plan future loads on workcenters based on production plannification."),
@@ -658,7 +658,7 @@ class mrp_production(osv.osv):
"""
for production in self.browse(cr, uid, ids):
self._costs_generate(cr, uid, production)
- return self.write(cr, uid, ids, {'state': 'done', 'date_finnished': time.strftime('%Y-%m-%d %H:%M:%S')})
+ return self.write(cr, uid, ids, {'state': 'done', 'date_finished': time.strftime('%Y-%m-%d %H:%M:%S')})
def test_production_done(self, cr, uid, ids):
""" Tests whether production is done or not.
@@ -861,7 +861,7 @@ class mrp_production(osv.osv):
source = production.product_id.product_tmpl_id.property_stock_production.id
data = {
'name':'PROD:' + production.name,
- 'date_planned': production.date_planned,
+ 'date': production.date_planned,
'product_id': production.product_id.id,
'product_qty': production.product_qty,
'product_uom': production.product_uom.id,
@@ -883,7 +883,7 @@ class mrp_production(osv.osv):
if line.product_id.type in ('product', 'consu'):
res_dest_id = move_obj.create(cr, uid, {
'name':'PROD:' + production.name,
- 'date_planned': production.date_planned,
+ 'date': production.date_planned,
'product_id': line.product_id.id,
'product_qty': line.product_qty,
'product_uom': line.product_uom.id,
@@ -904,7 +904,7 @@ class mrp_production(osv.osv):
'product_uom': line.product_uom.id,
'product_uos_qty': line.product_uos and line.product_uos_qty or False,
'product_uos': line.product_uos and line.product_uos.id or False,
- 'date_planned': newdate,
+ 'date': newdate,
'move_dest_id': res_dest_id,
'location_id': production.location_src_id.id,
'location_dest_id': routing_loc or production.location_src_id.id,
diff --git a/addons/mrp/mrp_demo.xml b/addons/mrp/mrp_demo.xml
index e303ceb3378..e9c4f9f37b2 100644
--- a/addons/mrp/mrp_demo.xml
+++ b/addons/mrp/mrp_demo.xml
@@ -232,14 +232,6 @@
phantom
-
- HDD Seagate
- 26
-
- 1.0
- normal
-
-
Assembly Basic PC
29
@@ -563,6 +555,14 @@
+
+ Default BOM for Shelf of 100cm
+ SHE100
+ 129
+
+
+ 1.0
+
Assembly Section
@@ -591,15 +591,6 @@
-
- Default BOM for Shelf of 100cm
- SHE100
- 129
-
-
- 1.0
-
-
131
@@ -647,15 +638,6 @@
phantom
-
- 141
-
-
-
- 1.0
- Rear panel SHE100
-
-
Assembly Section
143
diff --git a/addons/mrp/mrp_installer.xml b/addons/mrp/mrp_installer.xml
index d317cf6face..ff0c01f8e18 100644
--- a/addons/mrp/mrp_installer.xml
+++ b/addons/mrp/mrp_installer.xml
@@ -48,6 +48,7 @@
3
+ always
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index 67aae0f1b91..32f3100b868 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -5,10 +5,9 @@
-
-
+
-
+
@@ -283,7 +282,7 @@
mrp.routing.search
mrp.routing
- tree
+ search
@@ -487,24 +486,9 @@
-
-
-
-
-
-
-
-
-
-
mrp.production.tree
mrp.production
@@ -545,7 +529,7 @@
mrp.production
gantt
-
+
@@ -604,8 +588,8 @@
-
-
+
+
@@ -658,8 +642,8 @@
-
-
+
+
-
-
+
+
-
+
diff --git a/addons/mrp/process/procurement_process.xml b/addons/mrp/process/procurement_process.xml
index ca08481d4e4..eac65932bc0 100644
--- a/addons/mrp/process/procurement_process.xml
+++ b/addons/mrp/process/procurement_process.xml
@@ -1,7 +1,7 @@
-
+
@@ -14,9 +14,9 @@
-
+
-
+
@@ -26,7 +26,7 @@
-
+
@@ -36,9 +36,9 @@
-
+
-
+
@@ -50,7 +50,7 @@
-
+
@@ -60,9 +60,9 @@
-
+
-
+
@@ -74,7 +74,7 @@
-
+
@@ -85,7 +85,7 @@
-
+
@@ -118,7 +118,7 @@
Process Transition
-->
-
+
@@ -128,7 +128,6 @@
-
@@ -137,7 +136,6 @@
-
@@ -146,7 +144,6 @@
-
@@ -155,7 +152,6 @@
-
@@ -164,7 +160,6 @@
-
@@ -173,7 +168,6 @@
-
@@ -182,7 +176,6 @@
-
@@ -191,7 +184,6 @@
-
@@ -200,7 +192,6 @@
-
@@ -209,7 +200,6 @@
-
@@ -218,7 +208,6 @@
-
@@ -227,7 +216,6 @@
-
diff --git a/addons/mrp/process/service_product_process.xml b/addons/mrp/process/service_product_process.xml
index c23ed6e7a65..281c53c80ee 100644
--- a/addons/mrp/process/service_product_process.xml
+++ b/addons/mrp/process/service_product_process.xml
@@ -9,7 +9,7 @@
-
+
@@ -36,7 +36,6 @@
-->
-
diff --git a/addons/mrp/process/stockable_product_process.xml b/addons/mrp/process/stockable_product_process.xml
index 9dc45f0515f..8c07b5c6fb2 100644
--- a/addons/mrp/process/stockable_product_process.xml
+++ b/addons/mrp/process/stockable_product_process.xml
@@ -17,7 +17,7 @@
-->
-
+
@@ -28,7 +28,7 @@
-
+
@@ -66,7 +66,6 @@
-->
-
@@ -75,7 +74,6 @@
-
diff --git a/addons/mrp/report/custom_default.xsl b/addons/mrp/report/custom_default.xsl
index 103128eb9f4..aa5eb22d8e0 100644
--- a/addons/mrp/report/custom_default.xsl
+++ b/addons/mrp/report/custom_default.xsl
@@ -19,8 +19,6 @@
-
- /
1.3cm 28.1cm 20cm 28.1cm
@@ -35,8 +33,6 @@
-
- /
1.3cm 28.1cm 20cm 28.1cm
diff --git a/addons/mrp/report/mrp_production_order.py b/addons/mrp/report/mrp_production_order.py
index 9aeae1781cd..3ad4184c413 100644
--- a/addons/mrp/report/mrp_production_order.py
+++ b/addons/mrp/report/mrp_production_order.py
@@ -51,7 +51,7 @@ class mrp_production_order(osv.osv):
'date_planned':fields.date('Scheduled Date'),
'location_src_id': fields.many2one('stock.location', 'Raw Materials Location', readonly=True),
'date_start': fields.datetime('Start Date',readonly=True),
- 'date_finnished': fields.datetime('End Date',readonly=True),
+ 'date_finished': fields.datetime('End Date',readonly=True),
'location_dest_id': fields.many2one('stock.location', 'Finished Products Location', readonly=True),
'company_id': fields.many2one('res.company','Company',readonly=True),
'bom_id': fields.many2one('mrp.bom', 'Bill of Material',readonly=True),
@@ -100,7 +100,7 @@ class mrp_production_order(osv.osv):
s.routing_id,
s.picking_id,
s.date_start,
- s.date_finnished,
+ s.date_finished,
to_date(to_char(s.date_planned, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_planned,
s.origin,
s.priority,
@@ -128,7 +128,7 @@ class mrp_production_order(osv.osv):
to_date(to_char(s.date_planned, 'dd-MM-YYYY'),'dd-MM-YYYY'),
s.origin,
s.date_start,
- s.date_finnished,
+ s.date_finished,
s.company_id
)""")
mrp_production_order()
diff --git a/addons/mrp/report/mrp_production_order_view.xml b/addons/mrp/report/mrp_production_order_view.xml
index ea1f15bc3ea..6f88981fd5f 100644
--- a/addons/mrp/report/mrp_production_order_view.xml
+++ b/addons/mrp/report/mrp_production_order_view.xml
@@ -58,7 +58,7 @@
@@ -80,7 +80,7 @@
-
+
diff --git a/addons/mrp/report/mrp_report.py b/addons/mrp/report/mrp_report.py
index 6ae1b2e63e5..d677184586e 100644
--- a/addons/mrp/report/mrp_report.py
+++ b/addons/mrp/report/mrp_report.py
@@ -71,7 +71,7 @@ class report_mrp_inout(osv.osv):
create or replace view report_mrp_inout as (
select
min(sm.id) as id,
- to_char(sm.date_planned,'YYYY:IW') as date,
+ to_char(sm.date,'YYYY:IW') as date,
sum(case when (sl.usage='internal') then
pt.standard_price * sm.product_qty
else
@@ -94,7 +94,7 @@ class report_mrp_inout(osv.osv):
where
sm.state in ('waiting','confirmed','assigned')
group by
- to_char(sm.date_planned,'YYYY:IW')
+ to_char(sm.date,'YYYY:IW')
)""")
report_mrp_inout()
diff --git a/addons/mrp/report/mrp_report_view.xml b/addons/mrp/report/mrp_report_view.xml
index 1bf82338cdd..dcb2bcb3566 100644
--- a/addons/mrp/report/mrp_report_view.xml
+++ b/addons/mrp/report/mrp_report_view.xml
@@ -101,7 +101,8 @@
graph,tree
Weekly Stock Value Variation enables you to track stock value evolution as a result of manufacturing activities (consumption of raw materials, production of finished goods, added accounting value of stock by the creation of value following the transformation of products).
-
+
diff --git a/addons/mrp/report/price.py b/addons/mrp/report/price.py
index 3a6ab81a308..52bcf3bcd4a 100644
--- a/addons/mrp/report/price.py
+++ b/addons/mrp/report/price.py
@@ -131,6 +131,8 @@ class report_custom(report_rml):
""" % (_('Component'), _('Component suppliers'), _('Quantity'),_('Cost Price per Uom')+'('+company_currency.code+')', _('Supplier Price per Uom')+'('+company_currency.code+')')
+ purchase_price_digits = rml_obj.get_digits(dp='Purchase Price')
+
for product in product_pool.browse(cr, uid, ids, context=context):
bom_id = bom_pool._bom_find(cr, uid, product.id, product.uom_id.id)
title = "%s" %(_("Cost Structure"))
@@ -150,8 +152,8 @@ class report_custom(report_rml):
""" + _('Total Cost ') + _('of ') + str(number) +' '+ product.uom_id.name +'('+company_currency.code+')'+ """:
- """+ rml_obj.formatLang(total_strd) +' '+ company_currency.symbol + """
- """+ rml_obj.formatLang(total) +' '+ company_currency.symbol + """
+ """+ rml_obj.formatLang(total_strd, digits=purchase_price_digits) +' '+ company_currency.symbol + """
+ """+ rml_obj.formatLang(total, digits=purchase_price_digits) +' '+ company_currency.symbol + """
'"""
else:
bom = bom_pool.browse(cr, uid, bom_id, context=context)
@@ -177,8 +179,8 @@ class report_custom(report_rml):
""" + _('Cost ') + _('of ') + str(number) +' '+ product.uom_id.name +'(' + company_currency.code +')'+ """:
- """+ rml_obj.formatLang(total_strd) +' '+ company_currency.symbol + """
- """+ rml_obj.formatLang(total) +' '+ company_currency.symbol + """
+ """+ rml_obj.formatLang(total_strd, digits=purchase_price_digits) +' '+ company_currency.symbol + """
+ """+ rml_obj.formatLang(total, digits=purchase_price_digits) +' '+ company_currency.symbol + """
'"""
total2 = 0
@@ -195,14 +197,14 @@ class report_custom(report_rml):
- """+ rml_obj.formatLang(total2) +' '+ company_currency.symbol +"""
+ """+ rml_obj.formatLang(total2, digits=purchase_price_digits) +' '+ company_currency.symbol +"""
'"""
xml += """
""" + _('Total Cost ') + _('of ') + str(number) +' '+ product.uom_id.name +'('+company_currency.code+')'+ """:
- """+ rml_obj.formatLang(total_strd+total2) +' '+ company_currency.symbol + """
- """+ rml_obj.formatLang(total+total2) +' '+ company_currency.symbol + """
+ """+ rml_obj.formatLang(total_strd+total2, digits=purchase_price_digits) +' '+ company_currency.symbol + """
+ """+ rml_obj.formatLang(total+total2, digits=purchase_price_digits) +' '+ company_currency.symbol + """
'"""
xml = '' + config_start + config_stop + xml + ''
diff --git a/addons/mrp/report/workcenter_load.py b/addons/mrp/report/workcenter_load.py
index 15e94bd6f4c..922e460ab6d 100644
--- a/addons/mrp/report/workcenter_load.py
+++ b/addons/mrp/report/workcenter_load.py
@@ -22,9 +22,8 @@
from report.render import render
from report.interface import report_int
from pychart import *
-from mx.DateTime import *
import time
-from datetime import datetime
+from datetime import date, datetime, timedelta
from dateutil.relativedelta import relativedelta
from report.misc import choice_colors
@@ -55,8 +54,8 @@ class report_custom(report_int):
stop = start
if time_unit == 'month':
dates = {}
- a = Date(*map(int, start.split("-"))).year*12+Date(*map(int, start.split("-"))).month
- z = Date(*map(int, stop.split("-"))).year*12+Date(*map(int, stop.split("-"))).month+1
+ a = int(start.split("-")[0])*12 + int(start.split("-")[1])
+ z = int(stop.split("-")[0])*12 + int(stop.split("-")[1]) + 1
for i in range(a,z):
year = i/12
month = i%12
@@ -66,27 +65,31 @@ class report_custom(report_int):
months = {1:"January",2:"February",3:"March",4:"April",5:"May",6:"June",7:"July",8:"August",9:"September",10:"October",11:"November",12:"December"}
dates[i] = {
'name' :months[month],
- 'start':(datetime.date(year, month, 2) + relativedelta(day=1)).strftime('%Y-%m-%d'),
- 'stop' :(datetime.date(year, month, 2) + relativedelta(day=-1)).strftime('%Y-%m-%d'),
+ 'start':(datetime(year, month, 2) + relativedelta(day=1)).strftime('%Y-%m-%d'),
+ 'stop' :(datetime(year, month, 2) + relativedelta(day=31)).strftime('%Y-%m-%d'),
}
return dates
elif time_unit == 'week':
dates = {}
- a = Date(*map(int, start.split("-"))).iso_week[0]*52+Date(*map(int, start.split("-"))).iso_week[1]
- z = Date(*map(int, stop.split("-"))).iso_week[0]*52+Date(*map(int, stop.split("-"))).iso_week[1]
+ start_week = date(int(start.split("-")[0]),int(start.split("-")[1]),int(start.split("-")[2])).isocalendar()
+ end_week = date(int(stop.split("-")[0]),int(stop.split("-")[1]),int(stop.split("-")[2])).isocalendar()
+ a = int(start.split("-")[0])*52 + start_week[1]
+ z = int(stop.split("-")[0])*52 + end_week[1]
for i in range(a,z+1):
year = i/52
week = i%52
+ d = date(year, 1, 1)
+
dates[i] = {
'name' :"Week #%d" % week,
- 'start':ISO.WeekTime(year, week, 1).strftime('%Y-%m-%d'),
- 'stop' :ISO.WeekTime(year, week, 7).strftime('%Y-%m-%d'),
+ 'start':(d + timedelta(days=-d.weekday(), weeks=week)).strftime('%Y-%m-%d'),
+ 'stop' :(d + timedelta(days=6-d.weekday(), weeks=week)).strftime('%Y-%m-%d'),
}
return dates
else: # time_unit = day
dates = {}
- a = Date(*map(int, start.split("-")))
- z = Date(*map(int, stop.split("-")))
+ a = datetime(int(start.split("-")[0]),int(start.split("-")[1]),int(start.split("-")[2]))
+ z = datetime(int(stop.split("-")[0]),int(stop.split("-")[1]),int(stop.split("-")[2]))
i = a
while i <= z:
dates[map(int,i.strftime('%Y%m%d').split())[0]] = {
diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv
index 79c5de9a505..e63ced14997 100644
--- a/addons/mrp/security/ir.model.access.csv
+++ b/addons/mrp/security/ir.model.access.csv
@@ -5,12 +5,14 @@
"access_mrp_bom","mrp.bom","model_mrp_bom","group_mrp_user",1,1,1,0
"access_mrp_bom_revision","mrp.bom.revision","model_mrp_bom_revision","group_mrp_user",1,0,0,0
"access_mrp_production","mrp.production user","model_mrp_production","mrp.group_mrp_user",1,1,1,1
+"access_mrp_property_group","mrp.property.group","procurement.model_mrp_property_group","mrp.group_mrp_manager",1,1,1,1
+"access_mrp_property","mrp.property","procurement.model_mrp_property","mrp.group_mrp_manager",1,1,1,1
"access_mrp_production_product_line","mrp.production.product.line","model_mrp_production_product_line","mrp.group_mrp_user",1,1,1,1
"access_procurement","procurement.order","model_procurement_order","mrp.group_mrp_user",1,1,1,1
-"access_mrp_workcenter_manager","mrp.workcenter.manager","model_mrp_workcenter","mrp.group_mrp_manager",1,1,1,1
+"access_mrp_workcenter_manager","mrp.workcenter.manager","model_mrp_workcenter","mrp.group_mrp_manager",1,0,0,0
"access_mrp_routing_manager","mrp.routing.manager","model_mrp_routing","mrp.group_mrp_manager",1,1,1,1
"access_mrp_routing_workcenter_manager","mrp.routing.workcenter.manager","model_mrp_routing_workcenter","mrp.group_mrp_manager",1,1,1,1
-"access_mrp_bom_manager","mrp.bom.manager","model_mrp_bom","mrp.group_mrp_manager",1,0,0,0
+"access_mrp_bom_manager","mrp.bom.manager","model_mrp_bom","mrp.group_mrp_manager",1,0,0,1
"access_mrp_bom_revision_manager","mrp.bom.revision.manager","model_mrp_bom_revision","mrp.group_mrp_manager",1,1,1,1
"access_stock_location_mrp_worker","stock.location mrp_worker","stock.model_stock_location","mrp.group_mrp_user",1,0,0,0
"access_stock_move_mrp_worker","stock.move mrp_worker","stock.model_stock_move","mrp.group_mrp_user",1,1,1,0
@@ -20,14 +22,15 @@
"access_account_account","account.account mrp_worker","account.model_account_account","mrp.group_mrp_user",1,0,0,0
"access_purchase_order_mrp_worker","purchase.order mrp_worker","purchase.model_purchase_order","mrp.group_mrp_user",1,1,1,1
"access_purchase_order_line_mrp_worker","purchase.order.line mrp_worker","purchase.model_purchase_order_line","mrp.group_mrp_user",1,0,0,0
-"access_hr_timesheet_group_mrp_worker","resource.calendar mrp_worker","resource.model_resource_calendar","base.group_system",1,1,1,1
+"access_hr_timesheet_group_mrp_worker","resource.calendar mrp_manager","resource.model_resource_calendar","mrp.group_mrp_manager",1,1,1,1
"access_procurement_stock_worker","procurement.order stock_worker","model_procurement_order","stock.group_stock_user",1,1,1,1
"access_procurement_user","procurement.order.user","model_procurement_order","base.group_user",1,1,1,1
"access_mrp_production_stock_worker","mrp.production stock_worker","model_mrp_production","stock.group_stock_user",1,0,0,0
"access_mrp_production_order","mrp.production.order","model_mrp_production_order","mrp.group_mrp_manager",1,1,1,1
-"access_report_workcenter_load","report.workcenter.load","model_report_workcenter_load","mrp.group_mrp_manager",1,0,0,0
-"access_report_mrp_inout","report.mrp.inout","model_report_mrp_inout","mrp.group_mrp_manager",1,0,0,0
-"access_product_product_manager","product.product manager","model_product_product","mrp.group_mrp_manager",1,1,1,1
+"access_report_workcenter_load","report.workcenter.load","model_report_workcenter_load","mrp.group_mrp_manager",1,1,1,1
+"access_report_mrp_inout","report.mrp.inout","model_report_mrp_inout","mrp.group_mrp_manager",1,1,1,1
+"access_product_product_manager","product.product manager","model_product_product","mrp.group_mrp_manager",1,0,0,0
+"access_ir_property_manager","ir.property manager","base.model_ir_property","mrp.group_mrp_manager",1,1,1,1
"access_account_sequence_fiscalyear","account.sequence.fiscalyear","account.model_account_sequence_fiscalyear","mrp.group_mrp_user",1,1,1,1
"access_product_product_user","product.product user","model_product_product","mrp.group_mrp_user",1,1,1,1
"access_product_template_user","product.template user","product.model_product_template","mrp.group_mrp_user",1,1,1,1
@@ -39,6 +42,7 @@
"access_workcenter_user","mrp.production.workcenter.line.user","model_mrp_production_workcenter_line","mrp.group_mrp_user",1,1,1,1
"access_resource_calendar_leaves_user","mrp.resource.calendar.leaves.user","resource.model_resource_calendar_leaves","mrp.group_mrp_user",1,1,1,1
"access_resource_calendar_leaves_manager","mrp.resource.calendar.leaves.manager","resource.model_resource_calendar_leaves","mrp.group_mrp_manager",1,0,0,0
+"access_resource_calendar_attendance_manager","mrp.resource.calendar.attendance.manager","resource.model_resource_calendar_attendance","mrp.group_mrp_manager",1,1,1,1
"access_product_puom_categ","product.uom.categ","product.model_product_uom_categ","mrp.group_mrp_user",1,1,1,0
"access_resource_resource","resource.resource","resource.model_resource_resource","mrp.group_mrp_user",1,1,1,0
"access_board_board_user","mrp.board.board","board.model_board_board","mrp.group_mrp_user",1,1,1,0
@@ -55,7 +59,7 @@
"access_mrp_production_manager","mrp.production manager","model_mrp_production","mrp.group_mrp_manager",1,0,0,0
"access_procurement_manager","procurement.order","model_procurement_order","mrp.group_mrp_manager",1,0,0,0
"access_workcenter_manager","mrp.production.workcenter.line","model_mrp_production_workcenter_line","mrp.group_mrp_manager",1,0,0,0
-"access_stock_move_mrp_manager","stock.move mrp_manager","stock.model_stock_move","mrp.group_mrp_manager",1,0,0,0
+"access_stock_move_mrp_manager","stock.move mrp_manager","stock.model_stock_move","mrp.group_mrp_manager",1,0,0,1
"access_mrp_production_product_line_manager","mrp.production.product.line manager","model_mrp_production_product_line","mrp.group_mrp_manager",1,0,0,0
"access_account_sequence_fiscalyear_system","account.sequence.fiscalyear.system","account.model_account_sequence_fiscalyear","mrp.group_mrp_manager",1,0,0,0
"access_product_template_system","product.template mgr.system","product.model_product_template","base.group_system",1,0,0,0
@@ -87,6 +91,6 @@
"access_mrp_production_system","mrp.production system","model_mrp_production","base.group_system",1,0,0,0
"access_stock_production_lot_user","stock.production.lot","stock.model_stock_production_lot","mrp.group_mrp_user",1,1,1,1
"access_stock_warehouse_orderpoint_manager","stock.warehouse.orderpoint","procurement.model_stock_warehouse_orderpoint","mrp.group_mrp_manager",1,0,0,0
-"access_stock_picking_mrp_manager","stock.picking mrp_manager","stock.model_stock_picking","mrp.group_mrp_manager",1,1,1,1
+"access_stock_picking_mrp_manager","stock.picking mrp_manager","stock.model_stock_picking","mrp.group_mrp_manager",1,0,0,0
"access_report_mrp_inout_user","report.mrp.inout user","model_report_mrp_inout","mrp.group_mrp_user",1,0,0,0
"access_report_workcenter_load_user","report.workcenter.load.user","model_report_workcenter_load","mrp.group_mrp_user",1,0,0,0
diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py
index 248e39989d8..9f149dda6bd 100644
--- a/addons/mrp/stock.py
+++ b/addons/mrp/stock.py
@@ -79,7 +79,7 @@ class StockMove(osv.osv):
proc_id = procurement_obj.create(cr, uid, {
'name': (move.picking_id.origin or ''),
'origin': (move.picking_id.origin or ''),
- 'date_planned': move.date_planned,
+ 'date_planned': move.date,
'product_id': line['product_id'],
'product_qty': line['product_qty'],
'product_uom': line['product_uom'],
diff --git a/addons/mrp/test/mrp_phantom_bom.yml b/addons/mrp/test/mrp_phantom_bom.yml
index 46b1d19244a..08a0bc31c86 100644
--- a/addons/mrp/test/mrp_phantom_bom.yml
+++ b/addons/mrp/test/mrp_phantom_bom.yml
@@ -230,17 +230,6 @@
wf_service = netsvc.LocalService("workflow")
for p_id in purch_ids:
wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
--
- I get the approval from both the suppliers. So I approve my purchase orders.
--
- !python {model: purchase.order}: |
- from tools.translate import _
- import netsvc
- purch_ids = self.search(cr, uid, [('state','=','confirmed')])
- assert purch_ids, _('No Confirmed Purchase Orders found!')
- wf_service = netsvc.LocalService("workflow")
- for p_id in purch_ids:
- wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_approve', cr)
-
I see two incoming pickings for Orange and Sugar.
-
diff --git a/addons/mrp/test/mrp_procurement.yml b/addons/mrp/test/mrp_procurement.yml
index 7435503bac9..4e01062d7b2 100644
--- a/addons/mrp/test/mrp_procurement.yml
+++ b/addons/mrp/test/mrp_procurement.yml
@@ -177,18 +177,8 @@
purch_ids = self.search(cr, uid, [('partner_id.name','=','Maxtor')])
wf_service = netsvc.LocalService("workflow")
for p_id in purch_ids:
- wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
--
- I get the approval from the supplier. So I approve my purchase orders.
--
- !python {model: purchase.order}: |
- from tools.translate import _
- import netsvc
- purch_ids = self.search(cr, uid, [('state','=','confirmed')])
- assert purch_ids, _('No Confirmed Purchase Orders found!')
- wf_service = netsvc.LocalService("workflow")
- for p_id in purch_ids:
- wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_approve', cr)
+ wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
+
-
I confirm purchase order for Buttons.
-
@@ -197,18 +187,8 @@
purch_ids = self.search(cr, uid, [('partner_id.name','=','ASUStek')])
wf_service = netsvc.LocalService("workflow")
for p_id in purch_ids:
- wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
--
- I get the approval from the supplier. So I approve my purchase orders.
--
- !python {model: purchase.order}: |
- from tools.translate import _
- import netsvc
- purch_ids = self.search(cr, uid, [('state','=','confirmed')])
- assert purch_ids, _('No Confirmed Purchase Orders found!')
- wf_service = netsvc.LocalService("workflow")
- for p_id in purch_ids:
- wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_approve', cr)
+ wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
+
-
I Check incoming shipments for cloth. And receive products.
-
@@ -304,7 +284,7 @@
assert prod_ids, _('No Ready Manufacturing Orders found!')
wf_service = netsvc.LocalService("workflow")
for p_id in prod_ids:
- wf_service.trg_validate(uid, 'mrp.production', p_id, 'button_produce', cr)
+ wf_service.trg_validate(uid, 'mrp.production', p_id, 'button_produce', cr)
-
I create record for producing products with quantity 5.00.
-
diff --git a/addons/mrp/wizard/change_production_qty.py b/addons/mrp/wizard/change_production_qty.py
index 5f7aa0754e1..f5d62d535c9 100644
--- a/addons/mrp/wizard/change_production_qty.py
+++ b/addons/mrp/wizard/change_production_qty.py
@@ -87,10 +87,10 @@ class change_production_qty(osv.osv_memory):
factor = prod.product_qty * prod.product_uom.factor / bom_point.product_uom.factor
res = bom_obj._bom_explode(cr, uid, bom_point, factor / bom_point.product_qty, [])
for r in res[0]:
- if r['product_id']== move.product_id.id:
- move_lines_obj.write(cr, uid,move.id, {'product_qty' : r['product_qty']})
+ if r['product_id'] == move.product_id.id:
+ move_lines_obj.write(cr, uid, [move.id], {'product_qty' : r['product_qty']})
for m in prod.move_created_ids:
- move_lines_obj.write(cr, uid,m.id, {'product_qty': wiz_qty.product_qty})
+ move_lines_obj.write(cr, uid, [m.id], {'product_qty': wiz_qty.product_qty})
return {}
diff --git a/addons/mrp_jit/i18n/kab.po b/addons/mrp_jit/i18n/kab.po
new file mode 100644
index 00000000000..0b97e9c4c2b
--- /dev/null
+++ b/addons/mrp_jit/i18n/kab.po
@@ -0,0 +1,23 @@
+# Kabyle translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+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-10-09 14:11+0000\n"
+"Last-Translator: yugurten \n"
+"Language-Team: Kabyle \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-10 04:56+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: mrp_jit
+#: model:ir.module.module,shortdesc:mrp_jit.module_meta_information
+msgid "MRP JIT"
+msgstr "MRP JIT"
diff --git a/addons/mrp_operations/i18n/ar.po b/addons/mrp_operations/i18n/ar.po
index 0546e0d4ce5..ab7c0e86910 100644
--- a/addons/mrp_operations/i18n/ar.po
+++ b/addons/mrp_operations/i18n/ar.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/bg.po b/addons/mrp_operations/i18n/bg.po
index f67c785f82e..39a5d93bdb5 100644
--- a/addons/mrp_operations/i18n/bg.po
+++ b/addons/mrp_operations/i18n/bg.po
@@ -248,7 +248,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/bs.po b/addons/mrp_operations/i18n/bs.po
index ff9a28f1473..f1f31cefc6b 100644
--- a/addons/mrp_operations/i18n/bs.po
+++ b/addons/mrp_operations/i18n/bs.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/ca.po b/addons/mrp_operations/i18n/ca.po
index fd8d311dcc4..6567a54a457 100644
--- a/addons/mrp_operations/i18n/ca.po
+++ b/addons/mrp_operations/i18n/ca.po
@@ -249,7 +249,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/cs.po b/addons/mrp_operations/i18n/cs.po
index 0546e0d4ce5..ab7c0e86910 100644
--- a/addons/mrp_operations/i18n/cs.po
+++ b/addons/mrp_operations/i18n/cs.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/de.po b/addons/mrp_operations/i18n/de.po
index 2c4800228d0..82d75040b9e 100644
--- a/addons/mrp_operations/i18n/de.po
+++ b/addons/mrp_operations/i18n/de.po
@@ -250,7 +250,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/es.po b/addons/mrp_operations/i18n/es.po
index e973ddb2381..2b0bf5b7c50 100644
--- a/addons/mrp_operations/i18n/es.po
+++ b/addons/mrp_operations/i18n/es.po
@@ -251,7 +251,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/es_AR.po b/addons/mrp_operations/i18n/es_AR.po
index d0589260312..3c140fd1541 100644
--- a/addons/mrp_operations/i18n/es_AR.po
+++ b/addons/mrp_operations/i18n/es_AR.po
@@ -248,7 +248,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/es_EC.po b/addons/mrp_operations/i18n/es_EC.po
index b0caeb9a279..730a921b999 100644
--- a/addons/mrp_operations/i18n/es_EC.po
+++ b/addons/mrp_operations/i18n/es_EC.po
@@ -251,7 +251,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/et.po b/addons/mrp_operations/i18n/et.po
index 493f060565b..de913493585 100644
--- a/addons/mrp_operations/i18n/et.po
+++ b/addons/mrp_operations/i18n/et.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/fi.po b/addons/mrp_operations/i18n/fi.po
index 0f94be1c01a..27936f066f7 100644
--- a/addons/mrp_operations/i18n/fi.po
+++ b/addons/mrp_operations/i18n/fi.po
@@ -249,7 +249,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/fr.po b/addons/mrp_operations/i18n/fr.po
index 4e818c3655a..a5f40616d0a 100644
--- a/addons/mrp_operations/i18n/fr.po
+++ b/addons/mrp_operations/i18n/fr.po
@@ -248,7 +248,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/hi.po b/addons/mrp_operations/i18n/hi.po
index cdd3e5fd4a4..865f2353a13 100644
--- a/addons/mrp_operations/i18n/hi.po
+++ b/addons/mrp_operations/i18n/hi.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/hr.po b/addons/mrp_operations/i18n/hr.po
index 0546e0d4ce5..ab7c0e86910 100644
--- a/addons/mrp_operations/i18n/hr.po
+++ b/addons/mrp_operations/i18n/hr.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/hu.po b/addons/mrp_operations/i18n/hu.po
index 0546e0d4ce5..ab7c0e86910 100644
--- a/addons/mrp_operations/i18n/hu.po
+++ b/addons/mrp_operations/i18n/hu.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/id.po b/addons/mrp_operations/i18n/id.po
index 064aeb7c14b..871abf389d6 100644
--- a/addons/mrp_operations/i18n/id.po
+++ b/addons/mrp_operations/i18n/id.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/it.po b/addons/mrp_operations/i18n/it.po
index 379639b9d39..9c93f457091 100644
--- a/addons/mrp_operations/i18n/it.po
+++ b/addons/mrp_operations/i18n/it.po
@@ -249,7 +249,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/ko.po b/addons/mrp_operations/i18n/ko.po
index c4c54b0857b..33a70f940fa 100644
--- a/addons/mrp_operations/i18n/ko.po
+++ b/addons/mrp_operations/i18n/ko.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/lt.po b/addons/mrp_operations/i18n/lt.po
index 0546e0d4ce5..ab7c0e86910 100644
--- a/addons/mrp_operations/i18n/lt.po
+++ b/addons/mrp_operations/i18n/lt.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/mrp_operations.pot b/addons/mrp_operations/i18n/mrp_operations.pot
index a1f61b1965d..90df737dde5 100644
--- a/addons/mrp_operations/i18n/mrp_operations.pot
+++ b/addons/mrp_operations/i18n/mrp_operations.pot
@@ -242,7 +242,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/nl.po b/addons/mrp_operations/i18n/nl.po
index 1a7674b11cd..7905b9cc363 100644
--- a/addons/mrp_operations/i18n/nl.po
+++ b/addons/mrp_operations/i18n/nl.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/nl_BE.po b/addons/mrp_operations/i18n/nl_BE.po
index 6d8bb017f25..173b7601ae9 100644
--- a/addons/mrp_operations/i18n/nl_BE.po
+++ b/addons/mrp_operations/i18n/nl_BE.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/pl.po b/addons/mrp_operations/i18n/pl.po
index 48b6475b9fd..dd4ff7ee02c 100644
--- a/addons/mrp_operations/i18n/pl.po
+++ b/addons/mrp_operations/i18n/pl.po
@@ -248,7 +248,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/pt.po b/addons/mrp_operations/i18n/pt.po
index 96427a43ff0..d874808086b 100644
--- a/addons/mrp_operations/i18n/pt.po
+++ b/addons/mrp_operations/i18n/pt.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/pt_BR.po b/addons/mrp_operations/i18n/pt_BR.po
index 731aded6cda..981c5624c8b 100644
--- a/addons/mrp_operations/i18n/pt_BR.po
+++ b/addons/mrp_operations/i18n/pt_BR.po
@@ -248,7 +248,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/ro.po b/addons/mrp_operations/i18n/ro.po
index 54db3294f60..2658a2ce74e 100644
--- a/addons/mrp_operations/i18n/ro.po
+++ b/addons/mrp_operations/i18n/ro.po
@@ -250,7 +250,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/ru.po b/addons/mrp_operations/i18n/ru.po
index 333caa9e4f3..69c0d6fb0a5 100644
--- a/addons/mrp_operations/i18n/ru.po
+++ b/addons/mrp_operations/i18n/ru.po
@@ -248,7 +248,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/sl.po b/addons/mrp_operations/i18n/sl.po
index 81ab1c3b66e..0d012e0211e 100644
--- a/addons/mrp_operations/i18n/sl.po
+++ b/addons/mrp_operations/i18n/sl.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr "mrp_operations.operation"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/sq.po b/addons/mrp_operations/i18n/sq.po
index 27c43ff72cf..d61f3069824 100644
--- a/addons/mrp_operations/i18n/sq.po
+++ b/addons/mrp_operations/i18n/sq.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/sv.po b/addons/mrp_operations/i18n/sv.po
index 945c20d62cb..52e7c2b59e5 100644
--- a/addons/mrp_operations/i18n/sv.po
+++ b/addons/mrp_operations/i18n/sv.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/tlh.po b/addons/mrp_operations/i18n/tlh.po
index 5d7551ac4b7..5af1d671159 100644
--- a/addons/mrp_operations/i18n/tlh.po
+++ b/addons/mrp_operations/i18n/tlh.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/tr.po b/addons/mrp_operations/i18n/tr.po
index bbcb1006500..3643a54ae6a 100644
--- a/addons/mrp_operations/i18n/tr.po
+++ b/addons/mrp_operations/i18n/tr.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/uk.po b/addons/mrp_operations/i18n/uk.po
index 4f55f459921..fadaf9ba531 100644
--- a/addons/mrp_operations/i18n/uk.po
+++ b/addons/mrp_operations/i18n/uk.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/vi.po b/addons/mrp_operations/i18n/vi.po
index 38bbfea8310..9fcae413139 100644
--- a/addons/mrp_operations/i18n/vi.po
+++ b/addons/mrp_operations/i18n/vi.po
@@ -247,7 +247,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/zh_CN.po b/addons/mrp_operations/i18n/zh_CN.po
index 8ff3bb9f5b2..d7b5635fcc0 100644
--- a/addons/mrp_operations/i18n/zh_CN.po
+++ b/addons/mrp_operations/i18n/zh_CN.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr "运作"
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/i18n/zh_TW.po b/addons/mrp_operations/i18n/zh_TW.po
index b49e5f9d85b..a8c0f97102f 100644
--- a/addons/mrp_operations/i18n/zh_TW.po
+++ b/addons/mrp_operations/i18n/zh_TW.po
@@ -246,7 +246,7 @@ msgid "mrp_operations.operation"
msgstr ""
#. module: mrp_operations
-#: field:mrp.production.workcenter.line,date_finnished:0
+#: field:mrp.production.workcenter.line,date_finished:0
#: field:mrp.production.workcenter.line,date_planned_end:0
#: field:mrp_operations.operation,date_finished:0
msgid "End Date"
diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py
index 52a8a81cb49..9585a34df36 100644
--- a/addons/mrp_operations/mrp_operations.py
+++ b/addons/mrp_operations/mrp_operations.py
@@ -21,10 +21,9 @@
from osv import fields
from osv import osv
-import datetime
import netsvc
import time
-from mx import DateTime
+from datetime import datetime
from tools.translate import _
#----------------------------------------------------------
@@ -68,14 +67,13 @@ class mrp_production_workcenter_line(osv.osv):
@return: Dictionary of values.
"""
ops = self.browse(cr, uid, ids, context=context)
- date_and_hours_by_cal = [(op.date_planned, op.hour, op.workcenter_id.calendar_id.id) for op in ops]
+ date_and_hours_by_cal = [(op.production_id.date_planned, op.hour, op.workcenter_id.calendar_id.id) for op in ops]
intervals = self.pool.get('resource.calendar').interval_get_multi(cr, uid, date_and_hours_by_cal)
res = {}
for op in ops:
res[op.id] = False
if op.date_planned:
- d = DateTime.strptime(op.date_planned,'%Y-%m-%d %H:%M:%S')
i = intervals[(op.date_planned, op.hour, op.workcenter_id.calendar_id.id)]
if i:
res[op.id] = i[-1][1].strftime('%Y-%m-%d %H:%M:%S')
@@ -97,7 +95,7 @@ class mrp_production_workcenter_line(osv.osv):
'date_planned': fields.datetime('Scheduled Date'),
'date_planned_end': fields.function(_get_date_end, method=True, string='End Date', type='datetime'),
'date_start': fields.datetime('Start Date'),
- 'date_finnished': fields.datetime('End Date'),
+ 'date_finished': fields.datetime('End Date'),
'delay': fields.float('Working Hours',help="This is lead time between operation start and stop in this workcenter",readonly=True),
'production_state':fields.related('production_id','state',
type='selection',
@@ -176,12 +174,12 @@ class mrp_production_workcenter_line(osv.osv):
date_now = time.strftime('%Y-%m-%d %H:%M:%S')
obj_line = self.browse(cr, uid, ids[0])
- date_start = datetime.datetime.strptime(obj_line.date_start,'%Y-%m-%d %H:%M:%S')
- date_finished = datetime.datetime.strptime(date_now,'%Y-%m-%d %H:%M:%S')
+ date_start = datetime.strptime(obj_line.date_start,'%Y-%m-%d %H:%M:%S')
+ date_finished = datetime.strptime(date_now,'%Y-%m-%d %H:%M:%S')
delay += (date_finished-date_start).days * 24
delay += (date_finished-date_start).seconds / float(60*60)
- self.write(cr, uid, ids, {'state':'done', 'date_finnished': date_now,'delay':delay})
+ self.write(cr, uid, ids, {'state':'done', 'date_finished': date_now,'delay':delay})
self.modify_production_order_state(cr,uid,ids,'done')
return True
@@ -259,9 +257,9 @@ class mrp_production(osv.osv):
""" Computes planned and finished dates for work order.
@return: Calculated date
"""
- dt_end = DateTime.now()
+ dt_end = datetime.now()
for po in self.browse(cr, uid, ids, context=context):
- dt_end = DateTime.strptime(po.date_start or po.date_planned, '%Y-%m-%d %H:%M:%S')
+ dt_end = datetime.strptime(po.date_planned, '%Y-%m-%d %H:%M:%S')
if not po.date_start:
self.write(cr, uid, [po.id], {
'date_start': po.date_planned
@@ -275,7 +273,7 @@ class mrp_production(osv.osv):
del context['__last_update']
if (wc.date_planned < dt.strftime('%Y-%m-%d %H:%M:%S')) or mini:
self.pool.get('mrp.production.workcenter.line').write(cr, uid, [wc.id], {
- 'date_planned':dt.strftime('%Y-%m-%d %H:%M:%S')
+ 'date_planned': dt.strftime('%Y-%m-%d %H:%M:%S')
}, context=context, update=False)
i = self.pool.get('resource.calendar').interval_get(
cr,
@@ -287,10 +285,10 @@ class mrp_production(osv.osv):
if i:
dt_end = max(dt_end, i[-1][1])
else:
- dt_end = DateTime.strptime(wc.date_planned_end, '%Y-%m-%d %H:%M:%S')
+ dt_end = datetime.strptime(wc.date_planned_end, '%Y-%m-%d %H:%M:%S')
old = wc.sequence or 0
super(mrp_production, self).write(cr, uid, [po.id], {
- 'date_finnished': dt_end
+ 'date_finished': dt_end
})
return dt_end
@@ -302,13 +300,13 @@ class mrp_production(osv.osv):
if po.allow_reorder:
continue
todo = po.move_lines
- dt = DateTime.strptime(po.date_start,'%Y-%m-%d %H:%M:%S')
+ dt = datetime.strptime(po.date_start,'%Y-%m-%d %H:%M:%S')
while todo:
l = todo.pop(0)
if l.state in ('done','cancel','draft'):
continue
todo += l.move_dest_id_lines
- if l.production_id and (l.production_id.date_finnished > dt):
+ if l.production_id and (l.production_id.date_finished > dt):
if l.production_id.state not in ('done','cancel'):
for wc in l.production_id.workcenter_lines:
i = self.pool.get('resource.calendar').interval_min_get(
@@ -337,8 +335,8 @@ class mrp_production(osv.osv):
break
if l.production_id.state in ('done','cancel'):
break
- if l.production_id and (l.production_id.date_start < po.date_finnished):
- self.write(cr, uid, [l.production_id.id], {'date_start': po.date_finnished})
+ if l.production_id and (l.production_id.date_start < po.date_finished):
+ self.write(cr, uid, [l.production_id.id], {'date_start': po.date_finished})
break
@@ -426,8 +424,8 @@ class mrp_operations_operation(osv.osv):
if not i: continue
if code_lst[i-1] not in ('resume','start'):
continue
- a = datetime.datetime.strptime(time_lst[i-1],'%Y-%m-%d %H:%M:%S')
- b = datetime.datetime.strptime(time_lst[i],'%Y-%m-%d %H:%M:%S')
+ a = datetime.strptime(time_lst[i-1],'%Y-%m-%d %H:%M:%S')
+ b = datetime.strptime(time_lst[i],'%Y-%m-%d %H:%M:%S')
diff += (b-a).days * 24
diff += (b-a).seconds / float(60*60)
return diff
@@ -513,7 +511,7 @@ class mrp_operations_operation(osv.osv):
if code.start_stop=='done':
self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,wc_op_id)
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_done', cr)
- self.pool.get('mrp.production').write(cr,uid,vals['production_id'],{'date_finnished':DateTime.now().strftime('%Y-%m-%d %H:%M:%S')})
+ self.pool.get('mrp.production').write(cr,uid,vals['production_id'],{'date_finished':datetime.now().strftime('%Y-%m-%d %H:%M:%S')})
if code.start_stop=='pause':
self.pool.get('mrp.production.workcenter.line').action_pause(cr,uid,wc_op_id)
@@ -534,7 +532,7 @@ class mrp_operations_operation(osv.osv):
line_vals['delay'] = delay
if vals.get('date_start',False):
if code.start_stop == 'done':
- line_vals['date_finnished'] = vals['date_start']
+ line_vals['date_finished'] = vals['date_start']
elif code.start_stop == 'start':
line_vals['date_start'] = vals['date_start']
@@ -551,7 +549,7 @@ class mrp_operations_operation(osv.osv):
'order_date': fields.function(_get_order_date,method=True,string='Order Date',type='date',store={'mrp.production':(_order_date_search_production,['date_planned'], 10)}),
}
_defaults={
- 'date_start': lambda *a:DateTime.now().strftime('%Y-%m-%d %H:%M:%S')
+ 'date_start': lambda *a:datetime.now().strftime('%Y-%m-%d %H:%M:%S')
}
mrp_operations_operation()
diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml
index 7a5a5af3dc9..62298f4aa5f 100644
--- a/addons/mrp_operations/mrp_operations_view.xml
+++ b/addons/mrp_operations/mrp_operations_view.xml
@@ -14,10 +14,10 @@
+
-
@@ -32,10 +32,10 @@
+
-
@@ -101,7 +101,7 @@
-
+
@@ -114,10 +114,10 @@
+
-
@@ -170,7 +170,7 @@
mrp.production.workcenter.line
calendar
-
+
diff --git a/addons/mrp_operations/process/mrp_operation_process.xml b/addons/mrp_operations/process/mrp_operation_process.xml
index 2b59b87cfaf..686f59fe27f 100644
--- a/addons/mrp_operations/process/mrp_operation_process.xml
+++ b/addons/mrp_operations/process/mrp_operation_process.xml
@@ -72,7 +72,6 @@
-->
-
@@ -81,7 +80,6 @@
-
@@ -90,7 +88,6 @@
-
@@ -99,7 +96,6 @@
-
diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py
index af88c32f42a..5848fa7057c 100644
--- a/addons/mrp_repair/mrp_repair.py
+++ b/addons/mrp_repair/mrp_repair.py
@@ -21,7 +21,7 @@
from osv import fields,osv
import netsvc
-from datetime import datetime, date
+from datetime import datetime
from dateutil.relativedelta import relativedelta
from tools.translate import _
import decimal_precision as dp
@@ -679,26 +679,27 @@ class mrp_repair_line(osv.osv, ProductChangeMixin):
"""
if not type:
return {'value': {
- 'location_id': False,
- 'location_dest_id': False
- }
- }
- produc_id = self.pool.get('stock.location').search(cr, uid, [('name','=','Production')])[0]
- if type == 'add':
- stock_id = self.pool.get('stock.location').search(cr, uid, [('name','=','Stock')])[0]
- to_invoice = False
- if guarantee_limit and date.today() > datetime.strptime(guarantee_limit, '%Y-%m-%d'):
- to_invoice=True
- return {'value': {
- 'to_invoice': to_invoice,
- 'location_id': stock_id,
- 'location_dest_id': produc_id
- }
- }
- return {'value': {
- 'to_invoice': False,
- 'location_id': produc_id,
+ 'location_id': False,
'location_dest_id': False
+ }
+ }
+
+ product_id = self.pool.get('stock.location').search(cr, uid, [('name','=','Production')])[0]
+ if type != 'add':
+ return {'value': {
+ 'to_invoice': False,
+ 'location_id': product_id,
+ 'location_dest_id': False
+ }
+ }
+
+ stock_id = self.pool.get('stock.location').search(cr, uid, [('name','=','Stock')])[0]
+ to_invoice = (guarantee_limit and
+ datetime.strptime(guarantee_limit, '%Y-%m-%d') < datetime.now())
+ return {'value': {
+ 'to_invoice': to_invoice,
+ 'location_id': stock_id,
+ 'location_dest_id': product_id
}
}
diff --git a/addons/mrp_repair/mrp_repair_view.xml b/addons/mrp_repair/mrp_repair_view.xml
index 04c9587b6c5..15878ec1b37 100644
--- a/addons/mrp_repair/mrp_repair_view.xml
+++ b/addons/mrp_repair/mrp_repair_view.xml
@@ -2,24 +2,24 @@
-
- mrp.repair.tree
- mrp.repair
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ mrp.repair.tree
+ mrp.repair
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
mrp.repair.form
@@ -177,30 +177,30 @@
search
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
+
diff --git a/addons/mrp_repair/report/order.py b/addons/mrp_repair/report/order.py
index 3d6f9200dd8..d6edc1f01e4 100644
--- a/addons/mrp_repair/report/order.py
+++ b/addons/mrp_repair/report/order.py
@@ -33,9 +33,9 @@ class order(report_sxw.rml_parse):
def total(self, repair):
total = 0.0
for operation in repair.operations:
- total+=operation.price_subtotal
+ total += operation.price_subtotal
for fee in repair.fees_lines:
- total+=fee.price_subtotal
+ total += fee.price_subtotal
total = total + repair.amount_tax
return total
diff --git a/addons/mrp_repair/report/order.rml b/addons/mrp_repair/report/order.rml
index 149a2650bfd..328b5e931ee 100644
--- a/addons/mrp_repair/report/order.rml
+++ b/addons/mrp_repair/report/order.rml
@@ -343,7 +343,7 @@
Net Total :
|
- [[ formatLang(o.amount_untaxed)]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_untaxed, digits=get_digits(dp='Sale Price'))]] [[ o.pricelist_id.currency_id. symbol ]]
|
@@ -357,7 +357,7 @@
Taxes:
|
- [[ formatLang(o.amount_tax)]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_tax, digits=get_digits(dp='Account'))]] [[ o.pricelist_id.currency_id. symbol ]]
|
@@ -370,7 +370,7 @@
Total :
|
- [[ formatLang(total(o)) ]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(total(o), digits=get_digits(dp='Sale Price')) ]] [[ o.pricelist_id.currency_id. symbol ]]
|
@@ -391,4 +391,4 @@
-
\ No newline at end of file
+
diff --git a/addons/mrp_repair/test/test_mrp_repair.yml b/addons/mrp_repair/test/test_mrp_repair.yml
index 7d38ab8a94d..1cf82635825 100644
--- a/addons/mrp_repair/test/test_mrp_repair.yml
+++ b/addons/mrp_repair/test/test_mrp_repair.yml
@@ -8,7 +8,6 @@
company_id: base.main_company
date: '2010-06-24 20:10:28'
date_expected: '2010-06-24 20:10:55'
- date_planned: '2010-06-24 20:10:28'
location_dest_id: stock.stock_location_stock
location_id: stock.stock_location_stock
name: '[PC1] Basic PC'
diff --git a/addons/mrp_repair/wizard/mrp_repair_make_invoice_view.xml b/addons/mrp_repair/wizard/mrp_repair_make_invoice_view.xml
index 982ee5d4bc0..4c3f6ede30d 100644
--- a/addons/mrp_repair/wizard/mrp_repair_make_invoice_view.xml
+++ b/addons/mrp_repair/wizard/mrp_repair_make_invoice_view.xml
@@ -17,7 +17,7 @@
+ colspan="1" type="object" icon="terp-gtk-go-back-rtl" />
diff --git a/addons/mrp_subproduct/mrp_subproduct.py b/addons/mrp_subproduct/mrp_subproduct.py
index 0478b0d1779..5519bba3a5c 100644
--- a/addons/mrp_subproduct/mrp_subproduct.py
+++ b/addons/mrp_subproduct/mrp_subproduct.py
@@ -83,7 +83,7 @@ class mrp_production(osv.osv):
qty2 *= production.product_uos_qty / (production.bom_id.product_uos_qty or 1.0)
data = {
'name': 'PROD:'+production.name,
- 'date_planned': production.date_planned,
+ 'date': production.date_planned,
'product_id': sub_product.product_id.id,
'product_qty': qty1,
'product_uom': sub_product.product_uom.id,
diff --git a/addons/multi_company/i18n/pl.po b/addons/multi_company/i18n/pl.po
index 0a17c09f9e1..b4d66e4df2f 100644
--- a/addons/multi_company/i18n/pl.po
+++ b/addons/multi_company/i18n/pl.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-12-08 11:46+0000\n"
-"PO-Revision-Date: 2010-08-03 08:13+0000\n"
-"Last-Translator: mga (Open ERP) \n"
+"PO-Revision-Date: 2010-10-04 06:51+0000\n"
+"Last-Translator: Naven \n"
"Language-Team: Polish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:16+0000\n"
+"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: multi_company
@@ -83,6 +83,9 @@ msgid ""
" the default value for each object\n"
" "
msgstr ""
+"Ten moduł daje możliwość łatwego zarządzania \n"
+" standardową wartością dla każdego objektu\n"
+" "
#. module: multi_company
#: field:multi_company.default,company_id:0
diff --git a/addons/outlook/README b/addons/outlook/README
index 404f2121c6a..adfd4401cb3 100644
--- a/addons/outlook/README
+++ b/addons/outlook/README
@@ -4,6 +4,7 @@ Pre requirements :
======================================================================================
1.Python 2.6+ . python can be downloaded from http://www.python.org/download/releases/ .
2.Python for Windows extensions - PyWin32 this module for python must be installed for appropriate version of the Python. It can be downloaded from http://sourceforge.net/projects/pywin32/files/ or http://starship.python.net/crew/mhammond/win32/
+3.If you are using MS Outlook 2007 than you are required to install "Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1 (CDO 1.21)". It can be downloaded from http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e17e7f31-079a-43a9-bff2-0a110307611e&displaylang=en
How to install openerp-outlook plug-in?
======================================================================================
diff --git a/addons/outlook/installer.py b/addons/outlook/installer.py
index 84349a64d17..1fe408d7e67 100755
--- a/addons/outlook/installer.py
+++ b/addons/outlook/installer.py
@@ -55,6 +55,7 @@ class outlook_installer(osv.osv_memory):
Pre-requirements :
1. Python 2.6+ .
2. Python for Windows extensions - PyWin32 this module for python must be installed for appropriate version of the Python.
+ 3. If you are using MS Outlook 2007 than you are required to install "Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1 (CDO 1.21)".
How to install openerp-outlook plug-in?
1. Extract zip file “openerp-outlook-plugin.zip” .
@@ -65,6 +66,9 @@ How to install openerp-outlook plug-in?
6. See User Guide for more information.
7. Keep All extratced files in some safe places
(e.g. python installation Directory "C:\pythonXX\" or Windows installation Directory "C:\Program Files\" ).
+
+Note :
+ Please refer README file for dependecies external link, openobject-addons/outlook/README.
"""
}
outlook_installer()
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/Register-plugin.bat b/addons/outlook/plugin/openerp-outlook-plugin/Register-plugin.bat
index 6e024b39d35..aa3c0dac378 100644
--- a/addons/outlook/plugin/openerp-outlook-plugin/Register-plugin.bat
+++ b/addons/outlook/plugin/openerp-outlook-plugin/Register-plugin.bat
@@ -1,2 +1,2 @@
python addin.py
-pause
+pause
\ No newline at end of file
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/Unregister-plugin.bat b/addons/outlook/plugin/openerp-outlook-plugin/Unregister-plugin.bat
index 1fcc6a95563..0f821974661 100644
--- a/addons/outlook/plugin/openerp-outlook-plugin/Unregister-plugin.bat
+++ b/addons/outlook/plugin/openerp-outlook-plugin/Unregister-plugin.bat
@@ -1,2 +1,2 @@
-python addin.py --unregister
-pause
+python addin.py --unregister
+pause
\ No newline at end of file
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/addin.py b/addons/outlook/plugin/openerp-outlook-plugin/addin.py
index f8f96dcb962..dbd6f172182 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/addin.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/addin.py
@@ -67,7 +67,7 @@ class ButtonEvent:
mngr = manager.GetManager()
mngr.ShowManager()
except Exception,e:
- win32ui.MessageBox("Fail to Initialize dialog.\n"+str(e),"OpenERP Configuration", win32con.MB_ICONERROR)
+ win32ui.MessageBox("Fail to Initialize dialog.\n"+str(e),"OpenERP Configuration", win32con.MB_ICONERROR)
return cancel
#
class ViewPartners:
@@ -89,6 +89,47 @@ class ViewPartners:
win32ui.MessageBox("Multiple selection not allowed. Please select only one mail at a time.","Open Contact",win32con.MB_ICONINFORMATION)
return cancel
#
+class OpenPartner:
+ def OnClick(self, button, cancel):
+ import win32ui
+ from manager import ustr
+ mngr = manager.GetManager()
+ data=mngr.LoadConfig()
+ outlook = Dispatch("Outlook.Application")
+ ex = outlook.ActiveExplorer()
+ if ex:
+ is_login = str(data['login'])
+ if is_login == 'False':
+ win32ui.MessageBox("Please login to the database first", "OpenERP Connection", win32con.MB_ICONEXCLAMATION)
+ elif ex.Selection.Count == 1:
+ mngr = manager.GetManager()
+ mngr.ShowManager("IDD_OPEN_PARTNER_DIALOG")
+ elif ex.Selection.Count == 0:
+ win32ui.MessageBox("No mail selected to push to OpenERP","Push to OpenERP",win32con.MB_ICONINFORMATION)
+ elif ex.Selection.Count > 1:
+ win32ui.MessageBox("Multiple selection not allowed. Please select only one mail at a time.","Push to OpenERP",win32con.MB_ICONINFORMATION)
+ return cancel
+#
+class OpenDocument:
+ def OnClick(self, button, cancel):
+ from win32com.client import Dispatch
+ import win32con
+ import win32ui
+ mngr = manager.GetManager()
+ data=mngr.LoadConfig()
+ outlook = Dispatch("Outlook.Application")
+ ex = outlook.ActiveExplorer()
+ if ex:
+ is_login = str(data['login'])
+ if is_login == 'False':
+ win32ui.MessageBox("Please login to the database first", "OpenERP Connection", win32con.MB_ICONEXCLAMATION)
+ elif ex.Selection.Count == 1 or ex.Selection.Count == 0:
+ mngr = manager.GetManager()
+ mngr.ShowManager("IDD_OPEN_DOCUEMNT_DIALOG")
+ elif ex.Selection.Count > 1:
+ win32ui.MessageBox("Multiple selection not allowed. Please select only one mail at a time.","Open Document",win32con.MB_ICONINFORMATION)
+ return cancel
+#
class ArchiveEvent:
def OnClick(self, button, cancel):
from win32com.client import Dispatch
@@ -151,7 +192,22 @@ class OutlookAddin:
item.Enabled = True
# Adding Menu in Menu Bar to the Web Menu of the Outlook
+ toolbaradvance = bars.Item("Advanced")
toolbarweb = bars.Item("Web")
+
+ item = toolbarweb.Controls.Add(Type = constants.msoControlButton, Temporary = True)
+ item = self.toolbarButtonOpenPartner = DispatchWithEvents(item, OpenPartner)
+ item.Caption = "Open Partners"
+ item.TooltipText = "Click to Open OpenERP Partner Contact Information."
+ item.Enabled = True
+
+
+ item = toolbarweb.Controls.Add(Type = constants.msoControlButton, Temporary = True)
+ item = self.toolbarButtonOpenDocument = DispatchWithEvents(item, OpenDocument)
+ item.Caption = "Open Document"
+ item.TooltipText = "Click to Open Document that ha been pushed to server."
+ item.Enabled = True
+
# Hook events for the item
item = toolbarweb.Controls.Add(Type = constants.msoControlButton, Temporary = True)
item = self.toolbarButtonPartner = DispatchWithEvents(item, ViewPartners)
@@ -159,6 +215,7 @@ class OutlookAddin:
item.TooltipText = "Click to Open OpenERP Partner Contact Information."
item.Enabled = True
+
item = tools_menu.Controls.Add(Type=constants.msoControlButton, Temporary=True)
# Hook events for the item
item = self.menu_bar_viewpartner_Button = DispatchWithEvents(item, ViewPartners)
@@ -166,6 +223,14 @@ class OutlookAddin:
item.TooltipText = "Click to Open Partner detail"
item.Enabled = True
+ item = tools_menu.Controls.Add(Type=constants.msoControlButton, Temporary=True)
+ # Hook events for the item
+ item = self.menu_bar_openpartner_Button = DispatchWithEvents(item, OpenPartner)
+ item.Caption = "Open Partner"
+ item.TooltipText = "Click to Open Partner detail"
+ item.Enabled = True
+
+
def OnDisconnection(self, mode, custom):
mngr = manager.GetManager()
mngr.config['login'] = False
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py b/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py
index 14e9741d09b..e9e68c6e2d0 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py
@@ -635,6 +635,8 @@ class CkSocket(_object):
def GetSslAcceptableClientCaDn(self, *args): return _chilkat.CkSocket_GetSslAcceptableClientCaDn(self, *args)
def getSslAcceptableClientCaDn(self, *args): return _chilkat.CkSocket_getSslAcceptableClientCaDn(self, *args)
def AddSslAcceptableClientCaDn(self, *args): return _chilkat.CkSocket_AddSslAcceptableClientCaDn(self, *args)
+ def get_ReceivedCount(self): return _chilkat.CkSocket_get_ReceivedCount(self)
+ def put_ReceivedCount(self, *args): return _chilkat.CkSocket_put_ReceivedCount(self, *args)
def UnlockComponent(self, *args): return _chilkat.CkSocket_UnlockComponent(self, *args)
def IsUnlocked(self): return _chilkat.CkSocket_IsUnlocked(self)
def AsyncSendBytes(self, *args): return _chilkat.CkSocket_AsyncSendBytes(self, *args)
@@ -2173,6 +2175,11 @@ class CkMailMan(_object):
def put_Pop3Stls(self, *args): return _chilkat.CkMailMan_put_Pop3Stls(self, *args)
def AddPfxSourceData(self, *args): return _chilkat.CkMailMan_AddPfxSourceData(self, *args)
def AddPfxSourceFile(self, *args): return _chilkat.CkMailMan_AddPfxSourceFile(self, *args)
+ def SmtpSendRawCommand(self, *args): return _chilkat.CkMailMan_SmtpSendRawCommand(self, *args)
+ def smtpSendRawCommand(self, *args): return _chilkat.CkMailMan_smtpSendRawCommand(self, *args)
+ def Pop3SendRawCommand(self, *args): return _chilkat.CkMailMan_Pop3SendRawCommand(self, *args)
+ def pop3SendRawCommand(self, *args): return _chilkat.CkMailMan_pop3SendRawCommand(self, *args)
+ def Pop3EndSessionNoQuit(self): return _chilkat.CkMailMan_Pop3EndSessionNoQuit(self)
def lastErrorText(self): return _chilkat.CkMailMan_lastErrorText(self)
def lastErrorXml(self): return _chilkat.CkMailMan_lastErrorXml(self)
def lastErrorHtml(self): return _chilkat.CkMailMan_lastErrorHtml(self)
@@ -3155,7 +3162,7 @@ class CkHttp(_object):
def put_UseBgThread(self, *args): return _chilkat.CkHttp_put_UseBgThread(self, *args)
def BgResponseObject(self): return _chilkat.CkHttp_BgResponseObject(self)
def BgTaskAbort(self): return _chilkat.CkHttp_BgTaskAbort(self)
- def ClearEventLog(self): return _chilkat.CkHttp_ClearEventLog(self)
+ def ClearBgEventLog(self): return _chilkat.CkHttp_ClearBgEventLog(self)
def EventLogName(self, *args): return _chilkat.CkHttp_EventLogName(self, *args)
def eventLogName(self, *args): return _chilkat.CkHttp_eventLogName(self, *args)
def EventLogValue(self, *args): return _chilkat.CkHttp_EventLogValue(self, *args)
@@ -3759,6 +3766,8 @@ class CkSpider(_object):
def put_ProxyPassword(self, *args): return _chilkat.CkSpider_put_ProxyPassword(self, *args)
def get_ProxyPort(self): return _chilkat.CkSpider_get_ProxyPort(self)
def put_ProxyPort(self, *args): return _chilkat.CkSpider_put_ProxyPort(self, *args)
+ def get_VerboseLogging(self): return _chilkat.CkSpider_get_VerboseLogging(self)
+ def put_VerboseLogging(self, *args): return _chilkat.CkSpider_put_VerboseLogging(self, *args)
def put_UserAgent(self, *args): return _chilkat.CkSpider_put_UserAgent(self, *args)
def userAgent(self): return _chilkat.CkSpider_userAgent(self)
def get_UserAgent(self, *args): return _chilkat.CkSpider_get_UserAgent(self, *args)
@@ -3781,6 +3790,7 @@ class CkSpider(_object):
def CanonicalizeUrl(self, *args): return _chilkat.CkSpider_CanonicalizeUrl(self, *args)
def getDomain(self, *args): return _chilkat.CkSpider_getDomain(self, *args)
def getBaseDomain(self, *args): return _chilkat.CkSpider_getBaseDomain(self, *args)
+
def canonicalizeUrl(self, *args): return _chilkat.CkSpider_canonicalizeUrl(self, *args)
def lastErrorText(self): return _chilkat.CkSpider_lastErrorText(self)
def lastErrorXml(self): return _chilkat.CkSpider_lastErrorXml(self)
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py
index 26f0bed01ce..c82a7a7fc85 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py
@@ -31,7 +31,7 @@ import addin
from dialogs import ShowDialog, MakePropertyPage
import win32ui
-
+import webbrowser
import commctrl
import win32con
import win32gui
@@ -168,6 +168,20 @@ global name
name=''
global email
email=''
+global web_server
+web_server = 'localhost'
+global web_server_port
+web_server_port = '8080'
+global country_ref
+country_ref = ""
+global state_ref
+state_ref = ""
+global new_con_country
+new_con_country= ""
+global new_con_state
+new_con_state= ""
+global search_country
+search_country = None
def check():
server = NewConn.getitem('_server')
@@ -251,7 +265,6 @@ class OKButtonProcessor(ButtonProcessor):
try:
port = int(win32gui.GetDlgItemText(self.window.hwnd, self.other_ids[1]))
except ValueError, e:
- print "Exception : %s"%str(e)
win32ui.MessageBox("Port should be an integer", "OpenERP Connection", flag_excl)
return
except Exception,e:
@@ -277,6 +290,27 @@ class DoneButtonProcessor(ButtonProcessor):
self.window.manager.SaveConfig()
win32gui.EndDialog(self.window.hwnd, id)
+class WEBOKButtonProcessor(ButtonProcessor):
+ def __init__(self, window, control_ids):
+ self.mngr = window.manager
+ ControlProcessor.__init__(self, window, control_ids)
+
+ def OnClicked(self, id):
+ global web_server
+ global web_server_port
+ server = win32gui.GetDlgItemText(self.window.hwnd, self.other_ids[0])
+ try:
+ port = int(win32gui.GetDlgItemText(self.window.hwnd, self.other_ids[1]))
+ except ValueError, e:
+ win32ui.MessageBox("Port should be an integer", "OpenERP Connection", flag_excl)
+ return
+ if server.strip() == "" or server.strip() == "http:\\\\":
+ win32ui.MessageBox("Invalid web Server address.", "OpenERP Connection", flag_excl)
+ return
+ web_server = server
+ web_server_port = port
+ win32gui.EndDialog(self.window.hwnd, id)
+
class MessageProcessor(ControlProcessor):
def Init(self):
text = " This Outlook Plugin for OpenERP has been developed by OpenERP s.a.\n\n \
@@ -404,6 +438,8 @@ def TestConnection(btnProcessor,*args):
win32ui.MessageBox("No database found on host "+ server+" at port "+str(port), "OpenERP Connection", flag_excl)
return
+
+
uname = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
pwd = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[2])
@@ -596,6 +632,8 @@ def GetSelectedItems(hwndList):
def MakeAttachment(btnProcessor,*args):
#Check if server running or user logged in
+ from win32com.client import Dispatch
+ import win32com
b = check()
if not b:
return
@@ -603,7 +641,6 @@ def MakeAttachment(btnProcessor,*args):
assert ex.Selection.Count == 1
mail = ex.Selection.Item(1)
mail = GetMail(btnProcessor)
-
#get selected records
hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
r = GetSelectedItems(hwndList)
@@ -646,17 +683,21 @@ def CreateCase(btnProcessor,*args):
for rec in r:
if rec[0] == 'res.partner':
partner_ids.append(rec[1])
-
+ f = False
#Create new case
try:
- NewConn.CreateCase(str(section), mail, partner_ids)
+ f = NewConn.CreateCase(str(section), mail, partner_ids)
msg="New Document created."
flag=flag_info
except Exception,e:
msg="New Document not created \n\n"+str(e)
flag=flag_error
- win32ui.MessageBox(msg, "Create Document", flag)
- return
+ if f:
+ win32ui.MessageBox(msg, "Create Document", flag)
+ return
+ else:
+ win32ui.MessageBox("Error While creating document.\n Document can not be created.", "Create Document", flag_error)
+ return
else:
win32ui.MessageBox("Document can not be created. CRM not installed", "Create Object", flag_info)
except Exception, e:
@@ -784,6 +825,8 @@ def CreateContact(btnProcessor,*args):
street2 = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[6])
city = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[7])
zip = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[8])
+ state = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[10])
+ country = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[11])
if not name:
win32ui.MessageBox("Please enter name.", "Create Contact", flag_stop)
return
@@ -798,9 +841,10 @@ def CreateContact(btnProcessor,*args):
'street':ustr(street),
'street2':ustr(street2),
'city':ustr(city),
- 'zip':ustr(zip)
+ 'zip':ustr(zip),
+ 'state_id':ustr(state),
+ 'country_id':ustr(country)
}
-
try:
id = NewConn.CreateContact(str(res))
if not partner:
@@ -818,6 +862,10 @@ def CreateContact(btnProcessor,*args):
def SetAllText(txtProcessor,*args):
# Set values for url, uname, pwd from config file
+ global web_server
+ global web_server_port
+ serverBox = txtProcessor.GetControl(txtProcessor.other_ids[2])
+ win32gui.SendMessage(serverBox, win32con.WM_SETTEXT, 0, "http:\\\\"+str(web_server)+":"+str(web_server_port))
url = NewConn.getitem('_uri')
tbox = txtProcessor.GetControl()
win32gui.SendMessage(tbox, win32con.WM_SETTEXT, 0, str(url))
@@ -893,10 +941,26 @@ def SetDefaultContact(txtProcessor,*args):
global name
global email
global partner_ref
- win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[1],partner_ref)
+ global new_con_country
+ global new_con_state
+ global state_ref
+ global country_ref
+ state = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[2])
+ country = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[3])
if txtProcessor.init_done:
+ if new_con_country == "":
+ new_con_country = country
+ if new_con_state == "":
+ new_con_state = state
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[1],partner_ref)
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.control_id,name)
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[0],email)
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[2],new_con_state)
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[3],new_con_country)
+ new_con_country = ""
+ new_con_state = ""
+ state_ref = ""
+ country_ref =""
return
#
try:
@@ -978,7 +1042,7 @@ def CreatePartner(btnProcessor,*args):
b = check()
if not b:
return
-
+ global partner_ref
partner_name = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
if not partner_name:
win32ui.MessageBox("Please enter Partner name.", "Create Partner", flag_excl)
@@ -992,6 +1056,7 @@ def CreatePartner(btnProcessor,*args):
return
if id:
win32ui.MessageBox("New Partner '%s' created."%partner_name, "Create Partner", flag_info)
+ partner_ref = str(partner_name)
win32gui.EndDialog(btnProcessor.window.hwnd, btnProcessor.id)
else:
win32ui.MessageBox("Partner '%s' already Exists."%partner_name, "Create Partner", flag_info)
@@ -1010,13 +1075,37 @@ def set_name_email(dialogProcessor,*args):
name = win32gui.GetDlgItemText(dialogProcessor.window.hwnd, dialogProcessor.other_ids[0])
email = win32gui.GetDlgItemText(dialogProcessor.window.hwnd, dialogProcessor.other_ids[1])
+#Function for Getting default mail when dialog is loaded and finding contact related to this
+#setting values to the appropriate text areas
def GetDefaultEmail(txtProcessor,*args):
from win32com.client import Dispatch
import win32con
b = check()
global partner_ref
+ global country_ref
+ global state_ref
+ global new_con_country
+ global new_con_state
+ partner_n = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[0])
+ state_n = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[10])
+ country_n = win32gui.GetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[11])
+ if partner_ref == "":
+ partner_ref = partner_n
+ if country_ref == "":
+ country_ref = country_n
+ if state_ref == "":
+ state_ref = state_n
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[0], ustr(partner_ref))
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[10], ustr(state_ref))
+ win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[11], ustr(country_ref))
+ partner_ref = ""
+ country_ref = ""
+ state_ref = ""
+ new_con_country = ""
+ new_con_state = ""
+ if country_ref == None:
+ country_ref = ""
if not b:
return
#Acquiring control of the text box
@@ -1077,6 +1166,8 @@ def GetDefaultEmail(txtProcessor,*args):
if val[0] == 'country_id' and val[1] != False :
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[11], ustr(val[1][1]))
+ global search_country
+ search_country = ustr(val[1][1])
if val[0] == 'phone' and val[1] != False :
win32gui.SetDlgItemText(txtProcessor.window.hwnd, txtProcessor.other_ids[5], ustr(val[1]))
@@ -1140,6 +1231,8 @@ def SearchPartner(btnProcessor,*args):
if val[0] == 'country_id' and val[1] != False :
win32gui.SetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[12], ustr(val[1][1]))
+ global search_country
+ search_country = ustr(val[1][1])
if val[0] == 'phone' and val[1] != False :
win32gui.SetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[6], ustr(val[1]))
@@ -1167,6 +1260,8 @@ def WritePartner(btnProcessor,*args):
street = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[2])
street2 = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[3])
city = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[4])
+ state = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[5])
+ country = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[6])
phone = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[7])
mobile = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[8])
fax = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[9])
@@ -1185,6 +1280,9 @@ def WritePartner(btnProcessor,*args):
new_vals.append(['email',email])
new_vals.append(['fax',fax])
new_vals.append(['zip',zip])
+ new_vals.append(['state',state])
+ new_vals.append(['country',country])
+ new_vals.append(['state',state])
flag = 0
try:
#writing the updated values to the Server.
@@ -1198,7 +1296,7 @@ def WritePartner(btnProcessor,*args):
elif flag == 0:
win32ui.MessageBox("Error in Updating the Changes.\n Please check the Database Connection.", "Open Contact", flag_error)
elif flag == -1:
- win32ui.MessageBox("Contact can not be Save.\nFirst select contact using Search.","Open Contact", flag_info)
+ win32ui.MessageBox("Contact can not be Save.\nFirst select partner using Search.","Open Contact", flag_info)
def SetPartnerNameColumn(listProcessor,*args):
hwndList = listProcessor.GetControl()
@@ -1235,7 +1333,7 @@ def SelectPartnerFromList(btnProcessor,*args):
sel_text = nombre[0:size]
global partner_ref
if str(sel_text).strip() == "":
- win32ui.MessageBox("Invalid Partner Selected.","Search Partner")
+ win32ui.MessageBox("Invalid partner selected.","Search Partner")
return
try:
partner_ref = str(sel_text)
@@ -1244,10 +1342,10 @@ def SelectPartnerFromList(btnProcessor,*args):
win32gui.EndDialog(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
return
elif sel_count < 1:
- win32ui.MessageBox("You should Select atleast one partner.","Search Partner")
+ win32ui.MessageBox("You should select one partner.","Search Partner")
return
else:
- win32ui.MessageBox("Multiple Selection is not allowded.","Search Partner")
+ win32ui.MessageBox("Multiple Selection is not allowed.","Search Partner")
return
def SearchPartnerList(btnProcessor,*args):
@@ -1275,82 +1373,375 @@ def SearchPartnerList(btnProcessor,*args):
win32ui.MessageBox(msg, "Search Partner", flag_error)
pass
+def ConnectWebServer(btnProcessor, *args):
+ b = check()
+ if not b:
+ return
+ server = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ webbrowser.open_new(str(server)+"\\openerp\\")
+
+
+def OpenPartnerForm(txtProcessor,*args):
+ from win32com.client import Dispatch
+ import win32con
+ b = check()
+ if not b:
+ return
+ #Acquiring control of the text box
+ partner_link = txtProcessor.GetControl()
+ #Reading Current Selected Email.
+ ex = txtProcessor.window.manager.outlook.ActiveExplorer()
+ assert ex.Selection.Count == 1
+ mail = ex.Selection.Item(1)
+ partner_text = ""
+ try:
+ partner_text = ustr(mail.SenderName).encode('iso-8859-1')
+ except Exception,e:
+ win32gui.SendMessage(partner_link, win32con.WM_SETTEXT, 0, "< Error in reading email.>")
+ pass
+ vals = NewConn.SearchPartner(partner_text)
+ if vals == None:
+ win32gui.SendMessage(partner_link, win32con.WM_SETTEXT, 0, "< No Partner with named "+str(partner_text)+" found.>")
+ txtProcessor.init_done=True
+ return
+ global web_server
+ global web_server_port
+ if web_server.strip() == "" or web_server.strip() == "http:\\\\":
+ win32gui.SendMessage(partner_link, win32con.WM_SETTEXT, 0, " ")
+ txtProcessor.init_done=True
+ return
+ try:
+ linktopartner = "http:\\\\"+web_server+":"+str(web_server_port)+"\\openerp\\form\\view?model=res.partner&id="+str(vals)
+ win32gui.SendMessage(partner_link, win32con.WM_SETTEXT, 0, linktopartner)
+ except Exception,e:
+ win32ui.MessageBox("Error While Opening Partner.\n"+str(e),"Open Partner", flag_error)
+ webbrowser.open_new(linktopartner)
+ txtProcessor.init_done=True
+
+def SerachOpenDocuemnt(txtProcessor,*args):
+ from win32com.client import Dispatch
+ import win32con
+ import win32ui
+ import win32com
+ from win32com.mapi import mapi, mapiutil, mapitags
+ import pythoncom
+ b = check()
+ if not b:
+ return
+ global web_server
+ global web_server_port
+ #Reading Current Selected Email.
+ ex = txtProcessor.window.manager.outlook.ActiveExplorer()
+ assert ex.Selection.Count == 1
+ mail = ex.Selection.Item(1)
+ #Acquiring control of the text box
+ link_box = txtProcessor.GetControl()
+ #Checking for the web server Parameters
+ if web_server.strip() == "" or web_server.strip() == "http:\\\\":
+ win32gui.SendMessage(link_box, win32con.WM_SETTEXT, 0, " ")
+ txtProcessor.init_done=True
+ return
+ linktodoc = ""
+ message_id = None
+ try:
+ outlook = win32com.client.Dispatch("Outlook.Application")
+ session = win32com.client.Dispatch("MAPI.session")
+ session.Logon('Outlook')
+ objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
+ objFields = objMessage.Fields
+ strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
+ strheader = ustr(strheader).encode('iso-8859-1')
+ headers = {}
+ strheader = strheader.replace("\n ", " ").splitlines()
+ for line in strheader:
+ split_here = line.find(":")
+ headers[line[:split_here]] = line[split_here:]
+ temp1 = headers.get('Message-ID')
+ temp2 = headers.get('Message-Id')
+ if temp1 == None: message_id = temp2
+ if temp2 == None: message_id = temp1
+ startCut = message_id.find("<")
+ endCut = message_id.find(">")
+ message_id = message_id[startCut:endCut+1]
+ except Exception,e:
+ win32ui.MessageBox(str(e),"Open Document")
+ vals = NewConn.SearchEmailResources(message_id)
+ if vals == None:
+ win32gui.SendMessage(link_box, win32con.WM_SETTEXT, 0, "< Mail is still not archived.>")
+ txtProcessor.init_done=True
+ return
+ try:
+ linktodoc = "http:\\\\" +web_server+ ":"+str(web_server_port)+"\\openerp\\form\\view?model="+vals[0][1]+"&id="+str(vals[1][1])
+ win32gui.SendMessage(link_box, win32con.WM_SETTEXT, 0, str(linktodoc))
+ except Exception,e:
+ win32ui.MessageBox("Error While Opening Document.\n"+str(e),"Open Document", flag_error)
+ webbrowser.open_new(linktodoc)
+ txtProcessor.init_done=True
+
+def SearchCountry(btnProcessor, *args):
+ b = check()
+ if not b:
+ return
+ try :
+ search_country = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ if not search_country:
+ win32ui.MessageBox("Please enter country name to search for.", "Search Country", flag_excl)
+ return
+ #Searching the contact.
+ hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
+ countries = list(NewConn.GetCountry(search_country))
+ win32gui.SendMessage(hwndList, commctrl.LVM_DELETEALLITEMS)
+ if not countries:
+ win32gui.SetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0],"")
+ win32ui.MessageBox("No country found with name {0}.".format(search_country),"Search Country",flag_error)
+ for country in countries:
+ num_items = win32gui.SendMessage(hwndList, commctrl.LVM_GETITEMCOUNT)
+ item = LVITEM(text=country[1],iItem = num_items)
+ win32gui.SendMessage(hwndList, commctrl.LVM_INSERTITEM, 0, item.toparam())
+ except Exception,e:
+ msg = getMessage(e)
+ win32ui.MessageBox(msg, "Search Country", flag_error)
+ pass
+
+def SetCountryList(listProcessor,*args):
+
+ hwndList = listProcessor.GetControl()
+ child_ex_style = win32gui.SendMessage(hwndList, commctrl.LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
+ child_ex_style |= commctrl.LVS_EX_FULLROWSELECT
+ win32gui.SendMessage(hwndList, commctrl.LVM_SETEXTENDEDLISTVIEWSTYLE, 0, child_ex_style)
+
+ # set header row
+ lvc = LVCOLUMN(
+ mask = commctrl.LVCF_FMT | commctrl.LVCF_WIDTH | \
+ commctrl.LVCF_TEXT | commctrl.LVCF_SUBITEM
+ )
+ lvc.fmt = commctrl.LVCFMT_LEFT
+ lvc.iSubItem = 1
+ lvc.text = "Country Name"
+ lvc.cx = 275
+ win32gui.SendMessage(hwndList, commctrl.LVM_INSERTCOLUMN, 0, lvc.toparam())
+ listProcessor.init_done = True
+
+def SelectCountryFromList(btnProcessor,*args):
+
+ hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ sel_count = win32gui.SendMessage(hwndList, commctrl.LVM_GETSELECTEDCOUNT)
+ sel_text = ''
+ if sel_count == 1:
+ sel=-1
+ for i in range(0,sel_count):
+ sel = win32gui.SendMessage(hwndList, commctrl.LVM_GETNEXTITEM, sel, commctrl.LVNI_SELECTED)
+ buf,extra = win32gui_struct.EmptyLVITEM(1, 0)
+ size = win32gui.SendMessage(hwndList, commctrl.LVM_GETITEMTEXT, sel, buf)
+ sel_text = ''
+ for n in extra:
+ nombre = n.tostring()
+ sel_text = nombre[0:size]
+ global country_ref
+ global new_con_country
+ global search_country
+ if str(sel_text).strip() == "":
+ win32ui.MessageBox("Invalid country selected.","Search Country")
+ return
+ try:
+ country_ref = str(sel_text)
+ new_con_country = str(sel_text)
+ search_country = str(sel_text)
+ except Exception,e:
+ pass
+ win32gui.EndDialog(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
+ return
+ elif sel_count < 1:
+ win32ui.MessageBox("You must one country.","Search Country")
+ return
+ else:
+ win32ui.MessageBox("Multiple selection is not allowed.","Search Country")
+ return
+
+def SearchState(btnProcessor, *args):
+ b = check()
+ if not b:
+ return
+ try :
+ global new_con_country
+ global search_country
+ search_state = win32gui.GetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ if not search_state:
+ win32ui.MessageBox("Please enter state name to search for.", "Search Fed.State", flag_excl)
+ return
+ #Searching the contact.
+ hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
+ states = list(NewConn.GetStates(search_state, search_country))
+ win32gui.SendMessage(hwndList, commctrl.LVM_DELETEALLITEMS)
+ if not states:
+ win32gui.SetDlgItemText(btnProcessor.window.hwnd, btnProcessor.other_ids[0],"")
+ win32ui.MessageBox("No state found with name {0}.".format(search_state),"Search Fed.State",flag_error)
+ for state in states:
+ num_items = win32gui.SendMessage(hwndList, commctrl.LVM_GETITEMCOUNT)
+ item = LVITEM(text=state[1],iItem = num_items)
+ win32gui.SendMessage(hwndList, commctrl.LVM_INSERTITEM, 0, item.toparam())
+ except Exception,e:
+ msg = getMessage(e)
+ win32ui.MessageBox(msg, "Search Fed.State", flag_error)
+ pass
+
+def SetStateList(listProcessor,*args):
+ hwndList = listProcessor.GetControl()
+ child_ex_style = win32gui.SendMessage(hwndList, commctrl.LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
+ child_ex_style |= commctrl.LVS_EX_FULLROWSELECT
+ win32gui.SendMessage(hwndList, commctrl.LVM_SETEXTENDEDLISTVIEWSTYLE, 0, child_ex_style)
+
+ # set header row
+ lvc = LVCOLUMN(
+ mask = commctrl.LVCF_FMT | commctrl.LVCF_WIDTH | \
+ commctrl.LVCF_TEXT | commctrl.LVCF_SUBITEM
+ )
+ lvc.fmt = commctrl.LVCFMT_LEFT
+ lvc.iSubItem = 1
+ lvc.text = "Fed.State Name"
+ lvc.cx = 275
+ win32gui.SendMessage(hwndList, commctrl.LVM_INSERTCOLUMN, 0, lvc.toparam())
+ listProcessor.init_done = True
+
+def SelectStateFromList(btnProcessor,*args):
+
+ hwndList = win32gui.GetDlgItem(btnProcessor.window.hwnd, btnProcessor.other_ids[0])
+ sel_count = win32gui.SendMessage(hwndList, commctrl.LVM_GETSELECTEDCOUNT)
+ sel_text = ''
+ if sel_count == 1:
+ sel=-1
+ for i in range(0,sel_count):
+ sel = win32gui.SendMessage(hwndList, commctrl.LVM_GETNEXTITEM, sel, commctrl.LVNI_SELECTED)
+ buf,extra = win32gui_struct.EmptyLVITEM(1, 0)
+ size = win32gui.SendMessage(hwndList, commctrl.LVM_GETITEMTEXT, sel, buf)
+ sel_text = ''
+ for n in extra:
+ nombre = n.tostring()
+ sel_text = nombre[0:size]
+ global state_ref
+ global new_con_state
+ if str(sel_text).strip() == "":
+ win32ui.MessageBox("Invalid fed. state selected.","Search Fed.State")
+ return
+ try:
+ state_ref = str(sel_text)
+ new_con_state = str(sel_text)
+ win32gui.EndDialog(btnProcessor.window.hwnd, btnProcessor.other_ids[1])
+ except Exception,e:
+ pass
+
+ return
+ elif sel_count < 1:
+ win32ui.MessageBox("You must select state.","Search Fed.State")
+ return
+ else:
+ win32ui.MessageBox("Multiple selection is not allowed.","Search Fed.State")
+ return
+
+
dialog_map = {
- "IDD_MANAGER" : (
- (CancelButtonProcessor, "IDCANCEL", resetConnAttribs, ()),
- (TabProcessor, "IDC_TAB IDC_LIST",
- """IDD_GENERAL IDD_OBJECT_SETTINGS IDD_ABOUT"""),
- (DoneButtonProcessor, "ID_DONE"),
- ),
+ "IDD_MANAGER" : (
+ (CancelButtonProcessor, "IDCANCEL", resetConnAttribs, ()),
+ (TabProcessor, "IDC_TAB IDC_LIST",
+ """IDD_GENERAL IDD_OBJECT_SETTINGS IDD_ABOUT"""),
+ (DoneButtonProcessor, "ID_DONE"),
+ ),
- "IDD_GENERAL": (
- (DBComboProcessor, "ID_DB_DROPDOWNLIST", GetConn, ()),
- (TextProcessor, "ID_SERVER_PORT ID_USERNAME ID_PASSWORD", SetAllText, ()),
- (CommandButtonProcessor, "ID_BUT_TESTCONNECTION ID_DB_DROPDOWNLIST ID_USERNAME \
- ID_PASSWORD", TestConnection, ()),
- (CommandButtonProcessor, "IDC_RELOAD", ReloadAllControls, ()),
- (DialogCommand, "IDC_BUT_SET_SERVER_PORT", "IDD_SERVER_PORT_DIALOG"),
- ),
+ "IDD_GENERAL": (
+ (DBComboProcessor, "ID_DB_DROPDOWNLIST", GetConn, ()),
+ (TextProcessor, "ID_SERVER_PORT ID_USERNAME ID_PASSWORD IDET_WED_SERVER", SetAllText, ()),
+ (CommandButtonProcessor, "ID_BUT_TESTCONNECTION ID_DB_DROPDOWNLIST ID_USERNAME \
+ ID_PASSWORD", TestConnection, ()),
+ (CommandButtonProcessor, "IDC_RELOAD", ReloadAllControls, ()),
+ (DialogCommand, "IDC_BUT_SET_SERVER_PORT", "IDD_SERVER_PORT_DIALOG"),
+ (DialogCommand, "ID_SET_WEB_CONNECTION", "IDD_WEB_SERVER_PORT_DIALOG" ),
+ (CommandButtonProcessor, "IDPB_WEB_CONNECTION IDET_WED_SERVER", ConnectWebServer, ()),
+ ),
- "IDD_OBJECT_SETTINGS" : (
- (CommandButtonProcessor, "IDC_BUT_LOAD_IMAGE IDC_IMAGE_PATH", GetImagePath, ()),
- (CommandButtonProcessor, "IDC_BUT_SAVE_OBJECT IDC_OBJECT_TITLE IDC_OBJECT_NAME \
- IDC_IMAGE_PATH IDC_LIST", AddNewObject, ()),
- (CommandButtonProcessor, "IDC_BUT_DEL_OBJECT IDC_LIST", DeleteSelectedObjects, ()),
- (ListBoxProcessor, "IDC_LIST", SetDefaultList, ())
- ),
+ "IDD_OBJECT_SETTINGS" : (
+ (CommandButtonProcessor, "IDC_BUT_LOAD_IMAGE IDC_IMAGE_PATH", GetImagePath, ()),
+ (CommandButtonProcessor, "IDC_BUT_SAVE_OBJECT IDC_OBJECT_TITLE IDC_OBJECT_NAME \
+ IDC_IMAGE_PATH IDC_LIST", AddNewObject, ()),
+ (CommandButtonProcessor, "IDC_BUT_DEL_OBJECT IDC_LIST", DeleteSelectedObjects, ()),
+ (ListBoxProcessor, "IDC_LIST", SetDefaultList, ())
+ ),
- "IDD_ABOUT" : (
- (ImageProcessor, "IDB_OPENERPLOGO"),
- (MessageProcessor, "IDC_ABOUT"),
- ),
+ "IDD_ABOUT" : (
+ (ImageProcessor, "IDB_OPENERPLOGO"),
+ (MessageProcessor, "IDC_ABOUT"),
+ ),
- "IDD_SERVER_PORT_DIALOG" : (
- (CloseButtonProcessor, "IDCANCEL"),
- (OKButtonProcessor, "IDOK ID_SERVER ID_PORT IDR_XML_PROTOCOL"),
- (RadioButtonProcessor, "IDR_XML_PROTOCOL", GetConn, ()),
- (RadioButtonProcessor, "IDR_XMLS_PROTOCOL", GetConn, ()),
- (RadioButtonProcessor, "IDR_NETRPC_PROTOCOL", GetConn, ()),
- ),
+ "IDD_SERVER_PORT_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (OKButtonProcessor, "IDOK ID_SERVER ID_PORT IDR_XML_PROTOCOL"),
+ ),
- "IDD_SYNC" : (
- (CommandButtonProcessor, "ID_SEARCH ID_SEARCH_TEXT IDC_NAME_LIST", SearchObjectsForText,()),
- (GroupProcessor, "IDC_STATIC_GROUP", setCheckList, ()),
- (CSComboProcessor, "ID_ATT_METHOD_DROPDOWNLIST", GetConn,()),
- (TextProcessor, "ID_SEARCH_TEXT", GetSearchText, ()),
- (DialogCommand, "ID_CREATE_CONTACT ID_SEARCH_TEXT", "IDD_NEW_CONTACT_DIALOG", set_search_text, ()),
- (CloseButtonProcessor, "IDCANCEL"),
- (CommandButtonProcessor, "ID_MAKE_ATTACHMENT IDC_NAME_LIST IDD_SYNC", MakeAttachment, ()),
- (CommandButtonProcessor, "ID_CREATE_CASE ID_ATT_METHOD_DROPDOWNLIST IDC_NAME_LIST", CreateCase, ()),
- (ListBoxProcessor, "IDC_NAME_LIST", SetNameColumn, ())
- ),
+ "IDD_SYNC" : (
+ (CommandButtonProcessor, "ID_SEARCH ID_SEARCH_TEXT IDC_NAME_LIST", SearchObjectsForText,()),
+ (GroupProcessor, "IDC_STATIC_GROUP", setCheckList, ()),
+ (CSComboProcessor, "ID_ATT_METHOD_DROPDOWNLIST", GetConn,()),
+ (TextProcessor, "ID_SEARCH_TEXT", GetSearchText, ()),
+ (DialogCommand, "ID_CREATE_CONTACT ID_SEARCH_TEXT", "IDD_NEW_CONTACT_DIALOG", set_search_text, ()),
+ (CloseButtonProcessor, "IDCANCEL"),
+ (CommandButtonProcessor, "ID_MAKE_ATTACHMENT IDC_NAME_LIST IDD_SYNC", MakeAttachment, ()),
+ (CommandButtonProcessor, "ID_CREATE_CASE ID_ATT_METHOD_DROPDOWNLIST IDC_NAME_LIST", CreateCase, ()),
+ (ListBoxProcessor, "IDC_NAME_LIST", SetNameColumn, ())
+ ),
- "IDD_NEW_CONTACT_DIALOG" : (
- (CloseButtonProcessor, "IDCANCEL"),
- (CommandButtonProcessor, "ID_CONTACT_SAVE_BUTTON ID_CONTACT_NAME_TEXT ID_CONTACT_EMAIL_TEXT ID_CONTACT_OFFICE_TEXT ID_CONTACT_MOBILE_TEXT ID_FAX_TEXT ID_STREET_TEXT ID_STREET2_TEXT ID_PARTNER_CITY_TEXT ID_ZIP_TEXT ID_PARTNER_TEXT", CreateContact, ()),
- (TextProcessor, "ID_CONTACT_NAME_TEXT ID_CONTACT_EMAIL_TEXT ID_PARTNER_TEXT" , SetDefaultContact, ()),
- (DialogCommand, "ID_NEW_PARTNER_BUTTON", "IDD_SELECT_PARTNER"),
- ),
+ "IDD_NEW_CONTACT_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (CommandButtonProcessor, "ID_CONTACT_SAVE_BUTTON ID_CONTACT_NAME_TEXT ID_CONTACT_EMAIL_TEXT ID_CONTACT_OFFICE_TEXT ID_CONTACT_MOBILE_TEXT ID_FAX_TEXT ID_STREET_TEXT ID_STREET2_TEXT ID_PARTNER_CITY_TEXT ID_ZIP_TEXT ID_PARTNER_TEXT IDET_NC_PARTNER_STATE IDET_NC_PARTNER_COUNTRY", CreateContact, ()),
+ (TextProcessor, "ID_CONTACT_NAME_TEXT ID_CONTACT_EMAIL_TEXT ID_PARTNER_TEXT IDET_NC_PARTNER_STATE IDET_NC_PARTNER_COUNTRY" , SetDefaultContact, ()),
+ (DialogCommand, "ID_NEW_PARTNER_BUTTON", "IDD_SELECT_PARTNER"),
+ (DialogCommand, "IDPB_NEW_PARTNER_BUTTON", "IDD_NEW_PARTNER_DIALOG"),
+ (DialogCommand, "IDPB_NC_SEARCH_STATE1", "IDD_SELECT_STATE"),
+ (DialogCommand, "IDPB_NC_SEARCH_COUNTRY1", "IDD_SELECT_COUNTRY"),
+ ),
- "IDD_NEW_PARTNER_DIALOG" : (
- (CloseButtonProcessor, "IDCANCEL"),
- (CommandButtonProcessor, "ID_SAVE_PARTNER_BUTTON ID_PARTNER_NAME_TEXT", CreatePartner, ()),
- ),
+ "IDD_NEW_PARTNER_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (CommandButtonProcessor, "ID_SAVE_PARTNER_BUTTON ID_PARTNER_NAME_TEXT", CreatePartner, ()),
+ ),
- "IDD_VIEW_PARTNER_DIALOG" : (
- (TextProcessor, "IDET_SEARCH_PARTNER IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP IDET_PARTNER_STATE IDET_PARTNER_COUNTRY", GetDefaultEmail, ()),
- (CommandButtonProcessor, "IDPB_SEARCH_PARTNER IDET_SEARCH_PARTNER IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP IDET_PARTNER_STATE IDET_PARTNER_COUNTRY", SearchPartner, ()),
- (CommandButtonProcessor, "IDPB_WRITE_CHANGES IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_STATE IDET_PARTNER_COUNTRY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP", WritePartner, ()),
- (CloseButtonProcessor, "IDCANCEL"),
- (DialogCommand, "ID_NEW_PART_BUTTON", "IDD_SELECT_PARTNER" ),
- (DialogCommand, "IDPB_NEWPARTNER_BUTTON" , "IDD_NEW_CONTACT_DIALOG")
- ),
- "IDD_SELECT_PARTNER" : (
- (CloseButtonProcessor, "IDCANCEL"),
- (ListBoxProcessor, "IDC_LIST_PARTNER" ,SetPartnerNameColumn, ()),
- (CommandButtonProcessor, "IDPB_PARTNER_SEARCH IDET_PARTNER_SEARCH_NAME IDC_LIST_PARTNER", SearchPartnerList,()),
- (CommandButtonProcessor, "IDPB_SELECT_PARTNER IDC_LIST_PARTNER IDD_SELECT_PARTNER" , SelectPartnerFromList,()),
- (DialogCommand, "IDPB_CREATE_NEW_PARTNER" , "IDD_NEW_PARTNER_DIALOG")
- ),
+ "IDD_VIEW_PARTNER_DIALOG" : (
+ (TextProcessor, "IDET_SEARCH_PARTNER IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP IDET_PARTNER_STATE IDET_PARTNER_COUNTRY", GetDefaultEmail, ()),
+ (CommandButtonProcessor, "IDPB_SEARCH_PARTNER IDET_SEARCH_PARTNER IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP IDET_PARTNER_STATE IDET_PARTNER_COUNTRY", SearchPartner, ()),
+ (CommandButtonProcessor, "IDPB_WRITE_CHANGES IDET_PARTNER IDET_PARTNER_CONTACT_NAME IDET_PARTNER_STREET IDET_PARTNER_STREET2 IDET_PARTNER_CITY IDET_PARTNER_STATE IDET_PARTNER_COUNTRY IDET_PARTNER_OFFICENO IDET_PARTNER_MOBILENO IDET_PARTNER_EMAIL IDET_PARTNER_FAX IDET_ZIP", WritePartner, ()),
+ (CloseButtonProcessor, "IDCANCEL"),
+ (DialogCommand, "ID_NEW_PART_BUTTON", "IDD_SELECT_PARTNER" ),
+ (DialogCommand, "IDPB_NEWPARTNER_BUTTON" , "IDD_NEW_CONTACT_DIALOG"),
+ (DialogCommand, "IDPB_NEW_PART_BUTTON", "IDD_NEW_PARTNER_DIALOG"),
+ (DialogCommand, "IDPB_SEARCH_COUNTRY1", "IDD_SELECT_COUNTRY"),
+ (DialogCommand, "IDPB_SEARCH_STATE1", "IDD_SELECT_STATE"),
+
+ ),
+ "IDD_SELECT_PARTNER" : (
+ (ListBoxProcessor, "IDC_LIST_PARTNER" ,SetPartnerNameColumn, ()),
+ (CommandButtonProcessor, "IDPB_PARTNER_SEARCH IDET_PARTNER_SEARCH_NAME IDC_LIST_PARTNER", SearchPartnerList,()),
+ (CommandButtonProcessor, "IDPB_SELECT_PARTNER IDC_LIST_PARTNER IDD_SELECT_PARTNER" , SelectPartnerFromList,()),
+ (DialogCommand, "IDPB_CREATE_NEW_PARTNER" , "IDD_NEW_PARTNER_DIALOG")
+ ),
+ "IDD_OPEN_PARTNER_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (TextProcessor, "IDET_PARTNER_LINK_TEXT", OpenPartnerForm, ()),
+ ),
+ "IDD_OPEN_DOCUEMNT_DIALOG" : (
+ (CloseButtonProcessor, "IDCANCEL"),
+ (TextProcessor, "IDEB_OPENDOC_LINK_TEXT", SerachOpenDocuemnt,()),
+ ),
+ "IDD_WEB_SERVER_PORT_DIALOG" :(
+ (CloseButtonProcessor, "IDCANCEL"),
+ (WEBOKButtonProcessor, "ID_WEB_OK IDET_WEB_SERVER IDET_WEB_PORT")
+ ),
+ "IDD_SELECT_COUNTRY" : (
+ (CommandButtonProcessor, "IDPB_SEARCH_COUNTRY IDET_COUNTRY_SEARCH_NAME IDC_LIST_COUNTRY" , SearchCountry, ()),
+ (ListBoxProcessor, "IDC_LIST_COUNTRY" ,SetCountryList, ()),
+ (CommandButtonProcessor, "IDPB_SELECT_COUNTRY IDC_LIST_COUNTRY IDD_SELECT_COUNTRY" , SelectCountryFromList,()),
+ ),
+ "IDD_SELECT_STATE" : (
+ (CommandButtonProcessor, "IDPB_STATE_SEARCH IDET_STATE_SEARCH_NAME IDC_LIST_STATE" , SearchState, ()),
+ (ListBoxProcessor, "IDC_LIST_STATE" ,SetStateList, ()),
+ (CommandButtonProcessor, "IDPB_SELECT_STATE IDC_LIST_STATE IDD_SELECT_STATE" , SelectStateFromList,()),
+ ),
}
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.h b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.h
index bb028c0da90..a816b9838ab 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.h
+++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.h
@@ -177,6 +177,37 @@
#define IDPB_PARTNER_SEARCH 2077
#define IDPB_CREATE_NEW_PARTNER 2078
#define ID_PARTNER_TEXT 2079
+#define IDET_WED_SERVER 2080
+#define IDET_WEB_PORT 2081
+#define ID_SET_WEB_CONNECTION 2082
+#define IDPB_WEB_CONNECTION 2083
+#define IDD_OPEN_PARTNER_DIALOG 2084
+#define IDET_PARTNER_LINK_TEXT 2085
+#define IDEB_OPENDOC_LINK_TEXT 2086
+#define IDD_OPEN_DOCUEMNT_DIALOG 2087
+#define IDD_WEB_SERVER_PORT_DIALOG 2088
+#define IDET_WEB_SERVER 2089
+#define IDET_WEB_PORT 2090
+#define ID_WEB_OK 2091
+#define IDPB_NEW_PARTNER_BUTTON 2092
+#define IDPB_NEW_PART_BUTTON 2093
+#define IDD_SELECT_COUNTRY 2094
+#define IDET_COUNTRY_SEARCH_NAME 2095
+#define IDC_LIST_COUNTRY 2096
+#define IDPB_SELECT_COUNTRY 2097
+#define IDPB_SEARCH_COUNTRY 2098
+#define IDD_SELECT_STATE 2099
+#define IDET_STATE_SEARCH_NAME 2100
+#define IDC_LIST_STATE 2101
+#define IDPB_SELECT_STATE 2102
+#define IDPB_SEARCH_STATE 2103
+#define IDPB_SEARCH_STATE1 2104
+#define IDPB_SEARCH_COUNTRY1 2105
+
+#define IDET_NC_PARTNER_STATE 2106
+#define IDPB_NC_SEARCH_STATE1 2107
+#define IDET_NC_PARTNER_COUNTRY 2108
+#define IDPB_NC_SEARCH_COUNTRY1 2109
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py
index 3dac98b5fb0..5f5a0cdca50 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py
@@ -1,11 +1,11 @@
-#C:\Documents and Settings\TinyERP\Desktop\OpenERP-Outlook-PlugIn\openerp-outlook-plugin\dialogs\resources\dialogs.py
-#This is a generated file. Please edit C:\Documents and Settings\TinyERP\Desktop\OpenERP-Outlook-PlugIn\openerp-outlook-plugin\dialogs\resources\dialogs.rc instead.
-_rc_size_=11883
-_rc_mtime_=1285738756
+#C:\workspace\openerp-outlook-plugin\dialogs\resources\dialogs.py
+#This is a generated file. Please edit C:\workspace\openerp-outlook-plugin\dialogs\resources\dialogs.rc instead.
+_rc_size_=16028
+_rc_mtime_=1286860723
class FakeParser:
- dialogs = {'IDD_VIEW_PARTNER_DIALOG': [['Open Contact', (0, 0, 350, 215), -1865940928, 1024, (8, 'Tahoma')], [130, 'Email ID : ', -1, (32, 17, 40, 12), 1342177280], [129, '', 2051, (70, 15, 200, 12), 1350631552], [128, 'Search Contact ', 2052, (280, 15, 60, 14), 1342242816], [130, 'Partner Name : ', -1, (13, 42, 50, 17), 1342177280], [129, '', 2064, (70, 42, 200, 12), 1350568064], [128, 'Search Partner', 2070, (280, 41, 60, 14), 1342242816], [128, 'Postal Address ', 2024, (10, 65, 175, 125), 1342177287], [130, 'Contact Name : ', -1, (18, 83, 50, 17), 1342177280], [129, '', 2046, (76, 82, 100, 12), 1350631552], [130, 'Street : ', -1, (18, 97, 50, 17), 1342177280], [129, '', 2053, (76, 96, 100, 12), 1350631552], [130, 'Street2 : ', -1, (18, 112, 50, 17), 1342177280], [129, '', 2054, (76, 111, 100, 12), 1350631552], [130, 'Zip : ', -1, (18, 126, 50, 14), 1342177280], [129, '', 40010, (76, 125, 100, 12), 1350631552], [130, 'City : ', -1, (18, 140, 50, 17), 1342177280], [129, '', 40011, (76, 139, 100, 12), 1350631552], [130, 'Fed. State : ', -1, (18, 154, 50, 17), 1342177280], [129, '', 2062, (76, 153, 100, 12), 1350568064], [130, 'Country :', -1, (18, 169, 35, 17), 1342177280], [129, '', 2063, (76, 168, 100, 12), 1350568064], [128, 'Communication ', 2024, (188, 65, 152, 125), 1342177287], [130, 'Phone : ', -1, (194, 83, 30, 17), 1342177280], [129, '', 2048, (224, 82, 100, 12), 1350631552], [130, 'Mobile : ', -1, (194, 97, 30, 17), 1342177280], [129, '', 2050, (224, 96, 100, 12), 1350631552], [130, 'Email : ', -1, (194, 111, 30, 17), 1342177280], [129, '', 2058, (224, 110, 100, 12), 1350568064], [130, 'Fax : ', -1, (194, 125, 30, 17), 1342177280], [129, '', 2047, (224, 124, 100, 12), 1350631552], [128, 'Create a New Contact', 2071, (124, 195, 82, 14), 1342242816], [128, 'Save', 2059, (213, 195, 60, 14), 1342242816], [128, 'Cancel', 2, (281, 195, 60, 14), 1342242816]], 'IDD_GENERAL': [['Connection Parameters', (0, 0, 430, 210), 1355284544, None, (8, 'Tahoma')], [128, '', 2024, (10, 10, 250, 130), 1342177287], [130, 'Server : ', -1, (30, 30, 100, 17), 1342177280], [129, '', 2003, (85, 30, 120, 12), 1350633472], [128, 'Change', 2021, (210, 30, 30, 13), 1342242816], [130, 'Database : ', -1, (30, 50, 100, 17), 1342177280], [133, '', 2004, (85, 50, 120, 40), 1344339971], [128, 'Reload', 2038, (210, 50, 30, 13), 1342242816], [130, 'Username : ', -1, (30, 70, 100, 17), 1342177280], [129, '', 2005, (85, 70, 154, 12), 1350631552], [130, 'Password : ', -1, (30, 90, 100, 17), 1342177280], [129, '', 2006, (85, 90, 154, 12), 1350631584], [128, 'Connect', 2007, (179, 110, 60, 13), 1342242816]], 'IDD_OBJECT_SETTINGS': [['Documents Setting', (0, 0, 430, 210), 1355284672, 1024, (8, 'Tahoma')], [128, 'Document Attributes', 2024, (2, 2, 340, 32), 1342177287], [130, 'Title', -1, (6, 15, 30, 17), 1342177280], [129, '', 2013, (20, 14, 57, 12), 1350631552], [130, 'Document Name', -1, (83, 15, 60, 17), 1342177280], [129, '', 2014, (138, 14, 57, 12), 1350631552], [130, 'Image', -1, (200, 15, 20, 17), 1342177280], [129, '', 2015, (220, 14, 57, 12), 1350631552], [128, 'Load Image', 2010, (286, 13, 50, 15), 1342242816], [128, 'Add', 2011, (347, 13, 38, 15), 1342242816], [128, 'Remove', 2012, (391, 13, 38, 15), 1342242816], ['SysListView32', 'List1', 2016, (8, 40, 535, 160), 1353711657]], 'IDD_NEW_PARTNER_DIALOG': [['Create a New Partner', (0, 0, 140, 40), -1865940928, 1024, (8, 'Tahoma')], [130, 'Name : ', -1, (5, 3, 100, 17), 1342177280], [129, '', 2036, (40, 3, 94, 12), 1350631552], [128, 'Cancel', 2, (90, 22, 45, 14), 1342242816], [128, 'Save', 2035, (40, 22, 45, 14), 1342242817]], 'IDD_MANAGER': [['OpenERP Configuarion', (0, 0, 460, 260), -1865940800, None, (8, 'Tahoma')], [128, 'Close', 2008, (400, 239, 50, 14), 1342177281], ['SysTabControl32', '', 1068, (8, 7, 440, 228), 1342177280], ['SysListView32', '', 2016, (0, 0, 0, 0), 1353711657]], 'IDD_ABOUT': [['About', (0, 0, 430, 210), 1355284672, 1024, (8, 'Tahoma')], [128, 'About Plugin', -1, (7, 3, 422, 200), 1342177287], [130, '1062', 1062, (60, 30, 20, 20), 1342179342], [130, '', 2028, (80, 90, 300, 100), 1342177280]], 'IDD_NEW_CONTACT_DIALOG': [['Create a New Contact', (0, 0, 350, 150), -1865940928, 1024, (8, 'Tahoma')], [130, 'Select Partner : ', -1, (13, 20, 50, 17), 1342177280], [129, '', 2079, (70, 18, 200, 12), 1350568064], [128, 'Search Partner', 2033, (280, 17, 60, 14), 1342242816], [128, 'Postal Address ', 2024, (10, 35, 175, 90), 1342177287], [130, 'Contact Name : ', -1, (18, 53, 100, 17), 1342177280], [129, '', 40005, (76, 52, 100, 12), 1350631552], [130, 'Street : ', -1, (18, 67, 40, 17), 1342177280], [129, '', 2062, (76, 66, 100, 12), 1350631552], [130, 'Street2 : ', -1, (18, 81, 40, 17), 1342177280], [129, '', 2063, (76, 80, 100, 12), 1350631552], [130, 'Zip : ', -1, (18, 94, 50, 17), 1342177280], [129, '', 2068, (76, 93, 100, 12), 1350631552], [130, 'City : ', -1, (18, 106, 50, 17), 1342177280], [129, '', 2067, (76, 107, 100, 12), 1350631552], [128, 'Communication ', 2024, (188, 35, 150, 90), 1342177287], [130, 'Office : ', -1, (194, 53, 30, 17), 1342177280], [129, '', 40006, (224, 52, 100, 12), 1350631552], [130, 'Mobile : ', -1, (194, 67, 30, 17), 1342177280], [129, '', 40007, (224, 66, 100, 12), 1350631552], [130, 'Fax : ', -1, (194, 81, 30, 17), 1342177280], [129, '', 2066, (224, 80, 100, 12), 1350631552], [130, 'Email : ', -1, (194, 95, 30, 17), 1342177280], [129, '', 40008, (224, 94, 100, 12), 1350631552], [128, 'Cancel', 2, (290, 130, 45, 14), 1342242816], [128, 'Save', 40009, (240, 130, 45, 14), 1342242816]], 'IDD_SERVER_PORT_DIALOG': [['OpenERP Connection', (0, 0, 160, 55), -1865940928, 1024, (8, 'Tahoma')], [130, 'Server : ', -1, (5, 3, 150, 17), 1342177280], [129, '', 2001, (40, 3, 100, 12), 1350631552], [130, 'Port : ', -1, (5, 18, 100, 17), 1342177280], [129, '', 2002, (40, 18, 100, 12), 1350631552], [128, 'Close', 2, (110, 35, 45, 14), 1342242816], [128, 'OK', 1, (60, 35, 45, 14), 1342242817]], 'IDD_SELECT_PARTNER': [['Search Partner', (0, 0, 220, 250), -1865940928, 1024, (8, 'Tahoma')], [130, 'Enter Name : ', -1, (8, 12, 80, 17), 1342177280], [129, '', 2076, (55, 10, 100, 12), 1350631552], [128, 'Search', 2077, (160, 10, 50, 14), 1342242816], ['SysListView32', 'List1', 2072, (8, 40, 200, 185), 1353711657], [128, 'Create New Partner', 2078, (10, 230, 100, 14), 1342242816], [128, 'Select', 2075, (130, 230, 40, 14), 1342242816], [128, 'Cancel', 2, (175, 230, 40, 14), 1342242816]], 'IDD_SYNC': [['Push to OpenERP', (0, 0, 470, 320), -1865940928, 1024, (8, 'Tahoma')], [128, 'Link to an Existing Documents ', 2024, (8, 5, 250, 290), 1342242823], [130, 'Search for : ', -1, (15, 17, 40, 12), 1342177280], [129, '', 40003, (60, 15, 120, 12), 1350631552], [128, 'Search', 40004, (187, 15, 40, 14), 1342242816], [130, 'Documents : ', -1, (15, 140, 100, 14), 1342177280], ['SysListView32', 'List1', 2026, (15, 150, 234, 110), 1350631433], [128, 'Push', 2019, (160, 270, 85, 14), 1342242816], [128, ' Create a Document ', 2024, (263, 5, 202, 100), 1342242823], [130, 'Type of Document : ', -1, (266, 25, 100, 12), 1342177280], [133, '', 2025, (332, 24, 75, 45), 1344339971], [128, 'Create', 2020, (412, 23, 50, 14), 1342242816], [128, ' Create a Contact ', 2024, (263, 110, 202, 185), 1342242823], [130, 'Create a New Contact : ', -1, (280, 140, 100, 12), 1342177280], [128, 'Create Contact', 2018, (360, 138, 60, 14), 1342242816], [128, 'Close', 2, (385, 300, 60, 14), 1342242816]]}
- ids = {'IDC_BUT_DEL_OBJECT': 2012, 'IDC_DELAY1_SLIDER': 1056, 'IDC_PROGRESS': 1000, 'IDD_MANAGER': 101, 'IDC_ABOUT': 2028, 'IDD_DIAGNOSTIC': 113, 'IDET_PARTNER_COUNTRY': 2063, 'IDD_TRAINING': 102, 'ID_CONTACT_EMAIL_TEXT': 40008, 'IDC_DELAY2_TEXT': 1059, 'IDC_DELAY1_TEXT': 1057, 'IDD_WIZARD': 114, 'IDC_CHKBX': 2023, 'IDC_STATIC_HAM': 1002, 'IDC_PROGRESS_TEXT': 1001, 'IDR_XMLS_PROTOCOL': 2042, 'IDD_GENERAL': 108, 'IDD_ABOUT': 2027, 'IDD_SYNC': 40002, 'IDC_TAB': 1068, 'IDC_FOLDER_UNSURE': 1033, 'IDC_VERBOSE_LOG': 1061, 'IDC_EDIT1': 1094, 'IDC_BROWSE': 1037, 'ID_DB_DROPDOWNLIST': 2004, 'IDC_BACK_BTN': 1069, 'IDPB_PARTNER_SEARCH': 2077, 'IDD_WIZARD_FINISHED_UNCONFIGURED': 119, 'IDC_ACTION_CERTAIN': 1025, 'IDC_BUT_ACT_ALL': 1019, 'IDD_FILTER_NOW': 104, 'ID_PROTOCOL_GRP': 2040, 'IDC_HEADER': 2017, 'IDC_MARK_SPAM_AS_READ': 1047, 'ID_PARTNER_NAME_TEXT': 2036, 'IDC_RECOVER_RS': 1075, 'IDC_NAME_LIST1': 2037, 'ID_CONTACT_OFFICE_TEXT': 40006, 'IDC_STATIC': -1, 'IDC_PAGE_PLACEHOLDER': 1078, 'IDC_BROWSE_WATCH': 1039, 'IDET_ZIP': 40010, 'IDET_PARTNER_CITY': 40011, 'IDC_FOLDER_HAM': 1083, 'IDD_WIZARD_FOLDERS_REST': 117, 'IDC_SHOW_DATA_FOLDER': 1071, 'IDC_BUT_ACT_SCORE': 1018, '_APS_NEXT_RESOURCE_VALUE': 128, '_APS_NEXT_SYMED_VALUE': 101, 'IDC_CONTACT_LIST': 2029, 'IDC_SLIDER_CERTAIN': 1023, 'IDET_PARTNER_STREET': 2053, 'IDC_BUT_UNREAD': 1020, 'ID_PARTNER_DROPDOWNLIST': 2032, 'ID_COUNTRY_DROPLIST': 2065, 'IDC_BUT_ABOUT': 1017, 'IDC_BUT_RESCORE': 1008, 'IDC_BUT_SEARCHSUB': 1041, 'IDC_BUT_TRAIN_FROM_SPAM_FOLDER': 1010, 'IDET_PARTNER_MOBILENO': 2050, 'IDD_VIEW_PARTNER_DIALOG': 2044, 'IDD_WIZARD_FOLDERS_TRAIN': 120, 'IDC_BUT_FILTER_ENABLE': 1013, 'IDC_ABOUT_BTN': 1072, 'IDD_WIZARD_FINISHED_TRAINED': 122, 'ID_SERVER': 2001, 'IDD_SELECT_PARTNER': 2073, 'IDD_FOLDER_SELECTOR': 105, 'IDC_BUT_SET_SERVER_PORT': 2021, 'ID_DONE': 2008, 'IDC_LIST_FOLDERS': 1040, 'IDC_IMAGE_PATH': 2015, 'IDB_SBWIZLOGO': 125, 'IDB_OPENERPLOGO': 1062, 'ID_ZIP_TEXT': 2068, 'IDD_NEW_PARTNER_DIALOG': 2034, 'ID_PARTNER_DROPLIST': 2069, 'IDC_BUT_VIEW_LOG': 1093, 'IDC_STATUS2': 1044, 'IDC_STATUS1': 1043, 'IDCANCEL': 2, 'IDC_BROWSE_HAM': 1004, 'ID_BUT_TESTCONNECTION': 2007, 'IDR_NETRPC_PROTOCOL': 2043, 'IDC_BROWSE_SPAM': 1005, 'IDD_WIZARD_FINISHED_UNTRAINED': 116, 'IDC_MARK_UNSURE_AS_READ': 1051, 'ID_PARTNER_CITY_TEXT': 2067, 'IDC_BUT_WIZARD': 1070, 'IDC_VERSION': 1009, 'ID_NEW_PARTNER_BUTTON': 2033, 'IDC_FOLDER_NAMES': 1036, 'ID_ATT_METHOD_DROPDOWNLIST': 2025, 'IDC_BUT_TIMER_ENABLED': 1091, 'IDPB_WRITE_CHANGES': 2059, 'IDC_SLIDER_UNSURE': 1029, 'IDC_BUT_NEW': 1046, 'IDC_FOLDER_WATCH': 1038, 'IDPB_CREATE_NEW_PARTNER': 2078, 'IDC_BUT_UNTRAINED': 1088, 'IDC_STATIC_SPAM': 1003, 'IDD_NEW_CONTACT_DIALOG': 2031, 'IDC_EDIT_UNSURE': 1030, 'IDC_BUT_CLEARALL': 1042, 'IDC_BUT_UNSEEN': 1021, 'IDC_OBJECT_NAME': 2014, 'IDD_WIZARD_FOLDERS_WATCH': 118, 'IDC_BUT_SAVE_OBJECT': 2011, 'ID_FED_STATE_DROPLIST': 2064, 'ID_ALL_COUNTRY_DROPDOWNLIST': 2061, 'IDC_EDIT_CERTAIN': 1024, 'IDC_BUT_FILTER_DEFINE': 1016, 'ID_NEW_PART_BUTTON': 2070, 'ID_FAX_TEXT': 2066, 'IDD_WIZARD_TRAINING_IS_IMPORTANT': 123, 'ID_ALL_STATE_DROPDOWNLIST': 2060, 'IDC_INBOX_TIMER_ONLY': 1060, 'IDPB_SEARCH_PARTNER': 2052, 'ID_USERNAME': 2005, '_APS_NEXT_CONTROL_VALUE': 1096, 'IDC_WIZ_GRAPHIC': 1092, 'IDD_OBJECT_SETTINGS': 2009, 'IDD_FILTER_UNSURE': 111, 'IDC_DEL_SPAM_RS': 1074, 'ID_SERVER_PORT': 2003, 'IDR_XML_PROTOCOL': 2041, 'IDET_PARTNER_OFFICENO': 2048, 'IDB_FOLDERS': 127, 'IDC_BUT_PREPARATION': 1081, 'ID_STREET2_TEXT': 2063, 'IDC_DELAY2_SLIDER': 1058, 'IDET_PARTNER': 2064, 'IDC_SAVE_SPAM_SCORE': 1048, 'IDC_OBJECT_TITLE': 2013, 'IDC_FOLDER_CERTAIN': 1027, 'IDC_BROWSE_UNSURE': 1034, 'IDC_STATISTICS': 1095, 'ID_MAKE_ATTACHMENT': 2019, 'IDC_BUT_LOAD_IMAGE': 2010, 'IDC_NAME_LIST': 2026, 'IDC_BUT_TRAIN_TO_SPAM_FOLDER': 1011, 'IDET_PARTNER_SEARCH_NAME': 2076, 'IDC_BUT_RESET': 1073, 'IDET_PARTNER_CONTACT_NAME': 2046, 'ID_CONTACT_MOBILE_TEXT': 40007, 'IDC_ACTION_UNSURE': 1031, 'IDD_WIZARD_TRAIN': 121, 'IDC_STATIC_GROUP': 2024, 'IDPB_NEWPARTNER_BUTTON': 2071, 'ID_PARTNER_TEXT': 2079, 'IDD_WIZARD_FINISHED_TRAIN_LATER': 124, 'IDET_PARTNER_NAME': 2045, 'ID_CONTACT_NAME_TEXT': 40005, 'IDC_BUT_REBUILD': 1007, 'IDET_PARTNER_STREET2': 2054, 'ID_SAVE_PARTNER_BUTTON': 2035, 'IDPB_SELECT_PARTNER': 2075, 'ID_STREET_TEXT': 2062, '_APS_NEXT_COMMAND_VALUE': 40001, 'IDET_SEARCH_PARTNER': 2051, 'IDC_LIST_PARTNER': 2072, 'ID_PORT': 2002, 'IDD_SERVER_PORT_DIALOG': 2022, 'IDET_PARTNER_STATE': 2062, 'ID_SEARCH_TEXT': 40003, 'ID_SEARCH': 40004, 'ID_CREATE_CONTACT': 2018, 'IDC_FORWARD_BTN': 1077, 'IDC_TRAINING_STATUS': 1035, 'IDD_WIZARD_WELCOME': 115, 'IDET_PARTNER_FAX': 2058, 'IDC_BUT_TRAIN': 1089, 'IDC_LIST': 2016, 'ID_CREATE_CASE': 2020, 'IDET_PARTNER_EMAIL': 2047, 'IDC_START': 1006, 'IDD_FILTER': 103, 'IDC_RELOAD': 2038, 'ID_PASSWORD': 2006, 'ID_NAME_TEXT': 2030, 'IDC_FILTER_STATUS': 1014, 'ID_CONTACT_SAVE_BUTTON': 40009, 'IDOK': 1, 'IDC_BROWSE_CERTAIN': 1028, 'IDC_BUT_SHOW_DIAGNOSTICS': 1080, 'IDC_BUT_TRAIN_NOW': 1012}
- names = {1024: 'IDC_EDIT_CERTAIN', 1: 'IDOK', 2: 'IDCANCEL', 1027: 'IDC_FOLDER_CERTAIN', 1028: 'IDC_BROWSE_CERTAIN', 1029: 'IDC_SLIDER_UNSURE', 1030: 'IDC_EDIT_UNSURE', 1031: 'IDC_ACTION_UNSURE', 1033: 'IDC_FOLDER_UNSURE', 1034: 'IDC_BROWSE_UNSURE', 1035: 'IDC_TRAINING_STATUS', 1036: 'IDC_FOLDER_NAMES', 1037: 'IDC_BROWSE', 1038: 'IDC_FOLDER_WATCH', 1039: 'IDC_BROWSE_WATCH', 1040: 'IDC_LIST_FOLDERS', 1041: 'IDC_BUT_SEARCHSUB', 1042: 'IDC_BUT_CLEARALL', 1043: 'IDC_STATUS1', 1044: 'IDC_STATUS2', 2069: 'ID_PARTNER_DROPLIST', 1046: 'IDC_BUT_NEW', 1047: 'IDC_MARK_SPAM_AS_READ', 1048: 'IDC_SAVE_SPAM_SCORE', 2052: 'IDPB_SEARCH_PARTNER', 1051: 'IDC_MARK_UNSURE_AS_READ', 2076: 'IDET_PARTNER_SEARCH_NAME', 2077: 'IDPB_PARTNER_SEARCH', 2078: 'IDPB_CREATE_NEW_PARTNER', 2053: 'IDET_PARTNER_STREET', 1056: 'IDC_DELAY1_SLIDER', 1057: 'IDC_DELAY1_TEXT', 1058: 'IDC_DELAY2_SLIDER', 1059: 'IDC_DELAY2_TEXT', 1060: 'IDC_INBOX_TIMER_ONLY', 1061: 'IDC_VERBOSE_LOG', 1062: 'IDB_OPENERPLOGO', 2047: 'IDET_PARTNER_EMAIL', 1068: 'IDC_TAB', 1069: 'IDC_BACK_BTN', 1070: 'IDC_BUT_WIZARD', 1071: 'IDC_SHOW_DATA_FOLDER', 1072: 'IDC_ABOUT_BTN', 1073: 'IDC_BUT_RESET', 1074: 'IDC_DEL_SPAM_RS', 1075: 'IDC_RECOVER_RS', 1077: 'IDC_FORWARD_BTN', 1078: 'IDC_PAGE_PLACEHOLDER', 2057: 'IDET_PARTNER_COUNTRY', 1080: 'IDC_BUT_SHOW_DIAGNOSTICS', 1081: 'IDC_BUT_PREPARATION', 1083: 'IDC_FOLDER_HAM', 2058: 'IDET_PARTNER_FAX', 1088: 'IDC_BUT_UNTRAINED', 1089: 'IDC_BUT_TRAIN', 40002: 'IDD_SYNC', 1091: 'IDC_BUT_TIMER_ENABLED', 1025: 'IDC_ACTION_CERTAIN', 1093: 'IDC_BUT_VIEW_LOG', 1094: 'IDC_EDIT1', 1095: 'IDC_STATISTICS', 1096: '_APS_NEXT_CONTROL_VALUE', 2060: 'ID_ALL_STATE_DROPDOWNLIST', 40010: 'IDET_ZIP', 40011: 'IDET_PARTNER_CITY', 2061: 'ID_ALL_COUNTRY_DROPDOWNLIST', 2062: 'IDET_PARTNER_STATE', 2063: 'IDET_PARTNER_COUNTRY', 2064: 'IDET_PARTNER', 101: 'IDD_MANAGER', 102: 'IDD_TRAINING', 103: 'IDD_FILTER', 104: 'IDD_FILTER_NOW', 105: 'IDD_FOLDER_SELECTOR', 106: 'IDD_ABOUT', 108: 'IDD_GENERAL', 2066: 'ID_FAX_TEXT', 111: 'IDD_FILTER_UNSURE', 113: 'IDD_DIAGNOSTIC', 114: 'IDD_WIZARD', 115: 'IDD_WIZARD_WELCOME', 116: 'IDD_WIZARD_FINISHED_UNTRAINED', 117: 'IDD_WIZARD_FOLDERS_REST', 118: 'IDD_WIZARD_FOLDERS_WATCH', 119: 'IDD_WIZARD_FINISHED_UNCONFIGURED', 120: 'IDD_WIZARD_FOLDERS_TRAIN', 121: 'IDD_WIZARD_TRAIN', 122: 'IDD_WIZARD_FINISHED_TRAINED', 123: 'IDD_WIZARD_TRAINING_IS_IMPORTANT', 124: 'IDD_WIZARD_FINISHED_TRAIN_LATER', 125: 'IDB_SBWIZLOGO', 127: 'IDB_FOLDERS', 2067: 'ID_PARTNER_CITY_TEXT', 2050: 'IDET_PARTNER_MOBILENO', 2070: 'ID_NEW_PART_BUTTON', 2071: 'IDPB_NEWPARTNER_BUTTON', 2072: 'IDC_LIST_PARTNER', 2073: 'IDD_SELECT_PARTNER', 2068: 'ID_ZIP_TEXT', 2051: 'IDET_SEARCH_PARTNER', 2075: 'IDPB_SELECT_PARTNER', 2079: 'ID_PARTNER_TEXT', 40004: 'ID_SEARCH', 2046: 'IDET_PARTNER_CONTACT_NAME', 2054: 'IDET_PARTNER_STREET2', 128: '_APS_NEXT_RESOURCE_VALUE', 2040: 'ID_PROTOCOL_GRP', 2065: 'ID_COUNTRY_DROPLIST', 2048: 'IDET_PARTNER_OFFICENO', 2024: 'IDC_STATIC_GROUP', 2041: 'IDR_XML_PROTOCOL', 2025: 'ID_ATT_METHOD_DROPDOWNLIST', 2026: 'IDC_NAME_LIST', 2027: 'IDD_ABOUT', 40001: '_APS_NEXT_COMMAND_VALUE', 2028: 'IDC_ABOUT', 2029: 'IDC_CONTACT_LIST', 2059: 'IDPB_WRITE_CHANGES', 2042: 'IDR_XMLS_PROTOCOL', 40003: 'ID_SEARCH_TEXT', 2030: 'ID_NAME_TEXT', 1092: 'IDC_WIZ_GRAPHIC', 2031: 'IDD_NEW_CONTACT_DIALOG', 40005: 'ID_CONTACT_NAME_TEXT', 2032: 'ID_PARTNER_DROPDOWNLIST', 40006: 'ID_CONTACT_OFFICE_TEXT', 2033: 'ID_NEW_PARTNER_BUTTON', 40007: 'ID_CONTACT_MOBILE_TEXT', 2034: 'IDD_NEW_PARTNER_DIALOG', 2043: 'IDR_NETRPC_PROTOCOL', 40008: 'ID_CONTACT_EMAIL_TEXT', 2035: 'ID_SAVE_PARTNER_BUTTON', 40009: 'ID_CONTACT_SAVE_BUTTON', 2036: 'ID_PARTNER_NAME_TEXT', 2037: 'IDC_NAME_LIST1', 2038: 'IDC_RELOAD', 2044: 'IDD_VIEW_PARTNER_DIALOG', 2001: 'ID_SERVER', 2002: 'ID_PORT', 2003: 'ID_SERVER_PORT', 2004: 'ID_DB_DROPDOWNLIST', 2005: 'ID_USERNAME', 2006: 'ID_PASSWORD', 2007: 'ID_BUT_TESTCONNECTION', 2008: 'ID_DONE', 2009: 'IDD_OBJECT_SETTINGS', 2010: 'IDC_BUT_LOAD_IMAGE', 2011: 'IDC_BUT_SAVE_OBJECT', 2012: 'IDC_BUT_DEL_OBJECT', 2013: 'IDC_OBJECT_TITLE', 2014: 'IDC_OBJECT_NAME', 2015: 'IDC_IMAGE_PATH', 2016: 'IDC_LIST', 2017: 'IDC_HEADER', 2018: 'ID_CREATE_CONTACT', 2019: 'ID_MAKE_ATTACHMENT', 2020: 'ID_CREATE_CASE', 2021: 'IDC_BUT_SET_SERVER_PORT', 2022: 'IDD_SERVER_PORT_DIALOG', 2023: 'IDC_CHKBX', 1000: 'IDC_PROGRESS', 1001: 'IDC_PROGRESS_TEXT', 1002: 'IDC_STATIC_HAM', 1003: 'IDC_STATIC_SPAM', 1004: 'IDC_BROWSE_HAM', 1005: 'IDC_BROWSE_SPAM', 1006: 'IDC_START', 1007: 'IDC_BUT_REBUILD', 1008: 'IDC_BUT_RESCORE', 1009: 'IDC_VERSION', 1010: 'IDC_BUT_TRAIN_FROM_SPAM_FOLDER', 1011: 'IDC_BUT_TRAIN_TO_SPAM_FOLDER', 1012: 'IDC_BUT_TRAIN_NOW', 1013: 'IDC_BUT_FILTER_ENABLE', 1014: 'IDC_FILTER_STATUS', 2045: 'IDET_PARTNER_NAME', 1016: 'IDC_BUT_FILTER_DEFINE', 1017: 'IDC_BUT_ABOUT', 1018: 'IDC_BUT_ACT_SCORE', 1019: 'IDC_BUT_ACT_ALL', 1020: 'IDC_BUT_UNREAD', 1021: 'IDC_BUT_UNSEEN', -1: 'IDC_STATIC', 1023: 'IDC_SLIDER_CERTAIN'}
+ dialogs = {'IDD_OPEN_DOCUEMNT_DIALOG': [['Open Document', (0, 0, 200, 65), -1865940928, 1024, (8, 'Tahoma')], [130, 'Link to Document : (If this link does not opens directly in web browser then copy an the link and paste in web browser.) ', -1, (5, 3, 190, 25), 1342177280], [129, '', 2086, (5, 31, 190, 12), 1350631552], [128, 'Ok', 2, (150, 45, 45, 14), 1342242816]], 'IDD_VIEW_PARTNER_DIALOG': [['Open Contact', (0, 0, 350, 215), -1865940928, 1024, (8, 'Tahoma')], [130, 'Email ID : ', -1, (32, 17, 40, 12), 1342177280], [129, '', 2051, (70, 15, 200, 12), 1350631552], [128, 'Search Contact ', 2052, (280, 15, 60, 14), 1342242816], [130, 'Partner Name : ', -1, (13, 42, 50, 17), 1342177280], [129, '', 2064, (70, 42, 150, 12), 1350568064], [128, 'Search Partner', 2070, (225, 41, 60, 14), 1342242816], [128, 'New Partner', 2093, (290, 41, 50, 14), 1342242816], [128, 'Postal Address ', 2024, (10, 65, 175, 125), 1342177287], [130, 'Contact Name : ', -1, (18, 83, 50, 17), 1342177280], [129, '', 2046, (76, 82, 100, 12), 1350631552], [130, 'Street : ', -1, (18, 97, 50, 17), 1342177280], [129, '', 2053, (76, 96, 100, 12), 1350631552], [130, 'Street2 : ', -1, (18, 112, 50, 17), 1342177280], [129, '', 2054, (76, 111, 100, 12), 1350631552], [130, 'Zip : ', -1, (18, 126, 50, 14), 1342177280], [129, '', 40010, (76, 125, 100, 12), 1350631552], [130, 'City : ', -1, (18, 140, 50, 17), 1342177280], [129, '', 40011, (76, 139, 100, 12), 1350631552], [130, 'Fed. State : ', -1, (18, 154, 50, 17), 1342177280], [129, '', 2062, (76, 153, 54, 12), 1350568064], [128, 'Search', 2104, (135, 153, 40, 12), 1342242816], [130, 'Country :', -1, (18, 169, 35, 17), 1342177280], [129, '', 2063, (76, 168, 54, 12), 1350568064], [128, 'Search', 2105, (135, 168, 40, 12), 1342242816], [128, 'Communication ', 2024, (188, 65, 152, 125), 1342177287], [130, 'Phone : ', -1, (194, 83, 30, 17), 1342177280], [129, '', 2048, (224, 82, 100, 12), 1350631552], [130, 'Mobile : ', -1, (194, 97, 30, 17), 1342177280], [129, '', 2050, (224, 96, 100, 12), 1350631552], [130, 'Email : ', -1, (194, 111, 30, 17), 1342177280], [129, '', 2058, (224, 110, 100, 12), 1350568064], [130, 'Fax : ', -1, (194, 125, 30, 17), 1342177280], [129, '', 2047, (224, 124, 100, 12), 1350631552], [128, 'Create a New Contact', 2071, (124, 195, 82, 14), 1342242816], [128, 'Save', 2059, (213, 195, 60, 14), 1342242816], [128, 'Cancel', 2, (281, 195, 60, 14), 1342242816]], 'IDD_OPEN_PARTNER_DIALOG': [['Open Partner', (0, 0, 200, 65), -1865940928, 1024, (8, 'Tahoma')], [130, 'Link to Partner : (If this link does not opens directly in web browser then copy an the link and paste in web browser.) ', -1, (5, 3, 190, 25), 1342177280], [129, '', 2085, (5, 31, 190, 12), 1350631552], [128, 'Ok', 2, (150, 45, 45, 13), 1342242816]], 'IDD_SELECT_STATE': [['Search Fed. State', (0, 0, 220, 250), -1865940928, 1024, (8, 'Tahoma')], [130, 'Enter Name : ', -1, (8, 12, 80, 17), 1342177280], [129, '', 2100, (55, 10, 100, 12), 1350631552], [128, 'Search', 40012, (160, 10, 50, 14), 1342242816], ['SysListView32', 'List1', 2101, (8, 40, 200, 185), 1353711657], [128, 'Select', 2102, (170, 230, 40, 14), 1342242816]], 'IDD_GENERAL': [['Connection Parameters', (0, 0, 430, 210), 1355284544, None, (8, 'Tahoma')], [128, '', 2024, (10, 10, 250, 130), 1342177287], [130, 'Server : ', -1, (30, 30, 100, 17), 1342177280], [129, '', 2003, (85, 30, 120, 12), 1350633472], [128, 'Change', 2021, (210, 30, 30, 13), 1342242816], [130, 'Database : ', -1, (30, 50, 100, 17), 1342177280], [133, '', 2004, (85, 50, 120, 40), 1344339971], [128, 'Reload', 2038, (210, 50, 30, 13), 1342242816], [130, 'Username : ', -1, (30, 70, 100, 17), 1342177280], [129, '', 2005, (85, 70, 154, 12), 1350631552], [130, 'Password : ', -1, (30, 90, 100, 17), 1342177280], [129, '', 2006, (85, 90, 154, 12), 1350631584], [128, 'Connect', 2007, (179, 110, 60, 13), 1342242816], [128, 'WebServer Parameters', 2024, (270, 10, 150, 130), 1342177287], [130, 'Server : ', -1, (280, 30, 50, 15), 1342177280], [129, '', 2080, (310, 29, 90, 12), 1350568064], [128, 'Change', 2082, (295, 50, 50, 12), 1342242816], [128, 'Connect', 2083, (350, 50, 50, 12), 1342242816]], 'IDD_OBJECT_SETTINGS': [['Documents Setting', (0, 0, 430, 210), 1355284672, 1024, (8, 'Tahoma')], [128, 'Document Attributes', 2024, (2, 2, 340, 32), 1342177287], [130, 'Title', -1, (6, 15, 30, 17), 1342177280], [129, '', 2013, (20, 14, 57, 12), 1350631552], [130, 'Document Name', -1, (83, 15, 60, 17), 1342177280], [129, '', 2014, (138, 14, 57, 12), 1350631552], [130, 'Image', -1, (200, 15, 20, 17), 1342177280], [129, '', 2015, (220, 14, 57, 12), 1350631552], [128, 'Load Image', 2010, (286, 13, 50, 15), 1342242816], [128, 'Add', 2011, (347, 13, 38, 15), 1342242816], [128, 'Remove', 2012, (391, 13, 38, 15), 1342242816], ['SysListView32', 'List1', 2016, (8, 40, 535, 160), 1353711657]], 'IDD_NEW_PARTNER_DIALOG': [['Create a New Partner', (0, 0, 140, 40), -1865940928, 1024, (8, 'Tahoma')], [130, 'Name : ', -1, (5, 3, 100, 17), 1342177280], [129, '', 2036, (40, 3, 94, 12), 1350631552], [128, 'Cancel', 2, (90, 22, 45, 14), 1342242816], [128, 'Save', 2035, (40, 22, 45, 14), 1342242817]], 'IDD_MANAGER': [['OpenERP Configuration', (0, 0, 460, 260), -1865940800, None, (8, 'Tahoma')], [128, 'Close', 2008, (400, 239, 50, 14), 1342177281], ['SysTabControl32', '', 1068, (8, 7, 440, 228), 1342177280], ['SysListView32', '', 2016, (0, 0, 0, 0), 1353711657]], 'IDD_WEB_SERVER_PORT_DIALOG': [['OpenERP Connection', (0, 0, 160, 55), -1865940928, 1024, (8, 'Tahoma')], [130, 'Server : ', -1, (5, 3, 150, 17), 1342177280], [129, '', 2089, (40, 3, 100, 12), 1350631552], [130, 'Port : ', -1, (5, 18, 100, 17), 1342177280], [129, '', 2090, (40, 18, 100, 12), 1350631552], [128, 'Close', 2, (110, 35, 45, 14), 1342242816], [128, 'OK', 2091, (60, 35, 45, 14), 1342242817]], 'IDD_ABOUT': [['About', (0, 0, 430, 210), 1355284672, 1024, (8, 'Tahoma')], [128, 'About Plugin', -1, (7, 3, 422, 200), 1342177287], [130, '1062', 1062, (60, 30, 20, 20), 1342179342], [130, '', 2028, (80, 90, 300, 100), 1342177280]], 'IDD_NEW_CONTACT_DIALOG': [['Create a New Contact', (0, 0, 350, 180), -1865940928, 1024, (8, 'Tahoma')], [130, 'Select Partner : ', -1, (13, 20, 50, 17), 1342177280], [129, '', 2079, (70, 18, 150, 12), 1350568064], [128, 'Search Partner', 2033, (225, 17, 60, 14), 1342242816], [128, 'New Partner', 2092, (290, 17, 50, 14), 1342242816], [128, 'Postal Address ', 2024, (10, 35, 175, 123), 1342177287], [130, 'Contact Name : ', -1, (18, 53, 100, 17), 1342177280], [129, '', 40005, (76, 52, 100, 12), 1350631552], [130, 'Street : ', -1, (18, 67, 40, 17), 1342177280], [129, '', 2062, (76, 66, 100, 12), 1350631552], [130, 'Street2 : ', -1, (18, 81, 40, 17), 1342177280], [129, '', 2063, (76, 80, 100, 12), 1350631552], [130, 'Zip : ', -1, (18, 94, 50, 17), 1342177280], [129, '', 2068, (76, 93, 100, 12), 1350631552], [130, 'City : ', -1, (18, 106, 50, 17), 1342177280], [129, '', 2067, (76, 107, 100, 12), 1350631552], [130, 'Fed. State : ', -1, (18, 121, 50, 17), 1342177280], [129, '', 2106, (76, 122, 54, 12), 1350568064], [128, 'Search', 2107, (135, 121, 40, 12), 1342242816], [130, 'Country :', -1, (18, 134, 35, 17), 1342177280], [129, '', 2108, (76, 135, 54, 12), 1350568064], [128, 'Search', 2109, (135, 136, 40, 12), 1342242816], [128, 'Communication ', 2024, (188, 35, 150, 123), 1342177287], [130, 'Office : ', -1, (194, 53, 30, 17), 1342177280], [129, '', 40006, (224, 52, 100, 12), 1350631552], [130, 'Mobile : ', -1, (194, 67, 30, 17), 1342177280], [129, '', 40007, (224, 66, 100, 12), 1350631552], [130, 'Fax : ', -1, (194, 81, 30, 17), 1342177280], [129, '', 2066, (224, 80, 100, 12), 1350631552], [130, 'Email : ', -1, (194, 95, 30, 17), 1342177280], [129, '', 40008, (224, 94, 100, 12), 1350631552], [128, 'Cancel', 2, (290, 162, 45, 13), 1342242816], [128, 'Save', 40009, (240, 162, 45, 13), 1342242816]], 'IDD_SERVER_PORT_DIALOG': [['OpenERP Connection', (0, 0, 160, 55), -1865940928, 1024, (8, 'Tahoma')], [130, 'Server : ', -1, (5, 3, 150, 17), 1342177280], [129, '', 2001, (40, 3, 100, 12), 1350631552], [130, 'Port : ', -1, (5, 18, 100, 17), 1342177280], [129, '', 2002, (40, 18, 100, 12), 1350631552], [128, 'Close', 2, (110, 35, 45, 14), 1342242816], [128, 'OK', 1, (60, 35, 45, 14), 1342242817]], 'IDD_SELECT_PARTNER': [['Search Partner', (0, 0, 220, 250), -1865940928, 1024, (8, 'Tahoma')], [130, 'Enter Name : ', -1, (8, 12, 80, 17), 1342177280], [129, '', 2076, (55, 10, 100, 12), 1350631552], [128, 'Search', 2077, (160, 10, 50, 14), 1342242816], ['SysListView32', 'List1', 2072, (8, 40, 200, 185), 1353711657], [128, 'Create New Partner', 2078, (10, 230, 100, 14), 1342242816], [128, 'Select', 2075, (170, 230, 40, 14), 1342242816]], 'IDD_SYNC': [['Push to OpenERP', (0, 0, 470, 320), -1865940928, 1024, (8, 'Tahoma')], [128, 'Link to an Existing Documents ', 2024, (8, 5, 250, 290), 1342242823], [130, 'Search for : ', -1, (15, 17, 40, 12), 1342177280], [129, '', 40003, (60, 15, 120, 12), 1350631552], [128, 'Search', 40004, (187, 15, 40, 14), 1342242816], [130, 'Documents : ', -1, (15, 140, 100, 14), 1342177280], ['SysListView32', 'List1', 2026, (15, 150, 234, 110), 1350631433], [128, 'Push', 2019, (160, 270, 85, 14), 1342242816], [128, ' Create a Document ', 2024, (263, 5, 202, 100), 1342242823], [130, 'Type of Document : ', -1, (266, 25, 100, 12), 1342177280], [133, '', 2025, (332, 24, 75, 45), 1344339971], [128, 'Create', 2020, (412, 23, 50, 14), 1342242816], [128, ' Create a Contact ', 2024, (263, 110, 202, 185), 1342242823], [130, 'Create a New Contact : ', -1, (280, 140, 100, 12), 1342177280], [128, 'Create Contact', 2018, (360, 138, 60, 14), 1342242816], [128, 'Close', 2, (385, 300, 60, 14), 1342242816]], 'IDD_SELECT_COUNTRY': [['Search Country', (0, 0, 220, 250), -1865940928, 1024, (8, 'Tahoma')], [130, 'Enter Name : ', -1, (8, 12, 80, 17), 1342177280], [129, '', 2095, (55, 10, 100, 12), 1350631552], [128, 'Search', 2098, (160, 10, 50, 14), 1342242816], ['SysListView32', 'List1', 2096, (8, 40, 200, 185), 1353711657], [128, 'Select', 2097, (170, 230, 40, 14), 1342242816]]}
+ ids = {'IDC_BUT_DEL_OBJECT': 2012, 'IDD_OPEN_PARTNER_DIALOG': 2084, 'IDD_SELECT_STATE': 2099, 'IDC_DELAY1_SLIDER': 1056, 'IDC_PROGRESS': 1000, 'IDD_MANAGER': 101, 'IDC_ABOUT': 2028, 'IDD_DIAGNOSTIC': 113, 'IDET_PARTNER_COUNTRY': 2063, 'IDD_TRAINING': 102, 'ID_CONTACT_EMAIL_TEXT': 40008, 'IDC_DELAY2_TEXT': 1059, 'IDC_DELAY1_TEXT': 1057, 'IDD_WIZARD': 114, 'IDC_CHKBX': 2023, 'IDC_STATIC_HAM': 1002, 'IDC_PROGRESS_TEXT': 1001, 'IDR_XMLS_PROTOCOL': 2042, 'IDD_GENERAL': 108, 'IDD_ABOUT': 2027, 'IDD_SYNC': 40002, 'IDC_TAB': 1068, 'IDC_FOLDER_UNSURE': 1033, '_APS_NEXT_SYMED_VALUE': 101, 'IDC_VERBOSE_LOG': 1061, 'IDC_EDIT1': 1094, 'IDC_BROWSE': 1037, 'ID_DB_DROPDOWNLIST': 2004, 'IDC_BACK_BTN': 1069, 'ID_CONTACT_NAME_TEXT': 40005, 'IDPB_PARTNER_SEARCH': 2077, 'IDD_WIZARD_FINISHED_UNCONFIGURED': 119, 'IDC_ACTION_CERTAIN': 1025, 'IDC_BUT_ACT_ALL': 1019, 'IDD_FILTER_NOW': 104, 'IDET_WED_SERVER': 2080, 'ID_WEB_OK': 2091, 'ID_PROTOCOL_GRP': 2040, 'IDC_HEADER': 2017, 'IDC_MARK_SPAM_AS_READ': 1047, 'IDPB_NEW_PARTNER_BUTTON': 2092, 'ID_PARTNER_NAME_TEXT': 2036, 'IDC_RECOVER_RS': 1075, 'IDC_NAME_LIST1': 2037, 'ID_CONTACT_OFFICE_TEXT': 40006, 'IDC_STATIC': -1, 'IDC_PAGE_PLACEHOLDER': 1078, 'IDC_BROWSE_WATCH': 1039, 'IDET_ZIP': 40010, 'IDET_PARTNER_CITY': 40011, 'IDET_PARTNER_LINK_TEXT': 2085, 'IDC_FOLDER_HAM': 1083, 'IDC_LIST_COUNTRY': 2096, 'IDD_WIZARD_FOLDERS_REST': 117, 'IDC_SHOW_DATA_FOLDER': 1071, 'IDC_BUT_ACT_SCORE': 1018, 'IDET_STATE_SEARCH_NAME': 2100, 'IDET_WEB_SERVER': 2089, '_APS_NEXT_RESOURCE_VALUE': 128, 'ID_SET_WEB_CONNECTION': 2082, 'IDC_LIST_STATE': 2101, 'IDC_CONTACT_LIST': 2029, 'IDC_SLIDER_CERTAIN': 1023, 'IDET_PARTNER_STREET': 2053, 'IDC_BUT_UNREAD': 1020, 'ID_PARTNER_DROPDOWNLIST': 2032, 'ID_COUNTRY_DROPLIST': 2065, 'IDC_BUT_ABOUT': 1017, 'IDC_BUT_RESCORE': 1008, 'IDC_BUT_SEARCHSUB': 1041, 'IDC_BUT_TRAIN_FROM_SPAM_FOLDER': 1010, 'IDET_PARTNER_MOBILENO': 2050, 'ID_CONTACT_MOBILE_TEXT': 40007, 'IDD_VIEW_PARTNER_DIALOG': 2044, 'IDD_WIZARD_FOLDERS_TRAIN': 120, 'IDC_BUT_FILTER_ENABLE': 1013, 'IDPB_WEB_CONNECTION': 2083, 'IDC_ABOUT_BTN': 1072, 'IDD_WIZARD_FINISHED_TRAINED': 122, 'ID_SERVER': 2001, 'IDD_SELECT_PARTNER': 2073, 'IDET_NC_PARTNER_STATE': 2106, 'IDD_FOLDER_SELECTOR': 105, 'IDC_BUT_SET_SERVER_PORT': 2021, 'ID_DONE': 2008, 'IDC_LIST_FOLDERS': 1040, 'IDC_IMAGE_PATH': 2015, 'IDB_SBWIZLOGO': 125, 'IDB_OPENERPLOGO': 1062, 'ID_ZIP_TEXT': 2068, 'IDEB_OPENDOC_LINK_TEXT': 2086, 'IDD_NEW_PARTNER_DIALOG': 2034, 'ID_PARTNER_DROPLIST': 2069, 'IDC_BUT_VIEW_LOG': 1093, 'IDC_STATUS2': 1044, 'IDC_STATUS1': 1043, 'IDCANCEL': 2, 'IDC_BROWSE_HAM': 1004, 'ID_BUT_TESTCONNECTION': 2007, 'IDR_NETRPC_PROTOCOL': 2043, 'IDC_BROWSE_SPAM': 1005, 'IDD_OPEN_DOCUEMNT_DIALOG': 2087, 'IDD_WIZARD_FINISHED_UNTRAINED': 116, 'IDC_MARK_UNSURE_AS_READ': 1051, 'IDPB_SEARCH_COUNTRY1': 2105, 'ID_PARTNER_CITY_TEXT': 2067, 'IDC_BUT_WIZARD': 1070, 'IDC_VERSION': 1009, 'ID_NEW_PARTNER_BUTTON': 2033, 'IDC_FOLDER_NAMES': 1036, 'ID_ATT_METHOD_DROPDOWNLIST': 2025, 'IDC_BUT_TIMER_ENABLED': 1091, 'IDPB_WRITE_CHANGES': 2059, 'IDC_SLIDER_UNSURE': 1029, 'IDC_BUT_NEW': 1046, 'IDC_FOLDER_WATCH': 1038, 'IDPB_CREATE_NEW_PARTNER': 2078, 'IDC_BUT_UNTRAINED': 1088, 'IDC_STATIC_SPAM': 1003, 'IDD_NEW_CONTACT_DIALOG': 2031, 'IDC_EDIT_UNSURE': 1030, 'IDC_BUT_CLEARALL': 1042, 'IDC_BUT_UNSEEN': 1021, 'IDC_OBJECT_NAME': 2014, 'IDD_WIZARD_FOLDERS_WATCH': 118, 'IDPB_SEARCH_STATE': 2103, 'IDET_COUNTRY_SEARCH_NAME': 2095, 'IDC_BUT_SAVE_OBJECT': 2011, 'ID_FED_STATE_DROPLIST': 2064, 'ID_ALL_COUNTRY_DROPDOWNLIST': 2061, 'IDC_EDIT_CERTAIN': 1024, 'IDC_BUT_FILTER_DEFINE': 1016, 'ID_NEW_PART_BUTTON': 2070, 'ID_FAX_TEXT': 2066, 'IDD_WIZARD_TRAINING_IS_IMPORTANT': 123, 'ID_ALL_STATE_DROPDOWNLIST': 2060, 'IDPB_SEARCH_STATE1': 2104, 'IDC_INBOX_TIMER_ONLY': 1060, 'IDPB_SEARCH_PARTNER': 2052, 'ID_USERNAME': 2005, '_APS_NEXT_CONTROL_VALUE': 1096, 'IDC_WIZ_GRAPHIC': 1092, 'IDD_OBJECT_SETTINGS': 2009, 'IDD_FILTER_UNSURE': 111, 'IDC_DEL_SPAM_RS': 1074, 'IDD_SELECT_COUNTRY': 2094, 'ID_SERVER_PORT': 2003, 'IDR_XML_PROTOCOL': 2041, 'IDET_PARTNER_OFFICENO': 2048, 'IDB_FOLDERS': 127, 'IDC_BUT_PREPARATION': 1081, 'ID_STREET2_TEXT': 2063, 'IDC_DELAY2_SLIDER': 1058, 'IDET_PARTNER': 2064, 'IDC_SAVE_SPAM_SCORE': 1048, 'IDC_OBJECT_TITLE': 2013, 'IDC_FOLDER_CERTAIN': 1027, 'IDET_WEB_PORT': 2090, 'IDC_BROWSE_UNSURE': 1034, 'IDC_STATISTICS': 1095, 'IDPB_STATE_SEARCH': 40012, 'ID_MAKE_ATTACHMENT': 2019, 'IDC_BUT_LOAD_IMAGE': 2010, 'IDC_NAME_LIST': 2026, 'IDC_BUT_TRAIN_TO_SPAM_FOLDER': 1011, 'IDET_PARTNER_SEARCH_NAME': 2076, 'IDC_BUT_RESET': 1073, 'ID_SEARCH': 40004, 'IDET_PARTNER_CONTACT_NAME': 2046, 'IDPB_SELECT_STATE': 2102, 'IDC_ACTION_UNSURE': 1031, 'IDD_WIZARD_TRAIN': 121, 'IDC_STATIC_GROUP': 2024, 'IDPB_NEWPARTNER_BUTTON': 2071, 'ID_PARTNER_TEXT': 2079, 'IDD_WIZARD_FINISHED_TRAIN_LATER': 124, 'IDET_PARTNER_NAME': 2045, 'IDPB_NEW_PART_BUTTON': 2093, 'IDC_BUT_REBUILD': 1007, 'IDET_PARTNER_STREET2': 2054, 'IDPB_SEARCH_COUNTRY': 2098, 'ID_SAVE_PARTNER_BUTTON': 2035, 'IDPB_SELECT_PARTNER': 2075, 'ID_STREET_TEXT': 2062, '_APS_NEXT_COMMAND_VALUE': 40001, 'IDET_SEARCH_PARTNER': 2051, 'IDC_LIST_PARTNER': 2072, 'IDD_WEB_SERVER_PORT_DIALOG': 2088, 'ID_PORT': 2002, 'IDD_SERVER_PORT_DIALOG': 2022, 'IDET_PARTNER_STATE': 2062, 'IDPB_SELECT_COUNTRY': 2097, 'ID_SEARCH_TEXT': 40003, 'IDET_NC_PARTNER_COUNTRY': 2108, 'ID_CREATE_CONTACT': 2018, 'IDC_FORWARD_BTN': 1077, 'IDC_TRAINING_STATUS': 1035, 'IDD_WIZARD_WELCOME': 115, 'IDET_PARTNER_FAX': 2058, 'IDC_BUT_TRAIN': 1089, 'IDC_LIST': 2016, 'ID_CREATE_CASE': 2020, 'IDET_PARTNER_EMAIL': 2047, 'IDC_START': 1006, 'IDD_FILTER': 103, 'IDC_RELOAD': 2038, 'ID_PASSWORD': 2006, 'ID_NAME_TEXT': 2030, 'IDC_FILTER_STATUS': 1014, 'IDPB_NC_SEARCH_STATE1': 2107, 'ID_CONTACT_SAVE_BUTTON': 40009, 'IDOK': 1, 'IDC_BROWSE_CERTAIN': 1028, 'IDC_BUT_SHOW_DIAGNOSTICS': 1080, 'IDC_BUT_TRAIN_NOW': 1012, 'IDPB_NC_SEARCH_COUNTRY1': 2109}
+ names = {1024: 'IDC_EDIT_CERTAIN', 1: 'IDOK', 2: 'IDCANCEL', 1027: 'IDC_FOLDER_CERTAIN', 1028: 'IDC_BROWSE_CERTAIN', 1029: 'IDC_SLIDER_UNSURE', 1030: 'IDC_EDIT_UNSURE', 1031: 'IDC_ACTION_UNSURE', 1033: 'IDC_FOLDER_UNSURE', 1034: 'IDC_BROWSE_UNSURE', 1035: 'IDC_TRAINING_STATUS', 1036: 'IDC_FOLDER_NAMES', 1037: 'IDC_BROWSE', 1038: 'IDC_FOLDER_WATCH', 1039: 'IDC_BROWSE_WATCH', 1040: 'IDC_LIST_FOLDERS', 1041: 'IDC_BUT_SEARCHSUB', 1042: 'IDC_BUT_CLEARALL', 1043: 'IDC_STATUS1', 1044: 'IDC_STATUS2', 2069: 'ID_PARTNER_DROPLIST', 1046: 'IDC_BUT_NEW', 1047: 'IDC_MARK_SPAM_AS_READ', 1048: 'IDC_SAVE_SPAM_SCORE', 2052: 'IDPB_SEARCH_PARTNER', 1051: 'IDC_MARK_UNSURE_AS_READ', 2076: 'IDET_PARTNER_SEARCH_NAME', 2077: 'IDPB_PARTNER_SEARCH', 2078: 'IDPB_CREATE_NEW_PARTNER', 2053: 'IDET_PARTNER_STREET', 1056: 'IDC_DELAY1_SLIDER', 1057: 'IDC_DELAY1_TEXT', 1058: 'IDC_DELAY2_SLIDER', 1059: 'IDC_DELAY2_TEXT', 1060: 'IDC_INBOX_TIMER_ONLY', 1061: 'IDC_VERBOSE_LOG', 1062: 'IDB_OPENERPLOGO', 2047: 'IDET_PARTNER_EMAIL', 2088: 'IDD_WEB_SERVER_PORT_DIALOG', 2089: 'IDET_WEB_SERVER', 2090: 'IDET_WEB_PORT', 2091: 'ID_WEB_OK', 1068: 'IDC_TAB', 1069: 'IDC_BACK_BTN', 1070: 'IDC_BUT_WIZARD', 1071: 'IDC_SHOW_DATA_FOLDER', 1072: 'IDC_ABOUT_BTN', 1073: 'IDC_BUT_RESET', 1074: 'IDC_DEL_SPAM_RS', 1075: 'IDC_RECOVER_RS', 2100: 'IDET_STATE_SEARCH_NAME', 1077: 'IDC_FORWARD_BTN', 1078: 'IDC_PAGE_PLACEHOLDER', 2057: 'IDET_PARTNER_COUNTRY', 1080: 'IDC_BUT_SHOW_DIAGNOSTICS', 1081: 'IDC_BUT_PREPARATION', 2106: 'IDET_NC_PARTNER_STATE', 1083: 'IDC_FOLDER_HAM', 2108: 'IDET_NC_PARTNER_COUNTRY', 2058: 'IDET_PARTNER_FAX', 1088: 'IDC_BUT_UNTRAINED', 1089: 'IDC_BUT_TRAIN', 40002: 'IDD_SYNC', 1091: 'IDC_BUT_TIMER_ENABLED', 1025: 'IDC_ACTION_CERTAIN', 1093: 'IDC_BUT_VIEW_LOG', 1094: 'IDC_EDIT1', 1095: 'IDC_STATISTICS', 1096: '_APS_NEXT_CONTROL_VALUE', 2060: 'ID_ALL_STATE_DROPDOWNLIST', 40010: 'IDET_ZIP', 40011: 'IDET_PARTNER_CITY', 40012: 'IDPB_STATE_SEARCH', 2061: 'ID_ALL_COUNTRY_DROPDOWNLIST', 2062: 'IDET_PARTNER_STATE', 2063: 'IDET_PARTNER_COUNTRY', 2064: 'IDET_PARTNER', 101: 'IDD_MANAGER', 102: 'IDD_TRAINING', 103: 'IDD_FILTER', 104: 'IDD_FILTER_NOW', 105: 'IDD_FOLDER_SELECTOR', 106: 'IDD_ABOUT', 108: 'IDD_GENERAL', 2066: 'ID_FAX_TEXT', 111: 'IDD_FILTER_UNSURE', 113: 'IDD_DIAGNOSTIC', 114: 'IDD_WIZARD', 115: 'IDD_WIZARD_WELCOME', 116: 'IDD_WIZARD_FINISHED_UNTRAINED', 117: 'IDD_WIZARD_FOLDERS_REST', 118: 'IDD_WIZARD_FOLDERS_WATCH', 119: 'IDD_WIZARD_FINISHED_UNCONFIGURED', 120: 'IDD_WIZARD_FOLDERS_TRAIN', 121: 'IDD_WIZARD_TRAIN', 122: 'IDD_WIZARD_FINISHED_TRAINED', 123: 'IDD_WIZARD_TRAINING_IS_IMPORTANT', 124: 'IDD_WIZARD_FINISHED_TRAIN_LATER', 125: 'IDB_SBWIZLOGO', 127: 'IDB_FOLDERS', 2067: 'ID_PARTNER_CITY_TEXT', 2050: 'IDET_PARTNER_MOBILENO', 2070: 'ID_NEW_PART_BUTTON', 2071: 'IDPB_NEWPARTNER_BUTTON', 2072: 'IDC_LIST_PARTNER', 2073: 'IDD_SELECT_PARTNER', 2068: 'ID_ZIP_TEXT', 2051: 'IDET_SEARCH_PARTNER', 2075: 'IDPB_SELECT_PARTNER', 2079: 'ID_PARTNER_TEXT', 2080: 'IDET_WED_SERVER', 2081: 'IDET_WEB_PORT', 2082: 'ID_SET_WEB_CONNECTION', 2083: 'IDPB_WEB_CONNECTION', 2084: 'IDD_OPEN_PARTNER_DIALOG', 2085: 'IDET_PARTNER_LINK_TEXT', 40004: 'ID_SEARCH', 2086: 'IDEB_OPENDOC_LINK_TEXT', 2087: 'IDD_OPEN_DOCUEMNT_DIALOG', 2046: 'IDET_PARTNER_CONTACT_NAME', 2105: 'IDPB_SEARCH_COUNTRY1', 2054: 'IDET_PARTNER_STREET2', 128: '_APS_NEXT_RESOURCE_VALUE', 2092: 'IDPB_NEW_PARTNER_BUTTON', 2093: 'IDPB_NEW_PART_BUTTON', 2094: 'IDD_SELECT_COUNTRY', 2095: 'IDET_COUNTRY_SEARCH_NAME', 2096: 'IDC_LIST_COUNTRY', 2097: 'IDPB_SELECT_COUNTRY', 2098: 'IDPB_SEARCH_COUNTRY', 2099: 'IDD_SELECT_STATE', 2101: 'IDC_LIST_STATE', 2102: 'IDPB_SELECT_STATE', 2103: 'IDPB_SEARCH_STATE', 2104: 'IDPB_SEARCH_STATE1', 2040: 'ID_PROTOCOL_GRP', 2065: 'ID_COUNTRY_DROPLIST', 2048: 'IDET_PARTNER_OFFICENO', 2107: 'IDPB_NC_SEARCH_STATE1', 2109: 'IDPB_NC_SEARCH_COUNTRY1', 2024: 'IDC_STATIC_GROUP', 2041: 'IDR_XML_PROTOCOL', 2025: 'ID_ATT_METHOD_DROPDOWNLIST', 2026: 'IDC_NAME_LIST', 2027: 'IDD_ABOUT', 40001: '_APS_NEXT_COMMAND_VALUE', 2028: 'IDC_ABOUT', 2029: 'IDC_CONTACT_LIST', 2059: 'IDPB_WRITE_CHANGES', 2042: 'IDR_XMLS_PROTOCOL', 40003: 'ID_SEARCH_TEXT', 2030: 'ID_NAME_TEXT', 1092: 'IDC_WIZ_GRAPHIC', 2031: 'IDD_NEW_CONTACT_DIALOG', 40005: 'ID_CONTACT_NAME_TEXT', 2032: 'ID_PARTNER_DROPDOWNLIST', 40006: 'ID_CONTACT_OFFICE_TEXT', 2033: 'ID_NEW_PARTNER_BUTTON', 40007: 'ID_CONTACT_MOBILE_TEXT', 2034: 'IDD_NEW_PARTNER_DIALOG', 2043: 'IDR_NETRPC_PROTOCOL', 40008: 'ID_CONTACT_EMAIL_TEXT', 2035: 'ID_SAVE_PARTNER_BUTTON', 40009: 'ID_CONTACT_SAVE_BUTTON', 2036: 'ID_PARTNER_NAME_TEXT', 2037: 'IDC_NAME_LIST1', 2038: 'IDC_RELOAD', 2044: 'IDD_VIEW_PARTNER_DIALOG', 2001: 'ID_SERVER', 2002: 'ID_PORT', 2003: 'ID_SERVER_PORT', 2004: 'ID_DB_DROPDOWNLIST', 2005: 'ID_USERNAME', 2006: 'ID_PASSWORD', 2007: 'ID_BUT_TESTCONNECTION', 2008: 'ID_DONE', 2009: 'IDD_OBJECT_SETTINGS', 2010: 'IDC_BUT_LOAD_IMAGE', 2011: 'IDC_BUT_SAVE_OBJECT', 2012: 'IDC_BUT_DEL_OBJECT', 2013: 'IDC_OBJECT_TITLE', 2014: 'IDC_OBJECT_NAME', 2015: 'IDC_IMAGE_PATH', 2016: 'IDC_LIST', 2017: 'IDC_HEADER', 2018: 'ID_CREATE_CONTACT', 2019: 'ID_MAKE_ATTACHMENT', 2020: 'ID_CREATE_CASE', 2021: 'IDC_BUT_SET_SERVER_PORT', 2022: 'IDD_SERVER_PORT_DIALOG', 2023: 'IDC_CHKBX', 1000: 'IDC_PROGRESS', 1001: 'IDC_PROGRESS_TEXT', 1002: 'IDC_STATIC_HAM', 1003: 'IDC_STATIC_SPAM', 1004: 'IDC_BROWSE_HAM', 1005: 'IDC_BROWSE_SPAM', 1006: 'IDC_START', 1007: 'IDC_BUT_REBUILD', 1008: 'IDC_BUT_RESCORE', 1009: 'IDC_VERSION', 1010: 'IDC_BUT_TRAIN_FROM_SPAM_FOLDER', 1011: 'IDC_BUT_TRAIN_TO_SPAM_FOLDER', 1012: 'IDC_BUT_TRAIN_NOW', 1013: 'IDC_BUT_FILTER_ENABLE', 1014: 'IDC_FILTER_STATUS', 2045: 'IDET_PARTNER_NAME', 1016: 'IDC_BUT_FILTER_DEFINE', 1017: 'IDC_BUT_ABOUT', 1018: 'IDC_BUT_ACT_SCORE', 1019: 'IDC_BUT_ACT_ALL', 1020: 'IDC_BUT_UNREAD', 1021: 'IDC_BUT_UNSEEN', -1: 'IDC_STATIC', 1023: 'IDC_SLIDER_CERTAIN'}
bitmaps = {'IDB_OPENERPLOGO': 'OpenERP_Logo.bmp'}
def ParseDialogs(s):
return FakeParser()
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.rc b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.rc
index fb060ecdab3..4514d17b0eb 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.rc
+++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.rc
@@ -30,7 +30,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDD_MANAGER DIALOGEX 0, 0, 460, 260
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME
-CAPTION "OpenERP Configuarion"
+CAPTION "OpenERP Configuration"
FONT 8, "Tahoma", 1000, 0, 0x0
BEGIN
DEFPUSHBUTTON "Close",ID_DONE,400,239,50,14//,WS_VISIBLE //| WS_TABSTOP
@@ -57,6 +57,12 @@ BEGIN
LTEXT "Password : ",IDC_STATIC,30,90,100,17
EDITTEXT ID_PASSWORD,85,90,154,12,ES_AUTOHSCROLL | WS_VISIBLE | WS_TABSTOP | ES_PASSWORD
PUSHBUTTON "Connect",ID_BUT_TESTCONNECTION,179,110,60,13, WS_VISIBLE | WS_TABSTOP
+
+ GROUPBOX "WebServer Parameters",IDC_STATIC_GROUP, 270, 10,150,130
+ LTEXT "Server : ",IDC_STATIC, 280, 30, 50, 15
+ EDITTEXT IDET_WED_SERVER,310, 29, 90, 12,ES_AUTOHSCROLL | ES_READONLY
+ PUSHBUTTON "Change",ID_SET_WEB_CONNECTION, 295, 50, 50, 12 , WS_VISIBLE | WS_TABSTOP
+ PUSHBUTTON "Connect",IDPB_WEB_CONNECTION, 350, 50, 50, 12 , WS_VISIBLE | WS_TABSTOP
END
IDD_OBJECT_SETTINGS DIALOGEX 0, 0, 430, 210
@@ -131,7 +137,7 @@ BEGIN
PUSHBUTTON "Close",IDCANCEL,385,300,60,14,WS_TABSTOP
END
-IDD_NEW_CONTACT_DIALOG DIALOGEX 0, 0, 350, 150
+IDD_NEW_CONTACT_DIALOG DIALOGEX 0, 0, 350, 180
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Create a New Contact"
@@ -139,10 +145,11 @@ FONT 8, "Tahoma", 1000, 0, 0x0
BEGIN
LTEXT "Select Partner : ",IDC_STATIC,13,20,50,17
- EDITTEXT ID_PARTNER_TEXT, 70, 18, 200, 12 , ES_AUTOHSCROLL |ES_READONLY
- PUSHBUTTON "Search Partner",ID_NEW_PARTNER_BUTTON,280,17,60,14, WS_TABSTOP
+ EDITTEXT ID_PARTNER_TEXT, 70, 18, 150, 12 , ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search Partner",ID_NEW_PARTNER_BUTTON,225,17,60,14, WS_TABSTOP
+ PUSHBUTTON "New Partner",IDPB_NEW_PARTNER_BUTTON,290, 17, 50, 14, WS_TABSTOP
- GROUPBOX "Postal Address ", IDC_STATIC_GROUP,10,35,175,90
+ GROUPBOX "Postal Address ", IDC_STATIC_GROUP,10,35,175,123
LTEXT "Contact Name : ",IDC_STATIC, 18, 53, 100, 17
EDITTEXT ID_CONTACT_NAME_TEXT, 76, 52, 100, 12, ES_AUTOHSCROLL | WS_TABSTOP
LTEXT "Street : ",IDC_STATIC, 18, 67, 40, 17
@@ -153,9 +160,15 @@ BEGIN
EDITTEXT ID_ZIP_TEXT,76, 93, 100, 12,ES_AUTOHSCROLL | WS_TABSTOP
LTEXT "City : ",IDC_STATIC, 18,106, 50, 17
EDITTEXT ID_PARTNER_CITY_TEXT,76,107,100,12,ES_AUTOHSCROLL | WS_TABSTOP
+ LTEXT "Fed. State : ",IDC_STATIC,18,121,50,17
+ EDITTEXT IDET_NC_PARTNER_STATE, 76, 122, 54, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search", IDPB_NC_SEARCH_STATE1 ,135, 121, 40, 12, WS_TABSTOP
+ LTEXT "Country :",IDC_STATIC, 18, 134, 35, 17
+ EDITTEXT IDET_NC_PARTNER_COUNTRY, 76, 135, 54, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search", IDPB_NC_SEARCH_COUNTRY1, 135, 136, 40, 12, WS_TABSTOP
- GROUPBOX "Communication ", IDC_STATIC_GROUP, 188, 35, 150, 90
+ GROUPBOX "Communication ", IDC_STATIC_GROUP, 188, 35, 150, 123
LTEXT "Office : ",IDC_STATIC,194, 53, 30, 17
EDITTEXT ID_CONTACT_OFFICE_TEXT, 224, 52, 100, 12,ES_AUTOHSCROLL | WS_TABSTOP
LTEXT "Mobile : ",IDC_STATIC,194, 67, 30, 17
@@ -165,8 +178,8 @@ BEGIN
LTEXT "Email : ",IDC_STATIC, 194, 95, 30, 17
EDITTEXT ID_CONTACT_EMAIL_TEXT, 224, 94, 100, 12,ES_AUTOHSCROLL | WS_TABSTOP
- PUSHBUTTON "Cancel",IDCANCEL,290,130,45,14, WS_TABSTOP
- PUSHBUTTON "Save",ID_CONTACT_SAVE_BUTTON,240,130,45,14, WS_TABSTOP
+ PUSHBUTTON "Cancel",IDCANCEL,290,162,45,13, WS_TABSTOP
+ PUSHBUTTON "Save",ID_CONTACT_SAVE_BUTTON,240,162,45,13, WS_TABSTOP
END
IDD_NEW_PARTNER_DIALOG DIALOGEX 0, 0, 140,40
@@ -192,8 +205,9 @@ BEGIN
PUSHBUTTON "Search Contact ",IDPB_SEARCH_PARTNER,280,15,60,14,WS_TABSTOP
LTEXT "Partner Name : ",IDC_STATIC,13,42,50,17
- EDITTEXT IDET_PARTNER,70, 42, 200, 12,ES_AUTOHSCROLL |ES_READONLY
- PUSHBUTTON "Search Partner",ID_NEW_PART_BUTTON,280,41,60,14, WS_TABSTOP
+ EDITTEXT IDET_PARTNER,70, 42, 150, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search Partner",ID_NEW_PART_BUTTON,225,41,60,14, WS_TABSTOP
+ PUSHBUTTON "New Partner",IDPB_NEW_PART_BUTTON,290,41,50,14, WS_TABSTOP
GROUPBOX "Postal Address ", IDC_STATIC_GROUP,10,65,175,125
LTEXT "Contact Name : ",IDC_STATIC,18,83,50,17
@@ -206,10 +220,14 @@ BEGIN
EDITTEXT IDET_ZIP, 76, 125, 100, 12 , ES_AUTOHSCROLL | WS_TABSTOP
LTEXT "City : ",IDC_STATIC,18,140,50,17
EDITTEXT IDET_PARTNER_CITY,76,139,100,12,ES_AUTOHSCROLL | WS_TABSTOP
+
LTEXT "Fed. State : ",IDC_STATIC,18,154,50,17
- EDITTEXT IDET_PARTNER_STATE, 76, 153, 100, 12,ES_AUTOHSCROLL |ES_READONLY
+ EDITTEXT IDET_PARTNER_STATE, 76, 153, 54, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search", IDPB_SEARCH_STATE1 ,135, 153, 40, 12, WS_TABSTOP
+
LTEXT "Country :",IDC_STATIC, 18, 169, 35, 17
- EDITTEXT IDET_PARTNER_COUNTRY, 76, 168, 100, 12,ES_AUTOHSCROLL |ES_READONLY
+ EDITTEXT IDET_PARTNER_COUNTRY, 76, 168, 54, 12,ES_AUTOHSCROLL |ES_READONLY
+ PUSHBUTTON "Search", IDPB_SEARCH_COUNTRY1, 135, 168, 40, 12, WS_TABSTOP
GROUPBOX "Communication ", IDC_STATIC_GROUP, 188, 65, 152, 125
LTEXT "Phone : ",IDC_STATIC, 194, 83, 30, 17
@@ -240,7 +258,75 @@ BEGIN
CONTROL "List1",IDC_LIST_PARTNER,"SysListView32",WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL |
LVS_SHOWSELALWAYS | LVS_EX_GRIDLINES | LVS_REPORT | LVS_EX_FULLROWSELECT, 8,40,200,185
PUSHBUTTON "Create New Partner", IDPB_CREATE_NEW_PARTNER, 10, 230, 100, 14, WS_TABSTOP
- PUSHBUTTON "Select", IDPB_SELECT_PARTNER, 130, 230, 40, 14, WS_TABSTOP
- PUSHBUTTON "Cancel", IDCANCEL, 175, 230, 40, 14, WS_TABSTOP
+ PUSHBUTTON "Select", IDPB_SELECT_PARTNER, 170, 230, 40, 14, WS_TABSTOP
+END
+
+IDD_OPEN_PARTNER_DIALOG DIALOGEX 0, 0, 200,65
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "Open Partner"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+ LTEXT "Link to Partner : (If this link does not opens directly in web browser then copy an the link and paste in web browser.) ",IDC_STATIC,5,3,190,25
+ EDITTEXT IDET_PARTNER_LINK_TEXT,5,31,190,12,ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Ok",IDCANCEL,150,45,45,13,WS_TABSTOP
+
+END
+
+IDD_OPEN_DOCUEMNT_DIALOG DIALOGEX 0, 0, 200,65
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "Open Document"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+ LTEXT "Link to Document : (If this link does not opens directly in web browser then copy an the link and paste in web browser.) ",IDC_STATIC,5,3,190,25
+ EDITTEXT IDEB_OPENDOC_LINK_TEXT,5,31,190,12,ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Ok",IDCANCEL,150,45,45,14,WS_TABSTOP
+END
+
+IDD_WEB_SERVER_PORT_DIALOG DIALOGEX 0, 0, 160, 55
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "OpenERP Connection"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+ LTEXT "Server : ",IDC_STATIC,5,3,150,17
+ EDITTEXT IDET_WEB_SERVER,40,3,100,12,ES_AUTOHSCROLL | WS_TABSTOP
+ LTEXT "Port : ",IDC_STATIC,5,18,100,17
+ EDITTEXT IDET_WEB_PORT,40,18,100,12,ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Close",IDCANCEL,110,35,45,14,WS_TABSTOP
+ DEFPUSHBUTTON "OK",ID_WEB_OK,60,35,45,14,WS_TABSTOP
+END
+
+IDD_SELECT_COUNTRY DIALOGEX 0, 0, 220, 250
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "Search Country"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+
+ LTEXT "Enter Name : ",IDC_STATIC,8,12,80,17
+ EDITTEXT IDET_COUNTRY_SEARCH_NAME, 55, 10, 100, 12, ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Search", IDPB_SEARCH_COUNTRY, 160, 10, 50, 14, WS_TABSTOP
+
+ CONTROL "List1",IDC_LIST_COUNTRY,"SysListView32",WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL |
+ LVS_SHOWSELALWAYS | LVS_EX_GRIDLINES | LVS_REPORT | LVS_EX_FULLROWSELECT, 8,40,200,185
+ PUSHBUTTON "Select", IDPB_SELECT_COUNTRY, 170, 230, 40, 14, WS_TABSTOP
+END
+
+IDD_SELECT_STATE DIALOGEX 0, 0, 220, 250
+STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTEXTHELP
+CAPTION "Search Fed. State"
+FONT 8, "Tahoma", 400, 0, 0x0
+BEGIN
+
+ LTEXT "Enter Name : ",IDC_STATIC,8,12,80,17
+ EDITTEXT IDET_STATE_SEARCH_NAME, 55, 10, 100, 12, ES_AUTOHSCROLL | WS_TABSTOP
+ PUSHBUTTON "Search", IDPB_STATE_SEARCH, 160, 10, 50, 14, WS_TABSTOP
+
+ CONTROL "List1",IDC_LIST_STATE,"SysListView32",WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL |
+ LVS_SHOWSELALWAYS | LVS_EX_GRIDLINES | LVS_REPORT | LVS_EX_FULLROWSELECT, 8,40,200,185
+ PUSHBUTTON "Select", IDPB_SELECT_STATE, 170, 230, 40, 14, WS_TABSTOP
END
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/eml.py b/addons/outlook/plugin/openerp-outlook-plugin/eml.py
index e18b7c5414d..ded81a16c6d 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/eml.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/eml.py
@@ -26,7 +26,8 @@ import chilkat
import os
from manager import ustr
import win32ui
-email = chilkat.CkEmail()
+import email
+cemail = chilkat.CkEmail()
dt = chilkat.SYSTEMTIME()
def generateEML(mail):
sub = (mail.Subject).replace(' ','')
@@ -36,20 +37,21 @@ def generateEML(mail):
sender_name = mail.SenderEmailAddress
attachments=mail.Attachments
- email = chilkat.CkEmail()
- email.put_Subject (ustr(sub).encode('iso-8859-1'))
- email.put_Body (ustr(body).encode('utf-8'))
- email.put_FromAddress (ustr(sender_email).encode('iso-8859-1'))
- email.put_From (ustr(sender_email).encode('iso-8859-1'))
+ cemail = chilkat.CkEmail()
+ cemail.put_Subject (ustr(sub).encode('iso-8859-1'))
+ cemail.put_Body (ustr(body).encode('utf-8'))
+ cemail.put_FromAddress (ustr(sender_email).encode('iso-8859-1'))
+ cemail.put_From (ustr(sender_email).encode('iso-8859-1'))
for i in xrange(1, recipients.Count+1):
name = ustr(recipients.Item(i).Name).encode('iso-8859-1')
address = ustr(recipients.Item(i).Address).encode('iso-8859-1')
- email.AddTo(name,address)
+ cemail.AddTo(name,address)
eml_name= ustr(sub).encode('iso-8859-1')+'-'+str(mail.EntryID)[-9:]
ls = ['*', '/', '\\', '<', '>', ':', '?', '"', '|', '\t', '\n']
- mails_folder_path = os.path.abspath(os.path.dirname(__file__)+"\\dialogs\\resources\\mails\\")
+ #mails_folder_path = os.path.abspath("%temp%\\dialogs\\resources\\mails\\")
+ mails_folder_path = os.path.abspath("C:\\printing")
attachments_folder_path = mails_folder_path + "\\attachments\\"
if not os.path.exists(attachments_folder_path):
os.makedirs(attachments_folder_path)
@@ -70,7 +72,7 @@ def generateEML(mail):
os.remove(att_file)
f1 = att_file
attachments[i].SaveAsFile(att_file)
- contentType = email.addFileAttachment(att_file)
+ contentType = cemail.addFileAttachment(att_file)
if (contentType == None ):
print mail.lastErrorText()
sys.exit()
@@ -85,9 +87,11 @@ def generateEML(mail):
f = eml_name.split('-')
eml_name = f[0][0:l] + '.' + f[-1]
eml_path = ustr(os.path.join(mails_folder_path,eml_name+".eml")).encode('iso-8859-1')
- success = email.SaveEml(eml_path)
+ success = cemail.SaveEml(eml_path)
+ fp = open(eml_path, 'rb')
+ new_mail = email.message_from_file(fp)
+ fp.close()
if (success == False):
- print email.lastErrorText()
+ print cemail.lastErrorText()
sys.exit()
-
- return eml_path
\ No newline at end of file
+ return new_mail
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
index 45fdeaa5d82..af2c5afd35c 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
@@ -27,7 +27,9 @@ import pythoncom
import time
from manager import ustr
import email
-
+from win32com.mapi import mapi, mapiutil, mapitags
+import pythoncom
+import win32com
waittime = 10
wait_count = 0
wait_limit = 12
@@ -58,7 +60,8 @@ class XMLRpcConn(object):
_public_methods_ = ['GetDBList', 'login', 'GetAllObjects', 'GetObjList', 'InsertObj', 'DeleteObject', 'GetCSList', \
'ArchiveToOpenERP', 'IsCRMInstalled', 'GetPartners', 'GetObjectItems', \
'CreateCase', 'MakeAttachment', 'CreateContact', 'CreatePartner', 'getitem', 'setitem', \
- 'SearchPartnerDetail', 'WritePartnerValues', 'GetAllState', 'GetAllCountry' ]
+ 'SearchPartnerDetail', 'WritePartnerValues', 'GetAllState', 'GetAllCountry', 'SearchPartner', 'SearchEmailResources', \
+ 'GetCountry', 'GetStates', 'FindCountryForState']
_reg_clsctx_ = pythoncom.CLSCTX_INPROC_SERVER
_reg_clsid_ = "{C6399AFD-763A-400F-8191-7F9D0503CAE2}"
_reg_progid_ = "Python.OpenERP.XMLRpcConn"
@@ -135,24 +138,42 @@ class XMLRpcConn(object):
import win32ui, win32con
conn = xmlrpclib.ServerProxy(self._uri + '/xmlrpc/object')
import eml
+ flag = False
new_msg = files = ext_msg =""
- eml_path=eml.generateEML(mail)
- att_name = ustr(eml_path.split('\\')[-1])
- flag=False
- attachments=mail.Attachments
-
+ message_id = referances = None
try:
- fp = open(eml_path, 'rb')
- msg =fp.read()
- fp.close()
- new_mail = email.message_from_string(str(msg))
+ outlook = win32com.client.Dispatch("Outlook.Application")
+ session = win32com.client.Dispatch("MAPI.session")
+ session.Logon('Outlook')
+ objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
+ objFields = objMessage.Fields
+ strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
+ strheader = ustr(strheader).encode('iso-8859-1')
+ headers = {}
+ strheader = strheader.replace("\n ", " ").splitlines()
+ for line in strheader:
+ split_here = line.find(":")
+ headers[line[:split_here]] = line[split_here:]
+ temp1 = headers.get('Message-ID')
+ temp2 = headers.get('Message-Id')
+ referances = headers.get('References')
+ if temp1 == None: message_id = temp2
+ if temp2 == None: message_id = temp1
+ startCut = message_id.find("<")
+ endCut = message_id.find(">")
+ message_id = message_id[startCut:endCut+1]
+ if not referances == None:
+ startCut = referances.find("<")
+ endCut = referances.find(">")
+ referances = referances[startCut:endCut+1]
except Exception,e:
- win32ui.MessageBox(str(e),"Reading Error Mail")
-
+ win32ui.MessageBox(str(e),"Archive To OpenERP")
+ return
+ new_mail=eml.generateEML(mail)
+ attachments=mail.Attachments
for rec in recs: #[('res.partner', 3, 'Agrolait')]
model = rec[0]
res_id = rec[1]
-
#Check if mailgate installed
object_id = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=','mailgate.message')])
if not object_id:
@@ -164,13 +185,12 @@ class XMLRpcConn(object):
#Reading the Object ir.model Name
- ext_ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'mailgate.message','search',[('message_id','=',mail.EntryID),('model','=',model),('res_id','=',res_id)])
+ ext_ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'mailgate.message','search',[('message_id','=',message_id),('model','=',model),('res_id','=',res_id)])
if ext_ids:
name = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,model,'read',res_id,['name'])['name']
- ext_msg += """This mail is already archived to {1} '{2}'.
-""".format(object_name,name)
+ ext_msg += """This mail is already archived to {0} '{1}'.\n""".format(object_name,name)
+ flag = True
continue
-
msg = {
'subject':mail.Subject,
'date':str(mail.ReceivedTime),
@@ -178,22 +198,20 @@ class XMLRpcConn(object):
'cc':mail.CC,
'from':mail.SenderEmailAddress,
'to':mail.To,
- 'message-id':str(new_mail.get('Message-Id')),
- 'references':str(new_mail.get('References')),
+ 'message-id':message_id,
+ 'references':ustr(referances),
}
result = {}
if attachments:
result = self.MakeAttachment([rec], mail)
-
attachment_ids = result.get(model, {}).get(res_id, [])
ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','history',model, res_id, msg, attachment_ids)
-
new_msg += """- {0} : {1}\n""".format(object_name,str(rec[2]))
flag = True
if flag:
- t = ext_msg
- t += """Mail archived Successfully with attachments.\n"""+new_msg
+ t = """Mail archived Successfully with attachments.\n"""+ext_msg
+ t += "\n"+new_msg
win32ui.MessageBox(t,"Archived to OpenERP",win32con.MB_ICONINFORMATION)
return flag
@@ -250,27 +268,50 @@ class XMLRpcConn(object):
return res
def CreateCase(self, section, mail, partner_ids, with_attachments=True):
- res={}
import win32ui
import eml
- section=str(section)
- partner_ids=eval(str(partner_ids))
- conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ flag = False
+ id = -1
try:
- eml_path=eml.generateEML(mail)
- fp = open(eml_path, 'rb')
- msg =fp.read()
- fp.close()
- new_mail = email.message_from_string(str(msg))
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ email=eml.generateEML(mail)
+ message_id = referances = None
+ outlook = win32com.client.Dispatch("Outlook.Application")
+ session = win32com.client.Dispatch("MAPI.session")
+ session.Logon('Outlook')
+ objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
+ objFields = objMessage.Fields
+ strheader = objFields.Item(mapitags.PR_TRANSPORT_MESSAGE_HEADERS)
+ strheader = ustr(strheader).encode('iso-8859-1')
+ headers = {}
+ strheader = strheader.replace("\n ", " ").splitlines()
+ for line in strheader:
+ split_here = line.find(":")
+ headers[line[:split_here]] = line[split_here:]
+ temp1 = headers.get('Message-ID')
+ temp2 = headers.get('Message-Id')
+ if temp1 == None: message_id = temp2
+ if temp2 == None: message_id = temp1
+ startCut = message_id.find("<")
+ endCut = message_id.find(">")
+ message_id = message_id[startCut:endCut+1]
+ email.replace_header('Message-Id',message_id)
+ id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','process_email',section, str(email))
+ if id > 0:
+ flag = True
+ return flag
+ else:
+ flag = False
+ return flag
except Exception,e:
- win32ui.MessageBox(str(e),"Mail Reading Error")
- execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','process_email',section, str(new_mail))
+ win32ui.MessageBox("Create Case\n"+str(e),"Mail Reading Error")
+ return flag
def MakeAttachment(self, recs, mail):
attachments = mail.Attachments
result = {}
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- att_folder_path = os.path.abspath(os.path.dirname(__file__)+"\\dialogs\\resources\\mails\\attachments\\")
+ att_folder_path = os.path.abspath(os.path.dirname("%temp%\\"))
if not os.path.exists(att_folder_path):
os.makedirs(att_folder_path)
for rec in recs: #[('res.partner', 3, 'Agrolait')]
@@ -303,12 +344,19 @@ class XMLRpcConn(object):
return result
def CreateContact(self, res=None):
- import win32ui
res=eval(str(res))
partner = res['partner_id']
+ state = res['state_id']
+ country = res['country_id']
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
res.update({'partner_id' : partner_id[0]})
+ if not state == "":
+ country_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [('name','=',ustr(country))])
+ res.update({'country_id' : country_id[0]})
+ if not country == "":
+ state_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [('name','=',ustr(state))])
+ res.update({'state_id' : state_id[0]})
id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.partner.address','create',res)
return id
@@ -340,10 +388,14 @@ class XMLRpcConn(object):
new_dict = dict(new_vals)
email=new_dict['email']
partner = new_dict['partner']
+ country_val = new_dict['country']
+ state_val = new_dict['state']
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
+ country_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country', 'search', [('name','=',ustr(country_val))])
+ state_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country.state', 'search', [('name','=',ustr(state_val))])
address_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','=',ustr(email))])
- if not address_id:
+ if not partner_id or not address_id or not country_id or not state_id:
return flag
address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address','read',address_id[0],['id','partner_id','state_id','country_id'])
vals_res_address={
@@ -356,6 +408,8 @@ class XMLRpcConn(object):
'mobile' : new_dict['mobile'],
'fax' : new_dict['fax'],
'zip' : new_dict['zip'],
+ 'country_id' : country_id[0],
+ 'state_id' : state_id[0]
}
temp = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'write', address_id, vals_res_address)
if temp:
@@ -385,3 +439,69 @@ class XMLRpcConn(object):
obj = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.country','read', [country_id], ['id','name'])[0]
country_list.append((obj['id'], ustr(obj['name'])))
return country_list
+
+ def SearchPartner(self, partner = ""):
+ import win32ui
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ partner_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner', 'search', [('name','=',ustr(partner))])
+ if not partner_id:
+ return None
+ return partner_id[0]
+
+ def SearchEmailResources(self, message_id):
+ import win32ui
+ import eml
+
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ sub = ""
+ res_vals = []
+ mail_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'mailgate.message', 'search', [('message_id','=',message_id)])
+ if not mail_id:
+ return None
+ address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'mailgate.message','read',mail_id[0],['model','res_id'])
+ for key, vals in address.items():
+ res_vals.append([key,vals])
+ return res_vals
+
+
+ def GetCountry(self, country_search=''):
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids=[]
+ obj_list=[]
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','search',[('name','ilike',ustr(country_search))])
+ if ids:
+ ids.sort()
+ for id in ids:
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','read',[id],['id','name'])[0]
+ obj_list.append((object['id'], ustr(object['name'])))
+ obj_list.sort(lambda x, y: cmp(x[1],y[1]))
+ return obj_list
+
+ def GetStates(self, state_search='', country=None):
+ import win32ui
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids = []
+ c_id = []
+ obj_list = []
+ if country == None:
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',[('name','ilike',ustr(state_search))])
+ if not country == None:
+ c_id = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country','search',[('name','=',ustr(country))])
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',[('name','ilike',ustr(state_search)),('country_id','=',c_id[0])])
+ if ids:
+ ids.sort()
+ for id in ids:
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','read',[id],['id','name'])[0]
+ obj_list.append((object['id'], ustr(object['name'])))
+ obj_list.sort(lambda x, y: cmp(x[1],y[1]))
+ return obj_list
+ def FindCountryForState(self, state_search=''):
+ import win32ui
+ res_vals = []
+ conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
+ ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',[('name','=',ustr(state_search))])
+ if not ids:
+ return None
+ object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','read',ids)[0]
+ country = object['country_id'][1]
+ return country
diff --git a/addons/partner_geo_assign/i18n/de.po b/addons/partner_geo_assign/i18n/de.po
new file mode 100644
index 00000000000..86d223a36ba
--- /dev/null
+++ b/addons/partner_geo_assign/i18n/de.po
@@ -0,0 +1,117 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 08:40+0000\n"
+"PO-Revision-Date: 2010-10-05 13:33+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: partner_geo_assign
+#: code:addons/partner_geo_assign/partner_geo_assign.py:0
+#, python-format
+msgid "Network error"
+msgstr ""
+
+#. module: partner_geo_assign
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: partner_geo_assign
+#: help:res.partner,partner_weight:0
+msgid ""
+"Gives the probability to assign a lead to this partner. (0 means no "
+"assignation.)"
+msgstr ""
+
+#. module: partner_geo_assign
+#: model:ir.module.module,description:partner_geo_assign.module_meta_information
+msgid ""
+"\n"
+"This is the module used by OpenERP SA to redirect customers to his "
+"partners,\n"
+"based on geolocalization.\n"
+" "
+msgstr ""
+
+#. module: partner_geo_assign
+#: field:res.partner,partner_weight:0
+msgid "Weight"
+msgstr ""
+
+#. module: partner_geo_assign
+#: model:ir.module.module,shortdesc:partner_geo_assign.module_meta_information
+msgid "Partner Geo-Localisation"
+msgstr ""
+
+#. module: partner_geo_assign
+#: view:res.partner:0
+msgid "Geo Localization"
+msgstr ""
+
+#. module: partner_geo_assign
+#: code:addons/partner_geo_assign/partner_geo_assign.py:0
+#, python-format
+msgid ""
+"Could not contact geolocation servers, please make sure you have a working "
+"internet connection (%s)"
+msgstr ""
+
+#. module: partner_geo_assign
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: partner_geo_assign
+#: field:res.partner,date_localization:0
+msgid "Geo Localization Date"
+msgstr ""
+
+#. module: partner_geo_assign
+#: view:crm.lead:0
+msgid "Geo Assign"
+msgstr ""
+
+#. module: partner_geo_assign
+#: field:crm.lead,partner_latitude:0
+#: field:res.partner,partner_latitude:0
+msgid "Geo Latitude"
+msgstr ""
+
+#. module: partner_geo_assign
+#: model:ir.model,name:partner_geo_assign.model_crm_lead
+msgid "crm.lead"
+msgstr ""
+
+#. module: partner_geo_assign
+#: model:ir.model,name:partner_geo_assign.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: partner_geo_assign
+#: view:crm.lead:0
+msgid "Geo Assignation"
+msgstr ""
+
+#. module: partner_geo_assign
+#: view:res.partner:0
+msgid "Geo Localize"
+msgstr ""
+
+#. module: partner_geo_assign
+#: field:crm.lead,partner_longitude:0
+#: field:res.partner,partner_longitude:0
+msgid "Geo Longitude"
+msgstr ""
diff --git a/addons/point_of_sale/__openerp__.py b/addons/point_of_sale/__openerp__.py
index ad466b12522..1c23a27acd1 100644
--- a/addons/point_of_sale/__openerp__.py
+++ b/addons/point_of_sale/__openerp__.py
@@ -67,12 +67,11 @@ Main features :
'report/report_pos_order_view.xml',
'report/report_cash_register_view.xml',
'pos_sequence.xml',
- 'pos_data.xml',
'pos_workflow.xml',
'statement_view.xml',
'statement_report.xml',
],
- 'demo_xml': ['pos_demo.xml','singer_statement_demo.xml','multi_company_stock_data.xml',],
+ 'demo_xml': ['pos_demo.xml','singer_statement_demo.xml'],
'test':['test/pos_test.yml',
'test/pos_report.yml',
],
diff --git a/addons/point_of_sale/i18n/sr.po b/addons/point_of_sale/i18n/sr.po
index 420adea0d1a..98c46039a41 100644
--- a/addons/point_of_sale/i18n/sr.po
+++ b/addons/point_of_sale/i18n/sr.po
@@ -8,226 +8,226 @@ 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-12-28 10:48+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2010-10-11 21:13+0000\n"
+"Last-Translator: zmmaj \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 04:56+0000\n"
+"X-Launchpad-Export-Date: 2010-10-12 04:51+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Total paid"
-msgstr ""
+msgstr "Ukupno placanje"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Qty of product"
-msgstr ""
+msgstr "Kol.proizvoda"
#. module: point_of_sale
#: view:pos.order:0
msgid "Set to draft"
-msgstr ""
+msgstr "Postavi za obradu"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_transaction_pos
msgid "transaction for the pos"
-msgstr ""
+msgstr "Transakcija POS-a"
#. module: point_of_sale
#: wizard_view:pos.discount,init:0
#: rml:pos.receipt:0
msgid "Discount :"
-msgstr ""
+msgstr "Popust :"
#. module: point_of_sale
#: wizard_field:pos.payment,ask_pay,payment_nb:0
msgid "Piece number"
-msgstr ""
+msgstr "Br.Komada"
#. module: point_of_sale
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Pogrešno ime modela u definiciji akcije."
#. module: point_of_sale
#: field:pos.order,name:0
msgid "Order Description"
-msgstr ""
+msgstr "Opis Narudzbe"
#. module: point_of_sale
#: model:ir.actions.wizard,name:point_of_sale.pos_scan_product
msgid "Scan Product"
-msgstr ""
+msgstr "Skeniraj Proizvod"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Document"
-msgstr ""
+msgstr "Dokument"
#. module: point_of_sale
#: wizard_view:pos.add_product,init:0
msgid "Add product :"
-msgstr ""
+msgstr "Dodaj proizvod :"
#. module: point_of_sale
#: rml:pos.lines:0
msgid "Net Total"
-msgstr ""
+msgstr "Neto Ukupno"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_action_pos_order_tree2
msgid "Orders of the day"
-msgstr ""
+msgstr "Dnevne narudzbe"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_details_summary
msgid "Sales (summary)"
-msgstr ""
+msgstr "Prodaja(sumarno)"
#. module: point_of_sale
#: help:pos.order,user_id:0
msgid "This is the logged in user (not necessarily the salesman)."
-msgstr ""
+msgstr "Ovo je prijavljeni korisnik( ne nuzno prodavac)"
#. module: point_of_sale
#: wizard_view:pos.sale.get,init:0
msgid "Select an Open Sale Order"
-msgstr ""
+msgstr "Novi Nalog Prodaje"
#. module: point_of_sale
#: rml:pos.lines:0
msgid "Company"
-msgstr ""
+msgstr "Preduzeće"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Invoice Date"
-msgstr ""
+msgstr "Datum Fakture"
#. module: point_of_sale
#: rml:pos.receipt:0
msgid ","
-msgstr ""
+msgstr ","
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_detail
msgid "Details of Sales"
-msgstr ""
+msgstr "Detalji Prodaje"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Base"
-msgstr ""
+msgstr "Osnova"
#. module: point_of_sale
#: wizard_view:pos.scan_product,init:0
msgid "Scan product"
-msgstr ""
+msgstr "Skeniraj proizvod"
#. module: point_of_sale
#: field:pos.order.line,price_subtotal:0
msgid "Subtotal"
-msgstr ""
+msgstr "Међурезултат"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Partner Ref."
-msgstr ""
+msgstr "Vezani partner"
#. module: point_of_sale
#: rml:pos.receipt:0
msgid "Tel : + 32 (0) 2 231 04 35"
-msgstr ""
+msgstr "Tel : + 32 (0) 2 231 04 35"
#. module: point_of_sale
#: field:pos.order.line,name:0
msgid "Line Description"
-msgstr ""
+msgstr "Opis linije"
#. module: point_of_sale
#: field:pos.order,shop_id:0
msgid "Shop"
-msgstr ""
+msgstr "Prodavnica"
#. module: point_of_sale
#: wizard_button:pos.refund_order,init,refund_n_quit:0
msgid "Ok"
-msgstr ""
+msgstr "U redu"
#. module: point_of_sale
#: view:pos.order:0
#: field:pos.order,note:0
msgid "Notes"
-msgstr ""
+msgstr "Napomene"
#. module: point_of_sale
#: field:stock.picking,pos_order:0
msgid "Pos order"
-msgstr ""
+msgstr "Pos narudzba"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Detail of Sales"
-msgstr ""
+msgstr "Detalji Prodaje"
#. module: point_of_sale
#: rml:pos.invoice:0
#: rml:pos.lines:0
#: field:pos.order,amount_tax:0
msgid "Taxes"
-msgstr ""
+msgstr "Porezi"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_day
msgid "Sale line"
-msgstr ""
+msgstr "Linija prodaje"
#. module: point_of_sale
#: rml:pos.lines:0
msgid "No. Of Articles"
-msgstr ""
+msgstr "Br.Artikala"
#. module: point_of_sale
#: field:pos.config.journal,code:0
#: rml:pos.details:0
msgid "Code"
-msgstr ""
+msgstr "Kod"
#. module: point_of_sale
#: field:pos.order,date_validity:0
#: wizard_field:pos.refund_order,init,date_validity:0
msgid "Validity Date"
-msgstr ""
+msgstr "Rok Vazenja"
#. module: point_of_sale
#: view:pos.order:0
#: field:pos.order,pickings:0
msgid "Picking"
-msgstr ""
+msgstr "Biranje"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.lines:0
msgid "VAT"
-msgstr ""
+msgstr "PDV"
#. module: point_of_sale
#: model:ir.actions.wizard,name:point_of_sale.pos_refund
msgid "Refund Orders"
-msgstr ""
+msgstr "Refundiraj narudzbe"
#. module: point_of_sale
#: field:pos.order,last_out_picking:0
msgid "Last Output Picking"
-msgstr ""
+msgstr "Izlaz zadnjeg biranja"
#. module: point_of_sale
#: wizard_view:pos.config.journal,init:0
@@ -238,48 +238,48 @@ msgstr ""
#: rml:pos.details:0
#: rml:pos.receipt:0
msgid "Qty"
-msgstr ""
+msgstr "Kol."
#. module: point_of_sale
#: field:pos.order,user_id:0
msgid "Logged in User"
-msgstr ""
+msgstr "Logovani korisnik"
#. module: point_of_sale
#: rml:pos.details:0
msgid "VAT(%)"
-msgstr ""
+msgstr "PDV(%)"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Tax"
-msgstr ""
+msgstr "Porez"
#. module: point_of_sale
#: view:report.transaction.pos:0
msgid "Total Transaction"
-msgstr ""
+msgstr "Ukupna Transakcija"
#. module: point_of_sale
#: rml:pos.details:0
msgid "Disc"
-msgstr ""
+msgstr "Disk"
#. module: point_of_sale
#: rml:pos.invoice:0
#: rml:pos.receipt:0
msgid "Fax :"
-msgstr ""
+msgstr "Faks:"
#. module: point_of_sale
#: wizard_view:pos.scan_product,init:0
msgid "Scan Barcode"
-msgstr ""
+msgstr "Skeniraj Bar-Kod"
#. module: point_of_sale
#: field:pos.order,partner_id:0
msgid "Partner"
-msgstr ""
+msgstr "Partner"
#. module: point_of_sale
#: field:pos.order,payments:0
@@ -289,94 +289,94 @@ msgstr ""
#. module: point_of_sale
#: rml:pos.receipt:0
msgid "Date :"
-msgstr ""
+msgstr "Datum :"
#. module: point_of_sale
#: view:pos.order:0
msgid "Ma_ke Payment"
-msgstr ""
+msgstr "Izvrsi Uplatu"
#. module: point_of_sale
#: model:ir.actions.wizard,name:point_of_sale.pos_confirm
#: wizard_button:pos.sale.get,init,set:0
msgid "Confirm"
-msgstr ""
+msgstr "Potvrdi"
#. module: point_of_sale
#: view:pos.order:0
msgid "POS Orders"
-msgstr ""
+msgstr "POS Narudzbe"
#. module: point_of_sale
#: rml:pos.lines:0
msgid "Disc. (%)"
-msgstr ""
+msgstr "Popust (%)"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Sales total"
-msgstr ""
+msgstr "Prodaja Ukupno"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Supplier Invoice"
-msgstr ""
+msgstr "Račun dobavljača"
#. module: point_of_sale
#: field:pos.order,state:0
msgid "State"
-msgstr ""
+msgstr "Stanje"
#. module: point_of_sale
#: view:pos.order.line:0
msgid "Sum of subtotals"
-msgstr ""
+msgstr "Suma Medjuzbirova"
#. module: point_of_sale
#: wizard_field:pos.payment,ask_pay,payment_date:0
msgid "Payment date"
-msgstr ""
+msgstr "Datum Isplate"
#. module: point_of_sale
#: wizard_field:pos.payment,ask_pay,payment_name:0
msgid "Payment name"
-msgstr ""
+msgstr "Naziv Isplate"
#. module: point_of_sale
#: field:pos.order,lines:0
msgid "Order Lines"
-msgstr ""
+msgstr "Stavke naloga"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Disc.(%)"
-msgstr ""
+msgstr "Popust(%)"
#. module: point_of_sale
#: model:ir.module.module,shortdesc:point_of_sale.module_meta_information
msgid "Point Of Sale"
-msgstr ""
+msgstr "Mesto Prodaje"
#. module: point_of_sale
#: field:pos.order.line,create_date:0
msgid "Creation Date"
-msgstr ""
+msgstr "Datum kreiranja"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "PRO-FORMA"
-msgstr ""
+msgstr "PRO-FORMA"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_point_rep
msgid "Reporting"
-msgstr ""
+msgstr "Izveštavanje"
#. module: point_of_sale
#: view:report.transaction.pos:0
msgid "POS "
-msgstr ""
+msgstr "POS "
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_config_journal
@@ -386,7 +386,7 @@ msgstr ""
#. module: point_of_sale
#: rml:pos.receipt:0
msgid "Total :"
-msgstr ""
+msgstr "Ukupno:"
#. module: point_of_sale
#: wizard_field:pos.config.journal,init,default_journal:0
@@ -406,19 +406,19 @@ msgstr ""
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_point_config
msgid "Configuration"
-msgstr ""
+msgstr "Podešavanje"
#. module: point_of_sale
#: rml:pos.invoice:0
#: rml:pos.lines:0
#: field:pos.order.line,price_unit:0
msgid "Unit Price"
-msgstr ""
+msgstr "Cena komada"
#. module: point_of_sale
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
-msgstr ""
+msgstr "Nevažeći XML za pregled arhitekture"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_action_pos_order_line_day
@@ -428,7 +428,7 @@ msgstr ""
#. module: point_of_sale
#: field:pos.order,nb_print:0
msgid "Number of Print"
-msgstr ""
+msgstr "Br. za Stampu"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_wizard_default_journal
@@ -438,12 +438,12 @@ msgstr ""
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Draft Invoice"
-msgstr ""
+msgstr "Nacrti računa"
#. module: point_of_sale
#: field:pos.order.line,discount:0
msgid "Discount (%)"
-msgstr ""
+msgstr "Popust (%)"
#. module: point_of_sale
#: rml:pos.invoice:0
@@ -453,12 +453,12 @@ msgstr ""
#. module: point_of_sale
#: model:ir.actions.wizard,name:point_of_sale.pos_add_product
msgid "Add products"
-msgstr ""
+msgstr "Dodaj proizvod"
#. module: point_of_sale
#: view:pos.order.line:0
msgid "Total qty"
-msgstr ""
+msgstr "Ukupna kol."
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_action_pos_order_line
@@ -483,18 +483,18 @@ msgstr ""
#: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale
#: model:ir.ui.menu,name:point_of_sale.menu_point_root
msgid "Point of Sale"
-msgstr ""
+msgstr "Mesto Prodaje"
#. module: point_of_sale
#: field:pos.order,salesman_id:0
msgid "Salesman"
-msgstr ""
+msgstr "Prodavac"
#. module: point_of_sale
#: rml:pos.details:0
#: selection:pos.order,state:0
msgid "Invoiced"
-msgstr ""
+msgstr "Fakturisani"
#. module: point_of_sale
#: wizard_field:pos.config.journal,init,default_journal_rebate:0
@@ -510,27 +510,27 @@ msgstr ""
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Total of the day"
-msgstr ""
+msgstr "Dnevni pazar"
#. module: point_of_sale
#: wizard_button:pos.scan_product,init,add:0
msgid "Add"
-msgstr ""
+msgstr "Dodaj"
#. module: point_of_sale
#: selection:pos.order,state:0
msgid "Draft"
-msgstr ""
+msgstr "Priprema"
#. module: point_of_sale
#: selection:pos.order,state:0
msgid "Paid"
-msgstr ""
+msgstr "Plaćeni"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "VAT :"
-msgstr ""
+msgstr "PDV :"
#. module: point_of_sale
#: view:pos.order.line:0
@@ -540,24 +540,24 @@ msgstr ""
#. module: point_of_sale
#: rml:pos.receipt:0
msgid "E-mail :"
-msgstr ""
+msgstr "E-mail :"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Total invoiced"
-msgstr ""
+msgstr "Ukupno fakturisano"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_trans_pos_tree_today
msgid "Sales of the day"
-msgstr ""
+msgstr "Dnevni promet"
#. module: point_of_sale
#: field:pos.order,amount_paid:0
#: field:pos.order,amount_return:0
msgid "unknown"
-msgstr ""
+msgstr "nepoznato"
#. module: point_of_sale
#: view:pos.order.line:0
@@ -567,28 +567,28 @@ msgstr ""
#. module: point_of_sale
#: model:ir.actions.wizard,name:point_of_sale.pos_discount
msgid "Discount"
-msgstr ""
+msgstr "Popust"
#. module: point_of_sale
#: field:report.transaction.pos,user_id:0
msgid "User"
-msgstr ""
+msgstr "Корисник"
#. module: point_of_sale
#: field:pos.payment,payment_date:0
msgid "Payment Date"
-msgstr ""
+msgstr "Datum Isplate"
#. module: point_of_sale
#: field:pos.payment,payment_name:0
msgid "Payment Name"
-msgstr ""
+msgstr "Naziv Isplate"
#. module: point_of_sale
#: rml:pos.details:0
#: field:report.transaction.pos,date_create:0
msgid "Date"
-msgstr ""
+msgstr "Datum"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree
@@ -601,44 +601,44 @@ msgstr ""
#: wizard_button:pos.add_product,init,add:0
#: view:pos.order:0
msgid "_Add product"
-msgstr ""
+msgstr "_Dodaj proizvod"
#. module: point_of_sale
#: rml:pos.receipt:0
msgid ":"
-msgstr ""
+msgstr ":"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Period:"
-msgstr ""
+msgstr "Period:"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_trans_pos_tree
msgid "All the sales"
-msgstr ""
+msgstr "Sve Prodaje"
#. module: point_of_sale
#: view:pos.order:0
msgid "Compute"
-msgstr ""
+msgstr "Izracunaj"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Total:"
-msgstr ""
+msgstr "Ukupno:"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Summary"
-msgstr ""
+msgstr "Sumarno"
#. module: point_of_sale
#: view:pos.order:0
msgid "Create _Invoice"
-msgstr ""
+msgstr "Kreiraj_Fakturu"
#. module: point_of_sale
#: wizard_field:pos.add_product,init,quantity:0
@@ -646,68 +646,68 @@ msgstr ""
#: rml:pos.lines:0
#: field:pos.order.line,qty:0
msgid "Quantity"
-msgstr ""
+msgstr "Količina"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Refund"
-msgstr ""
+msgstr "Refundiraj"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Mode of payment"
-msgstr ""
+msgstr "Nacin placanja"
#. module: point_of_sale
#: wizard_button:pos.payment,ask_pay,add_pay:0
msgid "Ma_ke payment"
-msgstr ""
+msgstr "Izvrsi Isplatu"
#. module: point_of_sale
#: wizard_button:pos.discount,init,apply_discount:0
msgid "Apply Discount"
-msgstr ""
+msgstr "Prihvati Popust"
#. module: point_of_sale
#: field:pos.order,pricelist_id:0
msgid "Pricelist"
-msgstr ""
+msgstr "Cenovnik"
#. module: point_of_sale
#: wizard_field:pos.discount,init,discount:0
msgid "Discount percentage"
-msgstr ""
+msgstr "Procenat popusta"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_receipt
msgid "Receipt"
-msgstr ""
+msgstr "Racun"
#. module: point_of_sale
#: wizard_view:pos.refund_order,init:0
msgid "Refund order :"
-msgstr ""
+msgstr "Redosled refundiranja:"
#. module: point_of_sale
#: field:report.transaction.pos,no_trans:0
msgid "Number of Transaction"
-msgstr ""
+msgstr "Broj Transakcija"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Net Total:"
-msgstr ""
+msgstr "Neto Ukupno"
#. module: point_of_sale
#: view:pos.order:0
msgid "Other"
-msgstr ""
+msgstr "Drugo"
#. module: point_of_sale
#: selection:pos.order,state:0
msgid "Done"
-msgstr ""
+msgstr "Gotovo"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_invoice_report
@@ -716,7 +716,7 @@ msgstr ""
#: wizard_field:pos.payment,ask_pay,invoice_wanted:0
#: field:report.transaction.pos,invoice_id:0
msgid "Invoice"
-msgstr ""
+msgstr "Račun"
#. module: point_of_sale
#: wizard_button:pos.add_product,init,end:0
@@ -729,12 +729,12 @@ msgstr ""
#: wizard_button:pos.sale.get,init,end:0
#: wizard_button:pos.scan_product,init,end:0
msgid "Cancel"
-msgstr ""
+msgstr "Otkaži"
#. module: point_of_sale
#: view:pos.order:0
msgid "Close"
-msgstr ""
+msgstr "Zatvori"
#. module: point_of_sale
#: view:pos.order:0
@@ -750,34 +750,35 @@ msgstr ""
#. module: point_of_sale
#: wizard_view:pos.payment,ask_pay:0
msgid "Add payment :"
-msgstr ""
+msgstr "Dodaj Placanje :"
#. module: point_of_sale
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"Ime objekta mora da počne sa x_ i ne sme da sadrži specijalne karaktere !"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_payment
msgid "Pos Payment"
-msgstr ""
+msgstr "POS Isplate"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Total discount"
-msgstr ""
+msgstr "Popust Ukupno"
#. module: point_of_sale
#: field:pos.order,invoice_wanted:0
msgid "Create Invoice"
-msgstr ""
+msgstr "Kreiranje računa"
#. module: point_of_sale
#: wizard_view:pos.refund_order,init:0
msgid "Refund "
-msgstr ""
+msgstr "Refunidraj "
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_order_line
@@ -787,25 +788,25 @@ msgstr ""
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Taxes:"
-msgstr ""
+msgstr "Porezi:"
#. module: point_of_sale
#: view:pos.order:0
#: view:report.transaction.pos:0
msgid "Amount total"
-msgstr ""
+msgstr "Ukupan Iznos"
#. module: point_of_sale
#: wizard_field:pos.add_product,init,product:0
#: rml:pos.details:0
#: field:pos.order.line,product_id:0
msgid "Product"
-msgstr ""
+msgstr "Proizvod"
#. module: point_of_sale
#: view:pos.order:0
msgid "Invoicing"
-msgstr ""
+msgstr "Fakturisanje"
#. module: point_of_sale
#: field:pos.config.journal,journal_id:0
@@ -814,22 +815,22 @@ msgstr ""
#: field:pos.payment,journal_id:0
#: field:report.transaction.pos,journal_id:0
msgid "Journal"
-msgstr ""
+msgstr "Dnevnik"
#. module: point_of_sale
#: wizard_field:pos.scan_product,init,gencod:0
msgid "Barcode"
-msgstr ""
+msgstr "Bar-Kod"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Canceled Invoice"
-msgstr ""
+msgstr "Otkazani Racuni"
#. module: point_of_sale
#: view:report.transaction.pos:0
msgid "POS"
-msgstr ""
+msgstr "POS"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_report
@@ -839,12 +840,12 @@ msgstr ""
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Tel. :"
-msgstr ""
+msgstr "Tel.:"
#. module: point_of_sale
#: field:pos.payment,payment_nb:0
msgid "Piece Number"
-msgstr ""
+msgstr "Br. Komada"
#. module: point_of_sale
#: wizard_field:pos.config.journal,init,default_journal_gift:0
@@ -855,42 +856,42 @@ msgstr ""
#: model:ir.actions.wizard,name:point_of_sale.pos_payment
#: view:pos.order:0
msgid "Payment"
-msgstr ""
+msgstr "Isplata"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_action_pos_order_tree3
msgid "All orders"
-msgstr ""
+msgstr "Sve porudzbine"
#. module: point_of_sale
#: wizard_field:pos.sale.get,init,picking_id:0
msgid "Sale Order"
-msgstr ""
+msgstr "Narudžbenica"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_trans_pos_tree_month
msgid "Sales of the month"
-msgstr ""
+msgstr "Mesecna prodaja"
#. module: point_of_sale
#: view:pos.order:0
msgid "D_iscount"
-msgstr ""
+msgstr "P_opust"
#. module: point_of_sale
#: field:pos.order,date_order:0
msgid "Date Ordered"
-msgstr ""
+msgstr "Datum naručivanja"
#. module: point_of_sale
#: view:pos.order:0
msgid "Payments"
-msgstr ""
+msgstr "Isplate"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Supplier Refund"
-msgstr ""
+msgstr "Povraćaj dobavljača"
#. module: point_of_sale
#: field:pos.config.journal,name:0
@@ -899,18 +900,18 @@ msgstr ""
#: field:pos.payment,name:0
#: rml:pos.receipt:0
msgid "Description"
-msgstr ""
+msgstr "Opis"
#. module: point_of_sale
#: field:pos.order,account_move:0
msgid "Account Entry"
-msgstr ""
+msgstr "Sadrzaj Naloga"
#. module: point_of_sale
#: wizard_field:pos.payment,ask_pay,payment_id:0
#: field:pos.payment,payment_id:0
msgid "Payment Term"
-msgstr ""
+msgstr "Uslovi plaćanja"
#. module: point_of_sale
#: rml:pos.invoice:0
@@ -918,12 +919,12 @@ msgstr ""
#: wizard_field:pos.payment,ask_pay,amount:0
#: field:report.transaction.pos,amount:0
msgid "Amount"
-msgstr ""
+msgstr "Iznos"
#. module: point_of_sale
#: view:pos.order:0
msgid "Actions"
-msgstr ""
+msgstr "Radnje"
#. module: point_of_sale
#: help:pos.order,salesman_id:0
@@ -934,35 +935,35 @@ msgstr ""
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Mode of Taxes"
-msgstr ""
+msgstr "Vrste Poreza"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Print Date:"
-msgstr ""
+msgstr "Datum Stampe"
#. module: point_of_sale
#: rml:pos.details:0
#: rml:pos.details_summary:0
msgid "Company:"
-msgstr ""
+msgstr "Firma:"
#. module: point_of_sale
#: rml:pos.lines:0
msgid "Print Date"
-msgstr ""
+msgstr "Datum Stampe"
#. module: point_of_sale
#: rml:pos.receipt:0
msgid "OPERATION N° :"
-msgstr ""
+msgstr "Br.OPERACIJE :"
#. module: point_of_sale
#: rml:pos.lines:0
#: field:pos.order,amount_total:0
msgid "Total"
-msgstr ""
+msgstr "Ukupno"
#. module: point_of_sale
#: rml:pos.details:0
@@ -970,4 +971,4 @@ msgstr ""
#: rml:pos.lines:0
#: rml:pos.receipt:0
msgid "Price"
-msgstr ""
+msgstr "Cena"
diff --git a/addons/point_of_sale/multi_company_demo.xml b/addons/point_of_sale/multi_company_demo.xml
deleted file mode 100644
index 9ae66800ff9..00000000000
--- a/addons/point_of_sale/multi_company_demo.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/addons/point_of_sale/multi_company_stock_data.xml b/addons/point_of_sale/multi_company_stock_data.xml
deleted file mode 100644
index cc8d30d080d..00000000000
--- a/addons/point_of_sale/multi_company_stock_data.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/addons/point_of_sale/pos.py b/addons/point_of_sale/pos.py
index 0d6ab5f2b33..a5bdf5ec0f8 100644
--- a/addons/point_of_sale/pos.py
+++ b/addons/point_of_sale/pos.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,8 +25,6 @@ from osv import fields, osv
from mx import DateTime
from tools.translate import _
from decimal import Decimal
-import tools
-import re
import decimal_precision as dp
class pos_config_journal(osv.osv):
@@ -114,18 +112,18 @@ class pos_order(osv.osv):
@return: Dictionary of values """
res = {}
- pay_obj = self.pool.get('account.bank.statement')
- stat_obj_line = self.pool.get('account.bank.statement.line')
- tot =0.0
val=None
for order in self.browse(cr, uid, ids):
- cr.execute("select date_payment from pos_order where id=%d"%(order.id))
+ cr.execute("SELECT date_payment FROM pos_order WHERE id=%s", (order.id,))
date_p=cr.fetchone()
date_p=date_p and date_p[0] or None
if date_p:
res[order.id]=date_p
return res
- cr.execute(" SELECT max(l.date) from account_move_line l, account_move m, account_invoice i, account_move_reconcile r, pos_order o where i.move_id=m.id and l.move_id=m.id and l.reconcile_id=r.id and o.id=%d and o.invoice_id=i.id"%(order.id))
+ cr.execute(" SELECT max(l.date) "
+ " FROM account_move_line l, account_move m, account_invoice i, account_move_reconcile r, pos_order o "
+ " WHERE i.move_id=m.id AND l.move_id=m.id AND l.reconcile_id=r.id AND o.id=%s AND o.invoice_id=i.id",
+ (order.id,))
val=cr.fetchone()
val= val and val[0] or None
if val:
@@ -138,11 +136,9 @@ class pos_order(osv.osv):
@return: Dictionary of values """
res = {}
- pay_obj = self.pool.get('pos.payment')
- tot =0.0
val=None
for order in self.browse(cr, uid, ids):
- cr.execute("select date_validation from pos_order where id=%d"%(order.id))
+ cr.execute("SELECT date_validation FROM pos_order WHERE id=%s", (order.id,))
date_p=cr.fetchone()
date_p=date_p and date_p[0] or None
if date_p:
@@ -153,7 +149,7 @@ class pos_order(osv.osv):
if line.discount > discount_allowed:
return {order.id: None }
if order.amount_paid == order.amount_total and not date_p:
- cr.execute("select max(date) from account_bank_statement_line where pos_statement_id=%d"%(order.id))
+ cr.execute("SELECT MAX(date) FROM account_bank_statement_line WHERE pos_statement_id=%s", (order.id,))
val=cr.fetchone()
val=val and val[0] or None
if order.invoice_id and order.invoice_id.move_id and not date_p and not val:
@@ -179,9 +175,8 @@ class pos_order(osv.osv):
cur_obj = self.pool.get('res.currency')
cur = order.pricelist_id.currency_id
for payment in order.statement_ids:
- res[order.id]['amount_paid'] += payment.amount
- for payment in order.payments:
- res[order.id]['amount_return'] += (payment.amount < 0 and payment.amount or 0)
+ res[order.id]['amount_paid'] += payment.amount
+ res[order.id]['amount_return'] += (payment.amount < 0 and payment.amount or 0)
for line in order.lines:
if order.price_type!='tax_excluded':
res[order.id]['amount_tax'] = reduce(lambda x, y: x+round(y['amount'], 2),
@@ -191,7 +186,7 @@ class pos_order(osv.osv):
res[order.id]['amount_tax'])
elif line.qty != 0.0:
for c in tax_obj.compute_all(cr, uid, line.product_id.taxes_id, line.price_unit * (1-(line.discount or 0.0)/100.0), line.qty, line.product_id, line.order_id.partner_id)['taxes']:
- val += c['amount']
+ val += c.get('amount', 0.0)
res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val)
return res
@@ -215,7 +210,6 @@ class pos_order(osv.osv):
""" To get Shop for this order"
@return: Shop id """
- company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
res = self.pool.get('sale.shop').search(cr, uid, [])
if res:
return res[0]
@@ -226,7 +220,6 @@ class pos_order(osv.osv):
default = {}
default.update({
'state': 'draft',
- 'payments': [],
'partner_id': False,
'invoice_id': False,
'account_move': False,
@@ -242,23 +235,21 @@ class pos_order(osv.osv):
""" Changed the Validation state of order
@return: State """
- flag=False
- res_company = self.pool.get('res.company')
res_obj = self.pool.get('res.users')
company_disc=self.browse(cr,uid,ids)
if not company_disc:
comp=res_obj.browse(cr,uid,uid).company_id.company_discount or 0.0
else:
comp= company_disc[0] and company_disc[0].company_id and company_disc[0].company_id.company_discount or 0.0
- cr.execute("select discount from pos_order_line where order_id=%s and discount <= %s"%(ids[0],comp))
+ cr.execute("select discount from pos_order_line where order_id=%s and discount <= %s", (ids[0],comp))
res=cr.fetchone()
- cr.execute("select discount from pos_order_line where order_id=%s and discount > %s"%(ids[0],comp))
+ cr.execute("select discount from pos_order_line where order_id=%s and discount > %s", (ids[0],comp))
res2=cr.fetchone()
- cr.execute("select journal_id from account_bank_statement_line where pos_statement_id=%s "%(ids[0]))
+ cr.execute("select journal_id from account_bank_statement_line where pos_statement_id=%s ", (ids[0],))
res3=cr.fetchall()
list_jrnl=[]
for r in res3:
- cr.execute("select id from account_journal where name= '%s' and special_journal='t'"%(r[0]))
+ cr.execute("select id from account_journal where name= '%s' and special_journal='t'", (r[0],))
res3=cr.fetchone()
is_special=res3 and res3[0] or None
if is_special:
@@ -292,7 +283,6 @@ class pos_order(osv.osv):
('tax_excluded','Tax excluded')
], 'Price method', required=True),
'statement_ids': fields.one2many('account.bank.statement.line','pos_statement_id','Payments',states={'draft': [('readonly', False)]},readonly=True),
- 'payments': fields.one2many('pos.payment', 'order_id', 'Order Payments', states={'draft': [('readonly', False)]}, readonly=True),
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True, states={'draft': [('readonly', False)]}, readonly=True),
'partner_id': fields.many2one( 'res.partner', 'Customer', change_default=True, select=1, states={'draft': [('readonly', False)], 'paid': [('readonly', False)]}),
'state': fields.selection([('draft', 'Quotation'), ('payment', 'Payment'),
@@ -358,7 +348,7 @@ class pos_order(osv.osv):
def test_order_lines(self, cr, uid, order, context=None):
- """ Test order line is created or not for the order "
+ """ Test order line is created or not for the order "
@param name: Names of fields.
@return: True
"""
@@ -489,7 +479,7 @@ class pos_order(osv.osv):
continue
prop_ids = property_obj.search(cr, uid, [('name', '=', 'property_stock_customer')])
val = property_obj.browse(cr, uid, prop_ids[0]).value_reference
- cr.execute("select s.id from stock_location s, stock_warehouse w where w.lot_stock_id=s.id and w.id= %d "%(order.shop_id.warehouse_id.id))
+ cr.execute("select s.id from stock_location s, stock_warehouse w where w.lot_stock_id=s.id and w.id=%s", (order.shop_id.warehouse_id.id,))
res=cr.fetchone()
location_id=res and res[0] or None
stock_dest_id = val.id
@@ -540,7 +530,7 @@ class pos_order(osv.osv):
res_obj = self.pool.get('res.company')
try:
part_company=res_obj.browse(cr,uid,uid) and res_obj.browse(cr,uid,uid).parent_id and res_obj.browse(cr,uid,uid).parent_id.id or None
- except Exception, e:
+ except Exception:
raise osv.except_osv(_('Error'), _('You don\'t have enough access to validate this sale!'))
if part_company:
raise osv.except_osv(_('Error'), _('You don\'t have enough access to validate this sale!'))
@@ -559,12 +549,10 @@ class pos_order(osv.osv):
"""Create a new payment for the order"""
- res_obj = self.pool.get('res.company')
- statement_obj= self.pool.get('account.bank.statement')
+ statement_obj= self.pool.get('account.bank.statement')
statementl_obj = self.pool.get('account.bank.statement.line')
prod_obj = self.pool.get('product.product')
property_obj=self.pool.get('ir.property')
- flag=''
curr_c=self.pool.get('res.users').browse(cr, uid, uid).company_id
curr_company=curr_c.id
order = self.browse(cr, uid, order_id, context)
@@ -600,7 +588,7 @@ class pos_order(osv.osv):
args['statement_id']= statement_id
args['pos_statement_id']= order_id
args['journal_id']= data['journal']
- statement_line_id = statementl_obj.create(cr, uid, args)
+ statementl_obj.create(cr, uid, args)
ids_new.append(statement_id)
wf_service = netsvc.LocalService("workflow")
@@ -634,7 +622,7 @@ class pos_order(osv.osv):
return order_line_id, price
def refund(self, cr, uid, ids, context=None):
- """Create a copy of order for refund order"""
+ """Create a copy of order for refund order"""
clone_list = []
line_obj = self.pool.get('pos.order.line')
@@ -661,14 +649,12 @@ class pos_order(osv.osv):
def action_invoice(self, cr, uid, ids, context=None):
"""Create a invoice of order """
- res_obj = self.pool.get('res.company')
inv_ref = self.pool.get('account.invoice')
inv_line_ref = self.pool.get('account.invoice.line')
product_obj= self.pool.get('product.product')
inv_ids = []
for order in self.pool.get('pos.order').browse(cr, uid, ids, context):
- curr_c = order.user_salesman_id.company_id
if order.invoice_id:
inv_ids.append(order.invoice_id.id)
continue
@@ -894,21 +880,12 @@ class pos_order(osv.osv):
raise osv.except_osv(_('Error !'),
_('There is no receivable account defined for this journal:'\
' "%s" (id:%d)') % (order.sale_journal.name, order.sale_journal.id, ))
- am=0.0
for payment in order.statement_ids:
- am+=payment.amount
-
- if am > 0:
- payment_account = \
- payment.statement_id.journal_id.default_debit_account_id.id
- else:
- payment_account = \
- payment.statement_id.journal_id.default_credit_account_id.id
# Create one entry for the payment
if payment.is_acc:
continue
- payment_move_id = account_move_obj.create(cr, uid, {
+ account_move_obj.create(cr, uid, {
'journal_id': payment.statement_id.journal_id.id,
'period_id': period,
}, context=context)
@@ -1022,7 +999,7 @@ class pos_order_line(osv.osv):
def _amount_line_ttc(self, cr, uid, ids, field_name, arg, context):
res = dict.fromkeys(ids, 0.0)
account_tax_obj = self.pool.get('account.tax')
- prices = self.price_by_product_multi(cr, uid, ids)
+ self.price_by_product_multi(cr, uid, ids)
for line in self.browse(cr, uid, ids):
tax_amount = 0.0
taxes = [t for t in line.product_id.taxes_id]
@@ -1031,7 +1008,6 @@ class pos_order_line(osv.osv):
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 = prices[line.id]
if line.discount!=0.0:
res[line.id] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
else:
@@ -1042,9 +1018,8 @@ class pos_order_line(osv.osv):
def _amount_line(self, cr, uid, ids, field_name, arg, context):
res = {}
- prices = self.price_by_product_multi(cr, uid, ids)
+ self.price_by_product_multi(cr, uid, ids)
for line in self.browse(cr, uid, ids):
- price = prices[line.id]
if line.discount!=0.0:
res[line.id] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
else:
@@ -1056,11 +1031,10 @@ class pos_order_line(osv.osv):
account_tax_obj = self.pool.get('account.tax')
- prices = self.price_by_product_multi(cr, uid, ids)
+ self.price_by_product_multi(cr, uid, ids)
for line in self.browse(cr, uid, ids):
for f in field_names:
if f == 'price_subtotal':
- price = prices[line.id]
if line.discount != 0.0:
res[line.id][f] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
else:
@@ -1069,11 +1043,11 @@ class pos_order_line(osv.osv):
tax_amount = 0.0
taxes = [t for t in line.product_id.taxes_id]
if line.qty == 0.0:
+ res[line.id][f] = 0.0
continue
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 = prices[line.id]
if line.discount!=0.0:
res[line.id][f] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
else:
@@ -1097,8 +1071,6 @@ class pos_order_line(osv.osv):
for line in lines:
pricelist = line.order_id.pricelist_id.id
product_id = line.product_id
- qty = line.qty or 0
- partner_id = line.order_id.partner_id.id or False
if not product_id:
res[line.id] = 0.0
@@ -1108,8 +1080,6 @@ class pos_order_line(osv.osv):
_('You have to select a pricelist in the sale form !\n' \
'Please set one before choosing a product.'))
- uom_id = product_id.uom_po_id.id
-
#old_price = self.pool.get('product.pricelist').price_get(cr, uid, [pricelist], product_id.id, qty or 1.0, partner_id, {'uom': uom_id})[pricelist]
#print "prod_id: %s, pricelist: %s, price: %s" % (product_id.id, pricelist, price)
price = price_get_multi_res[line.product_id.id][pricelist]
@@ -1170,9 +1140,7 @@ class pos_order_line(osv.osv):
return {'value': {'price_subtotal_incl':sub_total_discount}}
def onchange_ded(self, cr, uid,ids, val_ded,price_u,*a):
- pos_order = self.pool.get('pos.order.line')
res_obj = self.pool.get('res.users')
- res_company = self.pool.get('res.company')
comp = res_obj.browse(cr,uid,uid).company_id.company_discount or 0.0
val=0.0
if val_ded and price_u:
@@ -1184,7 +1152,6 @@ class pos_order_line(osv.osv):
def onchange_discount(self, cr, uid,ids, discount,price,*a):
pos_order = self.pool.get('pos.order.line')
res_obj = self.pool.get('res.users')
- res_company = self.pool.get('res.company')
company_disc = pos_order.browse(cr,uid,ids)
if discount:
if not company_disc:
@@ -1282,7 +1249,7 @@ class pos_order_line(osv.osv):
}
line_id = self.write(cr, uid, order_line_id, vals)
if not line_id:
- raise wizard.except_wizard(_('Error'), _('Modify line failed !'))
+ raise osv.except_osv(_('Error'), _('Modify line failed !'))
line_id = order_line_id
price_line = float(qty)*float(price)
@@ -1296,55 +1263,6 @@ class pos_order_line(osv.osv):
pos_order_line()
-
-class pos_payment(osv.osv):
- _name = 'pos.payment'
- _description = 'Pos Payment'
-
- def _journal_get(self, cr, uid, context=None):
- obj = self.pool.get('account.journal')
- ids = obj.search(cr, uid, [('type', '=', 'cash')])
- res = obj.read(cr, uid, ids, ['id', 'name'], context)
- res = [(r['id'], r['name']) for r in res]
- return res
-
- def _journal_default(self, cr, uid, context=None):
- journal_list = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash')])
- if journal_list:
- return journal_list[0]
- else:
- return False
-
- _columns = {
- 'name': fields.char('Description', size=64),
- 'order_id': fields.many2one('pos.order', 'Order Ref', required=True, ondelete='cascade'),
- 'journal_id': fields.many2one('account.journal', "Journal", required=True),
- 'payment_id': fields.many2one('account.payment.term','Payment Term', select=True),
- 'payment_nb': fields.char('Piece Number', size=32),
- 'payment_name': fields.char('Payment Name', size=32),
- 'payment_date': fields.date('Payment Date', required=True),
- 'amount': fields.float('Amount', required=True),
- }
- _defaults = {
- 'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'pos.payment'),
- 'journal_id': _journal_default,
- 'payment_date': lambda *a: time.strftime('%Y-%m-%d'),
- }
-
- def create(self, cr, user, vals, context=None):
- if vals.get('journal_id') and vals.get('amount'):
- return super(pos_payment, self).create(cr, user, vals, context)
- return False
-
- def write(self, cr, user, ids, values, context=None):
- if 'amount' in values and not values['amount']:
- return False
- if 'journal_id' in values and not values['journal_id']:
- return False
- return super(pos_payment, self).write(cr, user, ids, values, context)
-
-pos_payment()
-
class product_product(osv.osv):
_inherit = 'product.product'
_columns = {
diff --git a/addons/point_of_sale/pos_data.xml b/addons/point_of_sale/pos_data.xml
deleted file mode 100644
index 14710cf8f37..00000000000
--- a/addons/point_of_sale/pos_data.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/addons/point_of_sale/pos_demo.xml b/addons/point_of_sale/pos_demo.xml
index 80ba3d24397..913a2907e03 100644
--- a/addons/point_of_sale/pos_demo.xml
+++ b/addons/point_of_sale/pos_demo.xml
@@ -1,7 +1,140 @@
-
+
+ POS/019
+ POS/019
+ SAJ/2010/010
+
+
+
+
+
+ none
+
+ open
+ out_invoice
+ SAJ/2010/010
+
+
+
+ /
+ 2010-10-07
+
+
+
+
+
+ Invoice from POS: POS/019
+
+
+
+
+ [PC1] Basic PC
+
+
+
+
+
+
+
+
+
+
+
+
+ 2011-04-07
+
+
+ 2010-10-07 16:53:11
+
+
+
+
+
+ paid
+
+
+ 2010-10-07
+ POS/019
+ tax_excluded
+
+
+
+
+
+
+ 10
+ open
+
+
+
+ 2010-10-07
+
+
+
+
+ general
+
+
+
+ Cash Journal - (test)
+
+ 2010-10-07
+
+
+
+ Payment POS/019
+
+
+
+
+ POS/019
+
+ 2010-10-07 16:53:46
+
+ direct
+
+ POS notes
+ done
+ out
+ 2010-10-07 16:53:46
+ 2010-10-07 16:33:30
+ OUT/00019
+ none
+ 2010-10-07 16:53:46
+
+
+ POS/019
+
+
+
+
+
+ 1
+
+
+ done
+
+ 2010-10-07 16:33:30
+ 2010-10-07 16:33:30
+ Stock move (POS 12)
+
+
+ 2010-10-07 16:53:46
+
+
+
+
+ No Discount
+
+
+
+
+
+ Order Line/07
+
+
diff --git a/addons/point_of_sale/pos_report.xml b/addons/point_of_sale/pos_report.xml
index b079f6b9177..3e6a265b34e 100644
--- a/addons/point_of_sale/pos_report.xml
+++ b/addons/point_of_sale/pos_report.xml
@@ -9,7 +9,7 @@
name="pos.invoice"
auto="False"
multi="True"
- rml="account/report/invoice.rml"
+ rml="account/report/account_print_invoice.rml"
/>
3
-
- POS Payment
- pos.payment
-
-
- POS Payment
- pos.payment
- Payment/
- 2
-
-
POS order line
pos.order.line
diff --git a/addons/point_of_sale/pos_view.xml b/addons/point_of_sale/pos_view.xml
index c0f7b566879..7453682f566 100644
--- a/addons/point_of_sale/pos_view.xml
+++ b/addons/point_of_sale/pos_view.xml
@@ -169,20 +169,6 @@
-
- Uninvoiced Sales
- ir.actions.act_window
- pos.order
- form
- tree,form
-
- [('state','not in', ('invoiced','done')),('invoice_id','=',False)]
- {"search_default_user_id":uid}
-
-
-
-
-
Accepted Sales
ir.actions.act_window
@@ -720,7 +706,7 @@
+ id="menu_point_config_product" sequence="25" groups="base.group_system,group_pos_manager"/>
Products
@@ -746,7 +732,7 @@
parent="menu_point_config_product"
action="action_product_input"
id="products_for_input_operations"
- groups="base.group_system"/>
+ groups="base.group_system,group_pos_manager"/>
Products
@@ -772,7 +758,7 @@
parent="menu_point_config_product"
action="action_product_output"
id="products_for_output_operations"
- groups="base.group_system"/>
+ groups="base.group_system,group_pos_manager"/>
|
- Unit Price ([[ company.currency_id.code ]])
+ Unit Price
|
- Total ([[ company.currency_id.code ]])
+ Total
|
@@ -175,10 +175,10 @@
|
- [[ line_ids['name'] ]]
+ [ [[ line_ids['code'] ]] ] [[ line_ids['name'] ]]
|
- [[ formatLang(line_ids['qty']) ]]
+ [[ formatLang(line_ids['qty']) ]] [[line_ids['uom'] ]]
|
[[ formatLang(line_ids['discount']) ]]
@@ -212,7 +212,7 @@
|
- Net Total
+ Net Total:
|
[[ formatLang(pos_payment_total(o)) or removeParentNode('blockTable')]] [[ company.currency_id.symbol ]]
diff --git a/addons/point_of_sale/report/pos_payment_report_date.py b/addons/point_of_sale/report/pos_payment_report_date.py
index e492e929b7c..823fb3ce95e 100644
--- a/addons/point_of_sale/report/pos_payment_report_date.py
+++ b/addons/point_of_sale/report/pos_payment_report_date.py
@@ -25,7 +25,7 @@ from report import report_sxw
class pos_payment_report_date(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(pos_payment_report_date, self).__init__(cr, uid, name, context)
+ super(pos_payment_report_date, self).__init__(cr, uid, name, context=context)
self.total = 0.0
self.localcontext.update({
'time': time,
@@ -38,17 +38,17 @@ class pos_payment_report_date(report_sxw.rml_parse):
dt2 = form['date_end'] + ' 23:59:59'
data={}
if form['user_id']:
- self.cr.execute ("select pt.name,pol.qty,pol.discount,pol.price_unit, " \
+ self.cr.execute ("select pt.name,pp.default_code as code,pol.qty,pu.name as uom,pol.discount,pol.price_unit, " \
"(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) as total " \
- "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \
- "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
+ "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt,product_uom as pu " \
+ "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and pu.id=pt.uom_id " \
"and po.state IN ('paid','invoiced') and po.date_order >= %s and po.date_order <= %s and po.user_id IN %s " \
,(dt1,dt2,tuple(form['user_id'])))
else:
- self.cr.execute ("select pt.name,pol.qty,pol.discount,pol.price_unit, " \
+ self.cr.execute ("select pt.name,pp.default_code as code,pol.qty,pu.name as uom,pol.discount,pol.price_unit, " \
"(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) as total " \
- "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \
- "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
+ "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt,product_uom as pu " \
+ "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and pu.id=pt.uom_id " \
"and po.state IN ('paid','invoiced') and po.date_order >= %s and po.date_order <= %s" \
,(dt1,dt2))
data=self.cr.dictfetchall()
diff --git a/addons/point_of_sale/report/pos_payment_report_date.rml b/addons/point_of_sale/report/pos_payment_report_date.rml
index 846eaf1f861..23c3f950d81 100644
--- a/addons/point_of_sale/report/pos_payment_report_date.rml
+++ b/addons/point_of_sale/report/pos_payment_report_date.rml
@@ -2,7 +2,7 @@
-
+
@@ -98,11 +98,11 @@
- Payment
+ Sales Lines
-
+
|
Company
@@ -112,7 +112,7 @@
|
-
+
[[ company.name ]]
@@ -128,7 +128,7 @@
-
+
|
Product
@@ -140,22 +140,22 @@
Disc(%)
|
- Unit Price ([[ company.currency_id.code ]])
+ Unit Price
|
- Total ([[ company.currency_id.code ]])
+ Total
|
[[ repeatIn(pos_payment_date(data['form']), 'line_ids') ]]
-
+
|
- [[ line_ids['name'] ]]
+ [ [[ line_ids['code'] ]] ] [[ line_ids['name'] ]]
|
- [[ formatLang(line_ids['qty']) ]]
+ [[ formatLang(line_ids['qty']) ]] [[line_ids['uom'] ]]
|
[[ formatLang(line_ids['discount']) ]]
@@ -169,7 +169,7 @@
|
-
+
|
@@ -187,7 +187,7 @@
|
- Total
+ Total:
|
[[ formatLang(pos_payment_date_total(data['form'])) or removeParentNode('blockTable')]] [[ company.currency_id.symbol ]]
@@ -198,4 +198,4 @@
-
\ No newline at end of file
+
diff --git a/addons/point_of_sale/report/pos_payment_report_user.py b/addons/point_of_sale/report/pos_payment_report_user.py
index c7f31ffcd6f..37b129f68f2 100644
--- a/addons/point_of_sale/report/pos_payment_report_user.py
+++ b/addons/point_of_sale/report/pos_payment_report_user.py
@@ -24,7 +24,7 @@ from report import report_sxw
class pos_payment_report_user(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(pos_payment_report_user, self).__init__(cr, uid, name, context)
+ super(pos_payment_report_user, self).__init__(cr, uid, name, context=context)
self.total = 0.0
self.localcontext.update({
'time': time,
@@ -35,10 +35,10 @@ class pos_payment_report_user(report_sxw.rml_parse):
def __pos_payment_user__(self,form):
data={}
ids = form['user_id']
- sql = "select pt.name,pol.qty,pol.discount,pol.price_unit, " \
+ sql = "select pt.name,pp.default_code as code,pol.qty,pu.name as uom,pol.discount,pol.price_unit, " \
"(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) as total " \
- "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \
- "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
+ "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt,product_uom as pu " \
+ "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and pu.id=pt.uom_id " \
"and po.state in ('paid','invoiced') and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date = current_date " \
"and po.user_id IN %s"
self.cr.execute (sql, (tuple(ids), ))
diff --git a/addons/point_of_sale/report/pos_payment_report_user.rml b/addons/point_of_sale/report/pos_payment_report_user.rml
index fc874e52dac..18ed5b73d84 100644
--- a/addons/point_of_sale/report/pos_payment_report_user.rml
+++ b/addons/point_of_sale/report/pos_payment_report_user.rml
@@ -1,8 +1,8 @@
-
+
-
+
@@ -10,35 +10,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -46,9 +40,8 @@
-
-
+
@@ -56,31 +49,25 @@
-
-
+
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
+
+
+
+
+
+
@@ -90,8 +77,8 @@
-
-
+
+
@@ -105,17 +92,21 @@
-
+
-
-
+ [[ repeatIn(objects,'order') ]]
+
-
+
-
+ Payment By User
+
+
+
+
|
Company
@@ -125,7 +116,7 @@
|
-
+
[[ company.name ]]
@@ -138,38 +129,37 @@
-
+
-
+
|
Product
|
- Qty
+ Qty
|
- Disc. (%)
+ Disc(%)
|
- Unit Price
+ Unit Price
|
- Total
+ Total
|
-
+ |
-
- [[ repeatIn(pos_payment_user(data['form']), 'line_ids') ]]
-
+ [[ repeatIn(pos_payment_user(data['form']), 'line_ids') ]]
+
|
- [[ line_ids['name'] ]]
+ [ [[ line_ids['code'] ]] ] [[ line_ids['name'] ]]
|
- [[ formatLang(line_ids['qty']) ]]
+ [[ formatLang(line_ids['qty']) ]] [[line_ids['uom'] ]]
|
[[ formatLang(line_ids['discount']) ]]
@@ -178,38 +168,38 @@
[[ formatLang(line_ids['price_unit']) ]]
|
- [[ formatLang(line_ids['total']) ]]
+ [[ formatLang(line_ids['total']) ]] [[company.currency_id.symbol]]
|
-
-
-
+
+
|
-
+
|
-
+
|
-
+
|
- Total :
+ Total:
|
- [[ formatLang(pos_payment_user_total(data['form'])) or removeParentNode('blockTable')]]
+ [[ formatLang(pos_payment_user_total(data['form'])) or removeParentNode('blockTable')]] [[company.currency_id.symbol]]
|
-
-
-
+
+
+
+
diff --git a/addons/point_of_sale/report/pos_receipt.py b/addons/point_of_sale/report/pos_receipt.py
index 51e8e4d0f1b..9be543fb89b 100644
--- a/addons/point_of_sale/report/pos_receipt.py
+++ b/addons/point_of_sale/report/pos_receipt.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 .
#
##############################################################################
@@ -33,7 +33,7 @@ def titlize(journal_name):
class order(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(order, self).__init__(cr, uid, name, context)
+ super(order, self).__init__(cr, uid, name, context=context)
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid)
partner = user.company_id.partner_id
diff --git a/addons/point_of_sale/report/pos_receipt_bis.rml b/addons/point_of_sale/report/pos_receipt_bis.rml
deleted file mode 100644
index ab8af5ca999..00000000000
--- a/addons/point_of_sale/report/pos_receipt_bis.rml
+++ /dev/null
@@ -1,186 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'o') ]]
- [[ setLang(o.user_id.context_lang) ]]
- [[o.user_id.company_id.name]]
- [[ address and address.street ]], [[ address and address.zip ]] [[ address and address.city ]]
- Tel : [[ address and address.phone ]]
- Fax : [[ address and address.fax ]]
- E-mail : [[ address and address.email ]]
-
-
-
-
-
-
- Operation N° : [[ o.name ]]
- Date : [[ o.date_order ]]
-
-
-
-
-
- |
- Description
- |
-
- Qty
- |
-
- Price
- |
-
-
-
- [[ repeatIn(o.lines,'line') ]]
-
-
- |
- [[ len(line.product_id.name) > 39 and line.product_id.name[:39] + '...' or line.product_id.name ]]
- |
-
- [[ '%.f' % line.qty ]]
- |
-
- [[ '%.2f' % net(line.id) ]]
- |
-
-
-
-
-
-
-
-
- |
- Discount :
- |
-
- [[ not(disc(o.id)) and removeParentNode('blockTable') or disc(o.id) ]] [[ o.pricelist_id.currency_id.name ]]
- |
-
-
-
-
- |
- Total :
- |
-
- [[ '%.2f' % o.amount_total ]] [[ o.pricelist_id.currency_id.name ]]
- |
-
-
-
-
- |
- [[ repeatIn(o.payments,'d') ]]
- [[ d.name ]]:
- |
-
- [[ d.amount ]]
- |
-
-
-
-
-
-
-
-
-
- |
-
-
-
-
-
-
-
diff --git a/addons/point_of_sale/report/pos_receipt_with_remboursment.py b/addons/point_of_sale/report/pos_receipt_with_remboursment.py
index d96cad52097..3286f40c5b7 100644
--- a/addons/point_of_sale/report/pos_receipt_with_remboursment.py
+++ b/addons/point_of_sale/report/pos_receipt_with_remboursment.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 .
#
##############################################################################
@@ -27,7 +27,7 @@ import pooler
class order(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(order, self).__init__(cr, uid, name, context)
+ super(order, self).__init__(cr, uid, name, context=context)
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid)
partner = user.company_id.partner_id
diff --git a/addons/point_of_sale/report/pos_receipt_with_remboursment.rml b/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
index 32dea8dcd48..9c25d5f4a89 100644
--- a/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
+++ b/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
@@ -125,7 +125,7 @@
|
- [[ get_journal_amt(o)[0] ]] : [[ get_journal_amt(o)[1] ]]
+ [[ get_journal_amt(o)[1] ]]
diff --git a/addons/point_of_sale/report/pos_receipt_without_remboursment.py b/addons/point_of_sale/report/pos_receipt_without_remboursment.py
index a84b0588dae..58d7052b287 100644
--- a/addons/point_of_sale/report/pos_receipt_without_remboursment.py
+++ b/addons/point_of_sale/report/pos_receipt_without_remboursment.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 .
#
##############################################################################
@@ -27,7 +27,7 @@ import pooler
class order(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(order, self).__init__(cr, uid, name, context)
+ super(order, self).__init__(cr, uid, name, context=context)
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid)
partner = user.company_id.partner_id
diff --git a/addons/point_of_sale/report/pos_receipt_without_remboursment.rml b/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
index 4e3b8ec64e1..ff6ebc3132c 100644
--- a/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
+++ b/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
@@ -127,12 +127,12 @@
[[ get_journal_amt(o)[0] ]] : [[ get_journal_amt(o)[1] ]]
-
- [[ repeatIn((o.state=='cancel' and o.statement_ids) and [1] or [], 'p') ]]
-
- Ce bon est valide jusqu'au [[ time.strftime('%d/%m/%Y', time.strptime(o.date_validity,'%Y-%m-%d')) ]].
-
-
+
+
+
+
+
+
diff --git a/addons/point_of_sale/report/pos_sales_user.py b/addons/point_of_sale/report/pos_sales_user.py
index 4032f035bdf..a764fa112b9 100644
--- a/addons/point_of_sale/report/pos_sales_user.py
+++ b/addons/point_of_sale/report/pos_sales_user.py
@@ -25,7 +25,7 @@ from report import report_sxw
class pos_sales_user(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(pos_sales_user, self).__init__(cr, uid, name, context)
+ super(pos_sales_user, self).__init__(cr, uid, name, context=context)
self.total = 0.0
self.localcontext.update({
'time': time,
diff --git a/addons/point_of_sale/report/pos_sales_user.rml b/addons/point_of_sale/report/pos_sales_user.rml
index cb817035a46..d2fefc379fd 100644
--- a/addons/point_of_sale/report/pos_sales_user.rml
+++ b/addons/point_of_sale/report/pos_sales_user.rml
@@ -1,8 +1,8 @@
-
+
-
+
@@ -10,35 +10,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -46,9 +40,8 @@
-
-
+
@@ -56,32 +49,20 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
@@ -91,8 +72,8 @@
-
-
+
+
@@ -106,17 +87,21 @@
-
+
-
-
+ [[ repeatIn(objects,'order') ]]
+
-
+
-
+ Sales Report
+
+
+
+
|
Company
@@ -126,7 +111,7 @@
|
-
+
[[ company.name ]]
@@ -139,10 +124,10 @@
-
+
-
+
|
Name
@@ -151,23 +136,22 @@
Date Order
|
- User
+ User
|
- State
+ State
|
Company
|
-
+ |
-
-
- [[ repeatIn(get_data(data['form']), 'line_ids')]]
-
+
+ [[ repeatIn(get_data(data['form']), 'line_ids')]]
+
|
- [[ line_ids['pos'] ]]
+ [[ line_ids['pos'] ]]
|
[[ formatLang(line_ids['date_order'],date_time = True) ]]
@@ -176,13 +160,16 @@
[[ line_ids['user'] ]]
|
- [[ line_ids['state'] ]]
+ [[ line_ids['state'] ]]
|
[[ line_ids['name'] ]]
|
-
+
+
+
+
diff --git a/addons/point_of_sale/report/pos_sales_user_today.py b/addons/point_of_sale/report/pos_sales_user_today.py
index 7c9b9b5a563..3a8b8bb1bba 100644
--- a/addons/point_of_sale/report/pos_sales_user_today.py
+++ b/addons/point_of_sale/report/pos_sales_user_today.py
@@ -25,7 +25,7 @@ from report import report_sxw
class pos_sales_user_today(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(pos_sales_user_today, self).__init__(cr, uid, name, context)
+ super(pos_sales_user_today, self).__init__(cr, uid, name, context=context)
self.total = 0.0
self.localcontext.update({
'time': time,
diff --git a/addons/point_of_sale/report/pos_sales_user_today.rml b/addons/point_of_sale/report/pos_sales_user_today.rml
index 39f6ddacb4c..6e633d375d8 100644
--- a/addons/point_of_sale/report/pos_sales_user_today.rml
+++ b/addons/point_of_sale/report/pos_sales_user_today.rml
@@ -1,8 +1,8 @@
-
+
-
+
@@ -10,35 +10,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -46,9 +40,8 @@
-
-
+
@@ -56,31 +49,20 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
@@ -90,8 +72,8 @@
-
-
+
+
@@ -105,17 +87,21 @@
-
+
-
-
+ [[ repeatIn(objects,'order') ]]
+
-
+
-
+ Today's Sales By User
+
+
+
+
|
Company
@@ -125,7 +111,7 @@
|
-
+
[[ company.name ]]
@@ -138,10 +124,10 @@
-
+
-
+
|
Name
@@ -150,23 +136,22 @@
Date Order
|
- User
+ User
|
- State
+ State
|
Company
|
-
+ |
-
-
- [[ repeatIn(get_data(data['form']), 'line_ids')]]
-
+
+ [[ repeatIn(get_data(data['form']), 'line_ids')]]
+
|
- [[ line_ids['pos'] ]]
+ [[ line_ids['pos'] ]]
|
[[ formatLang(line_ids['date_order'],date_time = True) ]]
@@ -175,13 +160,16 @@
[[ line_ids['user'] ]]
|
- [[ line_ids['state'] ]]
+ [[ line_ids['state'] ]]
|
[[ line_ids['name'] ]]
|
-
+
+
+
+
diff --git a/addons/point_of_sale/report/pos_sales_user_today_current_user.py b/addons/point_of_sale/report/pos_sales_user_today_current_user.py
index 7f4a8f827f5..ed793b4277e 100644
--- a/addons/point_of_sale/report/pos_sales_user_today_current_user.py
+++ b/addons/point_of_sale/report/pos_sales_user_today_current_user.py
@@ -25,7 +25,7 @@ from report import report_sxw
class pos_sales_user_today_current_user(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(pos_sales_user_today_current_user, self).__init__(cr, uid, name, context)
+ super(pos_sales_user_today_current_user, self).__init__(cr, uid, name, context=context)
self.total = 0.0
self.qty = 0.0
self.localcontext.update({
diff --git a/addons/point_of_sale/report/pos_sales_user_today_current_user.rml b/addons/point_of_sale/report/pos_sales_user_today_current_user.rml
index 475d045252b..7a94f5d6632 100644
--- a/addons/point_of_sale/report/pos_sales_user_today_current_user.rml
+++ b/addons/point_of_sale/report/pos_sales_user_today_current_user.rml
@@ -1,8 +1,8 @@
-
+
-
+
@@ -10,76 +10,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
+
-
-
-
+
+
-
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
@@ -89,8 +83,8 @@
-
-
+
+
@@ -104,17 +98,21 @@
-
+
-
-
+ [[ repeatIn(objects,'order') ]]
+
-
+
-
+ Today's Sales By Current User
+
+
+
+
|
Company
@@ -127,7 +125,7 @@
|
-
+
|
[[ company.name ]]
@@ -136,17 +134,17 @@
[[ formatLang(time.strftime('%Y-%m-%d'),date = True) ]]
|
- [[ (get_user(user)) ]]
+ [[ (get_user(user)) ]]
|
-
+
-
+
-
+
|
Name
@@ -160,12 +158,11 @@
|
Total
|
-
+ |
-
-
- [[ repeatIn(get_data_current_user(user), 'line_ids')]]
-
+
+ [[ repeatIn(get_data_current_user(user), 'line_ids')]]
+
|
[[ line_ids['name'] ]]
@@ -177,26 +174,31 @@
[[ formatLang(line_ids['qty']) ]]
|
- [[ formatLang(line_ids['total']) ]]
- |
-
-
-
-
-
- |
-
- |
-
- Total :
- |
-
- [[ formatLang((get_data_current_user_qty(user))) ]]
- |
-
- [[ formatLang((get_data_current_user_tot(user))) ]]
+ [[ formatLang(line_ids['total']) ]] [[company.currency_id.symbol]]
|
+
+
+
+ |
+
+
+
+ |
+
+ Total :
+ |
+
+ [[ formatLang((get_data_current_user_qty(user))) ]]
+ |
+
+ [[ formatLang((get_data_current_user_tot(user))) or removeParentNode('blockTable')]] [[company.currency_id.symbol]]
+ |
+
+
+
+
+
diff --git a/addons/point_of_sale/report/pos_users_product.py b/addons/point_of_sale/report/pos_users_product.py
index 141445bcafe..83a02d49832 100644
--- a/addons/point_of_sale/report/pos_users_product.py
+++ b/addons/point_of_sale/report/pos_users_product.py
@@ -25,7 +25,7 @@ from report import report_sxw
class pos_user_product(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(pos_user_product, self).__init__(cr, uid, name, context)
+ super(pos_user_product, self).__init__(cr, uid, name, context=context)
self.total = 0.0
self.localcontext.update({
'time': time,
diff --git a/addons/point_of_sale/report/pos_users_product.rml b/addons/point_of_sale/report/pos_users_product.rml
index 24059dcbb0b..ae15e6478e7 100644
--- a/addons/point_of_sale/report/pos_users_product.rml
+++ b/addons/point_of_sale/report/pos_users_product.rml
@@ -1,6 +1,6 @@
-
+
@@ -57,9 +57,19 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -71,8 +81,8 @@
-
-
+
+
@@ -118,7 +128,7 @@
- User's Product
+ User's Product
@@ -169,13 +179,7 @@
-
-
-
-
-
-
-
+
|
Product
@@ -184,26 +188,30 @@
Qty
|
- Amount ([[ company.currency_id.code ]])
+ Amount
|
-
-
- |
- [[ repeatIn(get_data(statement), 'line_ids') and ' ' or removeParentNode('blockTable') ]]
- [[ repeatIn(get_data(statement), 'line_ids')]]
- [[ line_ids['name'] ]]
- |
-
- [[ formatLang(line_ids['qty']) ]]
- |
-
- [[ formatLang(line_ids['amt']) ]][[ company.currency_id.symbol ]]
- |
-
-
-
+
+ [[ repeatIn(get_data(statement), 'line_ids') and ' ' or removeParentNode('blockTable') ]]
+
+ [[ repeatIn(get_data(statement), 'line_ids')]]
+
+
+ |
+ [[ line_ids['name'] ]]
+ |
+
+ [[ formatLang(line_ids['qty']) ]]
+ |
+
+ [[ formatLang(line_ids['amt']) ]] [[ company.currency_id.symbol ]]
+ |
+
+
+
+
+
|
@@ -214,7 +222,7 @@
Total :
|
- [[ formatLang(get_total()) ]][[ company.currency_id.symbol ]]
+ [[ formatLang(get_total()) ]] [[ company.currency_id.symbol ]]
|
@@ -222,4 +230,4 @@
-
\ No newline at end of file
+
diff --git a/addons/point_of_sale/report/report_cash_register_view.xml b/addons/point_of_sale/report/report_cash_register_view.xml
index fb498336fb5..df0dfc877de 100644
--- a/addons/point_of_sale/report/report_cash_register_view.xml
+++ b/addons/point_of_sale/report/report_cash_register_view.xml
@@ -36,7 +36,7 @@
Point of Sale / User
+
+
+ Registers
+
+
+ [('user_id','!=',['base.user_root'])]
+
diff --git a/addons/point_of_sale/singer_statement_demo.xml b/addons/point_of_sale/singer_statement_demo.xml
index 3caf9a046c3..3862c3c97cb 100644
--- a/addons/point_of_sale/singer_statement_demo.xml
+++ b/addons/point_of_sale/singer_statement_demo.xml
@@ -6,7 +6,7 @@
VIJ
cash
-
+
@@ -18,7 +18,7 @@
CAJ
cash
-
+
@@ -30,7 +30,7 @@
BACJ
cash
-
+
diff --git a/addons/point_of_sale/statement_data.xml b/addons/point_of_sale/statement_data.xml
deleted file mode 100644
index 2780cd0f8d0..00000000000
--- a/addons/point_of_sale/statement_data.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/addons/point_of_sale/statement_report.xml b/addons/point_of_sale/statement_report.xml
index fb1be16419e..a81d51a2679 100644
--- a/addons/point_of_sale/statement_report.xml
+++ b/addons/point_of_sale/statement_report.xml
@@ -25,7 +25,7 @@
-
+
diff --git a/addons/point_of_sale/statement_rules.xml b/addons/point_of_sale/statement_rules.xml
deleted file mode 100644
index 3ba8df59b13..00000000000
--- a/addons/point_of_sale/statement_rules.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/addons/point_of_sale/test/pos_report.yml b/addons/point_of_sale/test/pos_report.yml
index d17e487794e..7eeea10bd1a 100644
--- a/addons/point_of_sale/test/pos_report.yml
+++ b/addons/point_of_sale/test/pos_report.yml
@@ -12,7 +12,7 @@
-
!python {model: pos.order}: |
import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.pos.invoice').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], {}, {})
+ (data, format) = netsvc.LocalService('report.pos.invoice').create(cr, uid, [ref('point_of_sale.pos_order_pos11')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-invoice report'+format), 'wb+').write(data)
@@ -52,7 +52,7 @@
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-receipt without reimbursement report'+format), 'wb+').write(data)
-
- In order to test the PDF reports defined on a Point Of Sale, we will print a POS Payment Report Report
+ In order to test the PDF reports defined on a Point Of Sale, we will print a POS Payment Report
-
!python {model: ir.ui.menu}: |
import netsvc, tools, os, time
@@ -67,6 +67,15 @@
(data, format) = netsvc.LocalService('report.pos.details').create(cr, uid, [], {'model':'ir.ui.menu', 'form':{'date_start': time.strftime('%Y-%m-%d'), 'date_end': time.strftime('%Y-%m-%d') }}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale- pos details report'+format), 'wb+').write(data)
+-
+ I create a cash journal.
+-
+ !record {model: account.journal, id: account_journal_cash0}:
+ name: 'Cash Journal'
+ code: 'CSJ'
+ type: 'cash'
+ view_id: account.account_journal_bank_view
+ sequence_id: account.sequence_journal
-
I create a record for Bank Statement.
-
@@ -74,7 +83,14 @@
name: St.05/19
balance_end_real: 0.0
date: '2010-05-19'
- journal_id: account.bank_journal
+ journal_id: account_journal_cash0
+ line_ids:
+ - name: statement
+ date: "2010-10-13"
+ type: customer
+ account_id: account_account_sales0
+ amount: 100
+ partner_id: base.res_partner_agrolait
period_id: account.period_5
state: 'draft'
-
@@ -124,7 +140,7 @@
-
!python {model: pos.order}: |
import netsvc, tools, os, time
- (data, format) = netsvc.LocalService('report.pos.payment.report').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], {}, {})
+ (data, format) = netsvc.LocalService('report.pos.payment.report').create(cr, uid, [ref('point_of_sale.pos_order_pos0')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-payment_report'+format), 'wb+').write(data)
-
@@ -143,4 +159,4 @@
import netsvc, tools, os, time
(data, format) = netsvc.LocalService('report.pos.sales.user.today.current.user').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], {}, {})
if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-sales_today_current_user_report'+format), 'wb+').write(data)
\ No newline at end of file
+ file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-sales_today_current_user_report'+format), 'wb+').write(data)
diff --git a/addons/point_of_sale/wizard/pos_box_entries.py b/addons/point_of_sale/wizard/pos_box_entries.py
index f7349726033..103e49be62d 100644
--- a/addons/point_of_sale/wizard/pos_box_entries.py
+++ b/addons/point_of_sale/wizard/pos_box_entries.py
@@ -36,7 +36,7 @@ def get_journal(self, cr, uid, context):
obj = self.pool.get('account.journal')
statement_obj = self.pool.get('account.bank.statement')
- cr.execute("""select DISTINCT journal_id from pos_journal_users where user_id=%d order by journal_id"""%(uid))
+ cr.execute("SELECT DISTINCT journal_id from pos_journal_users where user_id=%s order by journal_id", (uid,))
j_ids = map(lambda x1: x1[0], cr.fetchall())
ids = obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)])
obj_ids= statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', ids)])
@@ -129,7 +129,7 @@ class pos_box_entries(osv.osv_memory):
if address_u:
partner_id = address_u.partner_id and address_u.partner_id.id or None
args['partner_id'] = partner_id
- statement_line_id = bank_statement.create(cr, uid, args)
+ bank_statement.create(cr, uid, args)
return {}
diff --git a/addons/point_of_sale/wizard/pos_close_statement.py b/addons/point_of_sale/wizard/pos_close_statement.py
index f12a0a16c99..82e47a2caa3 100644
--- a/addons/point_of_sale/wizard/pos_close_statement.py
+++ b/addons/point_of_sale/wizard/pos_close_statement.py
@@ -35,12 +35,11 @@ class pos_close_statement(osv.osv_memory):
@param context: A standard dictionary
@return : Blank Dictionary
"""
- company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
- list_statement = []
mod_obj = self.pool.get('ir.model.data')
statement_obj = self.pool.get('account.bank.statement')
journal_obj = self.pool.get('account.journal')
- cr.execute("""select DISTINCT journal_id from pos_journal_users where user_id=%d order by journal_id"""%(uid))
+ cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
+ "WHERE user_id=%s ORDER BY journal_id", (uid,))
j_ids = map(lambda x1: x1[0], cr.fetchall())
journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)])
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', journal_ids)])
diff --git a/addons/point_of_sale/wizard/pos_open_statement.py b/addons/point_of_sale/wizard/pos_open_statement.py
index 0b8219d949b..67c5b125768 100644
--- a/addons/point_of_sale/wizard/pos_open_statement.py
+++ b/addons/point_of_sale/wizard/pos_open_statement.py
@@ -21,7 +21,6 @@
from osv import osv
from tools.translate import _
-import time
class pos_open_statement(osv.osv_memory):
_name = 'pos.open.statement'
@@ -42,7 +41,8 @@ class pos_open_statement(osv.osv_memory):
statement_obj = self.pool.get('account.bank.statement')
sequence_obj = self.pool.get('ir.sequence')
journal_obj = self.pool.get('account.journal')
- cr.execute("""select DISTINCT journal_id from pos_journal_users where user_id=%d order by journal_id"""%(uid))
+ cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
+ "WHERE user_id=%s ORDER BY journal_id"% (uid,))
j_ids = map(lambda x1: x1[0], cr.fetchall())
journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)])
@@ -50,32 +50,17 @@ class pos_open_statement(osv.osv_memory):
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)])
if len(ids):
raise osv.except_osv(_('Message'), _('You can not open a Cashbox for "%s".\nPlease close its related Register.' %(journal.name)))
-
- statement_ids = sorted(statement_obj.search(cr, uid, [('state', '=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)]))
- if statement_ids:
- res = []
- statement_ids.reverse()
- statement = statement_obj.browse(cr, uid, statement_ids[0])
- for end_bal in statement.ending_details_ids:
- dct = {
- 'pieces': end_bal.pieces,
- 'number': end_bal.number,
- }
- res.append((0, 0, dct))
- data['starting_details_ids'] = res
- else:
- data['starting_details_ids'] = statement_obj._get_cash_close_box_lines(cr, uid, [])
-
+
number = ''
if journal.sequence_id:
number = sequence_obj.get_id(cr, uid, journal.sequence_id.id)
else:
- number = sequence_obj.get(cr, uid, 'account.bank.statement')
+ number = sequence_obj.get(cr, uid, 'account.cash.statement')
data.update({'journal_id': journal.id,
'company_id': company_id,
'user_id': uid,
- 'state': 'open',
+ 'state': 'draft',
'name': number })
statement_id = statement_obj.create(cr, uid, data)
statement_obj.button_open(cr, uid, [statement_id], context)
diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py
index 8330be2772c..1c92ad24132 100644
--- a/addons/point_of_sale/wizard/pos_payment.py
+++ b/addons/point_of_sale/wizard/pos_payment.py
@@ -42,7 +42,8 @@ class pos_make_payment(osv.osv_memory):
active_id = context and context.get('active_id',False)
if active_id:
j_obj = self.pool.get('account.journal')
- cr.execute("""select DISTINCT journal_id from pos_journal_users where user_id=%d order by journal_id"""%(uid))
+ cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
+ "WHERE user_id=%d ORDER BY journal_id"% (uid,))
j_ids = map(lambda x1: x1[0], cr.fetchall())
journal = j_obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)])
@@ -78,7 +79,7 @@ class pos_make_payment(osv.osv_memory):
return res
def view_init(self, cr, uid, fields_list, context=None):
- res = super(pos_make_payment, self).view_init(cr, uid, fields_list, context=context)
+ super(pos_make_payment, self).view_init(cr, uid, fields_list, context=context)
active_id = context and context.get('active_id', False) or False
if active_id:
order = self.pool.get('pos.order').browse(cr, uid, active_id)
diff --git a/addons/point_of_sale/wizard/pos_payment.xml b/addons/point_of_sale/wizard/pos_payment.xml
index 36c92664e0b..58b4dc447cd 100644
--- a/addons/point_of_sale/wizard/pos_payment.xml
+++ b/addons/point_of_sale/wizard/pos_payment.xml
@@ -1,9 +1,7 @@
-
-
-"""
+
@@ -12,30 +10,38 @@
form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py
index dfc16e0ff96..99e697ea826 100644
--- a/addons/point_of_sale/wizard/pos_return.py
+++ b/addons/point_of_sale/wizard/pos_return.py
@@ -123,9 +123,9 @@ class pos_return(osv.osv_memory):
+ string="Return with Exchange" type="object"/>
+ string="Refund Without Exchange" type="object"/>
"""
result['arch'] = _moves_arch_lst
@@ -162,6 +162,7 @@ class pos_return(osv.osv_memory):
stock_move_obj = self.pool.get('stock.move')
property_obj= self.pool.get("ir.property")
uom_obj =self. pool.get('product.uom')
+ statementl_obj = self.pool.get('account.bank.statement.line')
wf_service = netsvc.LocalService("workflow")
#Todo :Need to clean the code
if active_id:
@@ -171,7 +172,9 @@ class pos_return(osv.osv_memory):
for order_id in order_obj.browse(cr, uid, [active_id], context=context):
prop_ids = property_obj.search(cr, uid,[('name', '=', 'property_stock_customer')])
val = property_obj.browse(cr, uid, prop_ids[0]).value_reference
- cr.execute("select s.id from stock_location s, stock_warehouse w where w.lot_stock_id=s.id and w.id= %d "%(order_id.shop_id.warehouse_id.id))
+ cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w "
+ "WHERE w.lot_stock_id=s.id AND w.id=%s ",
+ (order_id.shop_id.warehouse_id.id,))
res = cr.fetchone()
location_id = res and res[0] or None
stock_dest_id = val.id
@@ -185,10 +188,13 @@ class pos_return(osv.osv_memory):
'lines':[],
'statement_ids':[],
'picking_id':[]})
+ account_def = property_obj.get(cr, uid, 'property_account_payable', 'res.partner', context=context)
+ amount = 0.0
for line in order_id.lines:
if line.id:
try:
qty = data['return%s' %line.id]
+ amount += qty * line.price_unit
except :
qty = line.qty
stock_move_obj.create(cr, uid, {
@@ -200,10 +206,19 @@ class pos_return(osv.osv_memory):
'product_id': line.product_id.id,
'location_dest_id': stock_dest_id,
'name': '%s (return)' %order_id.name,
- 'date': date_cur,
- 'date_planned': date_cur
+ 'date': date_cur
})
- line_obj.copy(cr, uid, line.id, {'qty': -qty, 'order_id': new_order})
+ if qty != 0.0:
+ line_obj.copy(cr, uid, line.id, {'qty': -qty, 'order_id': new_order})
+ statementl_obj.create(cr, uid, {
+ 'name': 'Refund %s'%order_id.name,
+ 'statement_id': order_id.statement_ids[0].statement_id.id,
+ 'pos_statement_id': new_order,
+ 'date': time.strftime('%Y-%m-%d'),
+ 'account_id': order_id.partner_id and order_id.partner_id.property_account_payable \
+ and order_id.partner_id.property_account_payable.id or account_def.id,
+ 'amount': -amount,
+ })
order_obj.write(cr,uid, [active_id,new_order], {'state': 'done'})
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
picking_obj.force_assign(cr, uid, [new_picking], context)
@@ -254,7 +269,9 @@ class add_product(osv.osv_memory):
qty=data['quantity']
prop_ids = property_obj.search(cr, uid, [('name', '=', 'property_stock_customer')])
val = property_obj.browse(cr, uid, prop_ids[0]).value_reference
- cr.execute("select s.id from stock_location s, stock_warehouse w where w.lot_stock_id=s.id and w.id= %d "%(order_id.shop_id.warehouse_id.id))
+ cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w "
+ "WHERE w.lot_stock_id=s.id AND w.id=%s ",
+ (order_id.shop_id.warehouse_id.id,))
res=cr.fetchone()
location_id=res and res[0] or None
stock_dest_id = val.id
@@ -276,8 +293,7 @@ class add_product(osv.osv_memory):
'product_id':prod_id.id,
'location_dest_id':stock_dest_id,
'name':'%s (return)' %order_id.name,
- 'date':date_cur,
- 'date_planned':date_cur
+ 'date':date_cur
})
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
@@ -316,7 +332,9 @@ class add_product(osv.osv_memory):
for order_id in order_obj.browse(cr, uid, active_ids, context=context):
prop_ids =property_obj.search(cr, uid, [('name', '=', 'property_stock_customer')])
val = property_obj.browse(cr, uid, prop_ids[0]).value_reference
- cr.execute("select s.id from stock_location s, stock_warehouse w where w.lot_stock_id=s.id and w.id= %d "%(order_id.shop_id.warehouse_id.id))
+ cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w "
+ " WHERE w.lot_stock_id=s.id AND w.id=%s ",
+ (order_id.shop_id.warehouse_id.id,))
res=cr.fetchone()
location_id=res and res[0] or None
stock_dest_id = val.id
@@ -331,13 +349,13 @@ class add_product(osv.osv_memory):
'date':date_cur
})
for line in order_id.lines:
- key=('return%s') %line.id
+ key= 'return%s' % line.id
if line.id:
if data.has_key(key):
- qty = data['return%s' %line.id]
+ qty = data[key]
lines_obj.write(cr,uid,[line.id], {
- 'qty_rfd':(line.qty or 0.0) + data['return%s' %line.id],
- 'qty':line.qty-(data['return%s' %line.id] or 0.0)
+ 'qty_rfd':(line.qty or 0.0) + data[key],
+ 'qty':line.qty-(data[key] or 0.0)
})
else:
qty = line.qty
@@ -349,9 +367,8 @@ class add_product(osv.osv_memory):
'location_id':location_id,
'product_id':line.product_id.id,
'location_dest_id':stock_dest_id,
- 'name':'%s (return)' %order_id.name,
+ 'name':'%s (return)' % order_id.name,
'date':date_cur,
- 'date_planned':date_cur
})
wf_service.trg_validate(uid, 'stock.picking',new_picking,'button_confirm', cr)
picking_obj.force_assign(cr, uid, [new_picking], context)
diff --git a/addons/process/process_view.xml b/addons/process/process_view.xml
index 72cb18499e2..1a5714437b8 100644
--- a/addons/process/process_view.xml
+++ b/addons/process/process_view.xml
@@ -282,9 +282,6 @@
-
-
-
diff --git a/addons/procurement/board_mrp_procurement_view.xml b/addons/procurement/board_mrp_procurement_view.xml
index d5f71f6d4bc..3b18a876f4f 100644
--- a/addons/procurement/board_mrp_procurement_view.xml
+++ b/addons/procurement/board_mrp_procurement_view.xml
@@ -1,6 +1,15 @@
+
+ Procurement Exceptions
+ ir.actions.act_window
+ procurement.order
+ form
+ tree,form
+ [('state','=','exception')]
+
+
board.mrp.procurement.form
board.board
@@ -8,7 +17,7 @@
form
-
+
diff --git a/addons/procurement/i18n/de.po b/addons/procurement/i18n/de.po
new file mode 100644
index 00000000000..9c99a624274
--- /dev/null
+++ b/addons/procurement/i18n/de.po
@@ -0,0 +1,850 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 08:51+0000\n"
+"PO-Revision-Date: 2010-10-05 13:33+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_make_procurement
+msgid "Make Procurements"
+msgstr ""
+
+#. module: procurement
+#: help:procurement.order.compute.all,automatic:0
+msgid ""
+"Triggers an automatic procurement for all products that have a virtual stock "
+"under 0. You should probably not use this option, we suggest using a MTO "
+"configuration on products."
+msgstr ""
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Group By..."
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Planification"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "No supplier defined for this product !"
+msgstr ""
+
+#. module: procurement
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: procurement
+#: field:make.procurement,uom_id:0
+msgid "Unit of Measure"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,procure_method:0
+msgid "Procurement Method"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "No address defined for the supplier"
+msgstr ""
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.action_procurement_compute
+msgid "Compute Stock Minimum Rules Only"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,company_id:0
+#: field:stock.warehouse.orderpoint,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,product_uos_qty:0
+msgid "UoS Quantity"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+#: field:procurement.order,name:0
+msgid "Reason"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order.compute:0
+msgid "Compute Procurements"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,message:0
+msgid "Latest error"
+msgstr ""
+
+#. module: procurement
+#: help:mrp.property,composition:0
+msgid "Not used in computations, for information purpose only."
+msgstr ""
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,procurement_id:0
+msgid "Latest procurement"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Notes"
+msgstr ""
+
+#. module: procurement
+#: help:procurement.order,message:0
+msgid "Exception occurred while computing procurement orders."
+msgstr ""
+
+#. module: procurement
+#: help:procurement.order,state:0
+msgid ""
+"When a procurement is created the state is set to 'Draft'.\n"
+" If the procurement is confirmed, the state is set to 'Confirmed'. "
+" \n"
+"After confirming the state is set to 'Running'.\n"
+" If any exception arises in the order then the state is set to 'Exception'.\n"
+" Once the exception is removed the state becomes 'Ready'.\n"
+" It is in 'Waiting'. state when the procurement is waiting for another one "
+"to finish."
+msgstr ""
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Minimum Stock Rules Search"
+msgstr ""
+
+#. module: procurement
+#: help:stock.warehouse.orderpoint,product_min_qty:0
+msgid ""
+"When the virtual stock goes belong the Min Quantity, OpenERP generates a "
+"procurement to bring the virtual stock to the Max Quantity."
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order.compute.all:0
+msgid "Scheduler Parameters"
+msgstr ""
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.procurement_action11
+msgid "Temporary Procurement Exceptions"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "has an exception."
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Ready"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order.compute.all,automatic:0
+msgid "Automatic orderpoint"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Confirmed"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Retry"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order.compute:0
+#: view:procurement.orderpoint.compute:0
+msgid "Parameters"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Confirm"
+msgstr ""
+
+#. module: procurement
+#: help:procurement.order,origin:0
+msgid ""
+"Reference of the document that created this Procurement.\n"
+"This is automatically completed by OpenERP."
+msgstr ""
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_stock_warehouse_orderpoint
+msgid "Minimum Inventory Rule"
+msgstr ""
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.procurement_action4
+msgid "Procurement Exceptions to Fix"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,priority:0
+msgid "Priority"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+#: field:procurement.order,state:0
+msgid "State"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,location_id:0
+#: view:stock.warehouse.orderpoint:0
+#: field:stock.warehouse.orderpoint,location_id:0
+msgid "Location"
+msgstr ""
+
+#. module: procurement
+#: field:make.procurement,warehouse_id:0
+#: view:stock.warehouse.orderpoint:0
+#: field:stock.warehouse.orderpoint,warehouse_id:0
+msgid "Warehouse"
+msgstr ""
+
+#. module: procurement
+#: selection:stock.warehouse.orderpoint,logic:0
+msgid "Best price (not yet active!)"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Product & Location"
+msgstr ""
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_procurement_order_compute
+msgid "Compute Procurement"
+msgstr ""
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.procurement_action3
+#: model:ir.module.module,shortdesc:procurement.module_meta_information
+msgid "Procurements"
+msgstr ""
+
+#. module: procurement
+#: field:res.company,schedule_range:0
+msgid "Scheduler Range Days"
+msgstr ""
+
+#. module: procurement
+#: view:make.procurement:0
+msgid "Ask New Products"
+msgstr ""
+
+#. module: procurement
+#: field:make.procurement,date_planned:0
+msgid "Planned Date"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Group By"
+msgstr ""
+
+#. module: procurement
+#: field:make.procurement,qty:0
+#: field:procurement.order,product_qty:0
+msgid "Quantity"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "Not enough stock and no minimum orderpoint rule defined."
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "Invalid action !"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "References"
+msgstr ""
+
+#. module: procurement
+#: view:res.company:0
+msgid "Configuration"
+msgstr ""
+
+#. module: procurement
+#: constraint:ir.cron:0
+msgid "Invalid arguments"
+msgstr ""
+
+#. module: procurement
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: procurement
+#: help:procurement.order,procure_method:0
+msgid ""
+"If you encode manually a Procurement, you probably want to use a make to "
+"order method."
+msgstr ""
+
+#. module: procurement
+#: view:res.company:0
+msgid "MRP & Logistic Scheduler"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order.compute.all:0
+msgid ""
+"Wizard run all the procurements, and generate task, production order or "
+"purchase order based on the product type"
+msgstr ""
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,product_max_qty:0
+msgid "Max Quantity"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Procurement Reason"
+msgstr ""
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_procurement_order
+#: model:process.process,name:procurement.process_process_procurementprocess0
+#: view:procurement.order:0
+msgid "Procurement"
+msgstr ""
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.procurement_action
+msgid "Procurement Orders"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "To Fix"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Exceptions"
+msgstr ""
+
+#. module: procurement
+#: model:process.node,note:procurement.process_node_serviceonorder0
+msgid "Assignment from Production or Purchase Order."
+msgstr ""
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_mrp_property
+msgid "Property"
+msgstr ""
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.act_make_procurement
+#: view:make.procurement:0
+msgid "Procurement Request"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.orderpoint.compute:0
+msgid "Compute Stock"
+msgstr ""
+
+#. module: procurement
+#: model:process.process,name:procurement.process_process_serviceproductprocess0
+msgid "Service"
+msgstr ""
+
+#. module: procurement
+#: model:ir.module.module,description:procurement.module_meta_information
+msgid ""
+"\n"
+" This is the module for computing Procurements.\n"
+" "
+msgstr ""
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,product_min_qty:0
+msgid "Min Quantity"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,priority:0
+msgid "Urgent"
+msgstr ""
+
+#. module: procurement
+#: selection:mrp.property,composition:0
+msgid "plus"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid ""
+"Please check the Quantity in Procurement Order(s), it should not be less "
+"than 1!"
+msgstr ""
+
+#. module: procurement
+#: help:stock.warehouse.orderpoint,product_max_qty:0
+msgid ""
+"When the virtual stock goes belong the Max Quantity, OpenERP generates a "
+"procurement to bring the virtual stock to the Max Quantity."
+msgstr ""
+
+#. module: procurement
+#: help:procurement.orderpoint.compute,automatic:0
+msgid "If the stock of a product is under 0, it will act like an orderpoint"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Procurement Lines"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+#: field:procurement.order,note:0
+msgid "Note"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: procurement
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Status"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "Procurement "
+msgstr ""
+
+#. module: procurement
+#: help:res.company,schedule_range:0
+msgid ""
+"This is the time frame analysed by the scheduler when computing "
+"procurements. All procurements that are not between today and today+range "
+"are skipped for futur computation."
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,priority:0
+msgid "Normal"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order.compute:0
+msgid "This wizard will schedule procurements."
+msgstr ""
+
+#. module: procurement
+#: help:stock.warehouse.orderpoint,active:0
+msgid ""
+"If the active field is set to true, it will allow you to hide the orderpoint "
+"without removing it."
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "is running."
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "Not enough stock "
+msgstr ""
+
+#. module: procurement
+#: model:process.node,name:procurement.process_node_procureproducts0
+msgid "Procure Products"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,date_planned:0
+msgid "Scheduled date"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Exception"
+msgstr ""
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_procurement_orderpoint_compute
+msgid "Automatic Order Point"
+msgstr ""
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,qty_multiple:0
+msgid "Qty Multiple"
+msgstr ""
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Extra Information"
+msgstr ""
+
+#. module: procurement
+#: help:procurement.order,name:0
+msgid "Procurement name."
+msgstr ""
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,active:0
+msgid "Active"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "Qty Multiple must be greater than zero."
+msgstr ""
+
+#. module: procurement
+#: selection:stock.warehouse.orderpoint,logic:0
+msgid "Order to Max"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,date_close:0
+msgid "Date Closed"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Late"
+msgstr ""
+
+#. module: procurement
+#: field:mrp.property,composition:0
+msgid "Properties composition"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "Data Insufficient !"
+msgstr ""
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_mrp_property_group
+#: field:mrp.property,group_id:0
+#: field:mrp.property.group,name:0
+msgid "Property Group"
+msgstr ""
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Misc"
+msgstr ""
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Locations"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,procure_method:0
+msgid "from stock"
+msgstr ""
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "General Information"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Run Procurement"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Done"
+msgstr ""
+
+#. module: procurement
+#: help:stock.warehouse.orderpoint,qty_multiple:0
+msgid "The procurement quantity will by rounded up to this multiple."
+msgstr ""
+
+#. module: procurement
+#: view:make.procurement:0
+#: view:procurement.order:0
+#: selection:procurement.order,state:0
+#: view:procurement.order.compute:0
+#: view:procurement.order.compute.all:0
+#: view:procurement.orderpoint.compute:0
+msgid "Cancel"
+msgstr ""
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,logic:0
+msgid "Reordering Mode"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,origin:0
+msgid "Source Document"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,priority:0
+msgid "Not urgent"
+msgstr ""
+
+#. module: procurement
+#: model:ir.model,name:procurement.model_procurement_order_compute_all
+msgid "Compute all schedulers"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Current"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "Project_mrp module not installed !"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Details"
+msgstr ""
+
+#. module: procurement
+#: view:board.board:0
+#: model:ir.actions.act_window,name:procurement.procurement_action5
+msgid "Procurement Exceptions"
+msgstr ""
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.act_procurement_2_stock_warehouse_orderpoint
+#: model:ir.actions.act_window,name:procurement.act_product_product_2_stock_warehouse_orderpoint
+#: model:ir.actions.act_window,name:procurement.act_stock_warehouse_2_stock_warehouse_orderpoint
+#: model:ir.actions.act_window,name:procurement.action_orderpoint_form
+#: view:stock.warehouse.orderpoint:0
+msgid "Minimum Stock Rules"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,close_move:0
+msgid "Close Move at end"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Scheduled Date"
+msgstr ""
+
+#. module: procurement
+#: field:make.procurement,product_id:0
+#: view:procurement.order:0
+#: field:procurement.order,product_id:0
+#: field:stock.warehouse.orderpoint,product_id:0
+msgid "Product"
+msgstr ""
+
+#. module: procurement
+#: field:mrp.property,description:0
+#: field:mrp.property.group,description:0
+msgid "Description"
+msgstr ""
+
+#. module: procurement
+#: selection:mrp.property,composition:0
+msgid "min"
+msgstr ""
+
+#. module: procurement
+#: view:stock.warehouse.orderpoint:0
+msgid "Quantity Rules"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Running"
+msgstr ""
+
+#. module: procurement
+#: field:stock.warehouse.orderpoint,product_uom:0
+msgid "Product UOM"
+msgstr ""
+
+#. module: procurement
+#: model:process.node,name:procurement.process_node_serviceonorder0
+msgid "Make to Order"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "UOM"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,state:0
+msgid "Waiting"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,procure_method:0
+msgid "on order"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,move_id:0
+msgid "Reservation"
+msgstr ""
+
+#. module: procurement
+#: model:process.node,note:procurement.process_node_procureproducts0
+msgid "The way to procurement depends on the product type."
+msgstr ""
+
+#. module: procurement
+#: view:make.procurement:0
+msgid ""
+"This wizard will plan the procurement for this product. This procurement may "
+"generate task, production orders or purchase orders."
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "is done."
+msgstr ""
+
+#. module: procurement
+#: field:mrp.property,name:0
+#: field:stock.warehouse.orderpoint,name:0
+msgid "Name"
+msgstr ""
+
+#. module: procurement
+#: selection:mrp.property,composition:0
+msgid "max"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,product_uos:0
+msgid "Product UoS"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid "from stock: products assigned."
+msgstr ""
+
+#. module: procurement
+#: model:ir.actions.act_window,name:procurement.action_compute_schedulers
+#: view:procurement.order.compute.all:0
+msgid "Compute Schedulers"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.orderpoint.compute:0
+msgid ""
+"Wizard checks all the stock minimum rules and generate procurement order."
+msgstr ""
+
+#. module: procurement
+#: field:procurement.order,product_uom:0
+msgid "Product UoM"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Search Procurement"
+msgstr ""
+
+#. module: procurement
+#: selection:procurement.order,priority:0
+msgid "Very Urgent"
+msgstr ""
+
+#. module: procurement
+#: field:procurement.orderpoint.compute,automatic:0
+msgid "Automatic Orderpoint"
+msgstr ""
+
+#. module: procurement
+#: view:procurement.order:0
+msgid "Procurement Details"
+msgstr ""
+
+#. module: procurement
+#: code:addons/procurement/procurement.py:0
+#, python-format
+msgid ""
+"Cannot delete Procurement Order(s) which are in %s State!' % s['state']))\n"
+" return osv.osv.unlink(self, cr, uid, unlink_ids, context=context)\n"
+"\n"
+" def onchange_product_id(self, cr, uid, ids, product_id, context={}):\n"
+" \"\"\" Finds UoM and UoS of changed product.\n"
+" @param product_id: Changed id of product.\n"
+" @return: Dictionary of values.\n"
+" \"\"\"\n"
+" if product_id:\n"
+" w = self.pool.get('product.product"
+msgstr ""
+
+#. module: procurement
+#: constraint:ir.rule:0
+msgid "Rules are not supported for osv_memory objects !"
+msgstr ""
diff --git a/addons/procurement/i18n/ru.po b/addons/procurement/i18n/ru.po
index 4aa9937c935..ed26402d8b0 100644
--- a/addons/procurement/i18n/ru.po
+++ b/addons/procurement/i18n/ru.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-08-20 08:51+0000\n"
-"PO-Revision-Date: 2010-09-29 16:40+0000\n"
+"PO-Revision-Date: 2010-09-30 06:44+0000\n"
"Last-Translator: Chertykov Denis \n"
"Language-Team: Russian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-30 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-10-01 08:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: procurement
diff --git a/addons/procurement/process/procurement_process.xml b/addons/procurement/process/procurement_process.xml
index 42ee50782a1..955d9cf6416 100644
--- a/addons/procurement/process/procurement_process.xml
+++ b/addons/procurement/process/procurement_process.xml
@@ -12,7 +12,7 @@
-
+
@@ -28,7 +28,7 @@
-
+
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index e1b9b5af40b..4f0d3530a80 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -157,34 +157,19 @@ class procurement_order(osv.osv):
""" Checks product type.
@return: True or False
"""
- for procurement in self.browse(cr, uid, ids):
- if procurement.product_id.type in ('product', 'consu'):
- return True
- return False
+ return all(procurement.product_id.type in ('product', 'consu') for procurement in self.browse(cr, uid, ids))
def check_move_cancel(self, cr, uid, ids, context={}):
""" Checks if move is cancelled or not.
@return: True or False.
"""
- res = True
- ok = False
- for procurement in self.browse(cr, uid, ids, context):
- if procurement.move_id:
- ok = True
- if not procurement.move_id.state == 'cancel':
- res = False
- return res and ok
+ return all(procurement.move_id.state == 'cancel' for procurement in self.browse(cr, uid, ids))
def check_move_done(self, cr, uid, ids, context={}):
""" Checks if move is done or not.
@return: True or False.
"""
- res = True
- for proc in self.browse(cr, uid, ids, context):
- if proc.move_id:
- if not proc.move_id.state == 'done':
- res = False
- return res
+ return all(procurement.move_id.state == 'done' for procurement in self.browse(cr, uid, ids))
#
# This method may be overrided by objects that override procurement.order
@@ -337,15 +322,16 @@ class procurement_order(osv.osv):
if procurement.procure_method == 'make_to_order':
source = procurement.product_id.product_tmpl_id.property_stock_procurement.id
id = move_obj.create(cr, uid, {
- 'name': 'PROC:' + procurement.name,
+ 'name': procurement.name,
'location_id': source,
'location_dest_id': procurement.location_id.id,
'product_id': procurement.product_id.id,
'product_qty': procurement.product_qty,
'product_uom': procurement.product_uom.id,
- 'date_planned': procurement.date_planned,
+ 'date_expected': procurement.date_planned,
'state': 'draft',
'company_id': procurement.company_id.id,
+ 'auto_validate': True,
})
move_obj.action_confirm(cr, uid, [id], context=context)
self.write(cr, uid, [procurement.id], {'move_id': id, 'close_move': 1})
@@ -388,10 +374,6 @@ class procurement_order(osv.osv):
"Not enough stock and no minimum orderpoint rule defined.") % \
procurement.name
self.log(cr, uid, procurement.id, message)
- if procurement.state=='exception' and procurement.message=='':
- cr.execute('update procurement_order set message=%s where id=%s',
- (_('Not enough stock '), procurement.id) )
-
return ok
def action_produce_assign_service(self, cr, uid, ids, context={}):
@@ -439,7 +421,7 @@ class procurement_order(osv.osv):
wf_service.trg_trigger(uid, 'procurement.order', id, cr)
return True
- def action_check_finnished(self, cr, uid, ids):
+ def action_check_finished(self, cr, uid, ids):
return self.check_move_done(cr, uid, ids)
def action_check(self, cr, uid, ids):
@@ -492,9 +474,9 @@ procurement_order()
class StockPicking(osv.osv):
_inherit = 'stock.picking'
- def test_finnished(self, cursor, user, ids):
+ def test_finished(self, cursor, user, ids):
wf_service = netsvc.LocalService("workflow")
- res = super(StockPicking, self).test_finnished(cursor, user, ids)
+ res = super(StockPicking, self).test_finished(cursor, user, ids)
for picking in self.browse(cursor, user, ids):
for move in picking.move_lines:
if move.state == 'done' and move.procurements:
diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml
index 1e6395c660e..3c9bff9be9c 100644
--- a/addons/procurement/procurement_view.xml
+++ b/addons/procurement/procurement_view.xml
@@ -23,6 +23,21 @@
+
+
+ procurement.order.tree.board
+ procurement.order
+ tree
+
+
+
+
+
+
+
+
+
+
procurement.order.form
@@ -57,9 +72,9 @@
+
-
@@ -85,11 +100,13 @@
-
-
+
+
+
+
@@ -106,29 +123,29 @@
+
Procurement Orders
ir.actions.act_window
procurement.order
form
- {'search_default_current':1}
- {'search_default_Current':1}
- The procurement order will schedule a proposal for automatic procurement for the product concerned. This procurement will start a task, a purchase order form for the supplier or a production depending on the product configuration.
+ {'search_default_current':1}
+ Procurement Orders represent the need for a certain quantity of products, at a given time, in a given location. Sale Orders are one typical source of Procurement Orders (but these are distinct documents). Depending on the procurement parameters and the products configuration, the procurement engine will attempt to satisfy the need by reserving products from stock, or ordering products from a supplier, or passing a manufacturing order, etc.
-
- Procurements
+
+ Procurement Exceptions
ir.actions.act_window
procurement.order
form
tree,form
+ {'search_default_perm_exceptions':1}
- []
- {}
+ Procurement Orders represent the need for a certain quantity of products, at a given time, in a given location. Sale Orders are one typical source of Procurement Orders (but these are distinct documents). Depending on the procurement parameters and the products configuration, the procurement engine will attempt to satisfy the need by reserving products from stock, or ordering products from a supplier, or passing a manufacturing order, etc. A Procurement Exception occurs when the system cannot find a way to fulfill a procurement. Some exceptions will resolve themselves automatically, but others require manual intervention (those are identified by a specific error message)
-
+
Procurement Exceptions
ir.actions.act_window
@@ -136,26 +153,6 @@
form
tree,form
[('state','=','exception')]
- For each customer order line or raw materials in a manufacturing order, there is a procurement form . In normal system use, procurement orders are automatically generated by OpenERP. But if there are configuration problems, the system can remain blocked by a procurement without generating a corresponding document. It is a procurement exception. Some problems are link to timing and will be correct automatically by the system. If there is no procurement rule, the exception must be corrected manually.
-
-
-
- Procurement Exceptions to Fix
- ir.actions.act_window
- procurement.order
- form
- tree,form
- [('state','=','exception'), ('message', '<>', '')]
-
-
-
-
- Temporary Procurement Exceptions
- ir.actions.act_window
- procurement.order
- form
- tree,form
- [('state','=','exception'), ('message', '=', '')]
@@ -263,8 +260,12 @@
res_model="stock.warehouse.orderpoint"
src_model="procurement.order"/>
-
-
-
+
+
+
+
+
+
+
diff --git a/addons/procurement/procurement_workflow.xml b/addons/procurement/procurement_workflow.xml
index ff4325e248f..b4bcd1e1f04 100644
--- a/addons/procurement/procurement_workflow.xml
+++ b/addons/procurement/procurement_workflow.xml
@@ -187,7 +187,7 @@
- action_check_finnished()
+ action_check_finished()
stock.move
[move_id.id]
diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py
index 777a8de45cc..9abdf3d1ff5 100644
--- a/addons/procurement/schedulers.py
+++ b/addons/procurement/schedulers.py
@@ -23,8 +23,10 @@ import time
from mx import DateTime
from osv import osv
+from tools.translate import _
import netsvc
import pooler
+from tools.translate import _
class procurement_order(osv.osv):
_inherit = 'procurement.order'
@@ -170,8 +172,8 @@ class procurement_order(osv.osv):
else:
continue
proc_id = proc_obj.create(cr, uid, {
- 'name': 'Automatic OP: %s' % product.name,
- 'origin': 'SCHEDULER',
+ 'name': _('Automatic OP: %s') % (product.name,),
+ 'origin': _('SCHEDULER'),
'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
'product_id': product.id,
'product_qty': -product.virtual_available,
@@ -236,12 +238,12 @@ class procurement_order(osv.osv):
continue
if op.product_id.type not in ('consu'):
proc_id = procurement_obj.create(cr, uid, {
- 'name': 'OP:' + str(op.id),
+ 'name': op.name,
'date_planned': newdate.strftime('%Y-%m-%d'),
'product_id': op.product_id.id,
'product_qty': qty,
'product_uom': op.product_uom.id,
- 'location_id': op.warehouse_id.lot_input_id.id,
+ 'location_id': op.location_id.id,
'procure_method': 'make_to_order',
'origin': op.name
})
diff --git a/addons/product/__init__.py b/addons/product/__init__.py
index 3052a02d212..4247b49d41b 100644
--- a/addons/product/__init__.py
+++ b/addons/product/__init__.py
@@ -23,6 +23,5 @@ import pricelist
import report
import partner
import wizard
-import company
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/product/__openerp__.py b/addons/product/__openerp__.py
index 5d099489859..851031e0424 100644
--- a/addons/product/__openerp__.py
+++ b/addons/product/__openerp__.py
@@ -55,7 +55,6 @@
'product_view.xml',
'pricelist_view.xml',
'partner_view.xml',
- 'company_view.xml',
'process/product_process.xml'
],
'test':['test/product_report.yml'],
diff --git a/addons/product/company.py b/addons/product/company.py
deleted file mode 100644
index 0f248dba309..00000000000
--- a/addons/product/company.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 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
-
-
-class res_company(osv.osv):
- _inherit = 'res.company'
- _columns = {
- 'property_valuation_price_type': fields.property(
- 'product.price.type',
- type='many2one',
- relation='product.price.type',
- domain=[],
- string="Valuation Price Type",
- method=True,
- view_load=True,
- help="The price type field in the selected price type will be used, instead of the default one, \
- for valuation of product in the current company"),
- }
-
-res_company()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/product/company_view.xml b/addons/product/company_view.xml
deleted file mode 100644
index eb0294e2daa..00000000000
--- a/addons/product/company_view.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
- res.company.product.property.form.inherit
- res.company
- form
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/product/i18n/eu.po b/addons/product/i18n/eu.po
new file mode 100644
index 00000000000..f01bcd3abda
--- /dev/null
+++ b/addons/product/i18n/eu.po
@@ -0,0 +1,1704 @@
+# Basque translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+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-10-08 07:29+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Basque \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-09 12:13+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Max. Margin"
+msgstr "Gehienezko Margina"
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Base Price"
+msgstr "Oinarrizko Prezioa"
+
+#. module: product
+#: help:product.template,standard_price:0
+msgid ""
+"The cost of the product for accounting stock valuation. It can serves as a "
+"base price for supplier price."
+msgstr ""
+
+#. module: product
+#: selection:product.template,type:0
+msgid "Service"
+msgstr "Zerbitzua"
+
+#. module: product
+#: help:product.template,purchase_ok:0
+msgid ""
+"Determine if the product is visible in the list of products within a "
+"selection from a purchase order line."
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,name:0
+msgid "Supplier of this product"
+msgstr "Produktu honen hornitzailea"
+
+#. module: product
+#: model:product.template,name:product.product_product_ram512_product_template
+msgid "DDR 512MB PC400"
+msgstr "DDR 512MB PC400"
+
+#. module: product
+#: model:product.template,name:product.product_product_0_product_template
+msgid "Onsite Senior Intervention"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,qty:0
+msgid ""
+"The minimal quantity to purchase for this supplier, expressed in the default "
+"unit of measure."
+msgstr ""
+
+#. module: product
+#: field:product.template,weight_net:0
+msgid "Net weight"
+msgstr ""
+
+#. module: product
+#: help:product.product,incoming_qty:0
+msgid ""
+"Quantities of products that are planned to arrive in selected locations or "
+"all internal if none have been selected."
+msgstr ""
+
+#. module: product
+#: help:product.product,virtual_available:0
+msgid ""
+"Futur stock for this product according to the selected location or all "
+"internal if none have been selected. Computed as: Real Stock - Outgoing + "
+"Incoming."
+msgstr ""
+
+#. module: product
+#: field:product.packaging,width:0
+msgid "Width"
+msgstr "Zabalera"
+
+#. module: product
+#: help:product.pricelist.item,product_tmpl_id:0
+msgid ""
+"Set a template if this rule only apply to a template of product. Keep empty "
+"for all products"
+msgstr ""
+
+#. module: product
+#: field:product.template,procure_method:0
+msgid "Procure Method"
+msgstr "Hornitzeko Modua"
+
+#. module: product
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: product
+#: model:process.process,name:product.process_process_productprocess0
+msgid "Product Process"
+msgstr ""
+
+#. module: product
+#: help:product.price.type,field:0
+msgid "Associated field in the product form."
+msgstr ""
+
+#. module: product
+#: selection:product.template,cost_method:0
+msgid "Standard Price"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,height:0
+msgid "The height of the package"
+msgstr "Paketearen altuera"
+
+#. module: product
+#: view:product.pricelist:0
+msgid "Products Price List"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.cat1
+msgid "Sellable"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_26_product_template
+msgid "Kit Keyboard + Mouse"
+msgstr "Teklatu eta Saguko Multzoa"
+
+#. module: product
+#: field:product.price.type,name:0
+msgid "Price Name"
+msgstr ""
+
+#. module: product
+#: field:product.product,price:0
+msgid "Customer Price"
+msgstr ""
+
+#. module: product
+#: field:product.template,company_id:0
+msgid "Company"
+msgstr "Enpresa"
+
+#. module: product
+#: field:product.template,rental:0
+msgid "Rentable Product"
+msgstr "Produktu Alokagarria"
+
+#. module: product
+#: field:product.product,lst_price:0
+msgid "List Price"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_price_type_action
+#: model:ir.ui.menu,name:product.menu_product_price_type_action
+msgid "Prices Types"
+msgstr ""
+
+#. module: product
+#: selection:product.template,type:0
+msgid "Stockable Product"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_services
+msgid "Services"
+msgstr "Zerbitzuak"
+
+#. module: product
+#: help:product.template,list_price:0
+msgid ""
+"Base price for computing the customer price. Sometimes called the catalog "
+"price."
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,min_quantity:0
+msgid "Quantity"
+msgstr "Kopurua"
+
+#. module: product
+#: model:product.template,name:product.product_product_cpu3_product_template
+msgid "Processor AMD Athlon XP 2200+"
+msgstr "AMD Athlon XP 2200+ Prozesadorea"
+
+#. module: product
+#: help:product.price.type,name:0
+msgid "Name of this kind of price."
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.version,date_start:0
+msgid "Starting date for this pricelist version to be valid."
+msgstr ""
+
+#. module: product
+#: field:product.product,incoming_qty:0
+msgid "Incoming"
+msgstr ""
+
+#. module: product
+#: selection:product.template,procure_method:0
+msgid "Make to Stock"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Weigths"
+msgstr "Pisuak"
+
+#. module: product
+#: model:product.template,name:product.product_product_fan2_product_template
+msgid "Silent fan"
+msgstr "Haizagailu Isila"
+
+#. module: product
+#: help:product.template,supply_method:0
+msgid ""
+"Produce will generate production order or tasks, according to the product "
+"type. Purchase will trigger purchase orders when requested."
+msgstr ""
+
+#. module: product
+#: model:process.transition,note:product.process_transition_supplierofproduct0
+msgid "You can see the list of suppliers for that product."
+msgstr "Produktu horren hornitzaileen zerrenda ikus dezakezu."
+
+#. module: product
+#: help:product.packaging,rows:0
+msgid "The number of layer on a palet or box"
+msgstr ""
+
+#. module: product
+#: model:product.pricelist.type,name:product.pricelist_type_sale
+#: field:res.partner,property_product_pricelist:0
+msgid "Sale Pricelist"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,base_pricelist_id:0
+msgid "If Other Pricelist"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_normal_action
+#: model:ir.actions.act_window,name:product.product_normal_action_tree
+#: model:ir.ui.menu,name:product.menu_main_product
+#: model:ir.ui.menu,name:product.menu_products
+#: view:product.product:0
+msgid "Products"
+msgstr "Produktuak"
+
+#. module: product
+#: help:product.pricelist.item,price_round:0
+msgid ""
+"Sets the price so that it is a multiple of this value.\n"
+"Rounding is applied after the discount and before the surcharge.\n"
+"To have prices that end in 9.99, set rounding 10, surcharge -0.01"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "New Price ="
+msgstr "Prezio Berria ="
+
+#. module: product
+#: field:product.product,virtual_available:0
+msgid "Virtual Stock"
+msgstr ""
+
+#. module: product
+#: selection:product.template,mes_type:0
+msgid "Fixed"
+msgstr "Finkoa"
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_uom_categ_form_action
+#: model:ir.ui.menu,name:product.menu_product_uom_categ_form_action
+msgid "Units of Measure Categories"
+msgstr "Neurtzeko Unitateen Kategoriak"
+
+#. module: product
+#: help:product.pricelist.item,product_id:0
+msgid ""
+"Set a product if this rule only apply to one product. Keep empty for all "
+"products"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist_type
+#: field:product.pricelist,type:0
+#: view:product.pricelist.type:0
+msgid "Pricelist Type"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Base Prices"
+msgstr "Oinarrizko Prezioak"
+
+#. module: product
+#: model:ir.ui.menu,name:product.menu_price
+msgid "Prices Computations"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,name:0
+msgid "Rule Name"
+msgstr ""
+
+#. module: product
+#: model:ir.ui.menu,name:product.menu_config_product
+msgid "Configuration"
+msgstr "Konfigurazioa"
+
+#. module: product
+#: field:product.packaging,rows:0
+msgid "Number of Layer"
+msgstr ""
+
+#. module: product
+#: constraint:product.category:0
+msgid "Error ! You can not create recursive categories."
+msgstr "Errorea! Ezin dituzu kategoria errekurtsiboak sortu."
+
+#. module: product
+#: field:product.template,uom_id:0
+msgid "Default UoM"
+msgstr "NU Lehenetsia"
+
+#. module: product
+#: field:product.template,produce_delay:0
+msgid "Manufacturing Lead Time"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,pricelist_ids:0
+msgid "Supplier Pricelist"
+msgstr ""
+
+#. module: product
+#: view:product.packaging:0
+#: view:product.product:0
+msgid "Pallet Dimension"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,base:0
+msgid "Based on"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_24_product_template
+msgid "Keyboard"
+msgstr "Teklatua"
+
+#. module: product
+#: field:product.supplierinfo,name:0
+msgid "Partner"
+msgstr "Kidea"
+
+#. module: product
+#: field:product.template,sale_delay:0
+msgid "Customer Lead Time"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_25_product_template
+msgid "Mouse"
+msgstr "Sagua"
+
+#. module: product
+#: help:product.template,cost_method:0
+msgid ""
+"Standard Price: the cost price is fixed and recomputed periodically (usually "
+"at the end of the year), Average Price: the cost price is recomputed at each "
+"reception of products."
+msgstr ""
+
+#. module: product
+#: field:product.pricelist,name:0
+msgid "Pricelist Name"
+msgstr ""
+
+#. module: product
+#: field:product.template,seller_ids:0
+msgid "Partners"
+msgstr "Kideak"
+
+#. module: product
+#: selection:product.template,cost_method:0
+msgid "Average Price"
+msgstr "Batazbesteko Prezioa"
+
+#. module: product
+#: model:process.node,note:product.process_node_product0
+msgid "Create new Product"
+msgstr "Produktu berria sortu"
+
+#. module: product
+#: help:product.pricelist.item,name:0
+msgid "Explicit rule name for this pricelist line."
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Min. Margin"
+msgstr "Margin Minimoa"
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "* ( 1 + "
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_cpu1_product_template
+msgid "Processor AMD Athlon XP 1800+"
+msgstr "AMD Athlon XP 1800+ Prozesadorea"
+
+#. module: product
+#: selection:product.template,state:0
+msgid "In Production"
+msgstr "Produkzioan"
+
+#. module: product
+#: field:product.category,child_id:0
+msgid "Child Categories"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_accessories
+msgid "Accessories"
+msgstr "Osagaiak"
+
+#. module: product
+#: field:product.supplierinfo,sequence:0
+msgid "Priority"
+msgstr "Lehentasuna"
+
+#. module: product
+#: model:product.template,name:product.product_product_20_product_template
+msgid "HDD on demand"
+msgstr ""
+
+#. module: product
+#: field:product.uom,factor_inv:0
+#: field:product.uom,factor_inv_data:0
+msgid "Factor"
+msgstr "Faktorea"
+
+#. module: product
+#: wizard_button:product.price_list,init,price:0
+msgid "Print"
+msgstr "Inprimatu"
+
+#. module: product
+#: model:process.node,name:product.process_node_supplier0
+msgid "Supplier Info"
+msgstr ""
+
+#. module: product
+#: field:product.ul,type:0
+msgid "Type"
+msgstr "Mota"
+
+#. module: product
+#: wizard_field:product.price_list,init,price_list:0
+msgid "PriceList"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "UOM"
+msgstr "NU"
+
+#. module: product
+#: model:product.uom,name:product.product_uom_unit
+msgid "PCE"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_pricelist_action2
+#: model:ir.ui.menu,name:product.menu_product_pricelist_action2
+#: model:ir.ui.menu,name:product.menu_product_pricelist_main
+msgid "Pricelists"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,product_name:0
+msgid "Partner Product Name"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Miscelleanous"
+msgstr "Bestelakoak"
+
+#. module: product
+#: help:product.pricelist.item,base:0
+msgid "The mode for computing the price for this rule."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_uom_form_action
+#: model:ir.ui.menu,name:product.menu_product_uom_form_action
+#: model:ir.ui.menu,name:product.next_id_16
+#: view:product.uom:0
+msgid "Units of Measure"
+msgstr "Neurtze Unitateak"
+
+#. module: product
+#: field:product.product,partner_ref:0
+msgid "Customer ref"
+msgstr "Bezero erref."
+
+#. module: product
+#: field:product.supplierinfo,qty:0
+msgid "Minimal Quantity"
+msgstr "Kopuru Minimoa"
+
+#. module: product
+#: model:product.category,name:product.product_category_pc
+msgid "PC"
+msgstr "PC"
+
+#. module: product
+#: help:product.template,seller_delay:0
+msgid ""
+"This is the average delay in days between the purchase order confirmation "
+"and the reception of goods for this product and for the default supplier. It "
+"is used by the scheduler to order requests based on reordering delays."
+msgstr ""
+
+#. module: product
+#: field:product.template,seller_delay:0
+msgid "Supplier Lead Time"
+msgstr ""
+
+#. module: product
+#: model:product.pricelist.version,name:product.ver0
+msgid "Default Public Pricelist Version"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.type,key:0
+msgid "Key"
+msgstr "Gakoa"
+
+#. module: product
+#: field:product.pricelist.item,price_version_id:0
+msgid "Price List Version"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Rules Test Match"
+msgstr ""
+
+#. module: product
+#: help:res.partner,property_product_pricelist:0
+msgid ""
+"This pricelist will be used, instead of the default one, "
+"for sales to the current partner"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist
+#: view:product.supplierinfo:0
+msgid "Pricelist"
+msgstr ""
+
+#. module: product
+#: selection:product.template,type:0
+msgid "Consumable"
+msgstr ""
+
+#. module: product
+#: help:product.price.type,currency_id:0
+msgid "The currency the field is expressed in."
+msgstr ""
+
+#. module: product
+#: help:product.template,weight:0
+msgid "The gross weight in Kg."
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+msgid "Box"
+msgstr "Kutxa"
+
+#. module: product
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "XML ezegokia Ikuspegi Arkitekturarako!"
+
+#. module: product
+#: help:product.template,sale_ok:0
+msgid ""
+"Determine if the product can be visible in the list of product within a "
+"selection from a sale order line."
+msgstr ""
+
+#. module: product
+#: constraint:product.template:0
+msgid "Error: UOS must be in a different category than the UOM"
+msgstr ""
+
+#. module: product
+#: field:product.category,parent_id:0
+msgid "Parent Category"
+msgstr "Goi kategoria"
+
+#. module: product
+#: selection:product.template,state:0
+msgid "In Development"
+msgstr "Garapenean"
+
+#. module: product
+#: help:product.pricelist.type,key:0
+msgid ""
+"Used in the code to select specific prices based on the context. Keep "
+"unchanged."
+msgstr ""
+
+#. module: product
+#: help:product.product,outgoing_qty:0
+msgid ""
+"Quantities of products that are planned to leave in selected locations or "
+"all internal if none have been selected."
+msgstr ""
+
+#. module: product
+#: field:product.packaging,weight:0
+msgid "Total Package Weight"
+msgstr "Paketearen Guztirako Pisua"
+
+#. module: product
+#: help:product.template,procure_method:0
+msgid ""
+"'Make to Stock': When needed, take from the stock or wait until re-"
+"supplying. 'Make to Order': When needed, purchase or produce for the "
+"procurement request."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Procurement"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_category_action
+#: model:ir.ui.menu,name:product.menu_product_category_action
+msgid "Products by Category"
+msgstr "Produktuak Kategoriaka"
+
+#. module: product
+#: model:product.template,name:product.product_product_hdd1_product_template
+msgid "HDD Seagate 7200.8 80GB"
+msgstr "Seagate 7200.8 80GB Disko Gogorra"
+
+#. module: product
+#: help:product.pricelist.version,active:0
+msgid ""
+"When a version is duplicated it is set to non active, so that the dates do "
+"not overlaps with original version. You should change the dates and "
+"reactivate the pricelist"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_hdd3_product_template
+msgid "HDD Seagate 7200.8 160GB"
+msgstr "Seagate 7200.8 160GB Disko Gogorra"
+
+#. module: product
+#: view:product.product:0
+msgid "Product Variant"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,ul:0
+msgid "Type of Package"
+msgstr "Pakete Mota"
+
+#. module: product
+#: field:product.template,loc_rack:0
+msgid "Rack"
+msgstr ""
+
+#. module: product
+#: field:product.uom,category_id:0
+msgid "UoM Category"
+msgstr "NU Kategoria"
+
+#. module: product
+#: selection:product.ul,type:0
+msgid "Pack"
+msgstr ""
+
+#. module: product
+#: field:product.product,ean13:0
+msgid "EAN13"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,description_sale:0
+msgid "Sale Description"
+msgstr "Salmenta Deskribapena"
+
+#. module: product
+#: field:product.template,uos_id:0
+msgid "Unit of Sale"
+msgstr "Salmenta Unitatea"
+
+#. module: product
+#: field:product.template,mes_type:0
+msgid "Measure Type"
+msgstr "Neurketa Mota"
+
+#. module: product
+#: model:product.uom.categ,name:product.product_uom_categ_kgm
+msgid "Weight"
+msgstr "Pisua"
+
+#. module: product
+#: model:product.template,name:product.product_product_22_product_template
+msgid "Processor on demand"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,product_name:0
+msgid ""
+"Name of the product for this partner, will be used when printing a request "
+"for quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: product
+#: field:product.template,supply_method:0
+msgid "Supply method"
+msgstr "Hornitzeko modua"
+
+#. module: product
+#: model:product.category,name:product.product_category_11
+msgid "IT components kits"
+msgstr ""
+
+#. module: product
+#: view:product.uom.categ:0
+msgid "Units of Measure categories"
+msgstr "Neurtze Unitateen Kategoriak"
+
+#. module: product
+#: field:product.category,sequence:0
+#: field:product.packaging,sequence:0
+#: field:product.pricelist.item,sequence:0
+msgid "Sequence"
+msgstr "Sekuentzia"
+
+#. module: product
+#: view:product.supplierinfo:0
+msgid "Supplier Information"
+msgstr "Hornitzaile Informazioa"
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_ul_form_action
+#: model:ir.model,name:product.model_product_packaging
+#: model:ir.ui.menu,name:product.menu_product_ul_form_action
+#: view:product.packaging:0
+#: view:product.product:0
+#: view:product.ul:0
+msgid "Packaging"
+msgstr "Paketatzea"
+
+#. module: product
+#: field:product.price.type,currency_id:0
+#: field:product.pricelist,currency_id:0
+msgid "Currency"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_cpu_gen_product_template
+msgid "Regular processor config"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Descriptions"
+msgstr "Deskribapenak"
+
+#. module: product
+#: model:process.transition,name:product.process_transition_supplierofproduct0
+msgid "Suppliers of Product"
+msgstr "Produktu Hornitzaileak"
+
+#. module: product
+#: field:product.pricelist.version,date_start:0
+msgid "Start Date"
+msgstr "Hasiera Data"
+
+#. module: product
+#: view:res.partner:0
+msgid "Sales Properties"
+msgstr "Salmenta Propietateak"
+
+#. module: product
+#: help:product.product,qty_available:0
+msgid ""
+"Current quantities of products in selected locations or all internal if none "
+"have been selected."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_pc1_product_template
+msgid "Basic PC"
+msgstr "Oinarrizko PCa"
+
+#. module: product
+#: field:product.template,loc_row:0
+msgid "Row"
+msgstr "Lerroa"
+
+#. module: product
+#: field:product.template,categ_id:0
+msgid "Category"
+msgstr "Kategoria"
+
+#. module: product
+#: help:product.pricelist.item,min_quantity:0
+msgid ""
+"The rule only applies if the partner buys/sells more than this quantity."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_ram_product_template
+msgid "DDR 256MB PC400"
+msgstr "DDR 256MB PC400"
+
+#. module: product
+#: field:product.product,qty_available:0
+msgid "Real Stock"
+msgstr ""
+
+#. module: product
+#: view:product.category:0
+msgid "Product Categories"
+msgstr "Produktu Kategoriak"
+
+#. module: product
+#: help:product.uom,category_id:0
+msgid ""
+"Unit of Measure of a category can be converted between each others in the "
+"same category."
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_uom
+msgid "Product Unit of Measure"
+msgstr "Produktuaren Neurtze Unitatea"
+
+#. module: product
+#: field:product.template,sale_ok:0
+msgid "Can be sold"
+msgstr "Saldu daiteke"
+
+#. module: product
+#: model:product.template,name:product.product_product_23_product_template
+msgid "Complete PC With Peripherals"
+msgstr "PC Osoa Periferikoekin"
+
+#. module: product
+#: constraint:product.template:0
+msgid ""
+"Error: The default UOM and the purchase UOM must be in the same category."
+msgstr ""
+"Errorea: Defektuzko NU eta hornitzeko NUak kategoria berdinean egon behar "
+"dute."
+
+#. module: product
+#: model:product.template,name:product.product_product_mb2_product_template
+msgid "Mainboard ASUStek A7V8X-X"
+msgstr ""
+
+#. module: product
+#: field:product.uom,factor:0
+msgid "Rate"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Products Listprices Items"
+msgstr ""
+
+#. module: product
+#: field:product.uom,rounding:0
+msgid "Rounding Precision"
+msgstr "Borobiltze Zehaztasuna"
+
+#. module: product
+#: help:product.packaging,width:0
+msgid "The width of the package"
+msgstr "Paketearen zabalera"
+
+#. module: product
+#: field:product.packaging,qty:0
+msgid "Quantity by Package"
+msgstr "Paketeko Kopurua"
+
+#. module: product
+#: help:product.template,uos_id:0
+msgid ""
+"Used by companies that manages two unit of measure: invoicing and inventory "
+"management. For example, in food industries, you will manage a stock of ham "
+"but invoice in Kg. Keep empty to use the default UOM."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Procurement & Locations"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,state:0
+msgid "Status"
+msgstr "Egoera"
+
+#. module: product
+#: field:product.product,outgoing_qty:0
+msgid "Outgoing"
+msgstr ""
+
+#. module: product
+#: selection:product.template,supply_method:0
+msgid "Buy"
+msgstr "Erosi"
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist_version
+#: view:product.pricelist:0
+#: view:product.pricelist.version:0
+msgid "Pricelist Version"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_round:0
+msgid "Price Rounding"
+msgstr "Prezio Borobiltzea"
+
+#. module: product
+#: model:product.price.type,name:product.list_price
+msgid "Public Price"
+msgstr "Prezio Publikoa"
+
+#. module: product
+#: field:product.pricelist.item,price_max_margin:0
+msgid "Max. Price Margin"
+msgstr "Prezio Marjin Maximoa"
+
+#. module: product
+#: view:res.partner:0
+msgid "Sales & Purchases"
+msgstr "Salmetak eta Erosketak"
+
+#. module: product
+#: model:product.category,name:product.product_category_10
+msgid "IT components"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,weight_ul:0
+msgid "The weight of the empty UL"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,code:0
+msgid "The code of the transport unit."
+msgstr ""
+
+#. module: product
+#: field:product.template,uom_po_id:0
+msgid "Purchase UoM"
+msgstr "Hornitzeko NU"
+
+#. module: product
+#: view:product.price.type:0
+msgid "Products Price Type"
+msgstr ""
+
+#. module: product
+#: field:product.template,product_manager:0
+msgid "Product Manager"
+msgstr "Produktu Kudeatzailea"
+
+#. module: product
+#: field:product.product,price_extra:0
+msgid "Variant Price Extra"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_fan_product_template
+msgid "Regular case fan 80mm"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_supplierinfo
+msgid "Information about a product supplier"
+msgstr "Produktu hornitzaile baten inguruko informazioa"
+
+#. module: product
+#: field:product.price.type,active:0
+#: field:product.pricelist,active:0
+#: field:product.pricelist.version,active:0
+#: field:product.product,active:0
+#: field:product.uom,active:0
+msgid "Active"
+msgstr "Gaituta"
+
+#. module: product
+#: field:product.product,price_margin:0
+msgid "Variant Price Margin"
+msgstr ""
+
+#. module: product
+#: wizard_view:product.price_list,init:0
+msgid "Price list"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_pc3_product_template
+msgid "Medium PC"
+msgstr "Tarteko PCa"
+
+#. module: product
+#: model:ir.model,name:product.model_pricelist_partnerinfo
+msgid "pricelist.partnerinfo"
+msgstr ""
+
+#. module: product
+#: model:product.price.type,name:product.standard_price
+#: field:product.template,standard_price:0
+msgid "Cost Price"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,description_purchase:0
+msgid "Purchase Description"
+msgstr "Horniketa Deskribapena"
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Second UoM"
+msgstr "Bigarren NU"
+
+#. module: product
+#: model:product.category,name:product.product_category_4
+msgid "Dello Computer"
+msgstr "Dello Ordenagailua"
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Storage Localisation"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,length:0
+msgid "The length of the package"
+msgstr "Paketearen luzera"
+
+#. module: product
+#: field:product.pricelist.item,price_min_margin:0
+msgid "Min. Price Margin"
+msgstr "Prezio Marjin Minimoa"
+
+#. module: product
+#: help:product.packaging,ean:0
+msgid "The EAN code of the package unit."
+msgstr ""
+
+#. module: product
+#: field:product.template,weight:0
+msgid "Gross weight"
+msgstr ""
+
+#. module: product
+#: help:product.product,packaging:0
+msgid ""
+"Gives the different ways to package the same product. This has no impact on "
+"the packing order and is mainly used if you use the EDI module."
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_category
+#: field:product.pricelist.item,categ_id:0
+msgid "Product Category"
+msgstr "Produktu Kategoria"
+
+#. module: product
+#: field:product.price.type,field:0
+msgid "Product Field"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_pricelist_type_action
+#: model:ir.ui.menu,name:product.menu_product_pricelist_type_action
+msgid "Pricelists Types"
+msgstr ""
+
+#. module: product
+#: help:product.template,state:0
+msgid "Tells the user if he can use the product or not."
+msgstr "Erabiltzaileari produktua erabil dezakeen edo ez esaten dio."
+
+#. module: product
+#: field:product.supplierinfo,product_code:0
+msgid "Partner Product Code"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_3
+msgid "Computer Stuff"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,code:0
+#: field:product.product,code:0
+#: field:product.product,default_code:0
+msgid "Code"
+msgstr "Kodea"
+
+#. module: product
+#: help:product.uom,factor_inv:0
+msgid ""
+"The coefficient for the formula:\n"
+"coeff (base unit) = 1 (this unit). Factor = 1 / Rate."
+msgstr ""
+
+#. module: product
+#: view:product.supplierinfo:0
+msgid "Seq"
+msgstr "Sek"
+
+#. module: product
+#: model:product.category,name:product.product_category_8
+msgid "Phone Help"
+msgstr "Telefono Laguntza"
+
+#. module: product
+#: selection:product.template,mes_type:0
+msgid "Variable"
+msgstr ""
+
+#. module: product
+#: help:product.template,uom_id:0
+msgid "Default Unit of Measure used for all stock operation."
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_template
+#: field:product.pricelist.item,product_tmpl_id:0
+#: field:product.product,product_tmpl_id:0
+#: view:product.template:0
+msgid "Product Template"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_ul
+msgid "Shipping Unit"
+msgstr ""
+
+#. module: product
+#: help:product.uom,rounding:0
+msgid ""
+"The computed quantity will be a multiple of this value. Use 1.0 for products "
+"that can not be split."
+msgstr ""
+
+#. module: product
+#: field:product.packaging,height:0
+msgid "Height"
+msgstr "Altuera"
+
+#. module: product
+#: model:product.template,name:product.product_product_pc4_product_template
+msgid "Customizable PC"
+msgstr "PC Moldagarria"
+
+#. module: product
+#: help:product.pricelist.version,date_end:0
+msgid "Ending date for this pricelist version to be valid."
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,suppinfo_id:0
+msgid "Partner Information"
+msgstr "Kide Informazioa"
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,type:0
+msgid "Product Type"
+msgstr "Produktu Mota"
+
+#. module: product
+#: model:product.category,name:product.product_category_7
+#: model:product.template,name:product.product_product_1_product_template
+msgid "Onsite Intervention"
+msgstr "Lekuko Interbentzioa"
+
+#. module: product
+#: model:product.category,name:product.cat0
+msgid "All products"
+msgstr "Produktu guztiak"
+
+#. module: product
+#: wizard_button:product.price_list,init,end:0
+msgid "Cancel"
+msgstr "Ezeztatu"
+
+#. module: product
+#: help:product.packaging,qty:0
+msgid "The total number of products you can put by palet or box."
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist_item
+msgid "Pricelist item"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.wizard,name:product.report_wizard_price
+#: field:product.pricelist.version,pricelist_id:0
+msgid "Price List"
+msgstr ""
+
+#. module: product
+#: model:product.pricelist,name:product.list0
+msgid "Public Pricelist"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_21_product_template
+msgid "RAM on demand"
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+#: model:product.uom.categ,name:product.product_uom_categ_unit
+msgid "Unit"
+msgstr "Unitatea"
+
+#. module: product
+#: model:product.template,name:product.product_product_hdd2_product_template
+msgid "HDD Seagate 7200.8 120GB"
+msgstr "Seagate 7200.8 120GB Disko Gogorra"
+
+#. module: product
+#: wizard_field:product.price_list,init,qty2:0
+msgid "Quantity-2"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Information"
+msgstr "Informazioa"
+
+#. module: product
+#: view:product.product:0
+msgid "Codes"
+msgstr "Kodeak"
+
+#. module: product
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: product
+#: wizard_field:product.price_list,init,qty4:0
+msgid "Quantity-4"
+msgstr ""
+
+#. module: product
+#: wizard_field:product.price_list,init,qty5:0
+msgid "Quantity-5"
+msgstr ""
+
+#. module: product
+#: view:product.packaging:0
+#: view:product.product:0
+msgid "Other Info"
+msgstr "Bestelako Informazioa"
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Delays"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.version,items_id:0
+msgid "Price List Items"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,product_code:0
+msgid ""
+"Code of the product for this partner, will be used when printing a request "
+"for quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: product
+#: selection:product.template,state:0
+msgid "Obsolete"
+msgstr "Zaharkitua"
+
+#. module: product
+#: selection:product.ul,type:0
+msgid "Pallet"
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,price:0
+msgid "Unit Price"
+msgstr "Unitateko prezioa"
+
+#. module: product
+#: field:product.template,warranty:0
+msgid "Warranty (months)"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,ul_qty:0
+msgid "Package by layer"
+msgstr ""
+
+#. module: product
+#: help:product.template,type:0
+msgid ""
+"Will change the way procurements are processed. Consumables are stockable "
+"products with infinite stock, or for use when you have no inventory "
+"management in the system."
+msgstr ""
+
+#. module: product
+#: model:process.node,note:product.process_node_supplier0
+msgid "Product suppliers, with their product name, price, etc."
+msgstr "Produktu hornitzaileak, bere produktu izena, prezio eta abarrekin."
+
+#. module: product
+#: model:ir.model,name:product.model_product_price_type
+msgid "Price type"
+msgstr "Prezio mota"
+
+#. module: product
+#: model:ir.model,name:product.model_product_product
+#: model:process.node,name:product.process_node_product0
+#: field:product.packaging,product_id:0
+#: field:product.pricelist.item,product_id:0
+#: view:product.product:0
+#: field:product.supplierinfo,product_id:0
+#: model:res.request.link,name:product.req_link_product
+msgid "Product"
+msgstr "Produktua"
+
+#. module: product
+#: field:product.template,volume:0
+msgid "Volume"
+msgstr "Bolumena"
+
+#. module: product
+#: field:pricelist.partnerinfo,name:0
+#: field:product.packaging,name:0
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,description:0
+msgid "Description"
+msgstr "Deskribapena"
+
+#. module: product
+#: field:product.packaging,ean:0
+msgid "EAN"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Product Description"
+msgstr "Produktu Deskribapena"
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid " ) + "
+msgstr ""
+
+#. module: product
+#: help:product.template,sale_delay:0
+msgid ""
+"This is the average time between the confirmation of the customer order and "
+"the delivery of the finished products. It's the time you promise to your "
+"customers."
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_uom_categ
+msgid "Product uom categ"
+msgstr ""
+
+#. module: product
+#: wizard_field:product.price_list,init,qty3:0
+msgid "Quantity-3"
+msgstr ""
+
+#. module: product
+#: model:product.ul,name:product.product_ul_box
+msgid "Box 20x20x40"
+msgstr ""
+
+#. module: product
+#: selection:product.template,supply_method:0
+msgid "Produce"
+msgstr ""
+
+#. module: product
+#: selection:product.template,procure_method:0
+msgid "Make to Order"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_surcharge:0
+msgid "Price Surcharge"
+msgstr ""
+
+#. module: product
+#: constraint:product.pricelist.version:0
+msgid "You cannot have 2 pricelist versions that overlap!"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Rounding Method"
+msgstr "Borobiltze Metodoa"
+
+#. module: product
+#: field:product.product,variants:0
+msgid "Variants"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Price Computation"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_mb1_product_template
+msgid "Mainboard ASUStek A7N8X"
+msgstr ""
+
+#. module: product
+#: field:product.template,loc_case:0
+msgid "Case"
+msgstr "Kutxa"
+
+#. module: product
+#: field:product.pricelist.version,date_end:0
+msgid "End Date"
+msgstr "Amaiera Data"
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_category_action_form
+#: model:ir.ui.menu,name:product.menu_product_category_action_form
+msgid "Products Categories"
+msgstr "Produktuen Kategoriak"
+
+#. module: product
+#: field:product.product,packaging:0
+msgid "Logistical Units"
+msgstr "Unitate Logistikoak"
+
+#. module: product
+#: field:product.category,complete_name:0
+#: field:product.category,name:0
+#: field:product.pricelist.type,name:0
+#: field:product.pricelist.version,name:0
+#: field:product.template,name:0
+#: field:product.ul,name:0
+#: field:product.uom,name:0
+#: field:product.uom.categ,name:0
+msgid "Name"
+msgstr "Izena"
+
+#. module: product
+#: help:product.template,uos_coeff:0
+msgid ""
+"Coefficient to convert UOM to UOS\n"
+" uom = uos * coeff"
+msgstr ""
+
+#. module: product
+#: field:product.template,purchase_ok:0
+msgid "Can be Purchased"
+msgstr "Erosi daiteke"
+
+#. module: product
+#: field:product.template,uos_coeff:0
+msgid "UOM -> UOS Coeff"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_cpu2_product_template
+msgid "High speed processor config"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_pc2_product_template
+msgid "Basic+ PC (assembly on order)"
+msgstr ""
+
+#. module: product
+#: field:product.template,cost_method:0
+msgid "Costing Method"
+msgstr ""
+
+#. module: product
+#: view:product.packaging:0
+#: view:product.product:0
+msgid "Palletization"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Prices & Suppliers"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,weight:0
+msgid "The weight of a full of products palet or box."
+msgstr ""
+
+#. module: product
+#: selection:product.template,state:0
+msgid "End of Lifecycle"
+msgstr ""
+
+#. module: product
+#: model:ir.module.module,shortdesc:product.module_meta_information
+msgid "Products & Pricelists"
+msgstr ""
+
+#. module: product
+#: help:product.uom,factor:0
+msgid ""
+"The coefficient for the formula:\n"
+"1 (base unit) = coeff (this unit). Rate = 1 / Factor."
+msgstr ""
+
+#. module: product
+#: help:product.template,weight_net:0
+msgid "The net weight in Kg."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_tow1_product_template
+msgid "ATX Mid-size Tower"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,delay:0
+msgid "Delivery Delay"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_pricelist_action
+#: model:ir.ui.menu,name:product.menu_product_pricelist_action
+#: field:product.pricelist,version_id:0
+msgid "Pricelist Versions"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,weight_ul:0
+msgid "Empty Package Weight"
+msgstr ""
+
+#. module: product
+#: field:product.template,list_price:0
+msgid "Sale Price"
+msgstr "Salmenta Prezioa"
+
+#. module: product
+#: help:product.template,produce_delay:0
+msgid ""
+"Average time to produce this product. This is only for the production order "
+"and, if it is a multi-level bill of material, it's only for the level of "
+"this product. Different delays will be summed for all levels and purchase "
+"orders."
+msgstr ""
+
+#. module: product
+#: wizard_field:product.price_list,init,qty1:0
+msgid "Quantity-1"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,length:0
+msgid "Length"
+msgstr "Luzera"
+
+#. module: product
+#: model:product.category,name:product.cat2
+msgid "Private"
+msgstr "Pribatua"
+
+#. module: product
+#: help:product.supplierinfo,delay:0
+msgid ""
+"Delay in days between the confirmation of the purchase order and the "
+"reception of the products in your warehouse. Used by the scheduler for "
+"automatic computation of the purchase order planning."
+msgstr ""
+
+#. module: product
+#: help:product.template,uom_po_id:0
+msgid ""
+"Default Unit of Measure used for purchase orders. It must in the same "
+"category than the default unit of measure."
+msgstr ""
+
+#. module: product
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,min_quantity:0
+msgid "Min. Quantity"
+msgstr "Kopuru Minimoa"
+
+#. module: product
+#: help:product.pricelist.item,categ_id:0
+msgid ""
+"Set a category of product if this rule only apply to products of a category "
+"and his childs. Keep empty for all products"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.report.xml,name:product.report_product_label
+msgid "Products Labels"
+msgstr "Produktu Etiketak"
+
+#. module: product
+#: help:product.template,volume:0
+msgid "The volume in m3."
+msgstr "Bolumena m3-tan."
+
+#. module: product
+#: model:product.ul,name:product.product_ul_big_box
+msgid "Box 30x40x60"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_kgm
+msgid "KGM"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_discount:0
+msgid "Price Discount"
+msgstr ""
diff --git a/addons/product/partner_view.xml b/addons/product/partner_view.xml
index 6b756eb8d7f..51d012b8577 100644
--- a/addons/product/partner_view.xml
+++ b/addons/product/partner_view.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/addons/product/pricelist.py b/addons/product/pricelist.py
index a4b93827660..90d55d47251 100644
--- a/addons/product/pricelist.py
+++ b/addons/product/pricelist.py
@@ -222,7 +222,7 @@ class product_pricelist(osv.osv):
price = 0.0
else:
price_tmp = self.price_get(cr, uid,
- [res['base_pricelist_id']], prod_id,
+ [res['base_pricelist_id']], product_id,
qty)[res['base_pricelist_id']]
ptype_src = self.browse(cr, uid, res['base_pricelist_id']).currency_id.id
price = currency_obj.compute(cr, uid, ptype_src, res['currency_id'], price_tmp, round=False)
@@ -388,7 +388,7 @@ class product_pricelist(osv.osv):
price = 0.0
else:
price_tmp = self.price_get(cr, uid,
- [res['base_pricelist_id']], prod_id,
+ [res['base_pricelist_id']], product_id,
qty)[res['base_pricelist_id']]
ptype_src = self.browse(cr, uid, res['base_pricelist_id']).currency_id.id
price = currency_obj.compute(cr, uid, ptype_src, res['currency_id'], price_tmp, round=False)
diff --git a/addons/product/process/product_process.xml b/addons/product/process/product_process.xml
index c8f72be4df7..03ce904abad 100644
--- a/addons/product/process/product_process.xml
+++ b/addons/product/process/product_process.xml
@@ -40,7 +40,6 @@
-->
-
diff --git a/addons/product/product.py b/addons/product/product.py
index 6c1125268a9..04a5232b1ea 100644
--- a/addons/product/product.py
+++ b/addons/product/product.py
@@ -69,15 +69,15 @@ class product_uom(osv.osv):
'name': fields.char('Name', size=64, required=True, translate=True),
'category_id': fields.many2one('product.uom.categ', 'UoM Category', required=True, ondelete='cascade',
help="Quantity conversions may happen automatically between Units of Measure in the same category, according to their respective ratios."),
- 'factor': fields.float('Ratio', digits=(12, 6), required=True,
+ 'factor': fields.float('Ratio', required=True,digits=(12, 6),
help='How many times this UoM is smaller than the reference UoM in this category:\n'\
'1 * (reference unit) = ratio * (this unit)'),
- 'factor_inv': fields.function(_factor_inv, digits=(12, 6),
+ 'factor_inv': fields.function(_factor_inv, digits_compute=dp.get_precision('Product UoM'),
fnct_inv=_factor_inv_write,
method=True, string='Ratio',
help='How many times this UoM is bigger than the reference UoM in this category:\n'\
'1 * (this unit) = ratio * (reference unit)', required=True),
- 'rounding': fields.float('Rounding Precision', digits=(16, 3), required=True,
+ 'rounding': fields.float('Rounding Precision', digits_compute=dp.get_precision('Product UoM'), required=True,
help="The computed quantity will be a multiple of this value. "\
"Use 1.0 for a UoM that cannot be further split, such as a piece."),
'active': fields.boolean('Active', help="By unchecking the active field you can disable a unit of measure without deleting it."),
@@ -247,7 +247,11 @@ class product_template(osv.osv):
'warranty': fields.float('Warranty (months)'),
'sale_ok': fields.boolean('Can be Sold', help="Determines if the product can be visible in the list of product within a selection from a sale order line."),
'purchase_ok': fields.boolean('Can be Purchased', help="Determine if the product is visible in the list of products within a selection from a purchase order line."),
- 'state': fields.selection([('',''),('draft', 'In Development'),('sellable','In Production'),('end','End of Lifecycle'),('obsolete','Obsolete')], 'State', help="Tells the user if he can use the product or not."),
+ 'state': fields.selection([('',''),
+ ('draft', 'In Development'),
+ ('sellable','Normal'),
+ ('end','End of Lifecycle'),
+ ('obsolete','Obsolete')], 'Status', help="Tells the user if he can use the product or not."),
'uom_id': fields.many2one('product.uom', 'Default Unit Of Measure', required=True, help="Default Unit of Measure used for all stock operation."),
'uom_po_id': fields.many2one('product.uom', 'Purchase Unit of Measure', required=True, help="Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."),
'uos_id' : fields.many2one('product.uom', 'Unit of Sale',
@@ -274,7 +278,9 @@ class product_template(osv.osv):
def _default_category(self, cr, uid, context={}):
if 'categ_id' in context and context['categ_id']:
return context['categ_id']
- return False
+ md = self.pool.get('ir.model.data')
+ res = md.get_object_reference(cr, uid, 'product', 'cat0') or False
+ return res and res[1] or False
def onchange_uom(self, cursor, user, ids, uom_id,uom_po_id):
if uom_id and uom_po_id:
@@ -302,6 +308,7 @@ class product_template(osv.osv):
'uos_coeff' : lambda *a: 1.0,
'mes_type' : lambda *a: 'fixed',
'categ_id' : _default_category,
+ 'type' : lambda *a: 'consu',
}
def _check_uom(self, cursor, user, ids):
@@ -380,7 +387,7 @@ class product_product(osv.osv):
def _get_partner_code_name(self, cr, uid, ids, product, partner_id, context={}):
for supinfo in product.seller_ids:
if supinfo.name.id == partner_id:
- return {'code': supinfo.product_code, 'name': supinfo.product_name, 'variants': ''}
+ return {'code': supinfo.product_code or product.default_code, 'name': supinfo.product_name or product.name, 'variants': ''}
res = {'code': product.default_code, 'name': product.name, 'variants': product.variants}
return res
diff --git a/addons/product/product_data.xml b/addons/product/product_data.xml
index 05a57126402..31e93f46d5f 100644
--- a/addons/product/product_data.xml
+++ b/addons/product/product_data.xml
@@ -4,6 +4,10 @@
+
+ All products
+
+
Unit
@@ -140,12 +144,6 @@ parameter) will see those record just disappear.
-
- property_valuation_price_type
-
-
-
-
Sale Price
2
@@ -162,6 +160,9 @@ parameter) will see those record just disappear.
Stock Weight
2
-
+
+ Product UoM
+
+
diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml
index cbc1f4d458a..92d0df088ef 100644
--- a/addons/product/product_demo.xml
+++ b/addons/product/product_demo.xml
@@ -5,17 +5,12 @@
Resource: product.category
-->
-
-
- All products
- view
-
-
+
Sellable
-
+
Private
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index 45ebaa8ee57..b58fa4cc811 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -9,10 +9,8 @@
search
-
-
-
+
+
@@ -89,7 +87,7 @@
-
+
@@ -110,7 +108,7 @@
-
+
@@ -147,13 +145,11 @@
-
-
+
+
-
-
@@ -199,7 +195,6 @@
In OpenERP, a product is something you can buy and sell. It can be a raw material, a stockable product, a consumable or a service. The product form contains a detailed information on the products like procurement logistic, sales price, product category, suppliers, etc.
-
@@ -257,11 +252,12 @@
[('parent_id','=',False)]
tree
- Products category opens a tree structure view of your products by category.
+ This is a hyerarchical structure of your product's categories, you can enter a category to browse all products in this category and his children.
@@ -305,9 +301,7 @@
-
-
@@ -461,7 +455,6 @@
-
@@ -486,7 +479,7 @@
-
+
@@ -558,7 +551,7 @@
-
+
@@ -579,7 +572,7 @@
-
+
@@ -636,5 +629,12 @@
form
+
+ Products
+ ir.ui.menu
+
+
+
+
diff --git a/addons/product/report/product_pricelist.py b/addons/product/report/product_pricelist.py
index 613de646fe0..1148718668b 100644
--- a/addons/product/report/product_pricelist.py
+++ b/addons/product/report/product_pricelist.py
@@ -112,13 +112,14 @@ class product_pricelist(report_sxw.rml_parse):
return res
def _get_price(self,pricelist_id, product_id,qty):
+ sale_price_digits = self.get_digits(dp='Sale Price')
pool = pooler.get_pool(self.cr.dbname)
price_dict = pool.get('product.pricelist').price_get(self.cr, self.uid, [pricelist_id], product_id,qty)
if price_dict[pricelist_id]:
- price = self.formatLang(price_dict[pricelist_id])
+ price = self.formatLang(price_dict[pricelist_id], digits=sale_price_digits)
else:
res = pool.get('product.product').read(self.cr, self.uid, [product_id])
- price = self.formatLang(res[0]['list_price'])
+ price = self.formatLang(res[0]['list_price'], digits=sale_price_digits)
return price
report_sxw.report_sxw('report.product.pricelist','product.product','addons/product/report/product_pricelist.rml',parser=product_pricelist)
diff --git a/addons/product_expiry/i18n/pl.po b/addons/product_expiry/i18n/pl.po
new file mode 100644
index 00000000000..ab6fb7826bf
--- /dev/null
+++ b/addons/product_expiry/i18n/pl.po
@@ -0,0 +1,168 @@
+# Polish translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-06-30 15:09+0000\n"
+"PO-Revision-Date: 2010-10-08 07:39+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Polish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-09 12:13+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: product_expiry
+#: field:product.product,life_time:0
+msgid "Product lifetime"
+msgstr "Okres przydatności produktu"
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_from_product_template
+msgid "Ham"
+msgstr "Szynka"
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_lait_product_template
+msgid "Cow milk"
+msgstr "Mleko"
+
+#. module: product_expiry
+#: model:ir.module.module,shortdesc:product_expiry.module_meta_information
+msgid "Products date of expiry"
+msgstr "Data przydatności"
+
+#. module: product_expiry
+#: constraint:product.template:0
+msgid ""
+"Error: The default UOM and the purchase UOM must be in the same category."
+msgstr "Błąd: domyślna JM i zakupowa JM muszą być tej samej kategorii."
+
+#. module: product_expiry
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Niewłaściwy XML dla architektury widoku!"
+
+#. module: product_expiry
+#: help:stock.production.lot,life_date:0
+msgid "The date the lot may become dangerous and should not be consumed."
+msgstr ""
+
+#. module: product_expiry
+#: field:stock.production.lot,removal_date:0
+msgid "Removal Date"
+msgstr "Data usunięcia"
+
+#. module: product_expiry
+#: model:ir.module.module,description:product_expiry.module_meta_information
+msgid ""
+"Track different dates on products and production lots:\n"
+" - end of life\n"
+" - best before date\n"
+" - removal date\n"
+" - alert date\n"
+"Used, for example, in food industries."
+msgstr ""
+"Śledzi różne daty na produktach i partie produktu:\n"
+" - Data przydatności\n"
+" - Należy użyć przed\n"
+" - Data usunięcia\n"
+" - Data ostrzegania\n"
+"Stosowane na przykład w przemyśle spożywczym."
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_pain_product_template
+msgid "Bread"
+msgstr "Chleb"
+
+#. module: product_expiry
+#: model:product.uom,name:product_expiry.product_uom_ltr
+#: model:product.uom.categ,name:product_expiry.product_uom_categ_vol
+msgid "LTR"
+msgstr ""
+
+#. module: product_expiry
+#: view:product.product:0
+#: view:stock.production.lot:0
+msgid "Dates"
+msgstr "Daty"
+
+#. module: product_expiry
+#: constraint:product.template:0
+msgid "Error: UOS must be in a different category than the UOM"
+msgstr "Błąd: JS musi być innej kategorii niż JM."
+
+#. module: product_expiry
+#: field:stock.production.lot,life_date:0
+msgid "End of Life Date"
+msgstr "Koniec przydatności"
+
+#. module: product_expiry
+#: field:stock.production.lot,use_date:0
+msgid "Best before Date"
+msgstr "Data najlepszego użycia"
+
+#. module: product_expiry
+#: help:stock.production.lot,use_date:0
+msgid "The date the lot starts deteriorating without becoming dangerous."
+msgstr ""
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_jambon_product_template
+msgid "French cheese Camenbert"
+msgstr "Cammembert"
+
+#. module: product_expiry
+#: help:product.product,removal_time:0
+msgid "The number of days before a production lot should be removed."
+msgstr ""
+
+#. module: product_expiry
+#: field:product.product,use_time:0
+#: field:stock.production.lot,dlc:0
+msgid "Product usetime"
+msgstr ""
+
+#. module: product_expiry
+#: field:stock.production.lot,alert_date:0
+msgid "Alert Date"
+msgstr "Data ostrzegawcza"
+
+#. module: product_expiry
+#: field:product.product,removal_time:0
+msgid "Product removal time"
+msgstr "Czas wycofania produktu"
+
+#. module: product_expiry
+#: help:product.product,use_time:0
+msgid ""
+"The number of days before a production lot starts deteriorating without "
+"becoming dangerous."
+msgstr ""
+
+#. module: product_expiry
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr "Błąd: Niedozwolony kod EAN"
+
+#. module: product_expiry
+#: help:product.product,life_time:0
+msgid ""
+"The number of days before a production lot may become dangerous and should "
+"not be consumed."
+msgstr ""
+
+#. module: product_expiry
+#: help:stock.production.lot,removal_date:0
+msgid "The date the lot should be removed."
+msgstr "Data, w której produkt powinien być usunięty"
+
+#. module: product_expiry
+#: field:product.product,alert_time:0
+msgid "Product alert time"
+msgstr "Czas ostrzeżenia dla produktu"
diff --git a/addons/product_manufacturer/i18n/pl.po b/addons/product_manufacturer/i18n/pl.po
new file mode 100644
index 00000000000..455cdc33712
--- /dev/null
+++ b/addons/product_manufacturer/i18n/pl.po
@@ -0,0 +1,95 @@
+# Polish translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-12 12:35+0000\n"
+"PO-Revision-Date: 2010-10-07 16:51+0000\n"
+"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
+"Language-Team: Polish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: product_manufacturer
+#: model:ir.module.module,description:product_manufacturer.module_meta_information
+msgid "A module that add manufacturers and attributes on the product form"
+msgstr "Moduł do dodawania producentów i atrybutów w formularzu produktu"
+
+#. module: product_manufacturer
+#: field:product.product,manufacturer_pref:0
+msgid "Manufacturer Product Code"
+msgstr "Kod producenta produktu"
+
+#. module: product_manufacturer
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Niewłaściwy XML dla architektury widoku!"
+
+#. module: product_manufacturer
+#: view:product.manufacturer.attribute:0
+msgid "Product Template Name"
+msgstr "Nazwa szablonu produktu"
+
+#. module: product_manufacturer
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Nazwa obiektu musi zaczynać się od x_ oraz nie może zawierać znaków "
+"specjalnych !"
+
+#. module: product_manufacturer
+#: model:ir.model,name:product_manufacturer.model_product_manufacturer_attribute
+msgid "Product attributes"
+msgstr "Atrybuty produktu"
+
+#. module: product_manufacturer
+#: view:product.manufacturer.attribute:0
+#: view:product.product:0
+msgid "Product Attributes"
+msgstr "Atrybuty produktu"
+
+#. module: product_manufacturer
+#: field:product.manufacturer.attribute,name:0
+msgid "Attribute"
+msgstr "Atrybut"
+
+#. module: product_manufacturer
+#: model:ir.model,name:product_manufacturer.model_product_product
+#: field:product.manufacturer.attribute,product_id:0
+msgid "Product"
+msgstr "Produkt"
+
+#. module: product_manufacturer
+#: field:product.manufacturer.attribute,value:0
+msgid "Value"
+msgstr "Wartość"
+
+#. module: product_manufacturer
+#: view:product.product:0
+#: field:product.product,attribute_ids:0
+msgid "Attributes"
+msgstr "Atrybuty"
+
+#. module: product_manufacturer
+#: model:ir.module.module,shortdesc:product_manufacturer.module_meta_information
+msgid "Products Attributes & Manufacturers"
+msgstr "Atrybuty i producenci produktu"
+
+#. module: product_manufacturer
+#: field:product.product,manufacturer_pname:0
+msgid "Manufacturer Product Name"
+msgstr "Nazwa produktu u producenta"
+
+#. module: product_manufacturer
+#: view:product.product:0
+#: field:product.product,manufacturer:0
+msgid "Manufacturer"
+msgstr "Producent"
diff --git a/addons/profile_tools/installer.py b/addons/profile_tools/installer.py
index 06be50a903f..54fd0602802 100644
--- a/addons/profile_tools/installer.py
+++ b/addons/profile_tools/installer.py
@@ -25,15 +25,13 @@ class misc_tools_installer(osv.osv_memory):
_inherit = 'res.config.installer'
_columns = {
- 'lunch':fields.boolean('Lunch',help='Helps to manage Lunch Orders.'),
- 'subscription':fields.boolean('Recurring Documents',help='Helps to add subscription on documents.'),
- 'survey':fields.boolean('Survey',help='Manages Custom Surveys.'),
- 'idea':fields.boolean('Idea',help='Manages ideas and votes'),
- 'audittrail':fields.boolean('Audit Trail',help="Lets you to track user's operations on specific Objects."),
+ 'lunch':fields.boolean('Lunch',help='A simple module to help you to manage Lunch orders.'),
+ 'subscription':fields.boolean('Recurring Documents',help='Helps to generate automatically recurring documents.'),
+ 'survey':fields.boolean('Survey',help='Allows you to organize surveys.'),
+ 'idea':fields.boolean('Ideas Box',help='Promote ideas of the employees, votes and discussion on best ideas.'),
}
_defaults = {
'lunch': True,
}
-
misc_tools_installer()
diff --git a/addons/profile_tools/misc_tools_installer.xml b/addons/profile_tools/misc_tools_installer.xml
index c9b5f744b77..b59f95ab908 100644
--- a/addons/profile_tools/misc_tools_installer.xml
+++ b/addons/profile_tools/misc_tools_installer.xml
@@ -26,10 +26,9 @@
-
-
-
+
+
@@ -47,6 +46,7 @@
+ always
3
diff --git a/addons/project/board_project_demo.xml b/addons/project/board_project_demo.xml
index 6a063405ff3..85bf3140d26 100644
--- a/addons/project/board_project_demo.xml
+++ b/addons/project/board_project_demo.xml
@@ -3,12 +3,9 @@
-
-
-
+ Administrator shortcut
+ Demo user startup menu
+ -->
Don't forget the new development policies.
diff --git a/addons/project/board_project_manager_view.xml b/addons/project/board_project_manager_view.xml
index 12559b0629b..d92592a9f38 100644
--- a/addons/project/board_project_manager_view.xml
+++ b/addons/project/board_project_manager_view.xml
@@ -10,43 +10,12 @@
Board for project managers
-->
+ domain="[('manager', '=', uid)]"
+ id="act_my_project" name="My projects"
+ res_model="project.project" view_mode="tree,form"
+ view_type="form"/>
-
- board.project.manager.form
- board.board
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Project Manager Dashboard
- board.board
- form
- form
- menu
-
-
-
-
-
diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml
index c3b4b0c8000..71b5d87aa1f 100644
--- a/addons/project/board_project_view.xml
+++ b/addons/project/board_project_view.xml
@@ -86,18 +86,12 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
diff --git a/addons/project/i18n/eu.po b/addons/project/i18n/eu.po
new file mode 100644
index 00000000000..efa64da581c
--- /dev/null
+++ b/addons/project/i18n/eu.po
@@ -0,0 +1,1425 @@
+# Basque translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+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-10-09 16:08+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Basque \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-10 04:55+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: project
+#: model:ir.actions.act_window,name:project.act_res_users_2_project_task_opened
+msgid "Assigned tasks"
+msgstr "Esleitutako Atazak"
+
+#. module: project
+#: model:process.process,name:project.process_process_tasksprocess0
+msgid "Tasks Process"
+msgstr "Ataza Prozesua"
+
+#. module: project
+#: help:project.task.delegate,init,name:0
+msgid "New title of the task delegated to the user."
+msgstr "Erabiltzailearen esku gelditu den atazaren izenburu berria."
+
+#. module: project
+#: view:config.compute.remaining:0
+msgid "Change Remaining Hours"
+msgstr "Gelditzen diren orduak aldatu"
+
+#. module: project
+#: model:ir.actions.wizard,name:project.wizard_close_task
+msgid "Close Task"
+msgstr "Ataza Itxi"
+
+#. module: project
+#: view:project.task:0
+msgid "Project Tasks"
+msgstr "Proiektuko Atazak"
+
+#. module: project
+#: model:process.transition,name:project.process_transition_opendonetask0
+msgid "Open Done Task"
+msgstr "Ireki Burututako Ataza"
+
+#. module: project
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Modelo izen ezegokia ekintza definizioan."
+
+#. module: project
+#: wizard_field:project.task.delegate,init,planned_hours_me:0
+msgid "Hours to Validate"
+msgstr "Balidatzeko orduak"
+
+#. module: project
+#: field:project.project,progress_rate:0
+msgid "Progress"
+msgstr "Aurrerapena"
+
+#. module: project
+#: help:config.compute.remaining,remaining_hours:0
+#: help:project.task,remaining_hours:0
+msgid ""
+"Total remaining time, can be re-estimated periodically by the assignee of "
+"the task."
+msgstr ""
+"Gelditzen den denbora osoa. Ataza esleituta duenak periodikoki ber-estimatu "
+"ahal du."
+
+#. module: project
+#: field:project.project,child_id:0
+msgid "Subproject"
+msgstr "Azpiproiektua"
+
+#. module: project
+#: field:project.project,members:0
+msgid "Project Members"
+msgstr "Proiektu Partaideak"
+
+#. module: project
+#: model:process.node,name:project.process_node_taskbydelegate0
+msgid "Task by delegate"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_view_my_project_my_run
+#: model:ir.ui.menu,name:project.menu_open_view_my_project_my_run
+msgid "My Running Projects"
+msgstr "Abian dauden Nire Proiektuak"
+
+#. module: project
+#: field:project.task,child_ids:0
+msgid "Delegated Tasks"
+msgstr "Delegatutako Atazak"
+
+#. module: project
+#: help:project.project,warn_header:0
+msgid ""
+"Header added at the beginning of the email for the warning message sent to "
+"the customer when a task is closed."
+msgstr ""
+"Ataza ixten denean bezeroari bidaltzen zaion abisu epostan goiburukoa "
+"gehituta."
+
+#. module: project
+#: field:project.task,priority:0
+msgid "Importance"
+msgstr "Garrantzia"
+
+#. module: project
+#: view:config.compute.remaining:0
+msgid "Update"
+msgstr "Eguneratu"
+
+#. module: project
+#: help:project.task.delegate,init,user_id:0
+msgid "User you want to delegate this task to."
+msgstr "Ataza hau delegatuko zaion erabiltzailea."
+
+#. module: project
+#: model:ir.actions.wizard,name:project.wizard_attachment_task
+msgid "All Attachments"
+msgstr "Eranskin Guztiak"
+
+#. module: project
+#: model:process.transition.action,name:project.process_transition_action_openpendingtask0
+msgid "Set pending"
+msgstr "Egiteko zain jarri"
+
+#. module: project
+#: model:process.node,note:project.process_node_drafttask0
+msgid "Define the Requirements and Set Planned Hours."
+msgstr "Betebeharrak Definitu eta Planteatutako Orduak Ezarri."
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_task_type_form
+#: model:ir.ui.menu,name:project.menu_task_types
+msgid "Task Types"
+msgstr "Ataza Motak"
+
+#. module: project
+#: view:project.project:0
+msgid "New Project Based on Template"
+msgstr "Txantiloian oinarritutako proiektu berria"
+
+#. module: project
+#: model:ir.actions.act_window,name:project.dblc_proj
+msgid "Project's tasks"
+msgstr "Proiektuaren atazak"
+
+#. module: project
+#: selection:project.task,priority:0
+msgid "Very urgent"
+msgstr "Oso urgentea"
+
+#. module: project
+#: wizard_button:project.task.delegate,init,valid:0
+msgid "Validate"
+msgstr "Balidatu"
+
+#. module: project
+#: model:ir.module.module,description:project.module_meta_information
+msgid ""
+"Project management module that track multi-level projects, tasks,\n"
+"works done on tasks, eso. It is able to render planning, order tasks, eso.\n"
+" "
+msgstr ""
+"Proiektu kudeaketa modulua. Maila askotako proiektuak, atazak, atazetan "
+"egindako lanak,\n"
+" eta abarren jarraipena egiten du. Planifikazioa bistaratu, atazak ordenatu, "
+"eta abar egiteko gai da.\n"
+" "
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_view_task5_prog_prog
+#: model:ir.ui.menu,name:project.menu_tasks_yours_prog_prog
+msgid "My Tasks in Progress"
+msgstr "Abian dauden Nire Atazak"
+
+#. module: project
+#: view:project.project:0
+msgid "Set as Template"
+msgstr "Txantiloi bezala ezarri"
+
+#. module: project
+#: model:process.node,name:project.process_node_drafttask0
+msgid "Draft task"
+msgstr "Ataza zirriborroa"
+
+#. module: project
+#: model:ir.model,name:project.model_project_task
+#: field:project.task.work,task_id:0
+msgid "Task"
+msgstr "Ataza"
+
+#. module: project
+#: help:project.task.delegate,init,planned_hours_me:0
+msgid ""
+"Estimated time for you to validate the work done by the user to whom you "
+"delegate this task."
+msgstr ""
+"Ataza hau delegatu diozun erabiltzailearen lana balioztatzeko denbora "
+"estimatua."
+
+#. module: project
+#: view:project.project:0
+#: field:project.project,notes:0
+#: view:project.task:0
+#: field:project.task,notes:0
+msgid "Notes"
+msgstr "Oharrak"
+
+#. module: project
+#: selection:res.company,project_time_mode:0
+msgid "Days"
+msgstr "Egunak"
+
+#. module: project
+#: model:project.task.type,name:project.project_tt_analysis
+msgid "Analysis"
+msgstr "Analisia"
+
+#. module: project
+#: model:ir.model,name:project.model_project_project
+#: view:project.project:0
+#: field:project.task,project_id:0
+#: model:res.request.link,name:project.req_link_project
+msgid "Project"
+msgstr "Proiektua"
+
+#. module: project
+#: view:project.task:0
+msgid "Start Task"
+msgstr "Ataza Hasi"
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_view_task5_prog_draft
+#: model:ir.ui.menu,name:project.menu_tasks_yours_prog_draft
+msgid "My Draft Tasks"
+msgstr "Nire Ataza Zirriborroak"
+
+#. module: project
+#: view:project.project:0
+msgid ""
+"Automatic variables for headers and footer. Use exactly the same notation."
+msgstr ""
+
+#. module: project
+#: selection:project.project,state:0
+#: selection:project.task,state:0
+msgid "Cancelled"
+msgstr "Ezeztatua"
+
+#. module: project
+#: view:project.project:0
+#: field:project.project,warn_header:0
+msgid "Mail Header"
+msgstr "Eposta Goiburua"
+
+#. module: project
+#: model:process.node,name:project.process_node_donetask0
+msgid "Done task"
+msgstr "Egindako ataza"
+
+#. module: project
+#: model:process.node,note:project.process_node_donetask0
+msgid "Task is Completed"
+msgstr "Ataza Eginda"
+
+#. module: project
+#: model:process.transition,note:project.process_transition_delegate0
+msgid "Delegates tasks to the other user"
+msgstr "Atazak beste erabiltzaile batean delegatzen ditu."
+
+#. module: project
+#: help:project.task,effective_hours:0
+msgid "Computed using the sum of the task work done."
+msgstr "Atazan egindako lanen batura erabiliz kalkulatuta."
+
+#. module: project
+#: help:project.project,warn_customer:0
+msgid ""
+"If you check this, the user will have a popup when closing a task that "
+"propose a message to send by email to the customer."
+msgstr ""
+
+#. module: project
+#: help:project.task.delegate,init,new_task_description:0
+msgid "Reinclude the description of the task in the task of the user."
+msgstr ""
+
+#. module: project
+#: field:project.project,category_id:0
+msgid "Analytic Account"
+msgstr ""
+
+#. module: project
+#: field:project.task.work,user_id:0
+msgid "Done by"
+msgstr "Nork egina:"
+
+#. module: project
+#: model:ir.actions.act_window,name:project.act_project_project_2_project_task_all
+#: model:ir.actions.act_window,name:project.action_view_task
+#: model:ir.ui.menu,name:project.menu_action_view_task
+msgid "All Tasks"
+msgstr "Ataza Guztiak"
+
+#. module: project
+#: view:project.task:0
+msgid "Planning"
+msgstr "Planifikazioa"
+
+#. module: project
+#: view:project.task:0
+msgid "Extra Info"
+msgstr "Informazio gehigarria"
+
+#. module: project
+#: field:project.project,partner_id:0
+#: field:project.task,partner_id:0
+msgid "Partner"
+msgstr "Kidea"
+
+#. module: project
+#: field:project.task,planned_hours:0
+#: wizard_field:project.task.delegate,init,planned_hours:0
+msgid "Planned Hours"
+msgstr "Aurreikusitako Orduak"
+
+#. module: project
+#: view:project.project:0
+msgid "Task: %(name)s"
+msgstr "Ataza: %(name)s"
+
+#. module: project
+#: view:project.project:0
+msgid "Reset as Project"
+msgstr "Proiektu bezala berrezarri"
+
+#. module: project
+#: view:project.task:0
+msgid "Delegations"
+msgstr "Delegazioak"
+
+#. module: project
+#: help:project.project,members:0
+msgid ""
+"Project's member. Not used in any computation, just for information purpose."
+msgstr ""
+"Proiektuko kideak. Ez da inolako kalkulutan erabiltzen, informatzeko soilik."
+
+#. module: project
+#: view:project.project:0
+msgid "My projects"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_view_project_all
+#: model:ir.ui.menu,name:project.menu_open_view_project_all
+msgid "All projects"
+msgstr ""
+
+#. module: project
+#: model:process.transition,note:project.process_transition_draftopentask0
+msgid "From draft state, it will come into the open state."
+msgstr ""
+
+#. module: project
+#: wizard_view:project.task.delegate,init:0
+msgid "Delegated Task"
+msgstr ""
+
+#. module: project
+#: help:project.project,progress_rate:0
+msgid "Percent of tasks closed according to the total of tasks todo."
+msgstr ""
+
+#. module: project
+#: wizard_field:project.task.delegate,init,new_task_description:0
+msgid "New Task Description"
+msgstr ""
+
+#. module: project
+#: help:project.project,notes:0
+msgid "Internal description of the project."
+msgstr ""
+
+#. module: project
+#: field:project.project,parent_id:0
+msgid "Parent Project"
+msgstr ""
+
+#. module: project
+#: help:project.task,total_hours:0
+msgid "Computed as: Time Spent + Remaining Time."
+msgstr ""
+
+#. module: project
+#: field:project.task,type:0
+#: field:project.task.type,name:0
+msgid "Type"
+msgstr ""
+
+#. module: project
+#: selection:res.company,project_time_mode:0
+msgid "Weeks"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_view_task5_prog
+#: model:ir.ui.menu,name:project.menu_tasks_yours_prog
+msgid "My Current Tasks"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_view_project
+#: model:ir.ui.menu,name:project.menu_open_view_project
+msgid "New Project"
+msgstr ""
+
+#. module: project
+#: selection:project.task,priority:0
+msgid "Medium"
+msgstr ""
+
+#. module: project
+#: view:config.compute.remaining:0
+#: field:config.compute.remaining,remaining_hours:0
+#: field:project.task,remaining_hours:0
+msgid "Remaining Hours"
+msgstr ""
+
+#. module: project
+#: model:ir.model,name:project.model_project_task_type
+msgid "Project task type"
+msgstr ""
+
+#. module: project
+#: field:project.project,planned_hours:0
+msgid "Planned Time"
+msgstr ""
+
+#. module: project
+#: model:ir.model,name:project.model_project_task_work
+#: view:project.task:0
+#: view:project.task.work:0
+msgid "Task Work"
+msgstr ""
+
+#. module: project
+#: selection:res.company,project_time_mode:0
+msgid "Hours"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_view_task5_pending
+#: model:ir.ui.menu,name:project.menu_tasks_yours_pending
+msgid "My Pending Tasks"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.act_project_project_2_project_task_opened
+#: model:ir.actions.act_window,name:project.action_view_task6_prog
+#: model:ir.ui.menu,name:project.menu_action_view_task6_prog
+msgid "Tasks in Progress"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_view_task7
+#: model:ir.ui.menu,name:project.menu_action_view_task7
+msgid "Unassigned Tasks"
+msgstr ""
+
+#. module: project
+#: wizard_field:project.task.delegate,init,name:0
+msgid "Delegated Title"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_view_my_project
+#: model:ir.ui.menu,name:project.menu_open_view_my_project
+msgid "My Projects"
+msgstr ""
+
+#. module: project
+#: help:project.task.delegate,init,planned_hours:0
+msgid "Estimated time to close this task by the delegated user."
+msgstr ""
+
+#. module: project
+#: selection:project.project,state:0
+msgid "Template"
+msgstr ""
+
+#. module: project
+#: model:ir.ui.menu,name:project.menu_definitions
+#: view:res.company:0
+msgid "Configuration"
+msgstr ""
+
+#. module: project
+#: field:project.project,date_start:0
+#: field:project.task,date_start:0
+msgid "Starting Date"
+msgstr ""
+
+#. module: project
+#: model:ir.ui.menu,name:project.menu_all_project
+#: view:project.project:0
+msgid "Projects"
+msgstr ""
+
+#. module: project
+#: view:project.task:0
+msgid "Dates"
+msgstr ""
+
+#. module: project
+#: field:project.task,history:0
+msgid "Task Details"
+msgstr ""
+
+#. module: project
+#: model:process.node,name:project.process_node_triggerinvoice0
+msgid "Trigger Invoice"
+msgstr ""
+
+#. module: project
+#: model:process.transition,name:project.process_transition_draftopentask0
+msgid "Draft Open task"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+msgid "User: %(user_id)s"
+msgstr ""
+
+#. module: project
+#: field:project.task,delay_hours:0
+msgid "Delay Hours"
+msgstr ""
+
+#. module: project
+#: field:project.project,contact_id:0
+msgid "Contact"
+msgstr ""
+
+#. module: project
+#: model:process.transition,name:project.process_transition_delegate0
+#: view:project.task:0
+msgid "Delegate"
+msgstr ""
+
+#. module: project
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: project
+#: model:ir.module.module,shortdesc:project.module_meta_information
+#: model:ir.ui.menu,name:project.menu_main
+#: view:res.company:0
+msgid "Project Management"
+msgstr ""
+
+#. module: project
+#: field:project.project,effective_hours:0
+#: field:project.task.work,hours:0
+msgid "Time Spent"
+msgstr ""
+
+#. module: project
+#: model:ir.ui.menu,name:project.menu_tasks
+#: view:project.task:0
+msgid "Tasks"
+msgstr ""
+
+#. module: project
+#: view:project.task.type:0
+msgid "Task type"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_view_task_new
+#: model:ir.ui.menu,name:project.menu_action_view_task_new
+msgid "New Task"
+msgstr ""
+
+#. module: project
+#: help:project.project,timesheet_id:0
+msgid "Timetable working hours to adjust the gantt diagram report"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+msgid "Project's members"
+msgstr ""
+
+#. module: project
+#: model:process.transition,note:project.process_transition_taskinvoice0
+msgid "After task is completed, Create its invoice."
+msgstr ""
+
+#. module: project
+#: help:project.task,progress:0
+msgid "Computed as: Time Spent / Total Time."
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_view_task4
+#: model:ir.ui.menu,name:project.menu_action_view_task4
+msgid "My Tasks"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+msgid "Status: %(state)s"
+msgstr ""
+
+#. module: project
+#: view:project.task:0
+msgid "Planned"
+msgstr ""
+
+#. module: project
+#: help:project.project,total_hours:0
+msgid "Sum of total hours of all tasks related to this project."
+msgstr ""
+
+#. module: project
+#: view:project.task:0
+msgid "Delegated tasks"
+msgstr ""
+
+#. module: project
+#: view:project.task:0
+msgid "Information"
+msgstr ""
+
+#. module: project
+#: view:project.task:0
+msgid "Review"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+msgid "Administration"
+msgstr ""
+
+#. module: project
+#: wizard_field:project.task.close,mail_ask,email:0
+msgid "E-Mails"
+msgstr ""
+
+#. module: project
+#: model:process.node,note:project.process_node_triggerinvoice0
+msgid "Trigger invoices from sale order lines"
+msgstr ""
+
+#. module: project
+#: model:process.transition.action,name:project.process_transition_action_opendrafttask0
+#: view:project.task:0
+#: selection:project.task,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: project
+#: selection:project.task,priority:0
+msgid "Low"
+msgstr ""
+
+#. module: project
+#: field:project.project,manager:0
+msgid "Project Manager"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+#: selection:project.project,state:0
+#: view:project.task:0
+#: selection:project.task,state:0
+#: selection:project.task.delegate,init,state:0
+msgid "Pending"
+msgstr ""
+
+#. module: project
+#: field:project.task,state:0
+msgid "Status"
+msgstr ""
+
+#. module: project
+#: help:project.task.delegate,init,state:0
+msgid ""
+"New state of your own task. Pending will be reopened automatically when the "
+"delegated task is closed."
+msgstr ""
+
+#. module: project
+#: field:res.company,project_time_mode:0
+msgid "Project Time Unit"
+msgstr ""
+
+#. module: project
+#: field:project.project,complete_name:0
+#: field:project.project,name:0
+msgid "Project Name"
+msgstr ""
+
+#. module: project
+#: wizard_button:project.task.close,mail_ask,mail_send:0
+msgid "Send Message"
+msgstr ""
+
+#. module: project
+#: field:project.project,total_hours:0
+msgid "Total Time"
+msgstr ""
+
+#. module: project
+#: field:project.task,active:0
+msgid "Active"
+msgstr ""
+
+#. module: project
+#: model:project.task.type,name:project.project_tt_bug
+msgid "Bug"
+msgstr ""
+
+#. module: project
+#: model:project.task.type,name:project.project_tt_quote
+msgid "Quotation"
+msgstr ""
+
+#. module: project
+#: view:project.task:0
+msgid "Task edition"
+msgstr ""
+
+#. module: project
+#: help:project.task,delay_hours:0
+msgid ""
+"Computed as: Total Time - Estimated Time. It gives the difference of the "
+"time estimated by the project manager and the real time to close the task."
+msgstr ""
+
+#. module: project
+#: model:process.node,name:project.process_node_opentask0
+msgid "Open task"
+msgstr ""
+
+#. module: project
+#: field:project.project,timesheet_id:0
+msgid "Working Time"
+msgstr ""
+
+#. module: project
+#: selection:res.company,project_time_mode:0
+msgid "Months"
+msgstr ""
+
+#. module: project
+#: model:process.transition,note:project.process_transition_opendonetask0
+msgid "When task is completed, it will come into the done state."
+msgstr ""
+
+#. module: project
+#: field:project.task.work,date:0
+msgid "Date"
+msgstr ""
+
+#. module: project
+#: help:res.company,project_time_mode:0
+msgid ""
+"This will set the unit of measure used in projects and tasks.\n"
+"If you use the timesheet linked to projects (project_timesheet module), "
+"don't forget to setup the right unit of measure in your employees."
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.act_res_users_2_project_project
+msgid "User's projects"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+msgid "Reactivate Project"
+msgstr ""
+
+#. module: project
+#: selection:project.task,priority:0
+msgid "Urgent"
+msgstr ""
+
+#. module: project
+#: wizard_view:project.task.delegate,init:0
+msgid "Delegate this task to a user"
+msgstr ""
+
+#. module: project
+#: field:project.task,delegated_user_id:0
+msgid "Delegated To"
+msgstr ""
+
+#. module: project
+#: field:project.task,date_close:0
+msgid "Date Closed"
+msgstr ""
+
+#. module: project
+#: field:project.task,user_id:0
+msgid "Assigned to"
+msgstr ""
+
+#. module: project
+#: help:project.task,planned_hours:0
+msgid ""
+"Estimated time to do the task, usually set by the project manager when the "
+"task is in draft state."
+msgstr ""
+
+#. module: project
+#: help:project.project,effective_hours:0
+msgid "Sum of spent hours of all tasks related to this project."
+msgstr ""
+
+#. module: project
+#: help:project.task,project_id:0
+msgid ""
+"If you have [?] in the project name, it means there are no analytic account "
+"linked to this project."
+msgstr ""
+
+#. module: project
+#: help:project.project,planned_hours:0
+msgid "Sum of planned hours of all tasks related to this project."
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.act_res_users_2_project_task_work_month
+msgid "Month works"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.report.xml,name:project.report_project_project_gantt
+#: model:ir.actions.report.xml,name:project.report_project_task_gantt
+msgid "Gantt Representation"
+msgstr ""
+
+#. module: project
+#: field:project.project,warn_customer:0
+msgid "Warn Partner"
+msgstr ""
+
+#. module: project
+#: field:project.project,state:0
+msgid "State"
+msgstr ""
+
+#. module: project
+#: field:project.task,name:0
+msgid "Task summary"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+msgid "Date Start: %(date_start)s"
+msgstr ""
+
+#. module: project
+#: help:project.project,category_id:0
+msgid ""
+"Link this project to an analytic account if you need financial management on "
+"projects. It enables you to connect projects with budgets, planning, cost "
+"and revenue analysis, timesheets on projects, etc."
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+#: selection:project.project,state:0
+#: view:project.task:0
+#: selection:project.task,state:0
+#: selection:project.task.delegate,init,state:0
+msgid "Done"
+msgstr ""
+
+#. module: project
+#: view:config.compute.remaining:0
+#: model:process.transition.action,name:project.process_transition_action_draftcanceltask0
+#: model:process.transition.action,name:project.process_transition_action_opencanceltask0
+#: view:project.project:0
+#: view:project.task:0
+#: wizard_button:project.task.close,mail_ask,end:0
+#: wizard_button:project.task.delegate,init,end:0
+msgid "Cancel"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.act_project_project_2_project_task_new
+msgid "Create a Task"
+msgstr ""
+
+#. module: project
+#: model:process.transition.action,name:project.process_transition_action_draftopentask0
+msgid "Open"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+msgid "ID: %(task_id)s"
+msgstr ""
+
+#. module: project
+#: selection:project.task,state:0
+msgid "In Progress"
+msgstr ""
+
+#. module: project
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: project
+#: view:project.task:0
+msgid "Reactivate"
+msgstr ""
+
+#. module: project
+#: field:project.task,parent_id:0
+msgid "Parent Task"
+msgstr ""
+
+#. module: project
+#: view:project.task:0
+msgid "Delay"
+msgstr ""
+
+#. module: project
+#: selection:project.task,priority:0
+msgid "Very Low"
+msgstr ""
+
+#. module: project
+#: wizard_view:project.task.close,mail_ask:0
+msgid "Send mail to customer"
+msgstr ""
+
+#. module: project
+#: field:project.project,warn_manager:0
+msgid "Warn Manager"
+msgstr ""
+
+#. module: project
+#: model:ir.model,name:project.model_config_compute_remaining
+msgid "config.compute.remaining"
+msgstr ""
+
+#. module: project
+#: wizard_button:project.task.close,mail_ask,close:0
+msgid "Quiet close"
+msgstr ""
+
+#. module: project
+#: help:project.task.delegate,init,prefix:0
+msgid "New title of your own task to validate the work done."
+msgstr ""
+
+#. module: project
+#: field:project.task,progress:0
+msgid "Progress (%)"
+msgstr ""
+
+#. module: project
+#: field:project.task,description:0
+#: wizard_field:project.task.close,mail_ask,description:0
+#: field:project.task.type,description:0
+msgid "Description"
+msgstr ""
+
+#. module: project
+#: model:process.transition,name:project.process_transition_taskinvoice0
+msgid "Task invoice"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_view_my_project_open
+#: model:ir.ui.menu,name:project.menu_open_view_my_project_open
+msgid "Projects Structure"
+msgstr ""
+
+#. module: project
+#: wizard_view:project.task.delegate,init:0
+msgid "Validation Task"
+msgstr ""
+
+#. module: project
+#: field:project.task,work_ids:0
+msgid "Work done"
+msgstr ""
+
+#. module: project
+#: selection:project.project,state:0
+msgid "Running"
+msgstr ""
+
+#. module: project
+#: help:project.project,parent_id:0
+msgid ""
+"If you have [?] in the name, it means there are no analytic account linked "
+"to project."
+msgstr ""
+
+#. module: project
+#: model:ir.actions.wizard,name:project.wizard_delegate_task
+msgid "Delegate Task"
+msgstr ""
+
+#. module: project
+#: field:project.project,tasks:0
+msgid "Project tasks"
+msgstr ""
+
+#. module: project
+#: help:project.project,warn_manager:0
+msgid ""
+"If you check this field, the project manager will receive a request each "
+"time a task is completed by his team."
+msgstr ""
+
+#. module: project
+#: model:project.task.type,name:project.project_tt_feature
+msgid "New Feature"
+msgstr ""
+
+#. module: project
+#: model:process.node,note:project.process_node_opentask0
+msgid "Encode your working hours."
+msgstr ""
+
+#. module: project
+#: wizard_field:project.task.delegate,init,prefix:0
+msgid "Your Task Title"
+msgstr ""
+
+#. module: project
+#: model:res.request.link,name:project.req_link_task
+msgid "Project task"
+msgstr ""
+
+#. module: project
+#: field:project.task,effective_hours:0
+msgid "Hours Spent"
+msgstr ""
+
+#. module: project
+#: field:project.task,total_hours:0
+msgid "Total Hours"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_view_template_project
+#: model:ir.ui.menu,name:project.menu_template_project
+msgid "Template of Projects"
+msgstr ""
+
+#. module: project
+#: field:project.project,priority:0
+#: field:project.task,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: project
+#: help:project.project,warn_footer:0
+msgid ""
+"Footer added at the beginning of the email for the warning message sent to "
+"the customer when a task is closed."
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+msgid "Partner Info"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_config_compute_remaining
+msgid "Compute Remaining Hours"
+msgstr ""
+
+#. module: project
+#: wizard_field:project.task.delegate,init,state:0
+msgid "Validation State"
+msgstr ""
+
+#. module: project
+#: constraint:project.project:0
+msgid "Error ! You can not create recursive projects."
+msgstr ""
+
+#. module: project
+#: field:project.task,date_deadline:0
+msgid "Deadline"
+msgstr ""
+
+#. module: project
+#: wizard_field:project.task.delegate,init,user_id:0
+msgid "Assign To"
+msgstr ""
+
+#. module: project
+#: field:project.task.work,name:0
+msgid "Work summary"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+msgid "Date Stop: %(date_stop)s"
+msgstr ""
+
+#. module: project
+#: field:project.project,date_end:0
+msgid "Expected End"
+msgstr ""
+
+#. module: project
+#: model:process.node,note:project.process_node_taskbydelegate0
+msgid "Delegate your task to the other user"
+msgstr ""
+
+#. module: project
+#: view:project.project:0
+#: field:project.project,warn_footer:0
+msgid "Mail Footer"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_view_project_open
+#: model:ir.ui.menu,name:project.menu_open_view_project_open
+msgid "Running projects"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+msgid "My project's planning"
+msgstr ""
+
+#. module: project
+#: view:hr_timesheet_sheet.sheet:0
+#: model:ir.actions.act_window,name:project.act_hr_timesheet_sheet
+msgid "Timesheets"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_view_task_tree_deadline
+msgid "My Task's Deadlines"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+#: model:ir.actions.act_window,name:project.action_view_board_note_tree
+msgid "Public Notes"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_board_project
+#: model:ir.ui.menu,name:project.menu_board_project
+msgid "Project Dashboard"
+msgstr ""
+
+#. module: project
+#: model:ir.module.module,shortdesc:project.module_meta_information
+msgid "Board for project users"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_project_pipeline_user
+msgid "Pipeline of tasks"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+msgid "My Planning"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+#: model:ir.actions.act_window,name:project.act_my_account
+msgid "My accounts to invoice"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.open_board_project_manager
+#: model:ir.ui.menu,name:project.menu_board_project_manager
+msgid "Project Manager Dashboard"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+msgid "My Deadlines"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+msgid "User's timesheets"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+msgid "Project manager board"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+#: model:ir.actions.act_window,name:project.action_view_task_tree
+msgid "My Open Tasks"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+msgid "My Board"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+msgid "My tasks board"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+msgid "My user's pipeline"
+msgstr ""
+
+#. module: project
+#: view:board.board:0
+msgid "My Timesheet"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_project_task_tree_month
+#: model:ir.ui.menu,name:project.menu_project_task_tree_month
+msgid "Tasks finished by project (this month)"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_project_task_user_tree
+#: model:ir.ui.menu,name:project.menu_project_task_user_tree
+msgid "Tasks Closed by Project and User"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_project_task_user_tree_month
+#: model:ir.ui.menu,name:project.menu_project_task_user_tree_month
+msgid "Tasks finished by project and user (this month)"
+msgstr ""
+
+#. module: project
+#: field:report.project.task,hours_effective:0
+#: field:report.project.task.user,hours_effective:0
+msgid "Effective Hours"
+msgstr ""
+
+#. module: project
+#: model:ir.model,name:project.model_report_project_task_user
+msgid "Tasks by user and project"
+msgstr ""
+
+#. module: project
+#: field:report.project.task,task_closed:0
+#: field:report.project.task.user,task_closed:0
+msgid "Task Closed"
+msgstr ""
+
+#. module: project
+#: view:report.project.task:0
+msgid "Tasks by Project"
+msgstr ""
+
+#. module: project
+#: model:ir.module.module,shortdesc:project.module_meta_information
+msgid "Sales Management - Reporting"
+msgstr ""
+
+#. module: project
+#: field:report.project.task.user,user_id:0
+msgid "User"
+msgstr ""
+
+#. module: project
+#: view:report.project.task.user:0
+msgid "Tasks by Project and User"
+msgstr ""
+
+#. module: project
+#: model:ir.ui.menu,name:project.next_id_63
+msgid "This Month"
+msgstr ""
+
+#. module: project
+#: view:report.project.task.user:0
+msgid "Tasks by projects and users"
+msgstr ""
+
+#. module: project
+#: field:report.project.task,closing_days:0
+#: field:report.project.task.user,closing_days:0
+msgid "Avg Closing Delay"
+msgstr ""
+
+#. module: project
+#: model:ir.model,name:project.model_report_project_task
+#: view:report.project.task:0
+msgid "Tasks by project"
+msgstr ""
+
+#. module: project
+#: field:report.project.task,hours_delay:0
+#: field:report.project.task.user,hours_delay:0
+msgid "Avg. Plan.-Eff."
+msgstr ""
+
+#. module: project
+#: field:report.project.task,name:0 field:report.project.task.user,name:0
+msgid "Month"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_project_task_tree
+#: model:ir.ui.menu,name:project.menu_project_task_tree
+msgid "Tasks Closed by Project"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_project_task
+#: model:ir.ui.menu,name:project.menu_project_task_user_tree
+#: view:report.task.user.pipeline.open:0
+msgid "Tasks by User"
+msgstr ""
+
+#. module: project
+#: selection:report.task.user.pipeline.open,task_state:0
+msgid "No Task"
+msgstr ""
+
+#. module: project
+#: model:ir.module.module,shortdesc:project.module_meta_information
+msgid "Report on tasks by user for projects"
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_report_timesheet_task_user
+#: model:ir.ui.menu,name:project.menu_timesheet_task_user
+msgid "Timesheet / Task Hours Per Month"
+msgstr ""
+
+#. module: project
+#: field:report.task.user.pipeline.open,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: project
+#: model:ir.ui.menu,name:project.next_id_57
+msgid "Reporting"
+msgstr ""
+
+#. module: project
+#: model:ir.module.module,description:project.module_meta_information
+msgid ""
+"Gives statistics on tasks by user on projects to check the pipeline of users."
+msgstr ""
+
+#. module: project
+#: model:ir.actions.act_window,name:project.action_closed_task_board
+msgid "Task Closed Within Past 15 Days"
+msgstr ""
+
+#. module: project
+#: field:report.task.user.pipeline.open,task_hrs:0
+#: field:report.timesheet.task.user,task_hrs:0
+msgid "Task Hours"
+msgstr ""
+
+#. module: project
+#: field:report.task.user.pipeline.open,task_nbr:0
+msgid "Task Number"
+msgstr ""
+
+#. module: project
+#: model:ir.model,name:project.model_report_timesheet_task_user
+msgid "report.timesheet.task.user"
+msgstr ""
+
+#. module: project
+#: view:report.timesheet.task.user:0
+msgid "Timesheet/Task hours Report Per Month"
+msgstr ""
+
+#. module: project
+#: field:report.task.user.pipeline.open,task_progress:0
+msgid "Task Progress"
+msgstr ""
+
+#. module: project
+#: model:ir.model,name:project.model_report_closed_task
+msgid "Closed Task Report"
+msgstr ""
+
+#. module: project
+#: field:report.timesheet.task.user,timesheet_hrs:0
+msgid "Timesheet Hours"
+msgstr ""
+
+#. module: project
+#: view:report.closed.task:0
+msgid "Closed Tasks"
+msgstr ""
diff --git a/addons/project/installer.py b/addons/project/installer.py
index 4662ebeda5d..7a147737768 100644
--- a/addons/project/installer.py
+++ b/addons/project/installer.py
@@ -34,14 +34,10 @@ class project_installer(osv.osv_memory):
'hr_timesheet_sheet': fields.boolean('Timesheets',
help="Tracks and helps employees encode and validate timesheets "
"and attendances."),
- 'hr_timesheet_invoice': fields.boolean('Invoice Based on Hours',
- help="Helps generate invoices based on human resources "
- "costs and general expenses."),
+ 'project_timesheet': fields.boolean('Bill Time on Tasks',
+ help="Helps generate invoices based on time spent on tasks, if activated on the project."),
'account_budget': fields.boolean('Budgets',
help="Helps accountants manage analytic and crossover budgets."),
- 'project_messages': fields.boolean('Project Messages',
- help="Lets employees send messages to other members of the "
- "projects they're working on."),
'project_issue': fields.boolean('Issues Tracker',
help="Automatically synchronizes project tasks and crm cases."),
# Methodologies
@@ -50,7 +46,7 @@ class project_installer(osv.osv_memory):
"in the SCRUM methodology."),
'project_gtd': fields.boolean('Getting Things Done',
help="GTD is a methodology to efficiently organise yourself and your tasks. This module fully integrates GTD principle with OpenERP's project management."),
- }
+ }
_defaults={
'project_issue': True,
diff --git a/addons/project/process/task_process.xml b/addons/project/process/task_process.xml
index b3490ce4cf1..1c5fba12596 100644
--- a/addons/project/process/task_process.xml
+++ b/addons/project/process/task_process.xml
@@ -2,20 +2,20 @@
-
-
+
-
-
-
+
@@ -26,7 +26,7 @@
-
+
@@ -37,7 +37,7 @@
-
+
@@ -48,7 +48,7 @@
-
+
@@ -59,77 +59,74 @@
-
-
-
+
-
-
+
-
-
+
-
-
-
-
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/addons/project/project.py b/addons/project/project.py
index abae697cacf..26f67d706ba 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -129,7 +129,7 @@ class project(osv.osv):
state<>'cancelled'
GROUP BY
project_id''',(tuple(all_projects),))
- progress = dict(map(lambda x: (x[0], (x[1], x[2], x[3])), cr.fetchall()))
+ progress = dict(map(lambda x: (x[0], (x[1] or 0.0, x[2] or 0.0, x[3] or 0.0)), cr.fetchall()))
user_uom, def_uom = self._get_user_and_default_uom_ids(cr, uid)
for project in self.browse(cr, uid, par_child_projects.keys(), context=context):
@@ -145,12 +145,10 @@ class project(osv.osv):
s[0] = uom_obj._compute_qty(cr, uid, user_uom, s[0], def_uom)
s[1] = uom_obj._compute_qty(cr, uid, user_uom, s[1], def_uom)
s[2] = uom_obj._compute_qty(cr, uid, user_uom, s[2], def_uom)
-
if project.state == 'close':
progress_rate = 100.0
else:
progress_rate = s[1] and round(min(100.0 * s[2] / s[1], 99.99), 2)
-
res[project.id] = {
'planned_hours': s[0],
'effective_hours': s[2],
@@ -159,6 +157,23 @@ class project(osv.osv):
}
return res
+ def _get_project_task(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ result = {}
+ for task in self.pool.get('project.task').browse(cr, uid, ids, context=context):
+ if task.project_id: result[task.project_id.id] = True
+ return result.keys()
+
+ def _get_project_work(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ result = {}
+ for work in self.pool.get('project.task.work').browse(cr, uid, ids, context=context):
+ if work.task_id and work.task_id.project_id: result[work.task_id.project_id.id] = True
+ return result.keys()
+
+
def unlink(self, cr, uid, ids, *args, **kwargs):
for proj in self.browse(cr, uid, ids):
if proj.tasks:
@@ -174,10 +189,30 @@ class project(osv.osv):
'warn_manager': fields.boolean('Warn Manager', help="If you check this field, the project manager will receive a request each time a task is completed by his team.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members', help="Project's member. Not used in any computation, just for information purpose.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'tasks': fields.one2many('project.task', 'project_id', "Project tasks"),
- 'planned_hours': fields.function(_progress_rate, multi="progress", method=True, string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.", store=True),
- 'effective_hours': fields.function(_progress_rate, multi="progress", method=True, string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects.", store=True),
- 'total_hours': fields.function(_progress_rate, multi="progress", method=True, string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects.", store=True),
- 'progress_rate': fields.function(_progress_rate, multi="progress", method=True, string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo.", store=True),
+ 'planned_hours': fields.function(_progress_rate, multi="progress", method=True, string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.",
+ store = {
+ 'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
+ 'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
+ 'project.task.work': (_get_project_work, ['hours'], 10),
+ }),
+ 'effective_hours': fields.function(_progress_rate, multi="progress", method=True, string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects.",
+ store = {
+ 'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
+ 'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
+ 'project.task.work': (_get_project_work, ['hours'], 10),
+ }),
+ 'total_hours': fields.function(_progress_rate, multi="progress", method=True, string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects.",
+ store = {
+ 'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
+ 'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
+ 'project.task.work': (_get_project_work, ['hours'], 10),
+ }),
+ 'progress_rate': fields.function(_progress_rate, multi="progress", method=True, string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo.",
+ store = {
+ 'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
+ 'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
+ 'project.task.work': (_get_project_work, ['hours'], 10),
+ }),
'warn_customer': fields.boolean('Warn Partner', help="If you check this, the user will have a popup when closing a task that propose a message to send by email to the customer.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'warn_header': fields.text('Mail Header', help="Header added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'warn_footer': fields.text('Mail Footer', help="Footer added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
@@ -190,7 +225,6 @@ class project(osv.osv):
'active': True,
'priority': 1,
'sequence': 10,
- 'warn_manager': True,
}
def _check_dates(self, cr, uid, ids):
@@ -373,6 +407,11 @@ class task(osv.osv):
return res
+ def onchange_remaining(self, cr, uid, ids, remaining=0.0, planned = 0.0):
+ if remaining and not planned:
+ return {'value':{'planned_hours': remaining}}
+ return {}
+
def onchange_planned(self, cr, uid, ids, planned = 0.0, effective = 0.0):
return {'value':{'remaining_hours': planned - effective}}
@@ -410,11 +449,19 @@ class task(osv.osv):
res[task.id] = False
return res
+ def _get_task(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ result = {}
+ for work in self.pool.get('project.task.work').browse(cr, uid, ids, context=context):
+ if work.task_id: result[work.task_id.id] = True
+ return result.keys()
+
_columns = {
'active': fields.function(_is_template, method=True, store=True, string='Not a Template Task', type='boolean', help="This field is computed automatically and have the same behavior than the boolean 'active' field: if the task is linked to a template or unactivated project, it will be hidden unless specifically asked."),
'name': fields.char('Task Summary', size=128, required=True),
'description': fields.text('Description'),
- 'priority' : fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Urgent'), ('0','Very urgent')], 'Priority'),
+ 'priority': fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Urgent'), ('0','Very urgent')], 'Priority'),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of tasks."),
'type_id': fields.many2one('project.task.type', 'Stage',),
'state': fields.selection([('draft', 'Draft'),('open', 'In Progress'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
@@ -429,12 +476,27 @@ class task(osv.osv):
'child_ids': fields.many2many('project.task', 'project_task_parent_rel', 'parent_id', 'task_id', 'Delegated Tasks'),
'notes': fields.text('Notes'),
'planned_hours': fields.float('Planned Hours', help='Estimated time to do the task, usually set by the project manager when the task is in draft state.'),
- 'effective_hours': fields.function(_hours_get, method=True, string='Hours Spent', multi='hours', store=True, help="Computed using the sum of the task work done."),
+ 'effective_hours': fields.function(_hours_get, method=True, string='Hours Spent', multi='hours', help="Computed using the sum of the task work done.",
+ store = {
+ 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids'], 10),
+ 'project.task.work': (_get_task, ['hours'], 10),
+ }),
'remaining_hours': fields.float('Remaining Hours', digits=(16,2), help="Total remaining time, can be re-estimated periodically by the assignee of the task."),
- 'total_hours': fields.function(_hours_get, method=True, string='Total Hours', multi='hours', store=True, help="Computed as: Time Spent + Remaining Time."),
- 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", store=True, help="Computed as: Time Spent / Total Time."),
- 'delay_hours': fields.function(_hours_get, method=True, string='Delay Hours', multi='hours', store=True, help="Computed as difference of the time estimated by the project manager and the real time to close the task."),
-
+ 'total_hours': fields.function(_hours_get, method=True, string='Total Hours', multi='hours', help="Computed as: Time Spent + Remaining Time.",
+ store = {
+ 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids'], 10),
+ 'project.task.work': (_get_task, ['hours'], 10),
+ }),
+ 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.",
+ store = {
+ 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids'], 10),
+ 'project.task.work': (_get_task, ['hours'], 10),
+ }),
+ 'delay_hours': fields.function(_hours_get, method=True, string='Delay Hours', multi='hours', help="Computed as difference of the time estimated by the project manager and the real time to close the task.",
+ store = {
+ 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids'], 10),
+ 'project.task.work': (_get_task, ['hours'], 10),
+ }),
'user_id': fields.many2one('res.users', 'Assigned to'),
'delegated_user_id': fields.related('child_ids', 'user_id', type='many2one', relation='res.users', string='Delegated To'),
'partner_id': fields.many2one('res.partner', 'Partner'),
@@ -482,7 +544,6 @@ class task(osv.osv):
return True
_constraints = [
- (_check_dates, 'Error! Task start-date must be lower then task end-date.', ['date_start', 'date_end']),
(_check_recursion, _('Error ! You cannot create recursive tasks.'), ['parent_ids'])
]
#
@@ -617,7 +678,10 @@ class task(osv.osv):
def do_open(self, cr, uid, ids, *args):
tasks= self.browse(cr,uid,ids)
for t in tasks:
- self.write(cr, uid, [t.id], {'state': 'open', 'date_start': time.strftime('%Y-%m-%d %H:%M:%S'),})
+ data = {'state': 'open'}
+ if not t.date_start:
+ data['date_start'] = time.strftime('%Y-%m-%d %H:%M:%S')
+ self.write(cr, uid, [t.id], data)
message = _('Task ') + " '" + t.name + "' "+ _("is Open.")
self.log(cr, uid, t.id, message)
return True
@@ -674,7 +738,7 @@ class task(osv.osv):
if types:
if not typeid:
self.write(cr, uid, task.id, {'type_id': types[0]})
- elif typeid and typeid in types and types.index(typeid) != len(types)-1 :
+ elif typeid and typeid in types and types.index(typeid) != len(types)-1:
index = types.index(typeid)
self.write(cr, uid, task.id, {'type_id': types[index+1]})
return True
@@ -682,7 +746,7 @@ class task(osv.osv):
def prev_type(self, cr, uid, ids, *args):
for task in self.browse(cr, uid, ids):
typeid = task.type_id.id
- types = map(lambda x:x.id, task.project_id.type_ids)
+ types = map(lambda x:x.id, task.project_id and task.project_id.type_ids or [])
if types:
if typeid and typeid in types:
index = types.index(typeid)
diff --git a/addons/project/project_installer.xml b/addons/project/project_installer.xml
index 2c22a4b6743..32b235e4691 100644
--- a/addons/project/project_installer.xml
+++ b/addons/project/project_installer.xml
@@ -27,11 +27,11 @@
-
+
-
+
-
+
@@ -49,8 +49,9 @@
-
- 3
+
+ always
+ 3
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 4be52e78c1e..59bd8a6aff5 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -5,10 +5,10 @@
+ groups="group_project_manager,group_project_user,base.group_system,group_project_finance_user"/>
-
-
+
+
@@ -27,7 +27,7 @@
-
+
@@ -46,11 +46,11 @@
-
+
+
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
@@ -207,7 +209,7 @@
-
+
@@ -242,13 +244,13 @@
+
-
@@ -302,16 +304,14 @@
tree
-
-
+
-
-
+
+
-
-
-
+
+
-
+
+
-
@@ -380,18 +380,20 @@
-
+
-
+
+
+
@@ -405,7 +407,7 @@
-
+
@@ -486,19 +488,19 @@
- Task Stages
+ Stages
project.task.type
form
-
+
+ help="My Projects" domain="[('project_id.user_id','=',uid)]"/>
@@ -108,14 +108,16 @@
+
-
-
-
-
-
+
+
+
+
+
+
@@ -129,9 +131,9 @@
-
-
-
+
+
+
@@ -186,13 +188,14 @@
-
- graph
-
+
+ tree
+
+
-
+
graph
@@ -240,7 +243,7 @@
project.vs.hours
tree
-
+
@@ -253,7 +256,7 @@
project.vs.hours
graph
-
+
@@ -262,6 +265,7 @@
+
Projects: Planned Vs Total hours
project.vs.hours
form
@@ -277,7 +281,7 @@
-
+
graph
diff --git a/addons/project/test/test_project.yml b/addons/project/test/test_project.yml
index d57cc274366..bc65ab67f77 100644
--- a/addons/project/test/test_project.yml
+++ b/addons/project/test/test_project.yml
@@ -136,7 +136,6 @@
- planned_hours == 30
- remaining_hours == 30
- delay_hours == 0.0
- - total_hours == 30
- effective_hours == 0.0
-
Make a work task entry 'Training on OpenERP modules, models and classes' of 10 hours
@@ -153,8 +152,6 @@
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After work task of 10 hours effective_hours must be equal to 10}:
- remaining_hours == 20
- effective_hours == 10.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on OpenERP xml views' of 10 hours
-
@@ -170,8 +167,6 @@
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 20}:
- remaining_hours == 10
- effective_hours == 20.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on workflows' of 10 hours
-
@@ -187,8 +182,6 @@
!assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 30}:
- remaining_hours == 0
- effective_hours == 30.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Set remaining hours of 10 hours for reevaluating the task
-
@@ -210,8 +203,6 @@
- planned_hours == 30
- remaining_hours == 10.0
- effective_hours == 30.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on reports and wizards' of 10 hours
-
@@ -228,8 +219,6 @@
- planned_hours == 30
- remaining_hours == 0
- effective_hours == 40.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Close the task
-
@@ -265,8 +254,6 @@
- planned_hours == 30
- remaining_hours == 10.0
- effective_hours == 40.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Make a work task entry 'Training on yml' of 5 hours
-
@@ -283,8 +270,6 @@
- planned_hours == 30
- remaining_hours == 5.0
- effective_hours == 45.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Close the task
-
@@ -302,8 +287,6 @@
- planned_hours == 30
- remaining_hours == 0.0
- effective_hours == 45.0
- - total_hours == effective_hours + remaining_hours
- - delay_hours == total_hours - planned_hours
-
Close project 'OpenERP Training Programme'
-
diff --git a/addons/project/wizard/project_task_delegate_view.xml b/addons/project/wizard/project_task_delegate_view.xml
index dc299826419..e5eeed35573 100644
--- a/addons/project/wizard/project_task_delegate_view.xml
+++ b/addons/project/wizard/project_task_delegate_view.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/addons/project_gtd/project_gtd.py b/addons/project_gtd/project_gtd.py
index 47c7c02cba8..e8008b65357 100644
--- a/addons/project_gtd/project_gtd.py
+++ b/addons/project_gtd/project_gtd.py
@@ -106,19 +106,19 @@ class project_task(osv.osv):
timebox_obj = self.pool.get('project.gtd.timebox')
if res['type'] == 'search':
tt = timebox_obj.browse(cr, uid, timebox_obj.search(cr,uid,[]))
- search_extended ='''''' % (len(tt)+7,_('Getting Things Done'))
- search_extended += '''''' % (_('Inbox'),)
+ search_extended ='''''' % (len(tt)+7,_('Getting Things Done'))
+ search_extended += '''''' % (_('Inbox'),)
+ search_extended += '''''' % (_('GTD'),)
search_extended += ''''''
for time in tt:
if time.icon:
icon = time.icon
else :
icon=""
- search_extended += ''''''
+ search_extended += ''''''
search_extended += '''
-
-
+
'''
if search_extended:
diff --git a/addons/project_gtd/project_gtd_view.xml b/addons/project_gtd/project_gtd_view.xml
index 99e87fcb325..fc05ee00e61 100644
--- a/addons/project_gtd/project_gtd_view.xml
+++ b/addons/project_gtd/project_gtd_view.xml
@@ -77,9 +77,10 @@
-
+
+
diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py
index 6efb9bde67c..c776eeb1519 100644
--- a/addons/project_issue/__openerp__.py
+++ b/addons/project_issue/__openerp__.py
@@ -32,7 +32,6 @@
'depends': [
'crm',
'project',
- 'hr_timesheet_sheet',
],
'init_xml': [
'project_issue_data.xml'
diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml
index 30b6815e450..ff8bf0801f1 100644
--- a/addons/project_issue/board_project_issue_view.xml
+++ b/addons/project_issue/board_project_issue_view.xml
@@ -35,7 +35,7 @@
graph
-
+
@@ -88,5 +88,49 @@
+
+
+
+ My Project Issues
+ project.issue
+ form
+ tree,form
+ ['|',('assigned_to','=',uid),('user_id','=',uid)]
+
+
+
+ my.open.project.issue.graph
+ project.issue.report
+ graph
+
+
+
+
+
+
+
+
+ My Open Project issues
+ project.issue.report
+ form
+ tree,form
+ [('state','=','open'),'|',('assigned_to','=',uid),('user_id','=',uid)]
+
+
+
+ board.my.project.issue.form.inherit
+ board.board
+ form
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/project_issue/i18n/de.po b/addons/project_issue/i18n/de.po
new file mode 100644
index 00000000000..50dc71c0666
--- /dev/null
+++ b/addons/project_issue/i18n/de.po
@@ -0,0 +1,965 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 09:23+0000\n"
+"PO-Revision-Date: 2010-10-05 13:34+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,priority:0
+msgid "Severity"
+msgstr ""
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:0
+#, python-format
+msgid "is Open."
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,delay_open:0
+msgid "Avg. Delay to Open"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+msgid "Group By..."
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,working_hours_open:0
+msgid "Working Hours to Open the Issue"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid " 7 Days "
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,date_open:0
+msgid "Opened"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,opening_date:0
+msgid "Date of Opening"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "March"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,company_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,email_cc:0
+msgid "Watchers Emails"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Close Working hours"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,day_open:0
+msgid "Days to Open"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Date Closed"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+#: field:project.issue.report,day:0
+msgid "Day"
+msgstr ""
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:0
+#, python-format
+msgid "An Issue created"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,task_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,task_id:0
+msgid "Task"
+msgstr ""
+
+#. module: project_issue
+#: view:board.board:0
+msgid "Issues By Stage"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,partner_mobile:0
+msgid "Mobile"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "365 Days"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,message_ids:0
+msgid "Messages"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.model,name:project_issue.model_project_project
+#: view:project.issue:0
+#: field:project.issue,project_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,project_id:0
+msgid "Project"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue,state:0
+#: selection:project.issue.report,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.stage,name:project_issue.stage2
+msgid "Fixed"
+msgstr ""
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:0
+#, python-format
+msgid "Warning !"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,date_closed:0
+msgid "Date of Closing"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Issue Tracker Search"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,user_id2losed:0
+msgid "Close Date"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,working_hours_open:0
+msgid "Avg. Working Hours to Open"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,date_action_next:0
+msgid "Next Action"
+msgstr ""
+
+#. module: project_issue
+#: help:project.project,project_escalation_id:0
+msgid ""
+"If any issue is escalated from the current Project, it will be listed under "
+"the project selected here."
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,date_deadline:0
+msgid "Deadline"
+msgstr ""
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:0
+#, python-format
+msgid ""
+"You cannot escalate this issue.\n"
+"The relevant Project has not configured the Escalation Project!"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,partner_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,partner_id:0
+msgid "Partner"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.resource.type,name:project_issue.type2
+msgid "Version 4.4"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Statistics"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Convert To Task"
+msgstr ""
+
+#. module: project_issue
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+#: field:project.issue.report,section_id:0
+msgid "Section"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,perc_done:0
+msgid "%Done"
+msgstr ""
+
+#. module: project_issue
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+#: field:project.issue.report,priority:0
+msgid "Priority"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Send New Email"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,version_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,version_id:0
+msgid "Version"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.module.module,shortdesc:project_issue.module_meta_information
+msgid "Issue Management in Project Management"
+msgstr ""
+
+#. module: project_issue
+#: view:board.board:0
+msgid "Pending Issues"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Open Working Hours"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.project_issue_categ_action
+msgid "Issue Categories"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,email_from:0
+msgid "Email"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,canal_id:0
+#: field:project.issue.report,canal_id:0
+msgid "Channel"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,avg_answers:0
+msgid "Avg. Answers"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "Lowest"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.stage,name:project_issue.stage3
+msgid "Won't fix"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,create_date:0
+#: field:project.issue.report,creation_date:0
+msgid "Creation Date"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,partner_phone:0
+msgid "Phone"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Reset to Draft"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: selection:project.issue,state:0
+#: view:project.issue.report:0
+#: selection:project.issue.report,state:0
+msgid "Pending"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.open_board_project_issue
+#: model:ir.ui.menu,name:project_issue.menu_deshboard_project_issue
+msgid "Project Issue Dashboard"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "References"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "July"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,stage_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,stage_id:0
+msgid "Stage"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "History Information"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,date_closed:0
+#: selection:project.issue,state:0
+#: selection:project.issue.report,state:0
+msgid "Closed"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.action_view_current_project_issue_tree
+#: model:ir.actions.act_window,name:project_issue.action_view_pending_project_issue_tree
+msgid "Project issues"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Contact"
+msgstr ""
+
+#. module: project_issue
+#: view:board.board:0
+msgid "My Board"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Communication"
+msgstr ""
+
+#. module: project_issue
+#: help:project.issue,canal_id:0
+msgid ""
+"The channels represent the different communication modes available with the "
+"customer. With each commercial opportunity, you can indicate the canall "
+"which is this opportunity source."
+msgstr ""
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:0
+#, python-format
+msgid "Tasks"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,perc_cancel:0
+msgid "%Cancel"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,nbr:0
+msgid "# of Issues"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "September"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Communication history"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Issue Tracker Tree"
+msgstr ""
+
+#. module: project_issue
+#: help:project.issue,assigned_to:0
+msgid "This is the current user to whom the related task have been assigned"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+#: field:project.issue.report,month:0
+msgid "Month"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.model,name:project_issue.model_project_issue_report
+msgid "project.issue.report"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Escalate"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.categ,name:project_issue.feature_request_categ
+msgid "Feature Requests"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,write_date:0
+msgid "Update Date"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Salesman"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.module.module,description:project_issue.module_meta_information
+msgid ""
+"\n"
+" This module provide Issues/Bugs Management in Project\n"
+" "
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,categ_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,categ_id:0
+msgid "Category"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "#Number of Project Issues"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.project_issue_stage_act
+msgid "Issue Stages"
+msgstr ""
+
+#. module: project_issue
+#: help:project.issue,email_cc:0
+msgid ""
+"These email addresses will be added to the CC field of all inbound and "
+"outbound emails for this record before being sent. Separate multiple email "
+"addresses with a comma"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.resource.type,name:project_issue.type1
+msgid "Version 4.2"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue,state:0
+#: selection:project.issue.report,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "Low"
+msgstr ""
+
+#. module: project_issue
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,delay_close:0
+msgid "Avg. Delay to Close"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.stage,name:project_issue.stage6
+msgid "Works For Me"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "7 Days"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Status"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "#Project Issues"
+msgstr ""
+
+#. module: project_issue
+#: view:board.board:0
+msgid "Current Issues"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "August"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "Normal"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Global CC"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "June"
+msgstr ""
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:0
+#, python-format
+msgid "Issue "
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "30 Days"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,day_close:0
+msgid "Days to Close"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.stage,name:project_issue.stage5
+msgid "Awaiting Response"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,active:0
+msgid "Active"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "November"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Extended Filters..."
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Search"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "October"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_stage_act
+msgid "Stages"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "January"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Feature Tracker Tree"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.categ,name:project_issue.bug_categ
+msgid "Bugs"
+msgstr ""
+
+#. module: project_issue
+#: view:board.board:0
+msgid "Issues By State"
+msgstr ""
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:0
+#, python-format
+msgid "from Mailgate."
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,date:0
+msgid "Date"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid " Today "
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,partner_address_id:0
+msgid "Partner Contact"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.stage,name:project_issue.stage1
+msgid "Accepted as Bug"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Resolution"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "History"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,assigned_to:0
+#: view:project.issue.report:0
+#: field:project.issue.report,assigned_to:0
+msgid "Assigned to"
+msgstr ""
+
+#. module: project_issue
+#: field:project.project,reply_to:0
+msgid "Reply-To Email Address"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "Highest"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Attachments"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Issue Tracker Form"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,state:0
+#: view:project.issue.report:0
+#: field:project.issue.report,state:0
+msgid "State"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "General"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,user_id2:0
+msgid "Assignee"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+msgid "Done"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "December"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Cancel"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: selection:project.issue.report,state:0
+msgid "Open"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.act_project_project_2_project_issue_all
+#: model:ir.actions.act_window,name:project_issue.project_issue_categ_act0
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_track
+#: view:project.issue:0
+msgid "Issues"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "In Progress"
+msgstr ""
+
+#. module: project_issue
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.action_project_issue_graph_stage
+#: model:ir.actions.act_window,name:project_issue.action_project_issue_graph_state
+#: model:ir.model,name:project_issue.model_project_issue
+#: model:ir.ui.menu,name:project_issue.menu_project_confi
+#: view:project.issue.report:0
+msgid "Project Issue"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,user_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,user_id:0
+msgid "Responsible"
+msgstr ""
+
+#. module: project_issue
+#: field:project.project,resource_calendar_id:0
+msgid "Working Time"
+msgstr ""
+
+#. module: project_issue
+#: model:crm.case.stage,name:project_issue.stage4
+msgid "Invalid"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+msgid "Current"
+msgstr ""
+
+#. module: project_issue
+#: help:project.project,resource_calendar_id:0
+msgid "Timetable working hours to adjust the gantt diagram report"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Details"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Reply"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Feature Tracker Search"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,description:0
+msgid "Description"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "May"
+msgstr ""
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.action_project_issue_report
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_report_tree
+msgid "Issue Analysis"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+#: field:project.issue.report,email:0
+msgid "# Emails"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,partner_name:0
+msgid "Employee's Name"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Emails"
+msgstr ""
+
+#. module: project_issue
+#: help:project.issue,state:0
+msgid ""
+"The state is set to 'Draft', when a case is created. "
+" \n"
+"If the case is in progress the state is set to 'Open'. "
+" \n"
+"When the case is over, the state is set to 'Done'. "
+" \n"
+"If the case needs to be reviewed then the state is set to 'Pending'."
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "February"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,name:0
+msgid "Name"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Feature description"
+msgstr ""
+
+#. module: project_issue
+#: field:project.project,project_escalation_id:0
+msgid "Project Escalation"
+msgstr ""
+
+#. module: project_issue
+#: help:project.issue,section_id:0
+msgid ""
+"Sales team to which Case belongs to. Define "
+"Responsible user and Email account for mail gateway."
+msgstr ""
+
+#. module: project_issue
+#: help:project.issue,email_from:0
+msgid "These people will receive email."
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "April"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,working_hours_close:0
+msgid "Working Hours to Close the Issue"
+msgstr ""
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:0
+#, python-format
+msgid "is Closed."
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,id:0
+msgid "ID"
+msgstr ""
+
+#. module: project_issue
+#: help:project.issue.report,delay_close:0
+#: help:project.issue.report,delay_open:0
+msgid "Number of Days to close the project issue"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue,state:0
+msgid "Todo"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue.report,working_hours_close:0
+msgid "Avg. Working Hours to Close"
+msgstr ""
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "High"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,section_id:0
+msgid "Sales Team"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,date_action_last:0
+msgid "Last Action"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+#: field:project.issue.report,name:0
+msgid "Year"
+msgstr ""
+
+#. module: project_issue
+#: field:project.issue,duration:0
+msgid "Duration"
+msgstr ""
diff --git a/addons/project_issue/i18n/en_US.po b/addons/project_issue/i18n/en_US.po
index 1f4a96616e2..20af7b04708 100644
--- a/addons/project_issue/i18n/en_US.po
+++ b/addons/project_issue/i18n/en_US.po
@@ -230,11 +230,6 @@ msgstr "Invalid model name in the action definition."
msgid "Section"
msgstr "Section"
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr "%Done"
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -291,11 +286,6 @@ msgstr "Email"
msgid "Channel"
msgstr "Channel"
-#. module: project_issue
-#: field:project.issue.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr "Avg. Answers"
-
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
@@ -399,11 +389,6 @@ msgstr "The channels represent the different communication modes available with
msgid "Tasks"
msgstr "Tasks"
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr "%Cancel"
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/i18n/fr.po b/addons/project_issue/i18n/fr.po
index 8da8b573b87..02404eab350 100644
--- a/addons/project_issue/i18n/fr.po
+++ b/addons/project_issue/i18n/fr.po
@@ -235,11 +235,6 @@ msgstr ""
msgid "Section"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr ""
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -296,11 +291,6 @@ msgstr ""
msgid "Channel"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr ""
-
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
@@ -407,11 +397,6 @@ msgstr ""
msgid "Tasks"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr ""
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/i18n/nl.po b/addons/project_issue/i18n/nl.po
index 59019439416..f2f86f499a1 100644
--- a/addons/project_issue/i18n/nl.po
+++ b/addons/project_issue/i18n/nl.po
@@ -236,11 +236,6 @@ msgstr ""
msgid "Section"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr ""
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -297,11 +292,6 @@ msgstr ""
msgid "Channel"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr ""
-
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
@@ -408,11 +398,6 @@ msgstr ""
msgid "Tasks"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr ""
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/i18n/pl.po b/addons/project_issue/i18n/pl.po
index be144507e7e..52c4443a77a 100644
--- a/addons/project_issue/i18n/pl.po
+++ b/addons/project_issue/i18n/pl.po
@@ -240,11 +240,6 @@ msgstr "Nieprawidłowa nazwa modelu w definicji akcji."
msgid "Section"
msgstr "Sekcja"
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr "%Wykonano"
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -301,11 +296,6 @@ msgstr "E-mail"
msgid "Channel"
msgstr "Kanał"
-#. module: project_issue
-#: field:project.issue.report,avg_answers:0
-msgid "Avg. Answers"
-msgstr "Śred. odpowiedzi"
-
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
@@ -414,11 +404,6 @@ msgstr ""
msgid "Tasks"
msgstr "Zadania"
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr "%Anulowanych"
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/i18n/project_issue.pot b/addons/project_issue/i18n/project_issue.pot
index 521eefb19c8..ec99de96b06 100644
--- a/addons/project_issue/i18n/project_issue.pot
+++ b/addons/project_issue/i18n/project_issue.pot
@@ -230,11 +230,6 @@ msgstr ""
msgid "Section"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_done:0
-msgid "%Done"
-msgstr ""
-
#. module: project_issue
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
@@ -399,11 +394,6 @@ msgstr ""
msgid "Tasks"
msgstr ""
-#. module: project_issue
-#: field:project.issue.report,perc_cancel:0
-msgid "%Cancel"
-msgstr ""
-
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 83871e02b66..ac8580f9c52 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -142,9 +142,38 @@ class project_issue(crm.crm_case, osv.osv):
res[issue.id][field] = abs(float(duration))
return res
+ def _get_issue_task(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ issues = []
+ issue_pool = self.pool.get('project.issue')
+ for task in self.pool.get('project.task').browse(cr, uid, ids, context=context):
+ issues += issue_pool.search(cr, uid, [('task_id','=',task.id)])
+ return issues
+
+ def _get_issue_work(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ issues = []
+ issue_pool = self.pool.get('project.issue')
+ for work in self.pool.get('project.task.work').browse(cr, uid, ids, context=context):
+ if work.task_id:
+ issues += issue_pool.search(cr, uid, [('task_id','=',work.task_id.id)])
+ return issues
+
+ def _hours_get(self, cr, uid, ids, field_names, args, context=None):
+ task_pool = self.pool.get('project.task')
+ res = {}
+ for issue in self.browse(cr, uid, ids, context=context):
+ progress = 0.0
+ if issue.task_id:
+ progress = task_pool._hours_get(cr, uid, [issue.task_id.id], field_names, args, context=context)[issue.task_id.id]['progress']
+ res[issue.id] = {'progress' : progress}
+ return res
+
_columns = {
'id': fields.integer('ID'),
- 'name': fields.char('Name', size=128, required=True),
+ 'name': fields.char('Issue', size=128, required=True),
'active': fields.boolean('Active', required=False),
'create_date': fields.datetime('Creation Date', readonly=True),
'write_date': fields.datetime('Update Date', readonly=True),
@@ -172,12 +201,12 @@ class project_issue(crm.crm_case, osv.osv):
'canal_id': fields.many2one('res.partner.canal', 'Channel', help="The channels represent the different communication modes available with the customer." \
" With each commercial opportunity, you can indicate the canall which is this opportunity source."),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('object_id.model', '=', 'crm.project.bug')]"),
- 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Severity'),
+ 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'version_id': fields.many2one('project.issue.version', 'Version'),
'partner_name': fields.char("Employee's Name", size=64),
'partner_mobile': fields.char('Mobile', size=32),
'partner_phone': fields.char('Phone', size=32),
- 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('object_id.model', '=', 'project.issue')]"),
+ 'type_id': fields.many2one ('project.task.type', 'Resolution'),
'project_id':fields.many2one('project.project', 'Project'),
'duration': fields.float('Duration'),
'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"),
@@ -193,7 +222,12 @@ class project_issue(crm.crm_case, osv.osv):
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
- 'progress': fields.related('task_id', 'progress', string='Progress (%)',group_operator="avg", store=True),
+ 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.",
+ store = {
+ 'project.issue': (lambda self, cr, uid, ids, c={}: ids, ['task_id'], 10),
+ 'project.task': (_get_issue_task, ['progress'], 10),
+ 'project.task.work': (_get_issue_work, ['hours'], 10),
+ }),
}
def _get_project(self, cr, uid, context):
@@ -281,15 +315,28 @@ class project_issue(crm.crm_case, osv.osv):
def convert_to_bug(self, cr, uid, ids, context=None):
return self._convert(cr, uid, ids, 'bug_categ', context=context)
- def onchange_stage_id(self, cr, uid, ids, stage_id, context=None):
- if context is None:
- context = {}
- if not stage_id:
- return {'value':{}}
- stage = self.pool.get('crm.case.stage').browse(cr, uid, stage_id, context)
- if not stage.on_change:
- return {'value':{}}
- return {'value':{}}
+ def next_type(self, cr, uid, ids, *args):
+ for task in self.browse(cr, uid, ids):
+ typeid = task.type_id.id
+ types = map(lambda x:x.id, task.project_id.type_ids or [])
+ if types:
+ if not typeid:
+ self.write(cr, uid, task.id, {'type_id': types[0]})
+ elif typeid and typeid in types and types.index(typeid) != len(types)-1 :
+ index = types.index(typeid)
+ self.write(cr, uid, task.id, {'type_id': types[index+1]})
+ return True
+
+ def prev_type(self, cr, uid, ids, *args):
+ for task in self.browse(cr, uid, ids):
+ typeid = task.type_id.id
+ types = map(lambda x:x.id, task.project_id and task.project_id.type_ids or [])
+ if types:
+ if typeid and typeid in types:
+ index = types.index(typeid)
+ self.write(cr, uid, task.id, {'type_id': index and types[index-1] or False})
+ return True
+
def onchange_task_id(self, cr, uid, ids, task_id, context=None):
if context is None:
@@ -372,31 +419,6 @@ class project_issue(crm.crm_case, osv.osv):
return res
- def get_stage_dict(self, cr, uid, ids, context=None):
- """This function gives dictionary for stage according to stage levels
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case IDs
- @param context: A standard dictionary for contextual values"""
- if not context:
- context = {}
- stage_obj = self.pool.get('crm.case.stage')
- domain = [('object_id.model', '=', self._name)]
- if 'force_domain' in context and context['force_domain']:
- domain += context['force_domain']
- sid = stage_obj.search(cr, uid, domain, context=context)
- s = {}
- previous = {}
- section = self._name
-
- for stage in stage_obj.browse(cr, uid, sid, context=context):
- s.setdefault(section, {})
- s[section][previous.get(section, False)] = stage.id
- previous[section] = stage.id
- return s
-
-
def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context=None):
if context is None:
context = {}
diff --git a/addons/project_issue/project_issue_data.xml b/addons/project_issue/project_issue_data.xml
index 738f734e35a..8f0f097cb87 100644
--- a/addons/project_issue/project_issue_data.xml
+++ b/addons/project_issue/project_issue_data.xml
@@ -31,39 +31,5 @@
v3.0
-
-
-
-
- Accepted as Bug
-
-
-
-
- Fixed
-
-
-
-
- Won't fix
-
-
-
-
- Invalid
-
-
-
-
- Awaiting Response
-
-
-
-
- Works For Me
-
-
-
-
diff --git a/addons/project_issue/project_issue_demo.xml b/addons/project_issue/project_issue_demo.xml
index 7c5ae6083ed..539cef5579e 100644
--- a/addons/project_issue/project_issue_demo.xml
+++ b/addons/project_issue/project_issue_demo.xml
@@ -12,7 +12,6 @@
-
@@ -30,7 +29,6 @@
-
@@ -45,7 +43,6 @@
-
@@ -61,7 +58,6 @@
-
@@ -76,7 +72,6 @@
-
@@ -92,7 +87,6 @@
-
@@ -108,7 +102,6 @@
-
@@ -124,7 +117,6 @@
-
@@ -139,7 +131,6 @@
-
@@ -155,7 +146,6 @@
-
@@ -171,7 +161,6 @@
-
@@ -187,7 +176,6 @@
-
@@ -204,7 +192,6 @@
-
@@ -222,7 +209,6 @@
-
@@ -238,7 +224,6 @@
-
@@ -254,7 +239,6 @@
-
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index a66dfe90560..1298a6f8852 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -44,17 +44,6 @@
-
- Issue Stages
- crm.case.stage
- form
-
- [('object_id.model', '=', 'project.issue')]
- {'object_id':'project.issue'}
-
-
-
-
Project Issue Tracker Form
project.issue
@@ -68,9 +57,9 @@
-
-
-
+
+
+
@@ -95,10 +84,10 @@
+
-
@@ -191,22 +180,20 @@
-
+
-
-
-
+
+
+
+
-
@@ -226,17 +213,21 @@
-
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -255,7 +246,7 @@
+ context="{'group_by':'type_id'}" />
@@ -291,19 +282,17 @@
-
+
-
-
-
+
+
+
+
-
@@ -317,12 +306,8 @@
search
-
-
-
-
+
@@ -341,6 +326,19 @@
# Project
# ------------------------------------------------------
+
+ Project Resource Calendar View
+ project.project
+ form
+
+
+
+
+
+
+
+
+
project.project.form.inherited
project.project
@@ -348,7 +346,6 @@
-
diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py
index e0fe629e62d..d6f8cae363b 100644
--- a/addons/project_issue/report/project_issue_report.py
+++ b/addons/project_issue/report/project_issue_report.py
@@ -35,34 +35,11 @@ class project_issue_report(osv.osv):
_name = "project.issue.report"
_auto = False
- def _get_data(self, cr, uid, ids, field_names, arg, context=None):
- if context is None:
- context = {}
- """ @param cr: the current row, from the database cursor,
- @param uid: the current users ID for security checks,
- @param ids: List of case and section Datas IDs
- @param context: A standard dictionary for contextual values """
-
- res = {}
-
- for report in self.browse(cr, uid, ids, context):
- res[report.id]= {
- 'avg_answers': 0.0,
- 'perc_done' : 0.0,
- 'perc_cancel': 0.0
- }
- #TODO: Calculate
-
- return res
-
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
'user_id':fields.many2one('res.users', 'Responsible', readonly=True),
- 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
+ 'section_id':fields.many2one('crm.case.section', 'Sale Team', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
- 'avg_answers': fields.function(_get_data, group_operator='avg', string='Avg. Answers', multi='avg_answers', method=True, type="integer"),
- 'perc_done': fields.function(_get_data, group_operator='avg', string='%Done', multi='perc_done', method=True, type="float"),
- 'perc_cancel': fields.function(_get_data, group_operator='avg', string='%Cancel', multi='perc_cancel', method=True, type="float"),
'month':fields.selection([('01', 'January'), ('02', 'February'), \
('03', 'March'), ('04', 'April'),\
('05', 'May'), ('06', 'June'), \
@@ -75,7 +52,7 @@ class project_issue_report(osv.osv):
'creation_date': fields.date('Creation Date', readonly=True),
'date_closed': fields.date('Date of Closing', readonly=True),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"),
- 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('object_id.model', '=', 'project.issue')]"),
+ 'type_id': fields.many2one('project.task.type', 'Stage'),
'nbr': fields.integer('# of Issues', readonly=True),
'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True),
'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True),
@@ -111,7 +88,7 @@ class project_issue_report(osv.osv):
c.working_hours_close,
c.section_id,
c.categ_id,
- c.stage_id,
+ c.type_id,
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
c.company_id as company_id,
c.priority as priority,
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index 5d5a0489fa9..eed71191d59 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -7,11 +7,11 @@
project.issue.report
tree
-
+
-
+
@@ -101,7 +101,7 @@
-
+
@@ -129,7 +129,7 @@
-
+
@@ -138,13 +138,13 @@
context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
+ domain="[]" context="{'group_by':'day'}" help="Creation Date"/>
+ domain="[]" context="{'group_by':'month'}" help="Creation Date"/>
+ domain="[]" context="{'group_by':'name'}" help="Creation Date"/>
@@ -152,7 +152,7 @@
- Issue Analysis
+ Issues Analysis
project.issue.report
form
graph,tree
diff --git a/addons/project_issue/security/ir.model.access.csv b/addons/project_issue/security/ir.model.access.csv
index 1fe83d68c28..ece2be3a784 100755
--- a/addons/project_issue/security/ir.model.access.csv
+++ b/addons/project_issue/security/ir.model.access.csv
@@ -8,15 +8,7 @@
"access_crm_case_categ_supp","crm.case.categ","crm.model_crm_case_categ","project_issue.group_project_supporter",1,0,0,0
"access_project_issue_version_project","project_issue_version manager","model_project_issue_version","project.group_project_manager",1,1,1,1
"access_project_issue_version","project_issue_version manager","model_project_issue_version","project_issue.group_project_supporter",1,0,0,0
-"access_crm_case_stage_manager_suppo","crm.case.stage","crm.model_crm_case_stage","project_issue.group_project_supporter",1,0,0,0
"access_project_issue_system","project.issue system","model_project_issue","base.group_system",1,0,0,0
-"access_crm_case_stage_manager_system","crm.case.stage system","crm.model_crm_case_stage","base.group_system",1,1,1,1
"access_project_issue_report_system","project.issue.report system","model_project_issue_report","base.group_system",1,0,0,0
"access_crm_case_section_system","crm.case.section system","crm.model_crm_case_section","base.group_system",1,1,1,1
"access_project_issue_report_user","project.issue.report user","model_project_issue_report","project.group_project_user",1,0,0,0
-"access_hr_timesheet_sheet_sheet_project_user","hr_timesheet_sheet.sheet user","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","project.group_project_user",1,1,1,0
-"access_hr_analytic_timesheet_project_user","hr_analytic_timesheet user","hr_timesheet_sheet.model_hr_analytic_timesheet","project.group_project_user",1,1,1,0
-"access_hr_analytic_timesheet_project_manager","hr_analytic_timesheet manager","hr_timesheet_sheet.model_hr_analytic_timesheet","project.group_project_manager",1,0,0,0
-"access_hr_timesheet_sheet_sheet_project_manager","hr_timesheet_sheet.sheet manager","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","project.group_project_manager",1,0,0,0
-"access_hr_analytic_timesheet_system","hr_analytic_timesheet system","hr_timesheet_sheet.model_hr_analytic_timesheet","base.group_system",1,0,0,0
-"access_hr_timesheet_sheet_sheet_project_system","hr_timesheet_sheet.sheet system","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","base.group_system",1,0,0,0
diff --git a/addons/project_issue_sheet/__openerp__.py b/addons/project_issue_sheet/__openerp__.py
index 9e7056c214a..d867defc08f 100644
--- a/addons/project_issue_sheet/__openerp__.py
+++ b/addons/project_issue_sheet/__openerp__.py
@@ -37,6 +37,7 @@
],
'update_xml': [
'project_issue_sheet_view.xml',
+ 'security/ir.model.access.csv',
],
'demo_xml': [
],
diff --git a/addons/project_issue_sheet/i18n/de.po b/addons/project_issue_sheet/i18n/de.po
new file mode 100644
index 00000000000..04d2b2afa0e
--- /dev/null
+++ b/addons/project_issue_sheet/i18n/de.po
@@ -0,0 +1,88 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 10:05+0000\n"
+"PO-Revision-Date: 2010-10-05 13:35+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: project_issue_sheet
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: project_issue_sheet
+#: model:ir.module.module,description:project_issue_sheet.module_meta_information
+msgid ""
+"\n"
+" This module adds the Timesheet support for the "
+"Issues/Bugs Management in Project\n"
+" "
+msgstr ""
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_account_analytic_line
+msgid "Analytic Line"
+msgstr ""
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_project_issue
+msgid "Project Issue"
+msgstr ""
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_hr_analytic_timesheet
+msgid "Timesheet Line"
+msgstr ""
+
+#. module: project_issue_sheet
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: project_issue_sheet
+#: view:project.issue:0
+msgid "Timesheet"
+msgstr ""
+
+#. module: project_issue_sheet
+#: field:project.issue,analytic_account_id:0
+msgid "Analytic Account"
+msgstr ""
+
+#. module: project_issue_sheet
+#: view:project.issue:0
+msgid "Worklogs"
+msgstr ""
+
+#. module: project_issue_sheet
+#: field:account.analytic.line,create_date:0
+msgid "Create Date"
+msgstr ""
+
+#. module: project_issue_sheet
+#: field:project.issue,timesheet_ids:0
+msgid "Timesheets"
+msgstr ""
+
+#. module: project_issue_sheet
+#: model:ir.module.module,shortdesc:project_issue_sheet.module_meta_information
+msgid "Add the Timesheet support for Issue Management in Project Management"
+msgstr ""
+
+#. module: project_issue_sheet
+#: field:hr.analytic.timesheet,issue_id:0
+msgid "Issue"
+msgstr ""
diff --git a/addons/project_issue_sheet/i18n/pl.po b/addons/project_issue_sheet/i18n/pl.po
new file mode 100644
index 00000000000..48db8e1680b
--- /dev/null
+++ b/addons/project_issue_sheet/i18n/pl.po
@@ -0,0 +1,90 @@
+# Polish translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 10:05+0000\n"
+"PO-Revision-Date: 2010-10-08 07:31+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Polish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-09 12:13+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: project_issue_sheet
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Niewłaściwy XML dla architektury widoku!"
+
+#. module: project_issue_sheet
+#: model:ir.module.module,description:project_issue_sheet.module_meta_information
+msgid ""
+"\n"
+" This module adds the Timesheet support for the "
+"Issues/Bugs Management in Project\n"
+" "
+msgstr ""
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_account_analytic_line
+msgid "Analytic Line"
+msgstr "Pozycja analaityczna"
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_project_issue
+msgid "Project Issue"
+msgstr "Problem w Projekcie"
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_hr_analytic_timesheet
+msgid "Timesheet Line"
+msgstr "Pozycja karty czasu pracy"
+
+#. module: project_issue_sheet
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Nazwa obiektu musi zaczynać się od x_ oraz nie może zawierać znaków "
+"specjalnych !"
+
+#. module: project_issue_sheet
+#: view:project.issue:0
+msgid "Timesheet"
+msgstr "Karta czasu pracy"
+
+#. module: project_issue_sheet
+#: field:project.issue,analytic_account_id:0
+msgid "Analytic Account"
+msgstr "Konto analityczne"
+
+#. module: project_issue_sheet
+#: view:project.issue:0
+msgid "Worklogs"
+msgstr ""
+
+#. module: project_issue_sheet
+#: field:account.analytic.line,create_date:0
+msgid "Create Date"
+msgstr "Data utworzenia"
+
+#. module: project_issue_sheet
+#: field:project.issue,timesheet_ids:0
+msgid "Timesheets"
+msgstr "Karty czasu pracy"
+
+#. module: project_issue_sheet
+#: model:ir.module.module,shortdesc:project_issue_sheet.module_meta_information
+msgid "Add the Timesheet support for Issue Management in Project Management"
+msgstr ""
+
+#. module: project_issue_sheet
+#: field:hr.analytic.timesheet,issue_id:0
+msgid "Issue"
+msgstr "Problem"
diff --git a/addons/project_issue_sheet/project_issue_sheet_view.xml b/addons/project_issue_sheet/project_issue_sheet_view.xml
index ac842d7e018..2222ef12ea5 100644
--- a/addons/project_issue_sheet/project_issue_sheet_view.xml
+++ b/addons/project_issue_sheet/project_issue_sheet_view.xml
@@ -13,13 +13,13 @@
-
+
-
+
diff --git a/addons/project_issue_sheet/security/ir.model.access.csv b/addons/project_issue_sheet/security/ir.model.access.csv
new file mode 100644
index 00000000000..235bb4d1bfc
--- /dev/null
+++ b/addons/project_issue_sheet/security/ir.model.access.csv
@@ -0,0 +1,8 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_hr_timesheet_sheet_sheet_project_user","hr_timesheet_sheet.sheet user","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","project.group_project_user",1,1,1,0
+"access_hr_analytic_timesheet_project_user","hr_analytic_timesheet user","hr_timesheet_sheet.model_hr_analytic_timesheet","project.group_project_user",1,1,1,0
+"access_hr_analytic_timesheet_project_manager","hr_analytic_timesheet manager","hr_timesheet_sheet.model_hr_analytic_timesheet","project.group_project_manager",1,0,0,0
+"access_hr_timesheet_sheet_sheet_project_manager","hr_timesheet_sheet.sheet manager","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","project.group_project_manager",1,0,0,0
+"access_hr_analytic_timesheet_system","hr_analytic_timesheet system","hr_timesheet_sheet.model_hr_analytic_timesheet","base.group_system",1,0,0,0
+"access_hr_timesheet_sheet_sheet_project_system","hr_timesheet_sheet.sheet system","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","base.group_system",1,0,0,0
+
diff --git a/addons/project_long_term/i18n/de.po b/addons/project_long_term/i18n/de.po
new file mode 100644
index 00000000000..b78d2f7d390
--- /dev/null
+++ b/addons/project_long_term/i18n/de.po
@@ -0,0 +1,549 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 10:11+0000\n"
+"PO-Revision-Date: 2010-10-05 13:36+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:40+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: project_long_term
+#: model:ir.module.module,shortdesc:project_long_term.module_meta_information
+msgid "Long Term Project Management"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.compute.phases:0
+#: view:project.compute.tasks:0
+msgid "Compute Scheduling of Phases"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+#: field:project.phase,next_phase_ids:0
+msgid "Next Phases"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Project's Tasks"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.act_project_phases
+#: view:project.phase:0
+msgid "Phases"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.compute.phases:0
+msgid "_Compute"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+#: view:project.resource.allocation:0
+msgid "Group By..."
+msgstr ""
+
+#. module: project_long_term
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: project_long_term
+#: constraint:project.project:0
+msgid "Error! project start-date must be lower then project end-date."
+msgstr ""
+
+#. module: project_long_term
+#: field:project.compute.phases,target_project:0
+msgid "Schedule"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.module.module,description:project_long_term.module_meta_information
+msgid ""
+"\n"
+"\n"
+" Long Term Project management module that tracks planning, "
+"scheduling, resources allocation.\n"
+" Mainly used with Big project management.\n"
+" - Project Phases will be maintained by Manager of the project\n"
+" - Compute Phase Scheduling: Compute start date and end date of "
+"the phases which are in draft,open and pending state of the project given.\n"
+" If no project given then all the "
+"draft,open and pending state phases will be taken\n"
+" - Compute Task Scheduling: This works same as the scheduler "
+"button on project.phase. It takes the project as argument and computes all "
+"the open,draft and pending tasks\n"
+" - Schedule Tasks: All the tasks which are in draft,pending and "
+"open state are scheduled with taking the phase's start date\n"
+"\n"
+" "
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.act_resouce_allocation
+#: model:ir.ui.menu,name:project_long_term.menu_resouce_allocation
+#: view:project.resource.allocation:0
+msgid "Resource Allocations"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.resource.allocation:0
+msgid "R.A."
+msgstr ""
+
+#. module: project_long_term
+#: constraint:project.project:0
+msgid "Error! You cannot assign escalation to the same project!"
+msgstr ""
+
+#. module: project_long_term
+#: code:addons/project_long_term/project_long_term.py:0
+#, python-format
+msgid "Day"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_task
+msgid "Task"
+msgstr ""
+
+#. module: project_long_term
+#: selection:project.compute.phases,target_project:0
+msgid "Compute a Single Project"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+#: field:project.phase,previous_phase_ids:0
+msgid "Previous Phases"
+msgstr ""
+
+#. module: project_long_term
+#: help:project.phase,product_uom:0
+msgid "UoM (Unit of Measure) is the unit of measurement for Duration"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_project
+#: field:project.compute.phases,project_id:0
+#: field:project.compute.tasks,project_id:0
+#: view:project.phase:0
+#: field:project.phase,project_id:0
+msgid "Project"
+msgstr ""
+
+#. module: project_long_term
+#: code:addons/project_long_term/wizard/project_compute_phases.py:0
+#, python-format
+msgid "Error!"
+msgstr ""
+
+#. module: project_long_term
+#: selection:project.phase,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: project_long_term
+#: field:project.resource.allocation,useability:0
+msgid "Usability"
+msgstr ""
+
+#. module: project_long_term
+#: help:project.resource.allocation,useability:0
+msgid ""
+"Usability of this resource for this project phase in percentage (=50%)"
+msgstr ""
+
+#. module: project_long_term
+#: help:project.phase,date_end:0
+#: field:project.resource.allocation,phase_id_date_end:0
+msgid "Ending Date of the phase"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.compute.phases:0
+msgid "This wizard will schedule phases for all or specified project"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Planning"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.compute.phases:0
+#: view:project.compute.tasks:0
+msgid "_Cancel"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.action_project_compute_phases
+#: model:ir.ui.menu,name:project_long_term.menu_compute_phase
+msgid "Compute Phase Scheduling"
+msgstr ""
+
+#. module: project_long_term
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr ""
+
+#. module: project_long_term
+#: constraint:account.analytic.account:0
+msgid "Error! You can not create recursive analytic accounts."
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Dates"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+#: field:project.phase,state:0
+msgid "State"
+msgstr ""
+
+#. module: project_long_term
+#: field:project.phase,product_uom:0
+msgid "Duration UoM"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.action_project_compute_tasks
+#: model:ir.ui.menu,name:project_long_term.menu_compute_tasks
+msgid "Compute Task Scheduling"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_resource_allocation
+#: view:project.phase:0
+#: view:project.resource.allocation:0
+msgid "Project Resource Allocation"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.ui.menu,name:project_long_term.menu_pm_resources_project1
+#: model:ir.ui.menu,name:project_long_term.menu_view_resource
+msgid "Resources"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.project_phase_task_list
+msgid "Related Tasks"
+msgstr ""
+
+#. module: project_long_term
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: project_long_term
+#: help:project.phase,constraint_date_start:0
+msgid "force the phase to start after this date"
+msgstr ""
+
+#. module: project_long_term
+#: field:project.phase,task_ids:0
+msgid "Project Tasks"
+msgstr ""
+
+#. module: project_long_term
+#: field:project.phase,resource_ids:0
+msgid "Project Resources"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.schedule.tasks:0
+msgid "_Ok"
+msgstr ""
+
+#. module: project_long_term
+#: constraint:project.phase:0
+msgid "Phase start-date must be lower than phase end-date."
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_schedule_tasks
+msgid "project.schedule.tasks"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+#: field:project.phase,constraint_date_start:0
+#: field:project.phase,date_start:0
+msgid "Start Date"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Resource Allocation"
+msgstr ""
+
+#. module: project_long_term
+#: help:project.phase,constraint_date_end:0
+msgid "force the phase to finish before this date"
+msgstr ""
+
+#. module: project_long_term
+#: code:addons/project_long_term/wizard/project_compute_tasks.py:0
+#, python-format
+msgid "Project must have members assigned !"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+#: selection:project.phase,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: project_long_term
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+#: selection:project.phase,state:0
+msgid "Pending"
+msgstr ""
+
+#. module: project_long_term
+#: constraint:project.task:0
+msgid "Error! Task start-date must be lower then task end-date."
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Remaining Hours"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "User"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Task Detail"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.compute.tasks:0
+msgid "Compute"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_compute_tasks
+msgid "Project Compute Tasks"
+msgstr ""
+
+#. module: project_long_term
+#: code:addons/project_long_term/wizard/project_compute_phases.py:0
+#, python-format
+msgid "No responsible person assigned !"
+msgstr ""
+
+#. module: project_long_term
+#: code:addons/project_long_term/wizard/project_compute_tasks.py:0
+#: code:addons/project_long_term/wizard/project_schedule_tasks.py:0
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: project_long_term
+#: code:addons/project_long_term/wizard/project_compute_phases.py:0
+#, python-format
+msgid "You must assign a responsible person for phase '%s' !"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Constraints"
+msgstr ""
+
+#. module: project_long_term
+#: help:project.phase,sequence:0
+msgid "Gives the sequence order when displaying a list of phases."
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.act_project_phase
+#: model:ir.actions.act_window,name:project_long_term.act_project_phase_list
+#: model:ir.ui.menu,name:project_long_term.menu_project_phase
+#: view:project.phase:0
+#: field:project.project,phase_ids:0
+msgid "Project Phases"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+#: selection:project.phase,state:0
+msgid "Done"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Cancel"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+#: selection:project.phase,state:0
+msgid "In Progress"
+msgstr ""
+
+#. module: project_long_term
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: project_long_term
+#: code:addons/project_long_term/wizard/project_schedule_tasks.py:0
+#, python-format
+msgid "Phase must have resources assigned !"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Other Info"
+msgstr ""
+
+#. module: project_long_term
+#: field:project.phase,responsible_id:0
+msgid "Responsible"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Start Phase"
+msgstr ""
+
+#. module: project_long_term
+#: code:addons/project_long_term/wizard/project_compute_phases.py:0
+#, python-format
+msgid "Please Specify Project to be schedule"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.schedule.tasks:0
+msgid "Task Scheduling completed successfully."
+msgstr ""
+
+#. module: project_long_term
+#: view:project.resource.allocation:0
+msgid "Phase"
+msgstr ""
+
+#. module: project_long_term
+#: help:project.phase,date_start:0
+#: field:project.resource.allocation,phase_id_date_start:0
+msgid "Starting Date of the phase"
+msgstr ""
+
+#. module: project_long_term
+#: help:project.phase,state:0
+msgid ""
+"If the phase is created the state 'Draft'.\n"
+" If the phase is started, the state becomes 'In Progress'.\n"
+" If review is needed the phase is in 'Pending' state. "
+" \n"
+" If the phase is over, the states is set to 'Done'."
+msgstr ""
+
+#. module: project_long_term
+#: field:project.phase,constraint_date_end:0
+#: field:project.phase,date_end:0
+msgid "End Date"
+msgstr ""
+
+#. module: project_long_term
+#: view:project.resource.allocation:0
+#: field:project.resource.allocation,resource_id:0
+msgid "Resource"
+msgstr ""
+
+#. module: project_long_term
+#: field:project.phase,name:0
+msgid "Name"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar
+msgid "Working Period"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.ui.menu,name:project_long_term.menu_phase_schedule
+#: view:project.phase:0
+msgid "Scheduling"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_phase
+#: view:project.phase:0
+#: field:project.resource.allocation,phase_id:0
+#: field:project.task,phase_id:0
+msgid "Project Phase"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_compute_phases
+msgid "Project Compute Phases"
+msgstr ""
+
+#. module: project_long_term
+#: field:project.schedule.tasks,msg:0
+msgid "Message"
+msgstr ""
+
+#. module: project_long_term
+#: constraint:project.phase:0
+msgid "Loops in phases not allowed"
+msgstr ""
+
+#. module: project_long_term
+#: field:project.phase,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: project_long_term
+#: selection:project.compute.phases,target_project:0
+msgid "Compute All Projects"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar_leaves
+msgid "Resource Leaves"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.action_project_schedule_tasks
+#: view:project.phase:0
+#: view:project.schedule.tasks:0
+msgid "Schedule Tasks"
+msgstr ""
+
+#. module: project_long_term
+#: help:project.phase,duration:0
+msgid "By default in days"
+msgstr ""
+
+#. module: project_long_term
+#: field:project.phase,duration:0
+msgid "Duration"
+msgstr ""
diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py
index e843c6952a7..903dbb3b17e 100644
--- a/addons/project_long_term/project_long_term.py
+++ b/addons/project_long_term/project_long_term.py
@@ -92,7 +92,7 @@ class project_phase(osv.osv):
model_data_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour')
return model_data_obj.read(cr, uid, [model_data_id], ['res_id'])[0]['res_id']
- def _compute(self, cr, uid, ids, context=None):
+ def _compute(self, cr, uid, ids, field_name, arg, context=None):
res = {}
if not ids:
return res
@@ -100,9 +100,7 @@ class project_phase(osv.osv):
tot = 0.0
for task in phase.task_ids:
tot += task.planned_hours
- res[phase.id] = {
- 'total_hours' : tot
- }
+ res[phase.id] = tot
return res
_columns = {
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index bb8e05770ed..e83085c3afa 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -122,7 +122,7 @@
-
+
@@ -142,11 +142,11 @@
+
-
@@ -307,8 +307,8 @@
# Project
# ------------------------------------------------------
-
- phase.project.form1
+
+ Project Resource Calendar View
project.project
form
diff --git a/addons/project_messages/i18n/de.po b/addons/project_messages/i18n/de.po
new file mode 100644
index 00000000000..b7199fb6ff4
--- /dev/null
+++ b/addons/project_messages/i18n/de.po
@@ -0,0 +1,119 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 10:28+0000\n"
+"PO-Revision-Date: 2010-10-05 13:36+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: project_messages
+#: field:project.messages,to_id:0
+msgid "To"
+msgstr ""
+
+#. module: project_messages
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: project_messages
+#: field:project.messages,from_id:0
+msgid "From"
+msgstr ""
+
+#. module: project_messages
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: project_messages
+#: model:ir.actions.act_window,name:project_messages.messages_form
+#: model:ir.ui.menu,name:project_messages.menu_messages_form
+#: view:project.messages:0
+msgid "Communication Messages"
+msgstr ""
+
+#. module: project_messages
+#: help:project.messages,to_id:0
+msgid "Keep this empty to broadcast the message."
+msgstr ""
+
+#. module: project_messages
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: project_messages
+#: model:ir.model,name:project_messages.model_project_messages
+msgid "project.messages"
+msgstr ""
+
+#. module: project_messages
+#: view:project.messages:0
+#: view:project.project:0
+#: field:project.project,message_ids:0
+msgid "Messages"
+msgstr ""
+
+#. module: project_messages
+#: model:ir.model,name:project_messages.model_project_project
+#: view:project.messages:0
+#: field:project.messages,project_id:0
+msgid "Project"
+msgstr ""
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Group By..."
+msgstr ""
+
+#. module: project_messages
+#: model:ir.module.module,description:project_messages.module_meta_information
+msgid ""
+"\n"
+" This module provides the functionality to send messages within a "
+"project.\n"
+" A user can send messages individually to other user. He can even "
+"broadcast\n"
+" it to all the users.\n"
+" "
+msgstr ""
+
+#. module: project_messages
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Message To"
+msgstr ""
+
+#. module: project_messages
+#: view:project.messages:0
+#: field:project.messages,message:0
+#: view:project.project:0
+msgid "Message"
+msgstr ""
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Message From"
+msgstr ""
+
+#. module: project_messages
+#: model:ir.module.module,shortdesc:project_messages.module_meta_information
+msgid "In-Project Messaging System"
+msgstr ""
diff --git a/addons/project_messages/i18n/pl.po b/addons/project_messages/i18n/pl.po
new file mode 100644
index 00000000000..0e70ef20021
--- /dev/null
+++ b/addons/project_messages/i18n/pl.po
@@ -0,0 +1,121 @@
+# Polish translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 10:28+0000\n"
+"PO-Revision-Date: 2010-10-08 07:38+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Polish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-09 12:13+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: project_messages
+#: field:project.messages,to_id:0
+msgid "To"
+msgstr "Do"
+
+#. module: project_messages
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Niewłaściwy XML dla architektury widoku!"
+
+#. module: project_messages
+#: field:project.messages,from_id:0
+msgid "From"
+msgstr "Od"
+
+#. module: project_messages
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Nieprawidłowa nazwa modelu w definicji akcji."
+
+#. module: project_messages
+#: model:ir.actions.act_window,name:project_messages.messages_form
+#: model:ir.ui.menu,name:project_messages.menu_messages_form
+#: view:project.messages:0
+msgid "Communication Messages"
+msgstr "Komunikacja"
+
+#. module: project_messages
+#: help:project.messages,to_id:0
+msgid "Keep this empty to broadcast the message."
+msgstr "Pozostaw puste do rozpowszechnienia wiadomości"
+
+#. module: project_messages
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Nazwa obiektu musi zaczynać się od x_ oraz nie może zawierać znaków "
+"specjalnych !"
+
+#. module: project_messages
+#: model:ir.model,name:project_messages.model_project_messages
+msgid "project.messages"
+msgstr ""
+
+#. module: project_messages
+#: view:project.messages:0
+#: view:project.project:0
+#: field:project.project,message_ids:0
+msgid "Messages"
+msgstr "Wiadomości"
+
+#. module: project_messages
+#: model:ir.model,name:project_messages.model_project_project
+#: view:project.messages:0
+#: field:project.messages,project_id:0
+msgid "Project"
+msgstr "Projekt"
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Group By..."
+msgstr "Grupuj wg..."
+
+#. module: project_messages
+#: model:ir.module.module,description:project_messages.module_meta_information
+msgid ""
+"\n"
+" This module provides the functionality to send messages within a "
+"project.\n"
+" A user can send messages individually to other user. He can even "
+"broadcast\n"
+" it to all the users.\n"
+" "
+msgstr ""
+
+#. module: project_messages
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr "Błąd ! Nie możesz tworzyć rekurencyjnych menu."
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Message To"
+msgstr ""
+
+#. module: project_messages
+#: view:project.messages:0
+#: field:project.messages,message:0
+#: view:project.project:0
+msgid "Message"
+msgstr "Wiadomość"
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Message From"
+msgstr ""
+
+#. module: project_messages
+#: model:ir.module.module,shortdesc:project_messages.module_meta_information
+msgid "In-Project Messaging System"
+msgstr ""
diff --git a/addons/project_messages/project_messages_view.xml b/addons/project_messages/project_messages_view.xml
index e8a013cf2ae..e270d2d001a 100644
--- a/addons/project_messages/project_messages_view.xml
+++ b/addons/project_messages/project_messages_view.xml
@@ -70,7 +70,7 @@
-
+
diff --git a/addons/project_planning/board_project_planning_view.xml b/addons/project_planning/board_project_planning_view.xml
index b48ab78dec2..867dba5767f 100644
--- a/addons/project_planning/board_project_planning_view.xml
+++ b/addons/project_planning/board_project_planning_view.xml
@@ -5,14 +5,14 @@
board.project.planning.form
board.board
-
+
form
-
+
- "
+
diff --git a/addons/project_planning/project_planning.py b/addons/project_planning/project_planning.py
index 729a8ee6bbb..759057fbaef 100644
--- a/addons/project_planning/project_planning.py
+++ b/addons/project_planning/project_planning.py
@@ -25,7 +25,6 @@ from datetime import datetime
from dateutil.relativedelta import relativedelta
from osv import fields, osv
-from tools.translate import _
import tools
@@ -215,7 +214,7 @@ class report_account_analytic_planning_line(osv.osv):
return result
_columns = {
- 'account_id': fields.many2one('account.analytic.account', 'Analytic account', required=True),
+ 'account_id': fields.many2one('account.analytic.account', 'Analytic account'),
'planning_id': fields.many2one('report_account_analytic.planning', 'Planning', required=True, ondelete='cascade'),
'user_id': fields.many2one('res.users', 'User'),
'amount': fields.float('Quantity', required=True),
@@ -577,7 +576,7 @@ WHERE user_id=%s and account_id=%s and date>=%s and date<=%s''', (line.user_id.i
'planning_id': fields.many2one('report_account_analytic.planning', 'Planning'),
'user_id': fields.many2one('res.users', 'User'),
'manager_id': fields.many2one('res.users', 'Manager'),
- 'account_id': fields.many2one('account.analytic.account', 'Account', required=True),
+ 'account_id': fields.many2one('account.analytic.account', 'Account'),
'sum_amount': fields.float('Planned Days', required=True),
'sum_amount_real': fields.function(_sum_amount_real, method=True, string='Timesheet'),
'sum_amount_tasks': fields.function(_sum_amount_tasks, method=True, string='Tasks'),
diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml
index 9363413e4a2..5c8d4cc5af9 100644
--- a/addons/project_planning/project_planning_view.xml
+++ b/addons/project_planning/project_planning_view.xml
@@ -54,7 +54,7 @@
-
+
@@ -68,7 +68,7 @@
-
+
@@ -78,7 +78,7 @@
-
+
@@ -104,14 +104,13 @@
+
-
-
@@ -139,12 +138,12 @@
+
-
@@ -180,7 +179,7 @@
-
+
@@ -197,7 +196,7 @@
-
+
@@ -220,7 +219,7 @@
parent="base.menu_main_pm" />
+ id="menu_report_account_analytic_planning" parent="base.menu_project_long_term" sequence="3" groups="project.group_project_user,project.group_project_manager,base.group_system,project.group_project_finance_user"/>
+
@@ -324,7 +325,7 @@
-
+
diff --git a/addons/project_retro_planning/i18n/kab.po b/addons/project_retro_planning/i18n/kab.po
new file mode 100644
index 00000000000..a890f540a01
--- /dev/null
+++ b/addons/project_retro_planning/i18n/kab.po
@@ -0,0 +1,23 @@
+# Kabyle translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+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-10-09 14:25+0000\n"
+"Last-Translator: yugurten \n"
+"Language-Team: Kabyle \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-10 04:56+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: project_retro_planning
+#: model:ir.module.module,shortdesc:project_retro_planning.module_meta_information
+msgid "Project Retro planning"
+msgstr "A qanib d we Siqwas n we Senfar"
diff --git a/addons/project_scrum/__openerp__.py b/addons/project_scrum/__openerp__.py
index dea267e41f5..767163fe114 100644
--- a/addons/project_scrum/__openerp__.py
+++ b/addons/project_scrum/__openerp__.py
@@ -54,6 +54,7 @@
'project_scrum_report.xml',
'wizard/project_scrum_backlog_create_task_view.xml',
'wizard/project_scrum_backlog_merger_view.xml',
+ 'wizard/project_scrum_postpone_view.xml',
"wizard/project_scrum_email_view.xml",
'project_scrum_view.xml',
'wizard/project_scrum_backlog_sprint_view.xml',
diff --git a/addons/project_scrum/board_project_scrum_view.xml b/addons/project_scrum/board_project_scrum_view.xml
index 8b22233558b..2d146c94367 100644
--- a/addons/project_scrum/board_project_scrum_view.xml
+++ b/addons/project_scrum/board_project_scrum_view.xml
@@ -6,7 +6,7 @@
project.scrum.sprint
tree
-
+
@@ -14,7 +14,6 @@
-
@@ -26,8 +25,46 @@
+
+ project.task.graph
+ project.task
+ graph
+
+
+
+
+
+
+
+
+
+ Task Progress
+ project.task
+ form
+ graph
+
+
+
+
+ project.scrum.sprint.graph
+ project.scrum.product.backlog
+ graph
+
+
+
+
+
+
+
+
+
+ Backlog Progress
+ project.scrum.product.backlog
+ form
+ graph
+
- Sprint's List
+ Sprints
project.scrum.sprint
form
tree,form
@@ -41,8 +78,12 @@
-
+
+
+
+
+
@@ -60,5 +101,41 @@
name="Scrum Dashboard" parent="project.next_id_86"
icon="terp-graph"
action="open_board_project_scrum"/>
+
+
+
+ project.scrum.sprint.project.dashboard.tree
+ project.scrum.sprint
+ tree
+
+
+
+
+
+
+
+
+
+
+
+ My Sprint
+ project.scrum.sprint
+ form
+ tree,form
+ ['|',('product_owner_id','=',uid),('scrum_master_id','=',uid)]
+
+
+
+ board.my.scrum.sprint.form.inherit
+ board.board
+ form
+
+
+
+
+
+
+
diff --git a/addons/project_scrum/process/project_scrum_process.xml b/addons/project_scrum/process/project_scrum_process.xml
index 9700677c100..b5503f0127c 100644
--- a/addons/project_scrum/process/project_scrum_process.xml
+++ b/addons/project_scrum/process/project_scrum_process.xml
@@ -22,7 +22,6 @@
-->
-
diff --git a/addons/project_scrum/project_scrum.py b/addons/project_scrum/project_scrum.py
index f472369211b..e02e16c478b 100644
--- a/addons/project_scrum/project_scrum.py
+++ b/addons/project_scrum/project_scrum.py
@@ -43,7 +43,7 @@ project_scrum_project()
class project_scrum_sprint(osv.osv):
_name = 'project.scrum.sprint'
_description = 'Project Scrum Sprint'
-
+ _order = 'date_start'
def _compute(self, cr, uid, ids, fields, arg, context=None):
res = {}.fromkeys(ids, 0.0)
progress = {}
@@ -319,7 +319,7 @@ class project_scrum_meeting(osv.osv):
'question_blocks': fields.text('Blocks encountered'),
'question_backlog': fields.text('Backlog Accurate'),
'task_ids': fields.many2many('project.task', 'meeting_task_rel', 'metting_id', 'task_id', 'Tasks'),
- 'user_id': fields.related('sprint_id', 'scrum_master_id', type='many2one', relation='res.users', string='Responsible', readonly=True),
+ 'user_id': fields.related('sprint_id', 'scrum_master_id', type='many2one', relation='res.users', string='Scrum Master', readonly=True),
}
#
# TODO: Find the right sprint thanks to users and date
diff --git a/addons/project_scrum/project_scrum_demo.xml b/addons/project_scrum/project_scrum_demo.xml
index 2c627c89b09..e99ca00ba8b 100644
--- a/addons/project_scrum/project_scrum_demo.xml
+++ b/addons/project_scrum/project_scrum_demo.xml
@@ -1,26 +1,153 @@
-
-
-
-
-
- [24, 25, 28, 26, 27, 29, 30, 31, 32, 33, 34, 35, 37, 36, 38]
-
- 156.0
- OpenERP - dev branch
-
-
-
-
- 2005-12-20
- Sprint for V3.2.0
-
+
+ Sprint 1
+
+
+
-
+
+ open
+
+
+
+ Sprint 2
+
+
+ 100.0
+
+
+
+ open
+
+
+
+ Sprint 3
+
+
+ 89.0
+
+
+
+ open
+
+
+
+ Sprint 4
+
+
+ 125.0
+
+
+
+ open
+
+
+
+ Sprint 5
+
+
+ 178.0
+
+
+
+ open
+
+
+
+ Sprint 6
+
+
+
+ 200.0
+
+
+ open
+
+
+
+ Sprint 7
+
+
+ 175.0
+
+
+
+ open
+
+
+
+ Sprint 8
+
+
+
+
+ 122.0
+
+ open
+
+
+
+ Sprint 9
+
+
+
+
+
+ open
+
+
+
+ Sprint 10
+
+
+ 78.0
+
+
+
+ open
+
+
+
+ Sprint 11
+
+
+
+
+
+ open
+
+
+
+ Sprint 12
+
+
+
+
+
+ open
+
+
+
+ Sprint 13
+
+
+
+
+
+ open
+
+
+
+ Sprint 14
+
+
+
+
+
open
@@ -33,61 +160,107 @@
This new system will enable you to migrate automatically from an old version of OpenERP to a new one. This system will migrate not only the OpenERP system but also the customers particularities. This happens without any kind of script or programming. It has been possible to carry out such a system thanks to the descriptive approach of OpenERP components.
done
-
+
3
New accounting module
111.0
The accounting module of OpenERP (financial accounting and management accounting) is being reshaped. New functionalities will be added: intangible assets, a new way of presenting ledgers and bookings, new stock valuation calculation, and lots of predefined reports.
-
+
open
-
+
3
Automated Plugin System to install/uninstall modules
4.0
We have to develop a plug-in system which will enable to install/remove modules. The basic version of OpenERP will include only the required minimum, and you will select the modules thanks to the plug-in manager. This allows you to limit your system to your real needs: quality management, localisations, project and service management, marketing campaigns, and so on...
-
+
open
-
+
Review all terms
8.0
-
+
done
-
+
Bugfixes
6.0
-
+
open
-
+
Test for 3.2.0 Publishing
5.0
- Test OpenERP to release stable 3.2.0 version. (may be 3.2.0-pre1 ?)
-
-
+ Test OpenERP to release stable 3.2.0 version. (may be 3.2.0-pre1 eval="time.strftime('%Y-%m-05 12:01:01')"?)
+
+
Reshape the complete menu
4.0
Restructure the OpenERP menu to be more like other ERPs.
-
+
open
-
+
+
Editable Trees
12.0
Editable trees in list and one2many_list widgets.
-
-
+
+
+
+
+
+ Reshape the complete menu
+ 3.0
+ Restructure the OpenERP menu to be more like other ERPs.
+
+ open
+
+
+
+
+ Analysis Product phase
+ 10.0
+ Restructure the OpenERP menu to be more like other ERPs.
+
+ open
+
+
+
+
+ Rearrange the Menu
+ 9.0
+ Restructure the OpenERP menu to be more like other ERPs.
+
+ open
+
+
+
+
+ Complete change in list view
+ 8.0
+ Restructure the OpenERP menu to be more like other ERPs.
+
+ open
+
+
+
+
+ Reshape the complete menu
+ 2.0
+ Set rule for Tax according to 2010-2011 Rules
+
+ open
+
@@ -95,7 +268,7 @@
4.0
-
+
Review all English Terms
done
@@ -104,7 +277,7 @@
4.0
-
+
Review all french terms
done
@@ -113,7 +286,7 @@
24.0
-
+
Analytic Accounting features
done
@@ -122,7 +295,7 @@
6.0
-
+
Test and improve automatic migration system
open
@@ -130,7 +303,7 @@
24.0
-
+
General accounting features
open
@@ -138,14 +311,14 @@
24.0
-
+
Accounting Budgets
24.0
-
+
Cash book, general ledger, accounts list, aged trial balance
Accounting Report General
open
@@ -155,14 +328,14 @@
7.0
-
+
Accounting Report Budget
8.0
-
+
Accounting Report Analytic
open
@@ -170,7 +343,7 @@
4.0
-
+
Bugfix - memory leak
done
@@ -179,7 +352,7 @@
2.0
-
+
Bugfix - Translations
open
@@ -188,7 +361,7 @@
4.0
-
+
Finish the automated plugin system
pending
@@ -196,14 +369,14 @@
4.0
-
+
Reshape the complete menu structure
5.0
-
+
Test 3.2.0 before releasing
open
@@ -211,7 +384,7 @@
12.0
-
+
default values, onchange, required, add on top or bottom and shortcuts (Ctrl S, Ctrl X, ...)
Editable trees
open
@@ -228,7 +401,7 @@ Demo: Work on Editable trees
Demo :Bugfix - memory leak
-
+
diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml
index 1a7d1cdc5ee..6ba52c8ebbe 100644
--- a/addons/project_scrum/project_scrum_view.xml
+++ b/addons/project_scrum/project_scrum_view.xml
@@ -62,7 +62,7 @@
-
@@ -113,12 +113,12 @@
+
-
@@ -141,7 +141,7 @@
-
+
@@ -198,7 +198,7 @@
project.scrum.sprint
calendar
-
+
@@ -224,6 +224,8 @@
+
@@ -347,7 +349,7 @@
form
tree,form,calendar
- {"search_default_filter_current": 1, "search_default_scrum_master_id":uid}
+ {"search_default_filter_current": 1}
|
- [[ formatLang(o.amount_tax) ]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_tax, digits=get_digits(dp='Purchase Price')) ]] [[ o.pricelist_id.currency_id. symbol ]]
|
@@ -364,4 +364,4 @@
-
\ No newline at end of file
+
diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py
index 612ea134b4e..f30d65d8f28 100644
--- a/addons/purchase/report/purchase_report.py
+++ b/addons/purchase/report/purchase_report.py
@@ -65,6 +65,7 @@ class purchase_report(osv.osv):
'nbr': fields.integer('# of 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),
+ 'category_id': fields.many2one('product.category', 'Category', readonly=True)
}
_order = 'name desc,price_total desc'
@@ -90,6 +91,7 @@ class purchase_report(osv.osv):
s.create_uid as user_id,
s.company_id as company_id,
l.product_id,
+ t.categ_id as category_id,
l.product_uom as product_uom,
s.location_id as location_id,
sum(l.product_qty*u.factor) as quantity,
@@ -123,6 +125,7 @@ class purchase_report(osv.osv):
s.validator,
s.dest_address_id,
l.product_id,
+ t.categ_id,
s.date_order,
to_char(s.date_order, 'YYYY'),
to_char(s.date_order, 'MM'),
diff --git a/addons/purchase/security/ir.model.access.csv b/addons/purchase/security/ir.model.access.csv
index 86784a34351..77a0aff7bb4 100644
--- a/addons/purchase/security/ir.model.access.csv
+++ b/addons/purchase/security/ir.model.access.csv
@@ -31,8 +31,9 @@
"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
-"access_account_journal","account.journal","account.model_account_journal","group_purchase_user",1,1,1,0
-"access_account_journal_manager","account.journal","account.model_account_journal","group_purchase_manager",1,1,1,1
+"access_account_journal_period","account.journal.period","account.model_account_journal_period","group_purchase_user",1,1,1,0
+"access_account_journal","account.journal","account.model_account_journal","group_purchase_user",1,0,0,0
+"access_account_journal_manager","account.journal","account.model_account_journal","group_purchase_manager",1,0,0,0
"access_account_period","account.period","account.model_account_period","group_purchase_user",1,0,0,0
"access_account_fiscalyear","account.fiscalyear","account.model_account_fiscalyear","group_purchase_user",1,0,0,0
"access_account_move","account.move","account.model_account_move","group_purchase_user",1,1,1,1
diff --git a/addons/purchase/stock.py b/addons/purchase/stock.py
index 49a28e352b2..fb3d8f0b078 100644
--- a/addons/purchase/stock.py
+++ b/addons/purchase/stock.py
@@ -31,6 +31,21 @@ class stock_move(osv.osv):
_defaults = {
'purchase_line_id': False
}
+
+ def _get_reference_accounting_values_for_valuation(self, cr, uid, move, context=None):
+ """
+ Overrides the default stock valuation to take into account the currency that was specified
+ on the purchase order in case the valuation data was not directly specified during picking
+ confirmation.
+ """
+ reference_amount, reference_currency_id = super(stock_move, self)._get_reference_accounting_values_for_valuation(cr, uid, move, context=context)
+ if move.product_id.cost_method != 'average' or not move.price_unit:
+ # no average price costing or cost not specified during picking validation, we will
+ # plug the purchase line values if they are found.
+ if move.purchase_line_id and move.picking_id.purchase_id.pricelist_id:
+ reference_amount, reference_currency_id = move.purchase_line_id.price_unit, move.picking_id.purchase_id.pricelist_id.currency_id.id
+ return reference_amount, reference_currency_id
+
stock_move()
#
@@ -86,6 +101,9 @@ class stock_picking(osv.osv):
user, picking, move_line)
def _invoice_line_hook(self, cursor, user, move_line, invoice_line_id):
+ if move_line.purchase_line_id:
+ invoice_line_obj = self.pool.get('account.invoice.line')
+ invoice_line_obj.write(cursor, user, [invoice_line_id], {'note': move_line.purchase_line_id.notes,})
return super(stock_picking, self)._invoice_line_hook(cursor, user,
move_line, invoice_line_id)
@@ -99,5 +117,48 @@ class stock_picking(osv.osv):
stock_picking()
+class stock_partial_picking(osv.osv_memory):
+ _inherit = 'stock.partial.picking'
+
+ def default_get(self, cr, uid, fields, context=None):
+ """ To get default values for the object.
+ @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')
+ res = super(stock_partial_picking, self).default_get(cr, uid, fields, context=context)
+ for pick in pick_obj.browse(cr, uid, context.get('active_ids', [])):
+ for m in pick.move_lines:
+ if (m.product_id.cost_method == 'average'):
+ if pick.type == 'in' and pick.purchase_id and m.purchase_line_id:
+ res['move%s_product_price'%(m.id)] = m.purchase_line_id.price_unit
+ res['move%s_product_currency'%(m.id)] = pick.purchase_id.pricelist_id.currency_id.id
+ return res
+stock_partial_picking()
+
+class stock_partial_move(osv.osv_memory):
+ _inherit = "stock.partial.move"
+ def default_get(self, cr, uid, fields, context=None):
+ """ To get default values for the object.
+ @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.
+ """
+ res = super(stock_partial_move, self).default_get(cr, uid, fields, context=context)
+ move_obj = self.pool.get('stock.move')
+ for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
+ if (m.product_id.cost_method == 'average'):
+ if m.picking_id.type == 'in' and m.purchase_line_id and m.picking_id.purchase_id:
+ res['move%s_product_price'%(m.id)] = m.purchase_line_id.price_unit
+ res['move%s_product_currency'%(m.id)] = m.picking_id.purchase_id.pricelist_id.currency_id.id
+ return res
+stock_partial_move()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase/stock_view.xml b/addons/purchase/stock_view.xml
index 2b741536d3b..a65f557a3b2 100644
--- a/addons/purchase/stock_view.xml
+++ b/addons/purchase/stock_view.xml
@@ -1,7 +1,17 @@
-
+
+ stock.move.form
+ stock.move
+ form
+
+
+
+
+
+
+
Picking list
stock.picking
@@ -17,8 +27,9 @@
diff --git a/addons/purchase/test/procurement_buy.yml b/addons/purchase/test/procurement_buy.yml
index 4f28ccfafcf..2afd6c2fb62 100644
--- a/addons/purchase/test/procurement_buy.yml
+++ b/addons/purchase/test/procurement_buy.yml
@@ -76,7 +76,6 @@
import netsvc
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'purchase.order',proc_ids.purchase_id.id,'purchase_confirm', cr)
- wf_service.trg_validate(uid, 'purchase.order',proc_ids.purchase_id.id,'purchase_approve', cr)
-
I receive the order of the supplier ASUStek from the Incoming Shipments menu.
-
diff --git a/addons/purchase/test/purchase_from_manual.yml b/addons/purchase/test/purchase_from_manual.yml
index e7a608b7557..0c406635b85 100644
--- a/addons/purchase/test/purchase_from_manual.yml
+++ b/addons/purchase/test/purchase_from_manual.yml
@@ -56,7 +56,7 @@
I check that the order which was initially in the draft state has transit to confirm state.
-
!assert {model: purchase.order, id: purchase_order_po1}:
- - state == 'confirmed'
+ - state == 'approved'
-
I check that an entry gets created in the "Lines to Invoice" of Invoice Control on the basis of purchase order line
-
@@ -101,10 +101,6 @@
account_obj = self.pool.get('account.invoice')
ids = account_obj.search(cr, uid, [('origin', '=', pur_id1.name)])
assert ids, _('Pending Invoice is not created!')
--
- Supplier approve the purchase order.
--
- !workflow {model: purchase.order, action: purchase_approve, ref: purchase_order_po1}
-
I check that the order which was initially in the confirmed state has transit to approved state.
-
diff --git a/addons/purchase/test/purchase_from_order.yml b/addons/purchase/test/purchase_from_order.yml
index a13c687c4a5..8c14611661c 100644
--- a/addons/purchase/test/purchase_from_order.yml
+++ b/addons/purchase/test/purchase_from_order.yml
@@ -56,7 +56,7 @@
I check that the order which was initially in the draft state has transit to confirm state.
-
!assert {model: purchase.order, id: purchase_order_po0}:
- - state == 'confirmed'
+ - state == 'approved'
-
I check that an entry gets created in the "Lines to Invoice" of Invoice Control on the basis of purchase order line.
-
@@ -101,10 +101,6 @@
account_obj = self.pool.get('account.invoice')
ids = account_obj.search(cr, uid, [('origin', '=', pur_id1.name)])
assert ids, _('Pending Invoice is not created!')
--
- Supplier approve the purchase order.
--
- !workflow {model: purchase.order, action: purchase_approve, ref: purchase_order_po0}
-
I check that the order which was initially in the confirmed state has transit to approved state.
-
diff --git a/addons/purchase/test/purchase_from_picking.yml b/addons/purchase/test/purchase_from_picking.yml
index 6250772a872..d0c1cbcb527 100644
--- a/addons/purchase/test/purchase_from_picking.yml
+++ b/addons/purchase/test/purchase_from_picking.yml
@@ -56,7 +56,7 @@
I check that the order which was initially in the draft state has transit to confirm state.
-
!assert {model: purchase.order, id: purchase_order_po2}:
- - state == 'confirmed'
+ - state == 'approved'
-
I check that an entry gets created in the "Lines to Invoice" of Invoice Control on the basis of purchase order line.
-
@@ -101,10 +101,6 @@
account_obj = self.pool.get('account.invoice')
ids = account_obj.search(cr, uid, [('origin', '=', pur_id1.name)])
assert ids, _('Pending Invoice is not created!')
--
- Supplier approve the purchase order.
--
- !workflow {model: purchase.order, action: purchase_approve, ref: purchase_order_po2}
-
I check that the order which was initially in the confirmed state has transit to approved state.
-
diff --git a/addons/purchase/wizard/purchase_order_group_view.xml b/addons/purchase/wizard/purchase_order_group_view.xml
index cec987bc5ea..fe04af1a32b 100644
--- a/addons/purchase/wizard/purchase_order_group_view.xml
+++ b/addons/purchase/wizard/purchase_order_group_view.xml
@@ -1,15 +1,15 @@
-
+
Merger Purchase Orders
purchase.order.group
form
-
-
-
+
+
-
-
-
-
-
+" colspan="4"/>
+
+
+
+
+
-
+
-
-
+ groups="base.group_extended"
+ id="action_view_purchase_order_group"/>
+
diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml
index 3daeab14881..d209ef6b3fd 100644
--- a/addons/purchase_requisition/purchase_requisition_view.xml
+++ b/addons/purchase_requisition/purchase_requisition_view.xml
@@ -61,10 +61,10 @@
+
-
@@ -78,9 +78,9 @@
+
-
@@ -102,7 +102,7 @@
tree
purchase.requisition
-
+
diff --git a/addons/purchase_requisition/test/purchase_requisition.yml b/addons/purchase_requisition/test/purchase_requisition.yml
index 3f3aae2d8f0..c61a83a9b39 100644
--- a/addons/purchase_requisition/test/purchase_requisition.yml
+++ b/addons/purchase_requisition/test/purchase_requisition.yml
@@ -127,7 +127,7 @@
-
!python {model: stock.picking }: |
from tools.translate import _
- picking_id = self.search(cr, uid, [('origin','=','TEST/TENDER/0001'),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=','TEST/TENDER/0001')])
if picking_id:
pick=self.browse(cr,uid,picking_id[0])
assert (pick.state =='confirmed'),_('Picking is not in confirm state.')
diff --git a/addons/report_designer/installer.py b/addons/report_designer/installer.py
index 1accab65c0b..f849392d328 100644
--- a/addons/report_designer/installer.py
+++ b/addons/report_designer/installer.py
@@ -31,7 +31,6 @@ class report_designer_installer(osv.osv_memory):
"upload the report using the same wizard."),
'base_report_creator':fields.boolean('Query Builder',help="Allows you to create any statistic "
"reports on several objects. It's a SQL query builder and browser for end users."),
- 'olap':fields.boolean('Business Intelligence Report',help="Helps you manage Online Analytical Process with the mdx query and provides Cube Designing and Cube Browsing"),
}
report_designer_installer()
diff --git a/addons/report_designer/report_designer_installer.xml b/addons/report_designer/report_designer_installer.xml
index 907cdaad06d..2f838c0b74c 100644
--- a/addons/report_designer/report_designer_installer.xml
+++ b/addons/report_designer/report_designer_installer.xml
@@ -28,7 +28,6 @@
-
@@ -46,6 +45,7 @@
+ always
3
diff --git a/addons/report_intrastat/report/invoice.rml b/addons/report_intrastat/report/invoice.rml
index 8e4f92da708..08a1ab14fe0 100644
--- a/addons/report_intrastat/report/invoice.rml
+++ b/addons/report_intrastat/report/invoice.rml
@@ -488,7 +488,7 @@
- [[ format(o.amount_tax or removeParentNode('blockTable')) ]]
+ [[ o.amount_tax and formatLang(o.amount_tax, digits=get_digits(dp='Account')) or removeParentNode('blockTable') ]]
|
@@ -516,10 +516,10 @@
[[ t.name ]]
|
- [[ formatLang(t.base) ]]
+ [[ formatLang(t.base, digits=get_digits(dp='Account')) ]]
|
- [[ formatLang(t.amount) or 0.00 ]]
+ [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]]
|
diff --git a/addons/report_intrastat/report_intrastat.py b/addons/report_intrastat/report_intrastat.py
index 90c2884cceb..a77c4f5d389 100644
--- a/addons/report_intrastat/report_intrastat.py
+++ b/addons/report_intrastat/report_intrastat.py
@@ -21,6 +21,7 @@
from osv import osv, fields
from tools.sql import drop_view_if_exists
+from decimal_precision import decimal_precision as dp
class res_country(osv.osv):
@@ -69,7 +70,7 @@ class report_intrastat(osv.osv):
'code': fields.char('Country code', size=2, readonly=True),
'intrastat_id': fields.many2one('report.intrastat.code', 'Intrastat code', readonly=True),
'weight': fields.float('Weight', readonly=True),
- 'value': fields.float('Value', readonly=True),
+ 'value': fields.float('Value', readonly=True, digits_compute=dp.get_precision('Account')),
'type': fields.selection([('import', 'Import'), ('export', 'Export')], 'Type'),
'currency_id': fields.many2one('res.currency', "Currency", readonly=True),
}
diff --git a/addons/resource/i18n/de.po b/addons/resource/i18n/de.po
index 951474e7385..6f3d120040d 100644
--- a/addons/resource/i18n/de.po
+++ b/addons/resource/i18n/de.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-08-18 06:50+0000\n"
-"PO-Revision-Date: 2010-08-23 06:41+0000\n"
+"PO-Revision-Date: 2010-10-11 07:17+0000\n"
"Last-Translator: Ferdinand-chricar \n"
"Language-Team: German \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:17+0000\n"
+"X-Launchpad-Export-Date: 2010-10-12 04:51+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: resource
@@ -212,6 +212,8 @@ msgid ""
"If the active field is set to true, it will allow you to hide the resource "
"record without removing it."
msgstr ""
+"Wenn das Aktiv Feld auf Falsch gesetzt wird, wird die Ressource versteckt "
+"ohne sie zu löschen"
#. module: resource
#: selection:resource.calendar.attendance,dayofweek:0
@@ -243,6 +245,7 @@ msgstr "Ressourcen Kalender"
#: help:resource.resource,user_id:0
msgid "Related user name for the resource to manage its access."
msgstr ""
+"Der mit der Ressource verbunden Benutzer für die Zugriffsberechtigung"
#. module: resource
#: help:resource.resource,calendar_id:0
diff --git a/addons/resource/i18n/nl.po b/addons/resource/i18n/nl.po
new file mode 100644
index 00000000000..bfb0bc36ad2
--- /dev/null
+++ b/addons/resource/i18n/nl.po
@@ -0,0 +1,341 @@
+# Dutch translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-18 06:50+0000\n"
+"PO-Revision-Date: 2010-10-11 12:36+0000\n"
+"Last-Translator: Douwe Wullink (Dypalio) \n"
+"Language-Team: Dutch \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-12 04:51+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: resource
+#: help:resource.calendar.leaves,resource_id:0
+msgid ""
+"If empty, this is a generic holiday for the company. If a resource is set, "
+"the holiday/leave is only for this resource"
+msgstr ""
+"Indien leeg, dan is dit een algemene vrije dag voor het bedrijf. Als de "
+"resource is gevuld dan geldt de afwezigheid alleen voor deze resource."
+
+#. module: resource
+#: selection:resource.calendar.attendance,dayofweek:0
+msgid "Friday"
+msgstr "Vrijdag"
+
+#. module: resource
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"De objectnaam moet beginnen met x_ en mag geen speciale tekens bevatten !"
+
+#. module: resource
+#: field:resource.resource,resource_type:0
+msgid "Resource Type"
+msgstr "Soort resource"
+
+#. module: resource
+#: model:ir.model,name:resource.model_resource_calendar_leaves
+#: view:resource.calendar.leaves:0
+msgid "Leave Detail"
+msgstr "Afwezigheiddetail"
+
+#. module: resource
+#: model:ir.actions.act_window,name:resource.resource_calendar_resources_leaves
+msgid "Resources Leaves"
+msgstr "Afwezigheid resource"
+
+#. module: resource
+#: field:resource.calendar,attendance_ids:0
+#: view:resource.calendar.attendance:0
+#: view:resource.calendar.leaves:0
+msgid "Working Time"
+msgstr "Gewerkte tijd"
+
+#. module: resource
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Ongeldige XML voor weergave opbouw!"
+
+#. module: resource
+#: selection:resource.calendar.attendance,dayofweek:0
+msgid "Thursday"
+msgstr "Donderdag"
+
+#. module: resource
+#: view:resource.calendar:0
+#: view:resource.calendar.leaves:0
+#: view:resource.resource:0
+msgid "Group By..."
+msgstr "Groepeer op.."
+
+#. module: resource
+#: selection:resource.calendar.attendance,dayofweek:0
+msgid "Sunday"
+msgstr "Zondag"
+
+#. module: resource
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Ongeldige modelnaam in de definitie van de actie."
+
+#. module: resource
+#: view:resource.resource:0
+msgid "Search Resource"
+msgstr "Zoek resource"
+
+#. module: resource
+#: view:resource.resource:0
+msgid "Type"
+msgstr "Soort"
+
+#. module: resource
+#: model:ir.actions.act_window,name:resource.action_resource_resource_tree
+#: view:resource.resource:0
+msgid "Resources"
+msgstr "Resources"
+
+#. module: resource
+#: field:resource.calendar,manager:0
+msgid "Workgroup manager"
+msgstr "Manager"
+
+#. module: resource
+#: view:resource.calendar:0
+msgid "Search Working Period"
+msgstr "Zoek werkperiode"
+
+#. module: resource
+#: selection:resource.calendar.attendance,dayofweek:0
+msgid "Monday"
+msgstr "Maandag"
+
+#. module: resource
+#: model:ir.model,name:resource.model_resource_calendar
+msgid "Resource Calendar"
+msgstr "Resource agenda"
+
+#. module: resource
+#: field:resource.calendar,company_id:0
+#: view:resource.calendar.leaves:0
+#: field:resource.calendar.leaves,company_id:0
+#: view:resource.resource:0
+#: field:resource.resource,company_id:0
+msgid "Company"
+msgstr "Bedrijf"
+
+#. module: resource
+#: selection:resource.resource,resource_type:0
+msgid "Material"
+msgstr "Materiaal"
+
+#. module: resource
+#: field:resource.calendar.attendance,dayofweek:0
+msgid "Day of week"
+msgstr "Dag v/d week"
+
+#. module: resource
+#: field:resource.calendar.attendance,date_from:0
+msgid "Starting date"
+msgstr "Startdatum"
+
+#. module: resource
+#: view:resource.resource:0
+#: field:resource.resource,user_id:0
+msgid "User"
+msgstr "Gebruiker"
+
+#. module: resource
+#: view:resource.calendar.leaves:0
+msgid "Date"
+msgstr "Datum"
+
+#. module: resource
+#: view:resource.calendar.leaves:0
+msgid "Search Working Period Leaves"
+msgstr "Zoek afwezigheid werkperiode"
+
+#. module: resource
+#: field:resource.calendar.leaves,date_to:0
+msgid "End Date"
+msgstr "Einddatum"
+
+#. module: resource
+#: model:ir.actions.act_window,name:resource.resource_calendar_closing_days
+msgid "Closing Days"
+msgstr "Dagen gesloten"
+
+#. module: resource
+#: model:ir.module.module,shortdesc:resource.module_meta_information
+#: view:resource.calendar.leaves:0
+#: field:resource.calendar.leaves,resource_id:0
+#: view:resource.resource:0
+msgid "Resource"
+msgstr "Resource"
+
+#. module: resource
+#: view:resource.calendar:0
+#: field:resource.calendar,name:0
+#: field:resource.calendar.attendance,name:0
+#: view:resource.calendar.leaves:0
+#: field:resource.calendar.leaves,name:0
+#: field:resource.resource,name:0
+msgid "Name"
+msgstr "Naam"
+
+#. module: resource
+#: model:ir.module.module,description:resource.module_meta_information
+msgid ""
+"\n"
+" Module for resource management\n"
+" A resource represent something that can be scheduled\n"
+" (a developer on a task or a workcenter on manufacturing orders).\n"
+" This module manages a resource calendar associated to every resource.\n"
+" It also manages the leaves of every resource.\n"
+"\n"
+" "
+msgstr ""
+"\n"
+" Module voor resource beheer\n"
+" Een resource vertegenwoordigt iets dat kan worden gepland\n"
+" (een ontwikkelaar op een taak, een bewerkingsplaats op "
+"productieorders).\n"
+" Deze module beheert een resource agenda gekoppeld aan elke resource.\n"
+" Het beheert ook de afwezigheid van elke resource.\n"
+"\n"
+" "
+
+#. module: resource
+#: help:resource.resource,active:0
+msgid ""
+"If the active field is set to true, it will allow you to hide the resource "
+"record without removing it."
+msgstr ""
+"Als het actief veld is aan staat, kunt u de resource verbergen zonder haar "
+"te verwijderen."
+
+#. module: resource
+#: selection:resource.calendar.attendance,dayofweek:0
+msgid "Wednesday"
+msgstr "Woensdag"
+
+#. module: resource
+#: model:ir.actions.act_window,name:resource.action_resource_calendar_form
+#: view:resource.calendar:0
+msgid "Working Period"
+msgstr "Werkperiode"
+
+#. module: resource
+#: model:ir.model,name:resource.model_resource_resource
+msgid "Resource Detail"
+msgstr "Resource detail"
+
+#. module: resource
+#: field:resource.resource,active:0
+msgid "Active"
+msgstr "Actief"
+
+#. module: resource
+#: field:resource.calendar.attendance,calendar_id:0
+msgid "Resource's Calendar"
+msgstr "Resource's agenda"
+
+#. module: resource
+#: help:resource.resource,user_id:0
+msgid "Related user name for the resource to manage its access."
+msgstr ""
+"Gekoppelde gebruikersnaam voor de resource om van haar toegang te beheren."
+
+#. module: resource
+#: help:resource.resource,calendar_id:0
+msgid "Define the schedule of resource"
+msgstr "Definieert de planning van de resource"
+
+#. module: resource
+#: field:resource.calendar.attendance,hour_from:0
+msgid "Work from"
+msgstr "Werk vanaf"
+
+#. module: resource
+#: field:resource.resource,code:0
+msgid "Code"
+msgstr "Code"
+
+#. module: resource
+#: field:resource.calendar.attendance,hour_to:0
+msgid "Work to"
+msgstr "Werk tot"
+
+#. module: resource
+#: help:resource.resource,time_efficiency:0
+msgid ""
+"This field depict the efficiency of the resource to complete tasks. e.g "
+"resource put alone on a phase of 5 days with 5 tasks assigned to him, will "
+"show a load of 100% for this phase by default, but if we put a efficency of "
+"200%, then his load will only be 50%."
+msgstr ""
+"Dit veld toont de efficiency van de resource om taken te voltooien. bijv. "
+"resource alleen gedurende 5 dagen met 5 toegewezen taken zal standaard 100% "
+"belasting tonen, maar als we de efficiency op 200% zetten, dan zal zijn "
+"belasting slechts 50% zijn."
+
+#. module: resource
+#: selection:resource.calendar.attendance,dayofweek:0
+msgid "Tuesday"
+msgstr "Dinsdag"
+
+#. module: resource
+#: field:resource.calendar.leaves,calendar_id:0
+#: field:resource.resource,calendar_id:0
+msgid "Working time"
+msgstr "Werktijd"
+
+#. module: resource
+#: model:ir.actions.act_window,name:resource.action_resource_calendar_leave_tree
+msgid "Resource Leaves"
+msgstr "Afwezigheid resource"
+
+#. module: resource
+#: view:resource.calendar:0
+msgid "Manager"
+msgstr "Manager"
+
+#. module: resource
+#: code:addons/resource/faces/resource.py:0
+#, python-format
+msgid "(vacation)"
+msgstr "(vakantie)"
+
+#. module: resource
+#: field:resource.resource,time_efficiency:0
+msgid "Efficiency factor"
+msgstr "Efficiency factor"
+
+#. module: resource
+#: selection:resource.resource,resource_type:0
+msgid "Human"
+msgstr "Persoon"
+
+#. module: resource
+#: model:ir.model,name:resource.model_resource_calendar_attendance
+msgid "Work Detail"
+msgstr "Werk detail"
+
+#. module: resource
+#: field:resource.calendar.leaves,date_from:0
+msgid "Start Date"
+msgstr "Startdatum"
+
+#. module: resource
+#: selection:resource.calendar.attendance,dayofweek:0
+msgid "Saturday"
+msgstr "Zaterdag"
diff --git a/addons/sale/board_sale_view.xml b/addons/sale/board_sale_view.xml
index 6da7f9e312b..0aa1a9d238d 100644
--- a/addons/sale/board_sale_view.xml
+++ b/addons/sale/board_sale_view.xml
@@ -10,16 +10,16 @@
board.board
form
-
+
-
-
+
+
-
-
+
+
@@ -27,14 +27,13 @@
- Sales Dashboard
+ Sales Manager Dashboard
board.board
form
form
-
-
-
+
+
-
\ No newline at end of file
+
diff --git a/addons/sale/i18n/ru.po b/addons/sale/i18n/ru.po
index 5bf8551edbf..556ed670eaf 100644
--- a/addons/sale/i18n/ru.po
+++ b/addons/sale/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-29 20:42+0000\n"
+"PO-Revision-Date: 2010-09-30 06:52+0000\n"
"Last-Translator: Chertykov Denis \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-09-30 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-01 08:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale
diff --git a/addons/sale/i18n/vi.po b/addons/sale/i18n/vi.po
index 5ef0479bf3d..4d40406db16 100644
--- a/addons/sale/i18n/vi.po
+++ b/addons/sale/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: 2010-09-29 08:39+0000\n"
+"PO-Revision-Date: 2010-10-04 06:52+0000\n"
"Last-Translator: OpenERP Administrators \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-09-30 04:43+0000\n"
+"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale
@@ -40,7 +40,7 @@ msgstr "Đặt giao hàng"
#. module: sale
#: field:sale.order.line,address_allotment_id:0
msgid "Allotment Partner"
-msgstr ""
+msgstr "Đối tác phân phối"
#. module: sale
#: constraint:ir.actions.act_window:0
@@ -58,11 +58,13 @@ msgid ""
"If you don't have enough stock available to deliver all at once, do you "
"accept partial shipments or not?"
msgstr ""
+"Nếu bạn không có đủ hàng để giao hàng toàn bộ một lần, bạn có chấp nhận giao "
+"hàng từng phần hay không?"
#. module: sale
#: selection:sale.order.line,type:0
msgid "from stock"
-msgstr ""
+msgstr "theo nhu cầu dự báo"
#. module: sale
#: field:sale.config.picking_policy,step:0
@@ -100,13 +102,13 @@ msgstr "Sửa lại"
#. module: sale
#: selection:sale.order,state:0
msgid "Invoice Exception"
-msgstr ""
+msgstr "Hóa đơn ngoại lệ"
#. module: sale
#: help:sale.order,picking_ids:0
msgid ""
"This is the list of picking list that have been generated for this invoice"
-msgstr ""
+msgstr "Đây là danh sách các sản phẩm đã chọn được tạo ra cho hóa đơn này"
#. module: sale
#: model:process.node,note:sale.process_node_deliveryorder0
@@ -126,7 +128,7 @@ msgstr "Xác nhận"
#. module: sale
#: view:sale.order:0
msgid "Make Invoice"
-msgstr ""
+msgstr "Lập hóa đơn"
#. module: sale
#: field:sale.order.line,price_subtotal:0
@@ -139,6 +141,8 @@ msgid ""
"Whenever confirm button is clicked, the draft state is moved to manual. that "
"is, quotation is moved to sale order."
msgstr ""
+"Bất kỳ khi nào nút xác nhận được chọn, trạng thái dự thảo sẽ được chuyển "
+"sang thủ công. Nghĩa là, báo giá được chuyển thành đơn chào hàng."
#. module: sale
#: model:process.transition.action,name:sale.process_transition_action_cancelorder0
@@ -194,7 +198,7 @@ msgstr "Đã hủy bỏ"
#. module: sale
#: selection:sale.order,state:0
msgid "Shipping Exception"
-msgstr ""
+msgstr "Vận chuyển ngoại lệ"
#. module: sale
#: field:sale.order,amount_total:0
@@ -229,7 +233,7 @@ msgstr "Tất cả một lúc"
#. module: sale
#: model:process.transition,note:sale.process_transition_saleprocurement0
msgid "Procurement is created after confirmation of sale order."
-msgstr ""
+msgstr "Việc thu mua hàng được tạo sau khi có xác nhận của đơn chào hàng."
#. module: sale
#: field:sale.order,project_id:0
@@ -271,7 +275,7 @@ msgstr "Thông tin các dơn đặt hàng"
#. module: sale
#: field:sale.order.line,product_uos_qty:0
msgid "Quantity (UoS)"
-msgstr ""
+msgstr "Số lượng (Đơn vị bán)"
#. module: sale
#: help:sale.order,invoice_quantity:0
@@ -281,6 +285,11 @@ msgid ""
"choose if you invoice based on ordered or shipped quantities. If the product "
"is a service, shipped quantities means hours spent on the associated tasks."
msgstr ""
+"Đơn chào hàng sẽ tự động tạo hóa đơn gợi ý (hóa đơn dự thảo). Số lượng yêu "
+"cầu và số lượng giao hàng có thể không giống nhau. Bạn phải chọn nếu bạn lập "
+"hóa đơn dựa trên số lượng đặt hàng hay số lượng giao hàng. Nếu sản phẩm là "
+"một dịch vụ, số lượng giao hàng có nghĩa là số giờ đã dùng để thực hiện các "
+"công việc liên quan."
#. module: sale
#: selection:sale.order.line,state:0
@@ -355,7 +364,7 @@ msgstr "Dòng hoá đơn"
#. module: sale
#: model:process.transition.action,name:sale.process_transition_action_forceassignation0
msgid "Force Assignation"
-msgstr ""
+msgstr "Phân phối lực lượng"
#. module: sale
#: view:sale.order:0
@@ -368,6 +377,9 @@ msgid ""
"Packing list is created when 'Assign' is being clicked after confirming the "
"sale order. This transaction moves the sale order to packing list."
msgstr ""
+"Bảng kê bao bì hàng hóa được tạo khi nút 'Chỉ định' được chọn sau khi xác "
+"nhận đơn chào hàng. Giao dịch này chuyển đơn chào hàng sang bảng kê bao bì "
+"hàng hóa."
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_tree8
@@ -386,6 +398,8 @@ msgid ""
"When you select Shipping Ploicy = 'Automatic Invoice after delivery' , it "
"will automatic create after delivery."
msgstr ""
+"Khi bạn chọn chính sách vận chuyển = 'Tự động xuất hóa đơn sau khi giao "
+"hàng', nó sẽ tự động tạo sau khi giao hàng."
#. module: sale
#: selection:sale.order,picking_policy:0
@@ -475,7 +489,7 @@ msgstr ""
#. module: sale
#: field:sale.shop,payment_account_id:0
msgid "Payment Accounts"
-msgstr ""
+msgstr "Tài khoản thanh toán"
#. module: sale
#: constraint:product.template:0
@@ -506,7 +520,7 @@ msgstr "Tài khoản thanh toán"
#. module: sale
#: wizard_button:sale.advance_payment_inv,create,end:0
msgid "Close"
-msgstr ""
+msgstr "Đóng"
#. module: sale
#: model:process.node,name:sale.process_node_invoice0
@@ -534,18 +548,18 @@ msgstr "Giảm giá (%)"
#. module: sale
#: model:process.node,note:sale.process_node_invoice0
msgid "Draft customer invoice, to be reviewed by accountant."
-msgstr ""
+msgstr "Hóa đơn khách hàng dự thảo, sẽ được kế toán xem xét lại."
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_tree3
#: model:ir.ui.menu,name:sale.menu_action_order_tree3
msgid "Sales Order To Be Invoiced"
-msgstr ""
+msgstr "Đơn chào hàng sẽ được lập hóa đơn"
#. module: sale
#: model:process.node,note:sale.process_node_saleorderprocurement0
msgid "Procurement for each line"
-msgstr ""
+msgstr "Thu mua hàng cho mỗi sản phẩm"
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_tree10
@@ -556,7 +570,7 @@ msgstr ""
#. module: sale
#: wizard_view:sale.advance_payment_inv,create:0
msgid "Invoices"
-msgstr ""
+msgstr "Hóa đơn"
#. module: sale
#: view:sale.order:0
@@ -581,7 +595,7 @@ msgstr ""
#. module: sale
#: field:sale.order.line,product_packaging:0
msgid "Packaging"
-msgstr ""
+msgstr "Đóng gói"
#. module: sale
#: model:ir.module.module,shortdesc:sale.module_meta_information
diff --git a/addons/sale/process/sale_process.xml b/addons/sale/process/sale_process.xml
index b4a54d5afa5..e20cf959c9b 100644
--- a/addons/sale/process/sale_process.xml
+++ b/addons/sale/process/sale_process.xml
@@ -63,7 +63,7 @@
-
+
@@ -85,7 +85,6 @@
-
@@ -138,14 +137,6 @@
-
-
-
-
-
-
-
-
@@ -197,7 +188,6 @@
-
@@ -206,7 +196,6 @@
-
@@ -261,7 +250,7 @@
-
+
diff --git a/addons/sale/report/sale_order.rml b/addons/sale/report/sale_order.rml
index 3f44ef2afb3..a4eab5aa86d 100644
--- a/addons/sale/report/sale_order.rml
+++ b/addons/sale/report/sale_order.rml
@@ -312,7 +312,7 @@
Net Total :
|
- [[ formatLang(o.amount_untaxed ) ]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_untaxed, digits=get_digits(dp='Account')) ]] [[ o.pricelist_id.currency_id. symbol ]]
|
@@ -325,7 +325,7 @@
Taxes :
|
- [[ formatLang(o.amount_tax ) ]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_tax, digits=get_digits(dp='Account')) ]] [[ o.pricelist_id.currency_id. symbol ]]
|
@@ -338,7 +338,7 @@
Total :
|
- [[ formatLang(o.amount_total ) ]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_total, digits=get_digits(dp='Account')) ]] [[ o.pricelist_id.currency_id. symbol ]]
|
@@ -361,4 +361,4 @@
-
\ No newline at end of file
+
diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml
index b914e2b2d4b..3d93d45cfc5 100644
--- a/addons/sale/report/sale_report_view.xml
+++ b/addons/sale/report/sale_report_view.xml
@@ -26,7 +26,7 @@
-
+
@@ -101,9 +101,9 @@
-
-
-
+
+
+
@@ -129,7 +129,7 @@
-
+
@@ -226,7 +226,7 @@
sale.report
tree
-
+
@@ -238,15 +238,15 @@
sale.report
graph
-
-
+
+
- Sales by Products
+ Sales by Product's Category
sale.report
form
graph,tree
@@ -293,7 +293,7 @@
sale.order
tree
-
+
@@ -305,7 +305,7 @@
- Top Quotations
+ Quotations
sale.order
form
tree,form
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 60d4a95a821..cfb96f7d095 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -21,12 +21,12 @@
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
+import time
+
from osv import fields, osv
from tools.translate import _
import decimal_precision as dp
import netsvc
-import time
-
class sale_shop(osv.osv):
_name = "sale.shop"
@@ -65,6 +65,7 @@ class sale_order(osv.osv):
'shipped': False,
'invoice_ids': [],
'picking_ids': [],
+ 'date_confirm':False,
'name': self.pool.get('ir.sequence').get(cr, uid, 'sale.order'),
})
return super(sale_order, self).copy(cr, uid, id, default, context=context)
@@ -74,7 +75,7 @@ class sale_order(osv.osv):
context = {}
val = 0.0
for c in self.pool.get('account.tax').compute_all(cr, uid, line.tax_id, line.price_unit * (1-(line.discount or 0.0)/100.0), line.product_uom_qty, line.order_id.partner_invoice_id.id, line.product_id, line.order_id.partner_id)['taxes']:
- val += c['amount']
+ val += c.get('amount', 0.0)
return val
def _amount_all(self, cr, uid, ids, field_name, arg, context=None):
@@ -249,7 +250,7 @@ class sale_order(osv.osv):
'order_line': fields.one2many('sale.order.line', 'order_id', 'Order Lines', readonly=True, states={'draft': [('readonly', False)]}),
'invoice_ids': fields.many2many('account.invoice', 'sale_order_invoice_rel', 'order_id', 'invoice_id', 'Invoices', help="This is the list of invoices that have been generated for this sale order. The same sale order may have been invoiced in several times (by line for example)."),
'picking_ids': fields.one2many('stock.picking', 'sale_id', 'Related Picking', readonly=True, help="This is the list of picking list that have been generated for this invoice"),
- 'shipped': fields.boolean('Picked', readonly=True, help="It indicates that a picking has been done. It will be set to True if the ordered quantities are available and the picking is done. If the ordered quantities are not available Procurement generates a Purchase/Manufacturing order. Unless its Picking and Purchase/Manufacturing order are not in the done state it wont be set to True"),
+ 'shipped': fields.boolean('Delivered', readonly=True, help="It indicates that the sale order has been delivered. This field is updated only after the scheduler have been launched !"),
'picked_rate': fields.function(_picked_rate, method=True, string='Picked', type='float'),
'invoiced_rate': fields.function(_invoiced_rate, method=True, string='Invoiced', type='float'),
'invoiced': fields.function(_invoiced, method=True, string='Paid',
@@ -278,10 +279,9 @@ class sale_order(osv.osv):
'invoice_quantity': fields.selection([('order', 'Ordered Quantities'), ('procurement', 'Shipped Quantities')], 'Invoice on', help="The sale order will automatically create the invoice proposition (draft invoice). Ordered and delivered quantities may not be the same. You have to choose if you want your invoice based on ordered or shipped quantities. If the product is a service, shipped quantities means hours spent on the associated tasks.", required=True),
'payment_term': fields.many2one('account.payment.term', 'Payment Term'),
'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position'),
- 'company_id': fields.many2one('res.company','Company')
+ 'company_id': fields.related('shop_id','company_id',type='many2one',relation='res.company',string='Company',store=True)
}
_defaults = {
- 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'sale.order', context=c),
'picking_policy': 'direct',
'date_order': time.strftime('%Y-%m-%d'),
'order_policy': 'manual',
@@ -422,8 +422,14 @@ class sale_order(osv.osv):
pay_term = order.payment_term.id
else:
pay_term = False
+ invoiced_sale_line_ids = self.pool.get('sale.order.line').search(cr, uid, [('order_id', '=', order.id), ('invoiced', '=', True)], context=context)
+ from_line_invoice_ids = []
+ for invoiced_sale_line_id in self.pool.get('sale.order.line').browse(cr, uid, invoiced_sale_line_ids, context=context):
+ for invoice_line_id in invoiced_sale_line_id.invoice_lines:
+ if invoice_line_id.invoice_id.id not in from_line_invoice_ids:
+ from_line_invoice_ids.append(invoice_line_id.invoice_id.id)
for preinv in order.invoice_ids:
- if preinv.state not in ('cancel',):
+ if preinv.state not in ('cancel',) and preinv.id not in from_line_invoice_ids:
for preline in preinv.invoice_line:
inv_line_id = self.pool.get('account.invoice.line').copy(cr, uid, preline.id, {'invoice_id': False, 'price_unit': -preline.price_unit})
lines.append(inv_line_id)
@@ -454,6 +460,34 @@ class sale_order(osv.osv):
inv_obj.button_compute(cr, uid, [inv_id])
return inv_id
+ def manual_invoice(self, cr, uid, ids, context=None):
+ wf_service = netsvc.LocalService("workflow")
+ inv_ids = set()
+ inv_ids1 = set()
+ for id in ids:
+ for record in self.pool.get('sale.order').browse(cr, uid, id).invoice_ids:
+ inv_ids.add(record.id)
+ # inv_ids would have old invoices if any
+ for id in ids:
+ wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr)
+ for record in self.pool.get('sale.order').browse(cr, uid, id).invoice_ids:
+ inv_ids1.add(record.id)
+ inv_ids = list(inv_ids1.difference(inv_ids))
+
+ result = {
+ 'name': 'Invoices',
+ 'view_type': 'form',
+ 'view_mode': 'form,tree',
+ 'res_model': 'account.invoice',
+ 'view_id': False,
+ 'context': "{'type':'out_refund'}",
+ 'type': 'ir.actions.act_window',
+ 'res_id': inv_ids[0],
+ 'nodestroy' :True
+ }
+
+ return result
+
def action_invoice_create(self, cr, uid, ids, grouped=False, states=['confirmed', 'done', 'exception'], date_inv = False, context=None):
res = False
invoices = {}
@@ -470,7 +504,6 @@ class sale_order(osv.osv):
lines = []
for line in o.order_line:
if line.invoiced:
- #raise osv.except_osv(_('Error !'), _('The Sale Order already has some lines invoiced. You should continue the billing process by line.'))
continue
elif (line.state in states):
lines.append(line.id)
@@ -501,6 +534,7 @@ class sale_order(osv.osv):
if order.order_policy == 'picking':
picking_obj.write(cr, uid, map(lambda x: x.id, order.picking_ids), {'invoice_state': 'invoiced'})
cr.execute('insert into sale_order_invoice_rel (order_id,invoice_id) values (%s,%s)', (order.id, res))
+
return res
def action_invoice_cancel(self, cr, uid, ids, context=None):
@@ -552,7 +586,7 @@ class sale_order(osv.osv):
#
if order.state == 'invoice_except':
self.write(cr, uid, [order.id], {'state' : 'progress'}, context=context)
-
+
return True
def action_cancel(self, cr, uid, ids, context=None):
@@ -677,7 +711,7 @@ class sale_order(osv.osv):
'name': line.name[:64],
'picking_id': picking_id,
'product_id': line.product_id.id,
- 'date_planned': date_planned,
+ 'date': date_planned,
'date_expected': date_planned,
'product_qty': line.product_uom_qty,
'product_uom': line.product_uom.id,
@@ -724,7 +758,7 @@ class sale_order(osv.osv):
if picking_id:
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
-
+
if order.state == 'shipping_except':
val['state'] = 'progress'
@@ -905,7 +939,7 @@ class sale_order_line(osv.osv):
else:
a = self.pool.get('ir.property').get(cr, uid,
'property_account_income_categ', 'product.category',
- context=context)
+ context=context).id
uosqty = _get_line_qty(line)
uos_id = _get_line_uom(line)
pu = 0.0
@@ -1169,7 +1203,7 @@ class sale_config_picking_policy(osv.osv_memory):
'picking_policy': fields.selection([
('direct', 'Direct Delivery'),
('one', 'All at Once')
- ], 'Picking Default Policy', required=True, help="The Shipping Policy is used to synchronise invoices and delivery operations."),
+ ], 'Picking Default Policy', required=True, help="The Shipping Policy is used to configure per order if you want to deliver as soon as possible when one product is available or you wait that all products are available.."),
'order_policy': fields.selection([
('manual', 'Invoice Based on Sales Orders'),
('picking', 'Invoice Based on Deliveries'),
@@ -1199,11 +1233,6 @@ class sale_config_picking_policy(osv.osv_memory):
ir_values_obj.set(cr, uid, 'default', False, 'order_policy', ['sale.order'], o.order_policy)
if o.step == 'one':
md = self.pool.get('ir.model.data')
- group_id = md._get_id(cr, uid, 'base', 'group_no_one')
- group_id = md.browse(cr, uid, group_id, context=context).res_id
- menu_id = md._get_id(cr, uid, 'stock', 'menu_action_picking_tree_delivery')
- menu_id = md.browse(cr, uid, menu_id, context=context).res_id
- self.pool.get('ir.ui.menu').write(cr, uid, [menu_id], {'groups_id': [(6, 0, [group_id])]})
location_id = md._get_id(cr, uid, 'stock', 'stock_location_output')
location_id = md.browse(cr, uid, location_id, context=context).res_id
self.pool.get('stock.location').write(cr, uid, [location_id], {'chained_auto_packing': 'transparent'})
diff --git a/addons/sale/sale_data.xml b/addons/sale/sale_data.xml
index 6c8249131e8..f2ebe3af020 100644
--- a/addons/sale/sale_data.xml
+++ b/addons/sale/sale_data.xml
@@ -2,16 +2,16 @@
+ Requests Links
+ -->
Sale Order
sale.order
+ Resource: sale.shop
+ -->
diff --git a/addons/sale/sale_installer.py b/addons/sale/sale_installer.py
index 98cd63c6ecb..4197c0a370b 100644
--- a/addons/sale/sale_installer.py
+++ b/addons/sale/sale_installer.py
@@ -26,8 +26,8 @@ class sale_installer(osv.osv_memory):
_inherit = 'res.config.installer'
_columns = {
- 'sale_analytic_plans': fields.boolean('Sales Analytic Distribution',
- help="Helps you to manage analytic distribution and sales orders."),
+ 'delivery': fields.boolean('Delivery Costs',
+ help="Allows you to compute delivery costs on your quotations."),
'sale_journal': fields.boolean('Sales and deliveries by journal',
help="Allows you to categorise your "
"sales and deliveries (picking lists) between different journals. "
@@ -40,8 +40,8 @@ class sale_installer(osv.osv_memory):
"the difference between Unit Price and Cost Price."),
'sale_order_dates': fields.boolean('Sales Order Dates',
help="Adds commitment, requested and effective dates on Sales Orders."),
- }
+ }
sale_installer()
-# 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/sale/sale_installer.xml b/addons/sale/sale_installer.xml
index 31da357f895..4149871ad36 100644
--- a/addons/sale/sale_installer.xml
+++ b/addons/sale/sale_installer.xml
@@ -25,7 +25,7 @@
Configure
-
+
@@ -47,6 +47,7 @@
+ always
3
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index be0d254debd..85dd4c86c27 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -1,7 +1,9 @@
-
+
+
@@ -19,7 +21,7 @@
-
+
@@ -32,7 +34,7 @@
-
+
@@ -48,14 +50,14 @@
+ groups="base.group_extended,base.group_sale_manager"/>
sale.order.calendar
sale.order
calendar
-
+
@@ -66,7 +68,7 @@
sale.order
graph
-
+
@@ -78,15 +80,15 @@
sale.order
tree
-
+
-
-
+
+
@@ -97,7 +99,7 @@
sale.order
form
-
+
@@ -115,7 +117,7 @@
+ groups="analytic.group_analytic_accounting" domain="[('parent_id','!=',False)]" />
@@ -180,7 +182,7 @@
-
+
@@ -199,17 +201,17 @@
-
-
+
-
+
+
@@ -293,7 +295,7 @@ orders, purchases, etc. It support several invoicing methods according
to your configuration: from the sales order, from the pickings, etc.
-
+
Sales in Exception
@@ -343,7 +345,7 @@ to your configuration: from the sales order, from the pickings, etc.
sale.order.line
graph
-
+
@@ -355,14 +357,14 @@ to your configuration: from the sales order, from the pickings, etc.
sale.order.line
tree
-
+
-
+
@@ -374,22 +376,22 @@ to your configuration: from the sales order, from the pickings, etc.
form
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -451,7 +453,7 @@ to your configuration: from the sales order, from the pickings, etc.
name="sale order"
help="Confirmed Sale Order Lines"
/>
-
+
-
-
-
-
+
+
@@ -549,7 +552,6 @@ to your configuration: from the sales order, from the pickings, etc.
-
@@ -567,6 +569,7 @@ to your configuration: from the sales order, from the pickings, etc.
+ always
diff --git a/addons/sale/security/ir.model.access.csv b/addons/sale/security/ir.model.access.csv
index 89a2003698c..3675ccf32ae 100644
--- a/addons/sale/security/ir.model.access.csv
+++ b/addons/sale/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_sale_shop","sale.shop","model_sale_shop","base.group_sale_salesman",1,1,1,1
-"access_sale_order","sale.order","model_sale_order","base.group_sale_salesman",1,1,1,1
-"access_sale_order_line","sale.order.line","model_sale_order_line","base.group_sale_salesman",1,1,1,0
+"access_sale_shop","sale.shop","model_sale_shop","base.group_sale_salesman",1,0,0,0
+"access_sale_order","sale.order","model_sale_order","base.group_sale_salesman",1,1,1,0
+"access_sale_order_line","sale.order.line","model_sale_order_line","base.group_sale_salesman",1,1,1,1
"access_sale_shop_admin","sale.shop","model_sale_shop","base.group_system",1,1,1,1
-"access_account_invoice_salesman","account_invoice salesman","account.model_account_invoice","base.group_sale_salesman",1,1,1,1
-"access_account_invoice_line_salesman","account_invoice.line salesman","account.model_account_invoice_line","base.group_sale_salesman",1,1,1,1
+"access_account_invoice_salesman","account_invoice salesman","account.model_account_invoice","base.group_sale_salesman",1,1,1,0
+"access_account_invoice_manager","account_invoice manager","account.model_account_invoice","base.group_sale_manager",1,1,1,1
+"access_account_invoice_line_salesman","account_invoice.line salesman","account.model_account_invoice_line","base.group_sale_salesman",1,1,1,0
"access_account_payment_term_salesman","account_payment_term salesman","account.model_account_payment_term","base.group_sale_salesman",1,0,0,0
-"access_account_analytic_account_salesman","account_analytic_account salesman","analytic.model_account_analytic_account","base.group_sale_salesman",1,1,1,1
-"access_stock_picking_salesman","stock_picking salesman","stock.model_stock_picking","base.group_sale_salesman",1,1,1,1
+"access_account_analytic_account_salesman","account_analytic_account salesman","analytic.model_account_analytic_account","base.group_sale_salesman",1,1,1,0
+"access_stock_picking_salesman","stock_picking salesman","stock.model_stock_picking","base.group_sale_salesman",1,1,1,0
"access_stock_move_salesman","stock_move salesman","stock.model_stock_move","base.group_sale_salesman",1,1,1,0
-"access_procurement_salesman","procurement.order salesman","procurement.model_procurement_order","base.group_sale_salesman",1,1,1,1
+"access_stock_move_manager","stock_move manager","stock.model_stock_move","base.group_sale_manager",1,1,1,1
+"access_procurement_salesman","procurement.order salesman","procurement.model_procurement_order","base.group_sale_salesman",1,1,1,0
+"access_procurement_manager","procurement.order manager","procurement.model_procurement_order","base.group_sale_manager",1,1,1,1
"access_sale_order_stock_worker","sale.order stock worker","model_sale_order","stock.group_stock_user",1,1,0,0
"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","base.group_sale_manager",1,0,0,0
+"access_sale_order_manager","sale.order.manager","model_sale_order","base.group_sale_manager",1,1,1,1
"access_sale_order_line_manager","sale.order.line.manager","model_sale_order_line","base.group_sale_manager",1,0,0,0
+"access_sale_report_salesman","sale.report","model_sale_report","base.group_sale_salesman",1,1,1,0
"access_sale_report_manager","sale.report","model_sale_report","base.group_sale_manager",1,1,1,1
"access_ir_property_sales","ir.property.sales","base.model_ir_property","base.group_sale_salesman",1,1,1,1
"access_sale_account_journal","account.journal sale order.user","account.model_account_journal","base.group_sale_salesman",1,0,0,0
@@ -26,12 +30,12 @@
"access_product_product_sale_user","product.product sale use","product.model_product_product","base.group_sale_salesman",1,0,0,0
"access_product_template_sale","product.template sale manager","product.model_product_template","base.group_sale_manager",1,0,0,0
"access_product_product_sale","product.product sale manager","product.model_product_product","base.group_sale_manager",1,0,0,0
-"access_sale_shop_manager","account.journal sale order.user","model_sale_shop","base.group_sale_manager",1,0,0,0
+"access_sale_shop_manager","account.journal sale order.user","model_sale_shop","base.group_sale_manager",1,1,1,1
"access_account_fiscalyear_manager","account.fiscalyear.manager","account.model_account_fiscalyear","base.group_sale_manager",1,0,0,0
-"access_account_fiscalyear_user","account.fiscalyear.user","account.model_account_fiscalyear","base.group_sale_salesman",1,1,1,1
+"access_account_fiscalyear_user","account.fiscalyear.user","account.model_account_fiscalyear","base.group_sale_salesman",1,0,0,0
"access_res_partner_address_user","res.partner.address.user","base.model_res_partner_address","base.group_sale_salesman",1,0,0,0
-"access_account_tax_user","account.tax.user","account.model_account_tax","base.group_sale_salesman",1,1,1,1
-"access_product_packaging_user","product.packaging.user","product.model_product_packaging","base.group_sale_salesman",1,1,1,1
+"access_account_tax_user","account.tax.user","account.model_account_tax","base.group_sale_salesman",1,1,1,0
+"access_product_packaging_user","product.packaging.user","product.model_product_packaging","base.group_sale_salesman",1,1,1,0
"access_res_country_system","res.country system","base.model_res_country","base.group_system",1,1,1,1
"access_res_country_state_system","res.country.state system","base.model_res_country_state","base.group_system",1,1,1,1
"access_res_partner_title_system","res.partner.title system","base.model_res_partner_title","base.group_system",1,1,1,1
@@ -41,8 +45,8 @@
"access_stock_picking_system","stock.picking.system","stock.model_stock_picking","base.group_system",1,0,0,0
"access_sale_report_system","sale.report.system","model_sale_report","base.group_system",1,0,0,0
"access_ir_attachment_system","ir.attachment.system","base.model_ir_attachment","base.group_system",1,0,0,0
-"access_ir_attachment_sales","ir.attachment.sales","base.model_ir_attachment","base.group_sale_salesman",1,1,1,1
-"access_ir_attachment_manager","ir.attachment.manager","base.model_ir_attachment","base.group_sale_manager",1,0,0,0
+"access_ir_attachment_sales","ir.attachment.sales","base.model_ir_attachment","base.group_sale_salesman",1,1,1,0
+"access_ir_attachment_manager","ir.attachment.manager","base.model_ir_attachment","base.group_sale_manager",1,1,1,1
"access_res_partner_bank_type_system","res.partner.bank.type.system","base.model_res_partner_bank_type","base.group_system",1,0,0,0
"access_stock_warehouse_manager","stock.warehouse.manager","stock.model_stock_warehouse","base.group_sale_manager",1,0,0,0
"access_product_uom_manager","product.uom.manager","product.model_product_uom","base.group_sale_manager",1,0,0,0
diff --git a/addons/sale/security/sale_security.xml b/addons/sale/security/sale_security.xml
index 19da6a6f81f..36a8fc15118 100644
--- a/addons/sale/security/sale_security.xml
+++ b/addons/sale/security/sale_security.xml
@@ -12,6 +12,10 @@
+
+
Sale Order multi-company
diff --git a/addons/sale/stock.py b/addons/sale/stock.py
index 39260e759b4..0bb47110213 100644
--- a/addons/sale/stock.py
+++ b/addons/sale/stock.py
@@ -29,7 +29,25 @@ class stock_move(osv.osv):
_defaults = {
'sale_line_id': False
}
-
+
+ def _get_reference_accounting_values_for_valuation(self, cr, uid, move, context=None):
+ """
+ Overrides the default stock valuation to take into account the currency that was specified
+ on the sale order in case the valuation data was not directly specified during picking
+ confirmation.
+ """
+ reference_amount, reference_currency_id = super(stock_move, self)._get_reference_accounting_values_for_valuation(cr, uid, move, context=context)
+ if move.product_id.cost_method != 'average' or not move.price_unit:
+ # no average price costing or cost not specified during picking validation, we will
+ # plug the sale line values if they are found.
+ if move.sale_line_id and move.picking_id.sale_id.pricelist_id:
+ reference_amount, reference_currency_id = move.sale_line_id.price_unit, move.picking_id.sale_id.pricelist_id.currency_id.id
+ return reference_amount, reference_currency_id
+ def _create_chained_picking(self, cr, uid, pick_name,picking,ptype,move, context=None):
+ res=super(stock_move, self)._create_chained_picking(cr, uid, pick_name,picking,ptype,move, context=context)
+ if picking.sale_id:
+ picking_obj = self.pool.get('stock.picking').write(cr,uid,[res],{'sale_id':picking.sale_id.id})
+ return res
stock_move()
class stock_picking(osv.osv):
@@ -186,6 +204,7 @@ class stock_picking(osv.osv):
'quantity': sale_line.product_uos_qty,
'invoice_line_tax_id': [(6, 0, tax_ids)],
'account_analytic_id': account_analytic_id,
+ 'notes':sale_line.notes
}, context=context)
self.pool.get('sale.order.line').write(cursor, user, [sale_line.id], {'invoiced':True,
'invoice_lines': [(6, 0, [invoice_line_id])],
@@ -208,4 +227,47 @@ class stock_picking(osv.osv):
stock_picking()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+class stock_partial_picking(osv.osv_memory):
+ _inherit = 'stock.partial.picking'
+
+ def default_get(self, cr, uid, fields, context=None):
+ """ To get default values for the object.
+ @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')
+ res = super(stock_partial_picking, self).default_get(cr, uid, fields, context=context)
+ for pick in pick_obj.browse(cr, uid, context.get('active_ids', [])):
+ for m in pick.move_lines:
+ if (m.product_id.cost_method == 'average'):
+ if pick.type == 'out' and pick.sale_id and m.sale_line_id:
+ res['move%s_product_price'%(m.id)] = m.sale_line_id.price_unit
+ res['move%s_product_currency'%(m.id)] = pick.sale_id.pricelist_id.currency_id.id
+ return res
+stock_partial_picking()
+
+class stock_partial_move(osv.osv_memory):
+ _inherit = "stock.partial.move"
+ def default_get(self, cr, uid, fields, context=None):
+ """ To get default values for the object.
+ @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.
+ """
+ res = super(stock_partial_move, self).default_get(cr, uid, fields, context=context)
+ move_obj = self.pool.get('stock.move')
+ for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
+ if (m.product_id.cost_method == 'average'):
+ if m.picking_id.type == 'out' and m.sale_line_id and m.picking_id.sale_id:
+ res['move%s_product_price'%(m.id)] = m.sale_line_id.price_unit
+ res['move%s_product_currency'%(m.id)] = m.picking_id.sale_id.pricelist_id.currency_id.id
+ return res
+stock_partial_move()
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale/stock_view.xml b/addons/sale/stock_view.xml
index 6b3c0e2c684..dddcad07932 100644
--- a/addons/sale/stock_view.xml
+++ b/addons/sale/stock_view.xml
@@ -13,6 +13,40 @@
+
+ stock.move.form
+ stock.move
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+ tree
+
+
+
+
+
+
+ form
+
+
+
+
diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml
index c6cf4d66c74..7cb253a2bfb 100644
--- a/addons/sale/test/manual_order_policy.yml
+++ b/addons/sale/test/manual_order_policy.yml
@@ -110,7 +110,7 @@
!python {model: stock.picking }: |
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
- picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=',so.name)])
assert (picking_id),"Delivery order has not been generated"
-
I verify that a procurement has been generated for so
@@ -282,7 +282,7 @@
import time
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
- picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=',so.name)])
if picking_id:
pick=self.browse(cr,uid,picking_id[0])
pick.force_assign(cr, uid)
@@ -304,7 +304,7 @@
!python {model: stock.picking }: |
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
- picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=',so.name)])
pick = self.browse(cr,uid,picking_id[0])
assert (pick.state) =='done', "Picking for SO is not in done state."
-
diff --git a/addons/sale/test/picking_order_policy.yml b/addons/sale/test/picking_order_policy.yml
index e90d58bab68..c3f4ba87aaf 100644
--- a/addons/sale/test/picking_order_policy.yml
+++ b/addons/sale/test/picking_order_policy.yml
@@ -261,7 +261,7 @@
!python {model: stock.picking }: |
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so7"))
- picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=',so.name)])
assert (picking_id),"Delivery order has not been generated"
-
I verify that delivery has been done
@@ -270,7 +270,7 @@
import time
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so7"))
- picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=',so.name)])
if picking_id:
pick=self.browse(cr,uid,picking_id[0])
pick.force_assign(cr, uid)
@@ -292,7 +292,7 @@
!python {model: stock.picking }: |
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so7"))
- picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=',so.name)])
if picking_id:
pick = self.browse(cr,uid,picking_id[0])
assert (pick.state) =='done', "Picking for SO is not in done state."
diff --git a/addons/sale/test/postpaid_order_policy.yml b/addons/sale/test/postpaid_order_policy.yml
index 8ef86840fc9..bbd015d726b 100644
--- a/addons/sale/test/postpaid_order_policy.yml
+++ b/addons/sale/test/postpaid_order_policy.yml
@@ -73,7 +73,7 @@
!python {model: stock.picking }: |
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so8"))
- picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=',so.name)])
assert (picking_id),"Delivery order has not been generated"
-
I click on the Products Sent button and then on the Validate button
@@ -82,7 +82,7 @@
import time
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so8"))
- picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=',so.name)])
if picking_id:
pick=self.browse(cr,uid,picking_id[0])
pick.force_assign(cr, uid)
@@ -104,7 +104,7 @@
!python {model: stock.picking }: |
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so8"))
- picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','delivery')])
+ picking_id = self.search(cr, uid, [('origin','=',so.name)])
if picking_id:
pick = self.browse(cr,uid,picking_id[0])
assert (pick.state) =='done', "Picking for SO is not in done state."
diff --git a/addons/sale/test/prepaid_order_policy.yml b/addons/sale/test/prepaid_order_policy.yml
index f9bf8dbd330..0a8f2aafa81 100644
--- a/addons/sale/test/prepaid_order_policy.yml
+++ b/addons/sale/test/prepaid_order_policy.yml
@@ -40,7 +40,7 @@
!python {model: stock.picking }: |
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so1"))
- picking_id = self.search(cr, uid, [('origin','!=',so.name),(('type','=','out')and('type','=','delivery'))])
+ picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])
assert picking_id,"There is a picking attached to this sale order"
-
I open the Invoice for the SO.
diff --git a/addons/sale/test/so_make_invoice.yml b/addons/sale/test/so_make_invoice.yml
index 61d379c9a60..0133391395b 100644
--- a/addons/sale/test/so_make_invoice.yml
+++ b/addons/sale/test/so_make_invoice.yml
@@ -110,7 +110,7 @@
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so4"))
pick_obj = self.pool.get('stock.picking')
- pick_id = pick_obj.search(cr, uid, [('origin', '=', so.name),('type','=','delivery')])
+ pick_id = pick_obj.search(cr, uid, [('origin', '=', so.name)])
pick_brw = pick_obj.browse(cr,uid,pick_id)[0]
move_obj = self.pool.get('stock.move')
move_id = move_obj.search(cr, uid, [('picking_id', '=', pick_brw.name),('name','=','LG Viewty Smart')])
diff --git a/addons/sale/wizard/sale_line_invoice.xml b/addons/sale/wizard/sale_line_invoice.xml
index b48247f8e58..774759c82c7 100644
--- a/addons/sale/wizard/sale_line_invoice.xml
+++ b/addons/sale/wizard/sale_line_invoice.xml
@@ -1,20 +1,20 @@
-
+
Sale OrderLine Make Invoice
sale.order.line.make.invoice
form
-
-
-
-
+
+
+
+
-
+
-
+
Make Invoices
ir.actions.act_window
sale.order.line.make.invoice
@@ -34,4 +34,4 @@
sale.order.line
-
\ No newline at end of file
+
diff --git a/addons/sale/wizard/sale_make_invoice.xml b/addons/sale/wizard/sale_make_invoice.xml
index 106e6945207..e8e698e56b9 100644
--- a/addons/sale/wizard/sale_make_invoice.xml
+++ b/addons/sale/wizard/sale_make_invoice.xml
@@ -13,7 +13,7 @@
-
+
@@ -38,4 +38,4 @@
sale.order
-
\ No newline at end of file
+
diff --git a/addons/sale/wizard/sale_make_invoice_advance.xml b/addons/sale/wizard/sale_make_invoice_advance.xml
index 3257d1aafe8..6e192d31108 100644
--- a/addons/sale/wizard/sale_make_invoice_advance.xml
+++ b/addons/sale/wizard/sale_make_invoice_advance.xml
@@ -15,7 +15,7 @@
-
+
@@ -55,4 +55,4 @@
new
-
\ No newline at end of file
+
diff --git a/addons/sale_crm/__openerp__.py b/addons/sale_crm/__openerp__.py
index 8d83aded5f7..87f2cb774b1 100644
--- a/addons/sale_crm/__openerp__.py
+++ b/addons/sale_crm/__openerp__.py
@@ -42,6 +42,7 @@ crm modules.
'board_sale_crm_view.xml',
'process/sale_crm_process.xml',
'security/sale_crm_security.xml',
+ 'security/ir.model.access.csv'
],
'demo_xml': [],
'test': ['test/sale_crm.yml'],
@@ -49,4 +50,4 @@ crm modules.
'active': False,
'certificate': '0064360130141',
}
-# 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/sale_crm/board_sale_crm_view.xml b/addons/sale_crm/board_sale_crm_view.xml
index 83fa1ea583a..7d56779a613 100644
--- a/addons/sale_crm/board_sale_crm_view.xml
+++ b/addons/sale_crm/board_sale_crm_view.xml
@@ -16,7 +16,7 @@
account.invoice.report
tree
-
+
@@ -28,7 +28,7 @@
account.invoice.report
graph
-
+
@@ -51,17 +51,17 @@
form
-
+
-
+
-
+
board.crm.form.inherit.child2
board.board
@@ -70,36 +70,36 @@
-
+
-
+
board.crm.form.inherit.replace1
board.board
form
-
+
My Sales Pipeline
-
+
board.crm.form.inherit.replace2
board.board
form
-
- Revenue by stage
+
+ Opportunities by Stage
-
+
\ No newline at end of file
diff --git a/addons/sale_crm/i18n/ru.po b/addons/sale_crm/i18n/ru.po
index f7882eacc5b..6585d3294e4 100644
--- a/addons/sale_crm/i18n/ru.po
+++ b/addons/sale_crm/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-29 18:56+0000\n"
+"PO-Revision-Date: 2010-09-30 06:39+0000\n"
"Last-Translator: Chertykov Denis \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-09-30 04:39+0000\n"
+"X-Launchpad-Export-Date: 2010-10-01 08:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale_crm
diff --git a/addons/sale_crm/process/sale_crm_process.xml b/addons/sale_crm/process/sale_crm_process.xml
index 44f78fcdd55..721508a2ba5 100644
--- a/addons/sale_crm/process/sale_crm_process.xml
+++ b/addons/sale_crm/process/sale_crm_process.xml
@@ -39,7 +39,6 @@
-
@@ -49,7 +48,6 @@
-
@@ -58,7 +56,6 @@
-
@@ -67,7 +64,6 @@
-
diff --git a/addons/sale_crm/sale_crm_view.xml b/addons/sale_crm/sale_crm_view.xml
index 391d4141969..bac0051e0d1 100644
--- a/addons/sale_crm/sale_crm_view.xml
+++ b/addons/sale_crm/sale_crm_view.xml
@@ -1,47 +1,47 @@
-
+
-
- CRM - Opportunities - Quote Inherit
- crm.lead
- form
-
-
-
-
-
-
-
+
+ CRM - Opportunities - Quote Inherit
+ crm.lead
+ form
+
+
+
+
+
+
+
-
- sale.order.inherit
- sale.order
- form
-
-
-
-
-
-
-
+
+ sale.order.inherit
+ sale.order
+ form
+
+
+
+
+
+
+
-
- sale.order.list.select
- sale.order
- search
-
-
-
-
-
-
-
-
-
+
+ sale.order.list.select
+ sale.order
+ search
+
+
+
+
+
+
+
+
+
-
-
\ No newline at end of file
+
+
diff --git a/addons/sale_crm/security/ir.model.access.csv b/addons/sale_crm/security/ir.model.access.csv
new file mode 100644
index 00000000000..a1bd4896f5f
--- /dev/null
+++ b/addons/sale_crm/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_account_invoice_report_salesman","account.invoice.report salesman","account.model_account_invoice_report","base.group_sale_salesman",1,0,0,0
diff --git a/addons/sale_crm/test/sale_crm.yml b/addons/sale_crm/test/sale_crm.yml
index 86095929691..cc75b9e415c 100644
--- a/addons/sale_crm/test/sale_crm.yml
+++ b/addons/sale_crm/test/sale_crm.yml
@@ -23,14 +23,6 @@
-
!record {model: crm.make.sale, id: crm_make_sale_0}:
partner_id: base.res_partner_4
- sale_order_line:
- - name: '[KEYA] Keyboard - AZERTY'
- price_unit: 7.0
- product_uom: product.product_uom_unit
- product_uom_qty: 50.0
- delay: 7.0
- product_id: product.product_product_24
- type: make_to_stock
shop_id: sale.shop
-
Then I click on the 'Ok' button of wizard
@@ -47,4 +39,4 @@
-
!python {model: crm.lead}: |
crm = self.browse(cr, uid, ref("crm_lead_opportunity0"))
- assert (crm.ref),("sale order has not been created")
\ No newline at end of file
+ assert (crm.ref),("sale order has not been created")
diff --git a/addons/sale_crm/wizard/crm_make_sale.py b/addons/sale_crm/wizard/crm_make_sale.py
index ca6c8cb64c8..1112ebd73b6 100644
--- a/addons/sale_crm/wizard/crm_make_sale.py
+++ b/addons/sale_crm/wizard/crm_make_sale.py
@@ -21,7 +21,6 @@
from osv import fields, osv
from tools.translate import _
-import decimal_precision as dp
import time
@@ -54,10 +53,6 @@ class crm_make_sale(osv.osv_memory):
def view_init(self, cr, uid, fields_list, context=None):
if context is None:
context = {}
- if context.get('active_ids', False) and context['active_ids']:
- for line in self.pool.get('crm.lead').browse(cr, uid, context['active_ids']):
- if not line.section_id:
- raise osv.except_osv(_('Warning !'), _(' Sales Team is not specified.'))
return super(crm_make_sale, self).view_init(cr, uid, fields_list, context=context)
def makeOrder(self, cr, uid, ids, context=None):
@@ -76,7 +71,6 @@ class crm_make_sale(osv.osv_memory):
case_obj = self.pool.get('crm.lead')
sale_obj = self.pool.get('sale.order')
partner_obj = self.pool.get('res.partner')
- sale_line_obj = self.pool.get('sale.order.line')
data = context and context.get('active_ids', []) or []
@@ -115,31 +109,12 @@ class crm_make_sale(osv.osv_memory):
if partner.id:
vals['user_id'] = partner.user_id and partner.user_id.id or uid
- if make.analytic_account.id:
- vals['project_id'] = make.analytic_account.id
new_id = sale_obj.create(cr, uid, vals)
- for line in make.sale_order_line:
- value = {
- 'order_id': new_id,
- 'name': line.name,
- 'delay': line.delay,
- 'product_id': line.product_id and line.product_id.id or False,
- 'price_unit': line.price_unit,
- 'tax_id': line.tax_id and [(6, 0, map(lambda x: x.id, line.tax_id))] or False,
- 'type': line.type,
- 'product_uom_qty': line.product_uom_qty,
- 'product_uom': line.product_uom.id,
- 'product_uos_qty': line.product_uos_qty,
- 'product_uos': line.product_uos and line.product_uos.id or False,
- 'product_packaging': line.product_packaging and line.product_packaging.id or False,
- 'discount': line.discount,
- 'notes': line.notes
- }
- sale_line_obj.create(cr, uid, value, context=context)
case_obj.write(cr, uid, [case.id], {'ref': 'sale.order,%s' % new_id})
new_ids.append(new_id)
- message = _('Opportunity ') + " '" + case.name + "' "+ _("is converted to Sales Quotation.")
+ message = _('Opportunity ') + " '" + case.name + "' "+ _("is converted to Quotation.")
self.log(cr, uid, case.id, message)
+ case_obj._history(cr, uid, [case], _("Converted to Sales Quotation(id: %s).") % (new_id))
if make.close:
case_obj.case_close(cr, uid, data)
@@ -178,58 +153,12 @@ class crm_make_sale(osv.osv_memory):
_columns = {
'shop_id': fields.many2one('sale.shop', 'Shop', required=True),
'partner_id': fields.many2one('res.partner', 'Customer', required=True),
- 'sale_order_line': fields.one2many('sale.order.make.line', 'opportunity_order_id', 'Product Line'),
- 'analytic_account': fields.many2one('account.analytic.account', 'Analytic Account'),
- 'close': fields.boolean('Close Case', help='Check this to close the case after having created the sale order.'),
+ 'close': fields.boolean('Close Opportunity', help='Check this to close the opportunity after having created the sale order.'),
}
_defaults = {
'shop_id': _get_shop_id,
+ 'close': lambda *args: 1,
'partner_id': _selectPartner,
}
crm_make_sale()
-
-class sale_order_make_line(osv.osv_memory):
-
- def product_id_change(self, cr, uid, ids, product, qty=0,
- uom=False, qty_uos=0, uos=False, name='', partner_id=False,
- lang=False, update_tax=True, packaging=False, flag=False):
- if not partner_id:
- raise osv.except_osv(_('No Customer Defined !'), _('You have to select a customer in the sale form !\nPlease set one customer before choosing a product.'))
- date_order = time.strftime('%Y-%m-%d')
- part = self.pool.get('res.partner').browse(cr, uid, partner_id)
- pricelist = part.property_product_pricelist and part.property_product_pricelist.id or False
- fiscal_position = part.property_account_position and part.property_account_position.id or False
- return self.pool.get('sale.order.line').product_id_change(cr, uid, ids, pricelist, product, qty, uom, qty_uos, uos, name, partner_id, lang, update_tax, date_order, packaging, fiscal_position, flag)
-
- _name = 'sale.order.make.line'
- _description = 'Opportunity Sale Order Line'
- _columns = {
- 'opportunity_order_id': fields.many2one('crm.make.sale', 'Order Reference', required=True, ondelete='cascade', select=True, readonly=True,),
- 'name': fields.char('Description', size=256, required=True, select=True,),
- 'delay': fields.float('Delivery Lead Time', required=True, help="Number of days between the order confirmation the the shipping of the products to the customer"),
- 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True),
- 'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Sale Price')),
- 'tax_id': fields.many2many('account.tax', 'sale_order_tax', 'order_line_id', 'tax_id', 'Taxes'),
- 'type': fields.selection([('make_to_stock', 'from stock'), ('make_to_order', 'on order')], 'Procurement Method', required=True),
- 'product_uom_qty': fields.float('Quantity (UoM)', digits=(16, 2), required=True,),
- 'product_uom': fields.many2one('product.uom', 'Unit of Measure ', required=True,),
- 'product_uos_qty': fields.float('Quantity (UoS)'),
- 'product_uos': fields.many2one('product.uom', 'Product UoS'),
- 'product_packaging': fields.many2one('product.packaging', 'Packaging'),
- 'discount': fields.float('Discount (%)', digits=(16, 2)),
- 'notes': fields.text('Notes'),
- }
- _order = 'sequence, id'
- _defaults = {
- 'discount': 0.0,
- 'delay': 0.0,
- 'product_uom_qty': 1,
- 'product_uos_qty': 1,
- 'type': 'make_to_stock',
- 'product_packaging': False
- }
-
-sale_order_make_line()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale_crm/wizard/crm_make_sale_view.xml b/addons/sale_crm/wizard/crm_make_sale_view.xml
index c6b589145c7..d73a2cee1ef 100644
--- a/addons/sale_crm/wizard/crm_make_sale_view.xml
+++ b/addons/sale_crm/wizard/crm_make_sale_view.xml
@@ -8,63 +8,18 @@
crm.make.sale
form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
diff --git a/addons/sale_journal/report/picking_journal_report.py b/addons/sale_journal/report/picking_journal_report.py
index 0b447f45cce..74c00367838 100644
--- a/addons/sale_journal/report/picking_journal_report.py
+++ b/addons/sale_journal/report/picking_journal_report.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,12 +15,14 @@
# 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 .
#
##############################################################################
from osv import fields, osv
import tools
+from decimal_precision import decimal_precision as dp
+
class sale_journal_picking_report(osv.osv):
"""
@@ -30,32 +32,32 @@ class sale_journal_picking_report(osv.osv):
_description = "Picking lists"
_auto = False
_columns = {
- 'name': 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),
+ 'name': 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),
'invoice_state':fields.selection([
- ("invoiced", "invoiced"),
- ("2binvoiced", "to be invoiced"),
+ ("invoiced", "invoiced"),
+ ("2binvoiced", "to be invoiced"),
("none", "None")
- ], "Invoice state", readonly=True),
+ ], "Invoice state", readonly=True),
'state': fields.selection([
- ('draft', 'draft'),
- ('auto', 'waiting'),
- ('confirmed', 'confirmed'),
- ('assigned', 'assigned'),
- ('done', 'done'),
- ('cancel', 'cancel'),
- ], 'State', readonly=True),
- 'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoicing method', readonly=True),
- 'journal_id': fields.many2one('sale_journal.picking.journal', 'Journal', readonly=True),
- 'quantity': fields.float('Quantities', readonly=True),
- 'price_total': fields.float('Total Price', readonly=True),
- 'price_average': fields.float('Average Price', readonly=True),
- 'count': fields.integer('# of Lines', readonly=True),
+ ('draft', 'draft'),
+ ('auto', 'waiting'),
+ ('confirmed', 'confirmed'),
+ ('assigned', 'assigned'),
+ ('done', 'done'),
+ ('cancel', 'cancel'),
+ ], 'State', readonly=True),
+ 'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoicing method', readonly=True),
+ 'journal_id': fields.many2one('sale_journal.picking.journal', 'Journal', readonly=True),
+ 'quantity': fields.float('Quantities', readonly=True),
+ 'price_total': fields.float('Total Price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
+ 'price_average': fields.float('Average Price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
+ 'count': fields.integer('# of Lines', readonly=True),
}
_order = 'journal_id, name desc, price_total desc'
-
+
def init(self, cr):
tools.drop_view_if_exists(cr, 'sale_journal_picking_report')
@@ -80,7 +82,7 @@ class sale_journal_picking_report(osv.osv):
order by s.invoice_type_id, s.invoice_state, s.state
)
""")
-
+
sale_journal_picking_report()
-# 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/sale_journal/sale_journal_view.xml b/addons/sale_journal/sale_journal_view.xml
index 8a8eb0d2c1e..029908da37a 100644
--- a/addons/sale_journal/sale_journal_view.xml
+++ b/addons/sale_journal/sale_journal_view.xml
@@ -1,9 +1,9 @@
+ groups="base.group_sale_salesman,base.group_system,base.group_sale_manager"/>
+ parent="base.menu_base_config" sequence="5" groups="base.group_sale_salesman"/>
@@ -213,38 +213,6 @@
-
-
-
- stock.picking.journal.view.form
- form
- stock.picking
-
-
-
-
-
-
-
-
-
-
-
-
-
- stock.picking.journal.view.tree
- tree
- stock.picking
-
-
-
-
-
-
-
-
-
-
stock.picking.journal.view.form
form
@@ -487,18 +455,6 @@
-
- stock.picking.journal.search
- stock.picking
- search
-
-
-
-
-
-
-
-
stock.picking.journal.search
stock.picking
diff --git a/addons/sale_journal/test/picking_journal.yml b/addons/sale_journal/test/picking_journal.yml
index af4ee8ec8a0..9412c3d40d1 100644
--- a/addons/sale_journal/test/picking_journal.yml
+++ b/addons/sale_journal/test/picking_journal.yml
@@ -20,7 +20,7 @@
move_lines:
- company_id: base.main_company
date_expected: '2010-08-04 14:09:38'
- date_planned: '2010-08-04 14:09:38'
+ date: '2010-08-04 14:09:38'
location_id: stock.stock_location_stock
product_id: product.product_product_24
product_qty: 50.0
@@ -84,4 +84,4 @@
-
!python {model: sale_journal.picking.journal}: |
pick_jour = self.browse(cr, uid, ref("sale_journal_picking_journal_pickjournal0"))
- assert (pick_jour.state == 'close'), "Journal is not in the open state"
\ No newline at end of file
+ assert (pick_jour.state == 'close'), "Journal is not in the open state"
diff --git a/addons/sale_layout/report/report_sale_layout.py b/addons/sale_layout/report/report_sale_layout.py
index 20ad66313a2..3e61a6cd3e9 100755
--- a/addons/sale_layout/report/report_sale_layout.py
+++ b/addons/sale_layout/report/report_sale_layout.py
@@ -1,5 +1,5 @@
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL ().
#
@@ -14,21 +14,22 @@
# 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 time
-import pooler
from report import report_sxw
rml_parents = {
- 'tr':1,
- 'li':1,
+ 'tr': 1,
+ 'li': 1,
'story': 0,
'section': 0
}
+
+
class sale_order_1(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(sale_order_1, self).__init__(cr, uid, name, context)
@@ -39,98 +40,94 @@ class sale_order_1(report_sxw.rml_parse):
})
self.context = context
-#
+ def sale_order_lines(self, sale_order):
+ result = []
+ sub_total = {}
+ info = []
+ order_lines = []
+ res = {}
- def sale_order_lines(self,sale_order):
- result =[]
- sub_total={}
- info=[]
- order_lines=[]
- res={}
- list_in_seq=[]
ids = self.pool.get('sale.order.line').search(self.cr, self.uid, [('order_id', '=', sale_order.id)])
- for id in range(0,len(ids)):
- order = self.pool.get('sale.order.line').browse(self.cr, self.uid,ids[id], self.context.copy())
+ for id in range(0, len(ids)):
+ order = self.pool.get('sale.order.line').browse(self.cr, self.uid, ids[id], self.context.copy())
order_lines.append(order)
-
- i=1
- j=0
- sum_flag={}
- sum_flag[j]=-1
+
+ i = 1
+ j = 0
+ sum_flag = {}
+ sum_flag[j] = -1
for entry in order_lines:
- res={}
+ res = {}
- if entry.layout_type=='article':
- res['tax_id']=', '.join(map(lambda x: x.name, entry.tax_id)) or ''
- res['name']=entry.name
- res['product_uom_qty']="%.2f"%(entry.product_uos and entry.product_uos_qty or entry.product_uom_qty or 0.00)
- res['product_uom']=entry.product_uos and entry.product_uos.name or entry.product_uom.name
- res['price_unit']="%.2f"%(entry.price_unit or 0.00)
- res['discount']="%.2f"%(entry.discount and entry.discount or 0.00)
- res['price_subtotal']="%.2f"%(entry.price_subtotal and entry.price_subtotal or 0.00)
- sub_total[i]= entry.price_subtotal and entry.price_subtotal
- i=i+1
- res['note']=entry.notes or ''
- res['currency']=sale_order.pricelist_id.currency_id.name
- res['layout_type']=entry.layout_type
-
+ if entry.layout_type == 'article':
+ res['tax_id'] = ', '.join(map(lambda x: x.name, entry.tax_id)) or ''
+ res['name'] = entry.name
+ res['product_uom_qty'] = entry.product_uos and entry.product_uos_qty or entry.product_uom_qty or 0.00
+ res['product_uom'] = entry.product_uos and entry.product_uos.name or entry.product_uom.name
+ res['price_unit'] = entry.price_unit or 0.00
+ res['discount'] = entry.discount and entry.discount or 0.00
+ res['price_subtotal'] = entry.price_subtotal and entry.price_subtotal or 0.00
+ sub_total[i] = entry.price_subtotal and entry.price_subtotal
+ i = i + 1
+ res['note'] = entry.notes or ''
+ res['currency'] = sale_order.pricelist_id.currency_id.name
+ res['layout_type'] = entry.layout_type
else:
+ res['product_uom_qty'] = ''
+ res['price_unit'] = ''
+ res['discount'] = ''
+ res['tax_id'] = ''
+ res['layout_type'] = entry.layout_type
+ res['note'] = entry.notes or ''
+ res['product_uom'] = ''
- res['product_uom_qty']=''
- res['price_unit']=''
- res['discount']=''
- res['tax_id']=''
- res['layout_type']=entry.layout_type
- res['note']=entry.notes or ''
- res['product_uom']=''
-
- if entry.layout_type=='subtotal':
- res['name']=entry.name
- sum=0
- sum_id=0
- if sum_flag[j]==-1:
- temp=1
+ if entry.layout_type == 'subtotal':
+ res['name'] = entry.name
+ sum = 0
+ sum_id = 0
+ if sum_flag[j] == -1:
+ temp = 1
else:
- temp=sum_flag[j]
+ temp = sum_flag[j]
- for sum_id in range(temp,len(sub_total)+1):
- sum+=sub_total[sum_id]
- sum_flag[j+1]= sum_id +1
+ for sum_id in range(temp, len(sub_total)+1):
+ sum += sub_total[sum_id]
+ sum_flag[j+1] = sum_id +1
- j=j+1
- res['price_subtotal']="%.2f"%(sum)
- res['currency']=sale_order.pricelist_id.currency_id.name
- res['quantity']=''
- res['price_unit']=''
- res['discount']=''
- res['tax_id']=''
- res['product_uom']=''
- elif entry.layout_type=='title':
- res['name']=entry.name
- res['price_subtotal']=''
- res['currency']=''
- elif entry.layout_type=='text':
- res['name']=entry.name
- res['price_subtotal']=''
- res['currency']=''
- elif entry.layout_type=='line':
- res['product_uom_qty']='__________'
- res['price_unit']='______________'
- res['discount']='___________'
- res['tax_id']='_________________'
- res['product_uom']='_____'
- res['name']='_______________________________________'
- res['price_subtotal']='_________'
- res['currency']='_______'
- elif entry.layout_type=='break':
- res['layout_type']=entry.layout_type
- res['name']=entry.name
- res['price_subtotal']=''
- res['currency']=''
+ j = j + 1
+ res['price_subtotal'] = sum
+ res['currency'] = sale_order.pricelist_id.currency_id.name
+ res['quantity'] = ''
+ res['price_unit'] = ''
+ res['discount'] = ''
+ res['tax_id'] = ''
+ res['product_uom'] = ''
+ elif entry.layout_type == 'title':
+ res['name'] = entry.name
+ res['price_subtotal'] = ''
+ res['currency'] = ''
+ elif entry.layout_type == 'text':
+ res['name'] = entry.name
+ res['price_subtotal'] = ''
+ res['currency'] = ''
+ elif entry.layout_type == 'line':
+ res['product_uom_qty'] = '__________'
+ res['price_unit'] = '______________'
+ res['discount'] = '___________'
+ res['tax_id'] = '_________________'
+ res['product_uom'] = '_____'
+ res['name'] = '_______________________________________'
+ res['price_subtotal'] = '_________'
+ res['currency'] = '_______'
+ elif entry.layout_type == 'break':
+ res['layout_type'] = entry.layout_type
+ res['name'] = entry.name
+ res['price_subtotal'] = ''
+ res['currency'] = ''
else:
- res['name']=entry.name
- res['price_subtotal']=''
- res['currency']=sale_order.pricelist_id.currency_id.name
+ res['name'] = entry.name
+ res['price_subtotal'] = ''
+ res['currency'] = sale_order.pricelist_id.currency_id.name
result.append(res)
return result
diff --git a/addons/sale_layout/report/report_sale_layout.rml b/addons/sale_layout/report/report_sale_layout.rml
index d33d424a8a2..b01affd5329 100755
--- a/addons/sale_layout/report/report_sale_layout.rml
+++ b/addons/sale_layout/report/report_sale_layout.rml
@@ -318,13 +318,13 @@
[[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ a['product_uom'] ]]
- [[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]] [[ a['price_unit'] ]]
+ [[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]] [[ formatLang(a['price_unit'], digits=get_digits(dp='Sale Price')) ]]
|
- [[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ a['discount'] ]]
+ [[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['discount'], digits=get_digits(dp='Sale Price')) ]]
|
- [[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ a['price_subtotal'] ]] [[ o.pricelist_id.currency_id.symbol ]]
+ [[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['price_subtotal'], digits=get_digits(dp='Sale Price')) ]] [[ o.pricelist_id.currency_id.symbol ]]
|
@@ -397,7 +397,7 @@
Taxes :
|
- [[ formatLang(o.amount_tax ) ]] [[ o.pricelist_id.currency_id.symbol ]]
+ [[ formatLang(o.amount_tax, digits=get_digits(dp='Account') ) ]] [[ o.pricelist_id.currency_id.symbol ]]
|
diff --git a/addons/share/i18n/de.po b/addons/share/i18n/de.po
new file mode 100644
index 00000000000..44c3a464322
--- /dev/null
+++ b/addons/share/i18n/de.po
@@ -0,0 +1,227 @@
+# German translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 10:39+0000\n"
+"PO-Revision-Date: 2010-10-05 13:37+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: share
+#: view:share.create:0
+msgid "Exising Users"
+msgstr ""
+
+#. module: share
+#: view:share.create:0
+msgid "Step 1: Chose the action and the additional domain"
+msgstr ""
+
+#. module: share
+#: field:share.create,user_ids:0
+msgid "Share Users"
+msgstr ""
+
+#. module: share
+#: view:share.create:0
+msgid "Step 3: Chose Access Mode"
+msgstr ""
+
+#. module: share
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: share
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: share
+#: model:ir.module.module,shortdesc:share.module_meta_information
+msgid "Share Management"
+msgstr ""
+
+#. module: share
+#: view:share.create:0
+msgid "New Users"
+msgstr ""
+
+#. module: share
+#: model:ir.actions.act_window,name:share.action_share_wizard
+#: model:ir.ui.menu,name:share.menu_action_share_wizard
+msgid "Share Access Rules"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:0
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: share
+#: view:share.result:0
+msgid "Step 4: Share Users Detail"
+msgstr ""
+
+#. module: share
+#: view:share.create:0
+msgid "Next"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:0
+#, python-format
+msgid "Share Group is exits without sharing !"
+msgstr ""
+
+#. module: share
+#: model:ir.model,name:share.model_share_result
+msgid "share.result"
+msgstr ""
+
+#. module: share
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: share
+#: selection:share.create,user_type:0
+msgid "New"
+msgstr ""
+
+#. module: share
+#: selection:share.create,access_mode:0
+msgid "READ ONLY"
+msgstr ""
+
+#. module: share
+#: field:share.result,users:0
+msgid "Users"
+msgstr ""
+
+#. module: share
+#: view:share.result:0
+msgid "Send Email"
+msgstr ""
+
+#. module: share
+#: model:ir.model,name:share.model_res_groups
+msgid "res.groups"
+msgstr ""
+
+#. module: share
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: share
+#: selection:share.create,access_mode:0
+msgid "READ & WRITE"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:0
+#, python-format
+msgid "Step:3 Sharing Wizard"
+msgstr ""
+
+#. module: share
+#: model:ir.model,name:share.model_share_create
+msgid "Create share"
+msgstr ""
+
+#. module: share
+#: field:share.create,user_type:0
+msgid "User Type"
+msgstr ""
+
+#. module: share
+#: view:share.create:0
+msgid "Step 2: Chose the User type"
+msgstr ""
+
+#. module: share
+#: field:share.create,new_user:0
+msgid "New user"
+msgstr ""
+
+#. module: share
+#: field:share.create,action_id:0
+msgid "Action"
+msgstr ""
+
+#. module: share
+#: field:share.create,domain:0
+msgid "Domain"
+msgstr ""
+
+#. module: share
+#: field:share.create,access_mode:0
+msgid "Access Mode"
+msgstr ""
+
+#. module: share
+#: field:res.groups,share:0
+#: field:res.users,share:0
+#: view:share.create:0
+#: view:share.result:0
+msgid "Share"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:0
+#, python-format
+msgid "Step:2 Sharing Wizard"
+msgstr ""
+
+#. module: share
+#: selection:share.create,user_type:0
+msgid "Existing"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:0
+#, python-format
+msgid "Step:4 Share Users Detail"
+msgstr ""
+
+#. module: share
+#: model:ir.module.module,description:share.module_meta_information
+msgid ""
+"The goal is to implement a generic sharing mechanism, where user of OpenERP\n"
+"can share data from OpenERP to their colleagues, customers, or friends.\n"
+"The system will work by creating new users and groups on the fly, and by\n"
+"combining the appropriate access rights and ir.rules to ensure that the "
+"/shared\n"
+"users/ will only have access to the correct data.\n"
+" "
+msgstr ""
+
+#. module: share
+#: view:share.create:0
+#: view:share.result:0
+msgid "Cancel"
+msgstr ""
+
+#. module: share
+#: model:ir.model,name:share.model_res_users
+msgid "res.users"
+msgstr ""
+
+#. module: share
+#: field:share.create,read_access:0
+#: field:share.create,write_access:0
+msgid "Write Access"
+msgstr ""
diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py
index 432f95242bd..79d6c860e65 100644
--- a/addons/stock/__openerp__.py
+++ b/addons/stock/__openerp__.py
@@ -45,11 +45,12 @@ Thanks to the double entry management, the inventory controlling is powerful and
"init_xml" : [],
"demo_xml" : ["stock_demo.xml"],
"update_xml" : [
+ "security/stock_security.xml",
+ "security/ir.model.access.csv",
"stock_data.xml",
"wizard/stock_move_view.xml",
"wizard/stock_partial_picking_view.xml",
"wizard/stock_partial_move_view.xml",
- "wizard/stock_inventory_set_stock_zero_view.xml",
"wizard/stock_fill_inventory_view.xml",
"wizard/stock_invoice_onshipping_view.xml",
"wizard/stock_inventory_merge_view.xml",
@@ -68,10 +69,7 @@ Thanks to the double entry management, the inventory controlling is powerful and
"product_view.xml",
"partner_view.xml",
"report/report_stock_move_view.xml",
- "report/report_stock_picking_view.xml",
"report/report_stock_view.xml",
- "security/stock_security.xml",
- "security/ir.model.access.csv",
"board_warehouse_view.xml"
],
'test': ['test/stock_test.yml',
diff --git a/addons/stock/board_warehouse_view.xml b/addons/stock/board_warehouse_view.xml
index 5704df7685b..84a24f3d0b2 100644
--- a/addons/stock/board_warehouse_view.xml
+++ b/addons/stock/board_warehouse_view.xml
@@ -5,30 +5,56 @@
Warehouse
-
- Reception Picking Stock Move
+
+
+ Incoming Product
stock.move
ir.actions.act_window
form
tree,form
- [('picking_id','!=',False),('picking_id.type','=','in'),('date','<=',time.strftime('%Y-%m-%d 23:59:59'))]
-
+ ['|','&',('picking_id','=',False),('location_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','in')]
+
-
+
+
+ Outgoing Product
+ stock.move
+ ir.actions.act_window
+ form
+ tree,form
+ ['|','&',('picking_id','=',False),('location_dest_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','out')]
+
+
+
+
+ report.stock.move
+ form
+ graph,tree
+
+ {'search_default_month-1':1,'search_default_in':1,'group_by':['day'], 'group_by_no_leaf':1}
+
+
+ report.stock.move
+ form
+ graph,tree
+
+ {'search_default_month-1':1,'search_default_out':1,'group_by':['day'], 'group_by_no_leaf':1}
+
board.warehouse.form
board.board
form
-
+
-
+
+
-
-
+
+
@@ -43,9 +69,9 @@
-
-
-
+
+
+
diff --git a/addons/stock/product.py b/addons/stock/product.py
index 790b50c45b3..e1d4c71b46c 100644
--- a/addons/stock/product.py
+++ b/addons/stock/product.py
@@ -21,6 +21,7 @@
from osv import fields, osv
from tools.translate import _
+import decimal_precision as dp
class product_product(osv.osv):
_inherit = "product.product"
@@ -228,16 +229,25 @@ class product_product(osv.osv):
results = []
results2 = []
- from_date=context.get('from_date',False)
- to_date=context.get('to_date',False)
- date_str=False
+ from_date = context.get('from_date',False)
+ to_date = context.get('to_date',False)
+ date_str = False
+ date_values = False
+ where = [tuple(location_ids),tuple(location_ids),tuple(ids),tuple(states)]
if from_date and to_date:
- date_str="date_planned>='%s' and date_planned<='%s'"%(from_date,to_date)
+ date_str = "date>=%s and date<=%s"
+ where.append(tuple([from_date]))
+ where.append(tuple([to_date]))
elif from_date:
- date_str="date_planned>='%s'"%(from_date)
+ date_str = "date>=%s"
+ date_values = [from_date]
elif to_date:
- date_str="date_planned<='%s'"%(to_date)
+ date_str = "date<=%s"
+ date_values = [to_date]
+
+ if date_values:
+ where.append(tuple(date_values))
if 'in' in what:
# all moves from a location out of the set to a location in the set
cr.execute(
@@ -247,8 +257,7 @@ class product_product(osv.osv):
'and location_dest_id IN %s'\
'and product_id IN %s'\
'and state IN %s' + (date_str and 'and '+date_str+' ' or '') +''\
- 'group by product_id,product_uom',(tuple(location_ids),tuple(location_ids),tuple(ids),tuple(states),)
- )
+ 'group by product_id,product_uom',tuple(where))
results = cr.fetchall()
if 'out' in what:
# all moves from a location in the set to a location out of the set
@@ -259,8 +268,7 @@ class product_product(osv.osv):
'and location_dest_id NOT IN %s '\
'and product_id IN %s'\
'and state in %s' + (date_str and 'and '+date_str+' ' or '') + ''\
- 'group by product_id,product_uom',(tuple(location_ids),tuple(location_ids),tuple(ids),tuple(states),)
- )
+ 'group by product_id,product_uom',tuple(where))
results2 = cr.fetchall()
uom_obj = self.pool.get('product.uom')
uoms = map(lambda x: x[2], results) + map(lambda x: x[2], results2)
@@ -309,16 +317,19 @@ class product_product(osv.osv):
return res
_columns = {
- 'qty_available': fields.function(_product_available, method=True, type='float', string='Real Stock', help="Current quantities of products in selected locations or all internal if none have been selected.", multi='qty_available'),
- 'virtual_available': fields.function(_product_available, method=True, type='float', string='Virtual Stock', help="Future stock for this product according to the selected locations or all internal if none have been selected. Computed as: Real Stock - Outgoing + Incoming.", multi='qty_available'),
- 'incoming_qty': fields.function(_product_available, method=True, type='float', string='Incoming', help="Quantities of products that are planned to arrive in selected locations or all internal if none have been selected.", multi='qty_available'),
- 'outgoing_qty': fields.function(_product_available, method=True, type='float', string='Outgoing', help="Quantities of products that are planned to leave in selected locations or all internal if none have been selected.", multi='qty_available'),
+ 'qty_available': fields.function(_product_available, method=True, type='float', string='Real Stock', help="Current quantities of products in selected locations or all internal if none have been selected.", multi='qty_available', digits_compute=dp.get_precision('Product UoM')),
+ 'virtual_available': fields.function(_product_available, method=True, type='float', string='Virtual Stock', help="Future stock for this product according to the selected locations or all internal if none have been selected. Computed as: Real Stock - Outgoing + Incoming.", multi='qty_available', digits_compute=dp.get_precision('Product UoM')),
+ 'incoming_qty': fields.function(_product_available, method=True, type='float', string='Incoming', help="Quantities of products that are planned to arrive in selected locations or all internal if none have been selected.", multi='qty_available', digits_compute=dp.get_precision('Product UoM')),
+ 'outgoing_qty': fields.function(_product_available, method=True, type='float', string='Outgoing', help="Quantities of products that are planned to leave in selected locations or all internal if none have been selected.", multi='qty_available', digits_compute=dp.get_precision('Product UoM')),
'track_production': fields.boolean('Track Manufacturing Lots' , help="Forces to specify a Production Lot for all moves containing this product and generated by a Manufacturing Order"),
'track_incoming': fields.boolean('Track Incoming Lots', help="Forces to specify a Production Lot for all moves containing this product and coming from a Supplier Location"),
'track_outgoing': fields.boolean('Track Outgoing Lots', help="Forces to specify a Production Lot for all moves containing this product and going to a Customer Location"),
'location_id': fields.dummy(string='Stock 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),
+ 'valuation':fields.selection([('manual_periodic', 'Periodical (manual)'),
+ ('real_time','Real Time (automated)'),], 'Inventory Valuation',
+ help="If real-time valuation is enabled for a product, the system will automatically write journal entries corresponding to stock moves." \
+ "The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products."
+ , required=True),
}
_defaults = {
@@ -404,11 +415,11 @@ class product_template(osv.osv):
'property_stock_account_input': fields.property('account.account',
type='many2one', relation='account.account',
string='Stock Input Account', method=True, view_load=True,
- help='This account will be used, instead of the default one, to value input stock'),
+ help='When doing real-time inventory valuation, counterpart Journal Items for all incoming stock moves will be posted in this account. If not set on the product, the one from the product category is used.'),
'property_stock_account_output': fields.property('account.account',
type='many2one', relation='account.account',
string='Stock Output Account', method=True, view_load=True,
- help='This account will be used, instead of the default one, to value output stock'),
+ help='When doing real-time inventory valuation, counterpart Journal Items for all outgoing stock moves will be posted in this account. If not set on the product, the one from the product category is used.'),
}
product_template()
@@ -420,23 +431,23 @@ class product_category(osv.osv):
'property_stock_journal': fields.property('account.journal',
relation='account.journal', type='many2one',
string='Stock journal', method=True, view_load=True,
- help="This journal will be used for the accounting move generated by stock move"),
+ help="When doing real-time inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed."),
'property_stock_account_input_categ': fields.property('account.account',
type='many2one', relation='account.account',
string='Stock Input Account', method=True, view_load=True,
- help='This account will be used to value the input stock'),
+ help='When doing real-time inventory valuation, counterpart Journal Items for all incoming stock moves will be posted in this account. This is the default value for all products in this category, it can also directly be set on each product.'),
'property_stock_account_output_categ': fields.property('account.account',
type='many2one', relation='account.account',
string='Stock Output Account', method=True, view_load=True,
- help='This account will be used to value the output stock'),
+ help='When doing real-time inventory valuation, counterpart Journal Items for all outgoing stock moves will be posted in this account. This is the default value for all products in this category, it can also directly be set on each product.'),
'property_stock_variation': fields.property('account.account',
type='many2one',
relation='account.account',
string="Stock Variation Account",
method=True, view_load=True,
- help="This account will be used in product when valuation type is real-time valuation ",),
+ help="When real-time inventory valuation is enabled on a product, this account will hold the current value of the products.",),
}
product_category()
-# 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/stock/product_view.xml b/addons/stock/product_view.xml
index ef9b833ec32..60fab009d0e 100644
--- a/addons/stock/product_view.xml
+++ b/addons/stock/product_view.xml
@@ -61,8 +61,8 @@
-
-
+
+
@@ -75,10 +75,21 @@
26
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -121,7 +132,7 @@
-
+
diff --git a/addons/stock/report/__init__.py b/addons/stock/report/__init__.py
index 63d02ca2717..18bfe2609c2 100644
--- a/addons/stock/report/__init__.py
+++ b/addons/stock/report/__init__.py
@@ -20,12 +20,10 @@
##############################################################################
import product_stock
-import lot_location
import ups
import picking
import lot_overview_all
import report_stock
-import report_stock_picking
import report_stock_move
import stock_inventory_move_report
import lot_overview
diff --git a/addons/stock/report/lot_location.py b/addons/stock/report/lot_location.py
deleted file mode 100644
index c1b1ae9fe05..00000000000
--- a/addons/stock/report/lot_location.py
+++ /dev/null
@@ -1,50 +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 pooler
-import time
-from report import report_sxw
-
-class lot_location(report_sxw.rml_parse):
- def __init__(self, cr, uid, name, context):
- super(lot_location, self).__init__(cr, uid, name, context=context)
- self.grand_total = 0.0
-
- self.localcontext.update({
- 'time': time,
- 'process':self.process,
- 'qty_total':self._qty_total,
- })
-
- def process(self,location_id):
- location_obj = pooler.get_pool(self.cr.dbname).get('stock.location')
- data = location_obj._product_get_report(self.cr,self.uid, [location_id])
- data['location_name'] = location_obj.read(self.cr, self.uid, [location_id],['name'])[0]['name']
- self.grand_total += data['total']
- return [data]
-
- def _qty_total(self):
- return str( self.grand_total)
-
-report_sxw.report_sxw('report.lot.location', 'stock.location', 'addons/stock/report/lot_location.rml', parser=lot_location)
-
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/stock/report/lot_location.rml b/addons/stock/report/lot_location.rml
deleted file mode 100644
index ecbe9fec9fa..00000000000
--- a/addons/stock/report/lot_location.rml
+++ /dev/null
@@ -1,208 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'o') ]]
-
- [[ repeatIn(process(o.id),'ob') ]]
-
-
- |
- [[ (not ob['product']) and removeParentNode('blockTable') ]] Location
- |
-
- Product
- |
-
- Quantity
- |
-
-
-
-
- |
-
-
-
-
-
-
-
- |
- [[ (not ob['product']) and removeParentNode('blockTable') ]] [[ ob['location_name'] ]]
- |
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
- |
-
-
-
- [[ repeatIn(ob['product'], 'p') ]]
-
-
- |
-
-
-
- |
-
- [[ p['prod_name'] ]]
- |
-
- [[ p['prod_qty'] ]]
- |
-
- [[ p['uom'] ]]
- |
-
-
-
-
-
-
-
-
-
-
-
- |
- [[ (not ob['product']) and removeParentNode('blockTable') ]]
- |
-
- Total :
- |
-
- [[ ob['total'] ]]
- |
-
- Units
- |
-
-
-
-
-
-
-
-
-
-
-
-
- |
- Grand Total:
- |
-
-
-
-
- |
-
- [[ qty_total() ]]
- |
-
- Units
- |
-
-
-
-
-
-
-
diff --git a/addons/stock/report/lot_overview.py b/addons/stock/report/lot_overview.py
index a96bdf38099..66230e2822c 100644
--- a/addons/stock/report/lot_overview.py
+++ b/addons/stock/report/lot_overview.py
@@ -37,7 +37,8 @@ class lot_overview(report_sxw.rml_parse):
def process(self,location_id):
location_obj = pooler.get_pool(self.cr.dbname).get('stock.location')
data = location_obj._product_get_report(self.cr,self.uid, [location_id])
- data['location_name'] = location_obj.read(self.cr, self.uid, [location_id],['name'])[0]['name']
+
+ data['location_name'] = location_obj.read(self.cr, self.uid, [location_id],['complete_name'])[0]['complete_name']
self.price_total = 0.0
self.price_total += data['total_price']
self.grand_total += data['total_price']
diff --git a/addons/stock/report/lot_overview.rml b/addons/stock/report/lot_overview.rml
index f4332455cf9..14f2b25eb4e 100644
--- a/addons/stock/report/lot_overview.rml
+++ b/addons/stock/report/lot_overview.rml
@@ -108,7 +108,7 @@
Unit Price
- Value([[ company.currency_id.name ]])
+ Value
|
@@ -167,10 +167,10 @@
[[formatLang( p['prod_qty']) ]] [[ p['uom'] ]]
- [[ formatLang(p['price']) ]]
+ [[ formatLang(p['price'], digits=get_digits(dp='Account')) ]]
|
- [[ formatLang(p['price_value']) ]] [[ o.company_id.currency_id.symbol]]
+ [[ formatLang(p['price_value'], digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol]]
|
@@ -184,7 +184,7 @@
Total:
- [[ formatLang(price_total()) ]] [[ o.company_id.currency_id.symbol ]]
+ [[ formatLang(price_total(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]
|
@@ -201,7 +201,7 @@
- [[ formatLang(grand_total_price()) ]] [[ o.company_id.currency_id.symbol ]]
+ [[ formatLang(grand_total_price(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]
|
@@ -209,4 +209,4 @@
-