|
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/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
@@ -111,7 +110,7 @@
-
+
diff --git a/addons/hr_timesheet/report/custom_default.xsl b/addons/hr_timesheet/report/custom_default.xsl
index 39e71d6d53e..e8b133da1b0 100644
--- a/addons/hr_timesheet/report/custom_default.xsl
+++ b/addons/hr_timesheet/report/custom_default.xsl
@@ -9,8 +9,6 @@
-
- /
1.3cm 19.3cm 28.5cm 19.3cm
@@ -23,8 +21,6 @@
-
- /
1.3cm 19.3cm 28.5cm 19.3cm
diff --git a/addons/hr_timesheet/report/user_timesheet.py b/addons/hr_timesheet/report/user_timesheet.py
index dc048748f46..93c425af995 100644
--- a/addons/hr_timesheet/report/user_timesheet.py
+++ b/addons/hr_timesheet/report/user_timesheet.py
@@ -63,7 +63,7 @@ class report_custom(report_rml):
"and product_uom_id = unit.id "\
"and line.user_id=%s and line.date >= %s and line.date < %s "
"order by line.date",
- (data['form']['user_id'], som.strftime('%Y-%m-%d'), eom.strftime('%Y-%m-%d')))
+ (uid, som.strftime('%Y-%m-%d'), eom.strftime('%Y-%m-%d')))
# Sum attendence by account, then by day
accounts = {}
@@ -97,7 +97,7 @@ class report_custom(report_rml):
account_xml.append('')
# Computing the employee
- cr.execute("select name from res_users where id=%s", (data['form']['user_id'],))
+ cr.execute("select name from res_users where id=%s", (str(uid)))
emp = cr.fetchone()[0]
# Computing the xml
diff --git a/addons/hr_timesheet/report/users_timesheet.py b/addons/hr_timesheet/report/users_timesheet.py
index 35c86fd08b9..5a52e9ce9c8 100644
--- a/addons/hr_timesheet/report/users_timesheet.py
+++ b/addons/hr_timesheet/report/users_timesheet.py
@@ -59,7 +59,7 @@ def emp_create_xml(cr, id, som, eom):
time_xml = ([xml % (day, amount) for day, amount in month.iteritems()])
# Computing the employee
- cr.execute("select name from res_users where id=%s", (id,))
+ cr.execute("select name from resource_resource where id=%s", (id,))
emp = cr.fetchone()[0]
# Computing the xml
@@ -91,9 +91,11 @@ class report_custom(report_rml):
date_xml.append('2.5cm%s,2cm\n' % (',0.7cm' * lengthmonth(som.year, som.month)))
emp_xml=''
- for id in data['form']['user_ids']:
- emp_xml += emp_create_xml(cr, id, som, eom)
-
+ emp_obj = pooler.get_pool(cr.dbname).get('hr.employee')
+ for id in data['form']['employee_ids']:
+ user = emp_obj.browse(cr, uid, id).user_id.id
+ if user:
+ emp_xml += emp_create_xml(cr, id, som, eom)
# Computing the xml
#Without this, report don't show non-ascii characters (TO CHECK)
date_xml = '\n'.join(date_xml)
diff --git a/addons/hr_timesheet/security/ir.model.access.csv b/addons/hr_timesheet/security/ir.model.access.csv
index 2b01017fb65..40ac84200ef 100644
--- a/addons/hr_timesheet/security/ir.model.access.csv
+++ b/addons/hr_timesheet/security/ir.model.access.csv
@@ -1,16 +1,8 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_hr_analytic_timesheet","hr.analytic.timesheet","model_hr_analytic_timesheet","base.group_hr_user",1,1,1,1
-"access_hr_account_analytic_line","account.account.analytic.line","account.model_account_analytic_line","base.group_hr_user",1,1,1,0
-"access_account_analytic_journal","account.account.analytic.journal","account.model_account_analytic_journal","base.group_hr_user",1,0,0,0
-"access_product_product_user","product.product user","product.model_product_product","base.group_hr_user",1,0,0,0
-"access_product_template_hr_timesheet","product.template.hr.timesheet","product.model_product_template","base.group_hr_user",1,0,0,0
-"access_product_uom_hr_timesheet","product.uom.hr.timesheet","product.model_product_uom","base.group_hr_user",1,0,0,0
-"access_hr_analytic_timesheet_manager","hr.analytic.timesheet.manager","model_hr_analytic_timesheet","base.group_hr_manager",1,1,1,1
-"access_hr_analytic_timesheet_system","hr.analytic.timesheet.system","model_hr_analytic_timesheet","base.group_system",1,0,0,0
-"access_hr_account_analytic_line_manager","account.account.analytic.line.manager","account.model_account_analytic_line","base.group_hr_manager",1,1,1,1
-"access_account_analytic_journal_manager","account.account.analytic.journal.manager","account.model_account_analytic_journal","base.group_hr_manager",1,1,1,1
-"access_product_product_manager","product.product.manager","product.model_product_product","base.group_hr_manager",1,1,1,1
-"access_product_template_hr_timesheet_manager","product.template.hr.timesheet.manager","product.model_product_template","base.group_hr_manager",1,1,1,1
-"access_product_uom_hr_timesheet_manager","product.uom.hr.timesheet.manager","product.model_product_uom","base.group_hr_manager",1,1,1,1
-"access_hr_analytic_timesheet_employee","hr.analytic.timesheet.employee","model_hr_analytic_timesheet","base.group_user",1,1,1,0
-"access_account_analytic_line_user","account.account.analytic.line.user","account.model_account_analytic_line","base.group_user",1,0,0,0
+"access_hr_account_analytic_line","account.account.analytic.line","account.model_account_analytic_line","base.group_hr_user",1,1,1,1
+"access_account_analytic_journal","account.account.analytic.journal","account.model_account_analytic_journal","base.group_hr_user",1,1,1,1
+"access_product_product_user","product.product user","product.model_product_product","base.group_hr_user",1,1,1,1
+"access_product_template_hr_timesheet","product.template.hr.timesheet","product.model_product_template","base.group_hr_user",1,1,1,1
+"access_product_uom_hr_timesheet","product.uom.hr.timesheet","product.model_product_uom","base.group_hr_user",1,1,1,1
+"access_account_fiscalyear_hr_user","account.account.fiscalyear.user","account.model_account_fiscalyear","base.group_hr_user",1,1,1,1
diff --git a/addons/hr_timesheet/test/hr_timesheet_report.yml b/addons/hr_timesheet/test/hr_timesheet_report.yml
index 2f19f75618f..b1cd445a35d 100644
--- a/addons/hr_timesheet/test/hr_timesheet_report.yml
+++ b/addons/hr_timesheet/test/hr_timesheet_report.yml
@@ -5,7 +5,7 @@
import netsvc, tools, os, time
month = time.gmtime()[1]
year = time.gmtime()[0]
- data_dict = {'model': 'ir.ui.menu', 'form': {'month': month, 'year' : year, 'user_id' : uid }}
+ data_dict = {'model': 'ir.ui.menu', 'form': {'month': month, 'year' : year, 'employee_id' : ref('hr.employee1') }}
(data, format) = netsvc.LocalService('report.hr.analytical.timesheet').create(cr, uid, [], data_dict, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'hr_timesheet-user_report.'+format), 'wb+').write(data)
@@ -17,7 +17,7 @@
import netsvc, tools, os, time
month = time.gmtime()[1]
year = time.gmtime()[0]
- data_dict = {'model': 'ir.ui.menu', 'form': {'month': month, 'year' : year, 'user_ids' : [uid] }}
+ data_dict = {'model': 'ir.ui.menu', 'form': {'month': month, 'year' : year, 'employee_ids' : [ref('hr.employee1')] }}
(data, format) = netsvc.LocalService('report.hr.analytical.timesheet_users').create(cr, uid, [], data_dict, {})
if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'hr_timesheet-users_report.'+format), 'wb+').write(data)
\ No newline at end of file
+ file(os.path.join(tools.config['test_report_directory'], 'hr_timesheet-users_report.'+format), 'wb+').write(data)
diff --git a/addons/hr_timesheet/test/test_hr_timesheet.yml b/addons/hr_timesheet/test/test_hr_timesheet.yml
index d962c627cdd..18d94edbed8 100644
--- a/addons/hr_timesheet/test/test_hr_timesheet.yml
+++ b/addons/hr_timesheet/test/test_hr_timesheet.yml
@@ -21,7 +21,6 @@
context_lang: en_US
groups_id:
- base.group_hr_user
- - base.group_hr_attendance
- base.group_user
- base.group_extended
- base.group_hr_manager
diff --git a/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py b/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py
index 4bcdb614e2f..2983166ad56 100644
--- a/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py
+++ b/addons/hr_timesheet/wizard/hr_timesheet_print_employee.py
@@ -21,6 +21,7 @@
import datetime
from osv import osv, fields
+from tools.translate import _
class analytical_timesheet_employee(osv.osv_memory):
_name = 'hr.analytical.timesheet.employee'
@@ -29,18 +30,24 @@ class analytical_timesheet_employee(osv.osv_memory):
'month': fields.selection([(x, datetime.date(2000, x, 1).strftime('%B')) for x in range(1, 13)],
'Month', required=True),
'year': fields.integer('Year', required=True),
- 'user_id': fields.many2one('res.users', 'User', required=True)
+ 'employee_id': fields.many2one('hr.employee', 'Employee', required=True)
+
}
def _get_user(self, cr, uid, context=None):
+
+ emp_obj = self.pool.get('hr.employee')
if context is None:
context = {}
- return uid
+ emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)], context=context)
+ if not emp_id:
+ raise osv.except_osv(_("Warning"), _("No employee defined for this user"))
+ return emp_id and emp_id[0] or False
_defaults = {
'month': datetime.date.today().month,
'year': datetime.date.today().year,
- 'user_id': _get_user
+ 'employee_id': _get_user
}
def print_report(self, cr, uid, ids, context=None):
@@ -59,4 +66,4 @@ class analytical_timesheet_employee(osv.osv_memory):
}
analytical_timesheet_employee()
-# 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/hr_timesheet/wizard/hr_timesheet_print_employee_view.xml b/addons/hr_timesheet/wizard/hr_timesheet_print_employee_view.xml
index 3b110b52f1d..63e493cfab7 100644
--- a/addons/hr_timesheet/wizard/hr_timesheet_print_employee_view.xml
+++ b/addons/hr_timesheet/wizard/hr_timesheet_print_employee_view.xml
@@ -8,12 +8,11 @@
hr.analytical.timesheet.employee
form
-
@@ -395,33 +395,33 @@
-
-
-
-
-
+
+
-
@@ -433,7 +433,7 @@
tree
-
+
@@ -486,7 +486,7 @@
-
+
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
-
+
@@ -26,7 +26,7 @@
tree
-
+
@@ -66,7 +66,7 @@
-
+
@@ -86,7 +86,7 @@
-
+
@@ -120,7 +120,7 @@
-
+
@@ -134,12 +134,12 @@
-
diff --git a/addons/hr_timesheet_invoice/security/ir.model.access.csv b/addons/hr_timesheet_invoice/security/ir.model.access.csv
index 2dd928fc924..c647fec62cf 100644
--- a/addons/hr_timesheet_invoice/security/ir.model.access.csv
+++ b/addons/hr_timesheet_invoice/security/ir.model.access.csv
@@ -1,20 +1,16 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_hr_timesheet_invoice_factor_hr_user","hr_timesheet_invoice.factor.hr.user","model_hr_timesheet_invoice_factor","base.group_hr_user",1,0,0,0
+"access_hr_timesheet_invoice_factor_hr_user","hr_timesheet_invoice.factor.hr.user","model_hr_timesheet_invoice_factor","base.group_hr_user",1,1,1,1
"access_hr_timesheet_invoice_factor_acc_inv","hr_timesheet_invoice.factor.account.invoice","model_hr_timesheet_invoice_factor","account.group_account_invoice",1,1,1,1
"access_report_analytic_account_close","report.analytic.account.close","model_report_analytic_account_close","account.group_account_manager",1,0,0,0
"access_report_account_analytic_line_to_invoice","report.account.analytic.line.to.invoice","model_report_account_analytic_line_to_invoice","account.group_account_manager",1,0,0,0
-"access_report_timesheet_user","report_timesheet.user","model_report_timesheet_user","base.group_hr_manager",1,0,0,0
-"access_report_timesheet_account","report_timesheet.account","model_report_timesheet_account","base.group_hr_manager",1,0,0,0
-"access_report_timesheet_account_date","report_timesheet.account.date","model_report_timesheet_account_date","base.group_hr_manager",1,0,0,0
-"access_report_timesheet_invoice","report_timesheet.invoice","model_report_timesheet_invoice","base.group_hr_manager",1,0,0,0
-"access_report_random_timesheet","report_random_timesheet","model_report_random_timesheet","base.group_hr_manager",1,0,0,0
-"access_report_random_timesheet_lines","random_timesheet_lines","model_random_timesheet_lines","base.group_hr_manager",1,0,0,0
-"access_report_analytic_account_close_system","report.analytic.account.close system","model_report_analytic_account_close","base.group_system",1,1,1,1
-"access_report_account_analytic_line_to_invoice_system","report.account.analytic.line.to.invoice system","model_report_account_analytic_line_to_invoice","base.group_system",1,1,1,1
-"access_report_timesheet_line","report.timesheet.line","model_report_timesheet_line","base.group_hr_manager",1,0,0,0
-"access_account_invoice_hr_user","account.invoice.hr.user","account.model_account_invoice","base.group_hr_user",1,1,1,0
-"access_account_fiscalyear_hr_user","account.fiscalyear.hr.user","account.model_account_fiscalyear","base.group_hr_user",1,1,1,0
-"access_account_invoice_hr_manager","account.invoice.hr.manager","account.model_account_invoice","base.group_hr_manager",1,1,1,1
-"access_hr_timesheet_invoice_factor_hr_manager","hr_timesheet_invoice.factor.hr.manager","model_hr_timesheet_invoice_factor","base.group_hr_manager",1,1,1,1
+"access_report_timesheet_user","report_timesheet.user","model_report_timesheet_user","base.group_hr_manager",1,1,1,1
+"access_report_timesheet_account","report_timesheet.account","model_report_timesheet_account","base.group_hr_manager",1,1,1,1
+"access_report_timesheet_account_date","report_timesheet.account.date","model_report_timesheet_account_date","base.group_hr_manager",1,1,1,1
+"access_report_timesheet_invoice","report_timesheet.invoice","model_report_timesheet_invoice","base.group_hr_manager",1,1,1,1
+"access_report_random_timesheet","report_random_timesheet","model_report_random_timesheet","base.group_hr_manager",1,1,1,1
+"access_report_random_timesheet_lines","random_timesheet_lines","model_random_timesheet_lines","base.group_hr_manager",1,1,1,1
+"access_report_analytic_account_close_manager","report.analytic.account.close.manager","model_report_analytic_account_close","base.group_hr_manager",1,1,1,1
+"access_report_account_analytic_line_to_invoice_manager","report.account.analytic.line.to.invoice.manager","model_report_account_analytic_line_to_invoice","base.group_hr_manager",1,1,1,1
+"access_account_invoice_hr_user","account.invoice.hr.user","account.model_account_invoice","base.group_hr_user",1,1,1,1
"access_account_invoice_tax_hr_manager","account.invoice.tax.hr.manager","account.model_account_invoice_tax","base.group_hr_manager",1,1,1,1
-"access_report_timesheet_line_employee","report.timesheet.line.employee","model_report_timesheet_line","base.group_user",1,1,1,0
+"access_report_timesheet_line_employee","report.timesheet.line.employee","model_report_timesheet_line","base.group_hr_user",1,1,1,1
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit_view.xml b/addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit_view.xml
index 87648a61642..7bdae9bee1d 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit_view.xml
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit_view.xml
@@ -8,12 +8,14 @@
form
-
+
-
-
+
+
+
+
@@ -39,4 +41,4 @@
parent="hr_timesheet.menu_hr_reporting_timesheet" groups="base.group_extended" icon="STOCK_PRINT"/>
-
\ No newline at end of file
+
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
index 1bb7765b372..475315068ae 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
@@ -35,31 +35,14 @@ class hr_timesheet_invoice_create(osv.osv_memory):
_name = 'hr.timesheet.invoice.create'
_description = 'Create invoice from timesheet'
_columns = {
- 'accounts': fields.many2many('account.analytic.account', 'invoice_id', 'account_id', 'Analytic Accounts', required=True),
'date': fields.boolean('Date', help='The real date of each work will be displayed on the invoice'),
'time': fields.boolean('Time spent', help='The time of each work done will be displayed on the invoice'),
'name': fields.boolean('Description', help='The detail of each work done will be displayed on the invoice'),
'price': fields.boolean('Cost', help='The cost of each work done will be displayed on the invoice. You probably don\'t want to check this'),
'product': fields.many2one('product.product', 'Product', help='Complete this field only if you want to force to use a specific product. Keep empty to use the real product that comes from the cost.'),
- }
-
- def _get_accounts(self, cr, uid, context=None):
- if context is None:
- context = {}
- if not len(context['active_ids']):
- return {}
- #Checking whether the analytic line is invoiced or not
- analytic_line_obj = self.pool.get('account.analytic.line').browse(cr, uid, context['active_ids'], context=context)
- for obj_acc in analytic_line_obj:
- if obj_acc.invoice_id and obj_acc.invoice_id.state !='cancel':
- raise osv.except_osv(_('Warning'),_('The analytic entry "%s" is already invoiced!')%(obj_acc.name,))
-
- cr.execute("SELECT distinct(account_id) from account_analytic_line where id IN %s",(tuple(context['active_ids']),))
- account_ids = cr.fetchall()
- return [x[0] for x in account_ids]
+ }
_defaults = {
- 'accounts': _get_accounts,
'date': lambda *args: 1,
'name': lambda *args: 1
}
@@ -82,12 +65,17 @@ class hr_timesheet_invoice_create(osv.osv_memory):
result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter')
res = mod_obj.read(cr, uid, result, ['res_id'], context=context)
data = self.read(cr, uid, ids, [], context=context)[0]
- account_ids = data['accounts']
+
+ account_ids = {}
+ for line in self.pool.get('account.analytic.line').browse(cr, uid, context['active_ids'], context=context):
+ account_ids[line.account_id.id] = True
+
+ account_ids = account_ids.keys() #data['accounts']
for account in analytic_account_obj.browse(cr, uid, account_ids, context=context):
partner = account.partner_id
if (not partner) or not (account.pricelist_id):
raise osv.except_osv(_('Analytic Account incomplete'),
- _('Please fill in the Associate Partner and Sale Pricelist fields in the Analytic Account:\n%s') % (account.name,))
+ _('Please fill in the Partner or Customer and Sale Pricelist fields in the Analytic Account:\n%s') % (account.name,))
if not partner.address:
raise osv.except_osv(_('Partner incomplete'),
@@ -190,7 +178,7 @@ class hr_timesheet_invoice_create(osv.osv_memory):
invoice_line_obj.create(cr, uid, curr_line, context=context)
cr.execute("update account_analytic_line set invoice_id=%s WHERE account_id = %s and id IN %s" ,(last_invoice, account.id, tuple(context['active_ids'])))
- invoice_obj.button_reset_taxes(cr, uid, [last_invoice], context)
+ invoice_obj.button_reset_taxes(cr, uid, [last_invoice], context)
mod_obj = self.pool.get('ir.model.data')
act_obj = self.pool.get('ir.actions.act_window')
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml
index 7b3f5ed4d6a..b45deeae8a2 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml
@@ -20,7 +20,7 @@
-
+
@@ -46,4 +46,4 @@
-
\ No newline at end of file
+
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml
index fc6d6da911e..c02215cf742 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml
@@ -10,23 +10,23 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/addons/hr_timesheet_sheet/__openerp__.py b/addons/hr_timesheet_sheet/__openerp__.py
index 1b554a6b242..7b114d46387 100644
--- a/addons/hr_timesheet_sheet/__openerp__.py
+++ b/addons/hr_timesheet_sheet/__openerp__.py
@@ -53,7 +53,6 @@ The validation can be configured in the company:
'hr_timesheet_sheet_view.xml',
'hr_timesheet_workflow.xml',
'process/hr_timesheet_sheet_process.xml',
- 'report/timesheet_report_view.xml',
'board_hr_timesheet_view.xml',
'report/hr_timesheet_report_view.xml',
'wizard/hr_timesheet_current_view.xml',
diff --git a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml b/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml
index f299cb94298..a50042c3dfb 100644
--- a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml
+++ b/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml
@@ -1,7 +1,9 @@
-
+
-
- Timesheets by Month
- ir.actions.act_window
- timesheet.report
- form
- graph,tree
- [('user_id','=',uid), ('month', '=' , time.strftime('%m')), ('year', '=', time.strftime('%Y'))]
-
-
-
Timesheets
ir.actions.act_window
@@ -28,39 +20,6 @@
-
- Employee Attendance Graph
- timesheet.report
- graph
-
-
-
-
-
-
-
-
-
-
- Employee Attendance Graph
- timesheet.report
- form
- graph
-
-
-
-
- board.hr.timesheet.form
- board.board
-
- form
-
-
-
-
-
-
-
hr.timesheet.sheet.tree.simplified.board
hr_timesheet_sheet.sheet
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
index 231aba040e7..cb034a8659d 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
@@ -20,7 +20,7 @@
-
+
@@ -34,7 +34,7 @@
-
+
@@ -67,19 +67,19 @@
-
+
-
+
-
-
+
+
@@ -115,9 +115,9 @@
-
+
-
+
@@ -129,7 +129,7 @@
-
+
@@ -270,26 +270,26 @@
-
-
-
-
@@ -303,9 +303,9 @@
-
+
-
+
@@ -322,7 +322,9 @@
-
+
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 a015ff933d2..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..54d303d116a 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_hr_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/idea/i18n/tr.po b/addons/idea/i18n/tr.po
index e1bd6fc3db3..b3cadf12a88 100644
--- a/addons/idea/i18n/tr.po
+++ b/addons/idea/i18n/tr.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-08-03 07:12+0000\n"
-"Last-Translator: Mustafa Yılmaz \n"
+"PO-Revision-Date: 2010-10-12 23:56+0000\n"
+"Last-Translator: cafer can \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-29 05:05+0000\n"
+"X-Launchpad-Export-Date: 2010-10-13 04:59+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: idea
@@ -96,7 +96,7 @@ msgstr "Taslak"
#. module: idea
#: model:ir.actions.act_window,name:idea.action_idea_vote
msgid "Idea's vote"
-msgstr "Fikrin oyu"
+msgstr ""
#. module: idea
#: model:ir.actions.act_window,name:idea.action_idea_vote_stat
@@ -193,7 +193,7 @@ msgstr "Kategoriler"
#. module: idea
#: view:idea.stat:0
msgid "stat"
-msgstr "durum"
+msgstr ""
#. module: idea
#: field:idea.idea,my_vote:0
@@ -237,7 +237,7 @@ msgstr "Oluşturulma tarihi"
#. module: idea
#: field:idea.idea,count_votes:0
msgid "Count of votes"
-msgstr "Oy sayısı"
+msgstr "Oy Sayımı"
#. module: idea
#: field:idea.vote.stat,nbr:0
@@ -354,7 +354,7 @@ msgstr "Çok Kötü"
#. module: idea
#: selection:idea.idea,state:0
msgid "Canceled"
-msgstr "İptal edilmiş"
+msgstr "İptal Edildi"
#. module: idea
#: model:ir.ui.menu,name:idea.menu_idea_vote
diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml
index f7ddb8bf504..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"/>
@@ -382,12 +383,12 @@
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 8418377065c..c68c829794b 100644
--- a/addons/idea/report/report_vote_view.xml
+++ b/addons/idea/report/report_vote_view.xml
@@ -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
index f3fb68f029e..ac649466b76 100644
--- a/addons/knowledge/i18n/hi.po
+++ b/addons/knowledge/i18n/hi.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-10-04 13:03+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-05 04:57+0000\n"
+"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: knowledge
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/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 9d055bcfb5f..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,31 +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)
- context.update({'move_line_ids': line_ids})
- 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', context=context)
- 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_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/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_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_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_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/__init__.py b/addons/marketing_campaign_mailchimp/wizard/__init__.py
deleted file mode 100755
index 713b0c1e773..00000000000
--- a/addons/marketing_campaign_mailchimp/wizard/__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 create_list
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
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/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/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/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_view.xml b/addons/mrp/mrp_view.xml
index 615b5cee009..32f3100b868 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -5,10 +5,9 @@
-
-
+
-
+
@@ -487,24 +486,9 @@
-
-
-
-
-
-
-
-
-
-
mrp.production.tree
mrp.production
@@ -545,7 +529,7 @@
mrp.production
gantt
-
+
@@ -604,8 +588,8 @@
-
-
+
+
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/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/i18n/sr.po b/addons/point_of_sale/i18n/sr.po
index 420adea0d1a..2005696db44 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-12 07:46+0000\n"
+"Last-Translator: OpenERP Administrators \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-13 04:58+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 "Neodobreni računi"
#. 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/pos.py b/addons/point_of_sale/pos.py
index 3132367d8bf..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 .
#
##############################################################################
@@ -175,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),
@@ -187,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
@@ -221,7 +220,6 @@ class pos_order(osv.osv):
default = {}
default.update({
'state': 'draft',
- 'payments': [],
'partner_id': False,
'invoice_id': False,
'account_move': False,
@@ -285,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'),
@@ -351,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
"""
@@ -552,7 +549,7 @@ class pos_order(osv.osv):
"""Create a new payment for the order"""
- 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')
@@ -625,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')
@@ -1046,6 +1043,7 @@ 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:
@@ -1265,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_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 17420b1ffe9..7453682f566 100644
--- a/addons/point_of_sale/pos_view.xml
+++ b/addons/point_of_sale/pos_view.xml
@@ -706,7 +706,7 @@
+ id="menu_point_config_product" sequence="25" groups="base.group_system,group_pos_manager"/>
Products
@@ -732,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
@@ -758,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/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/test/pos_report.yml b/addons/point_of_sale/test/pos_report.yml
index 08052356104..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
@@ -84,6 +84,13 @@
balance_end_real: 0.0
date: '2010-05-19'
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'
-
@@ -133,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)
-
@@ -152,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_return.py b/addons/point_of_sale/wizard/pos_return.py
index 4b975b820cb..99e697ea826 100644
--- a/addons/point_of_sale/wizard/pos_return.py
+++ b/addons/point_of_sale/wizard/pos_return.py
@@ -123,7 +123,7 @@ class pos_return(osv.osv_memory):
+ string="Return with Exchange" type="object"/>
"""
@@ -206,10 +206,10 @@ 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,
@@ -293,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)
@@ -370,7 +369,6 @@ class add_product(osv.osv_memory):
'location_dest_id':stock_dest_id,
'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/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/mn.po b/addons/procurement/i18n/mn.po
index 9ff3c68e11a..f6f3b4106a8 100644
--- a/addons/procurement/i18n/mn.po
+++ b/addons/procurement/i18n/mn.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 11:36+0000\n"
-"Last-Translator: ub121 \n"
+"PO-Revision-Date: 2010-10-12 14:21+0000\n"
+"Last-Translator: sugi \n"
"Language-Team: Mongolian \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-13 04:59+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: procurement
@@ -29,6 +29,9 @@ msgid ""
"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
@@ -92,7 +95,7 @@ msgstr "Шалтгаан"
#. module: procurement
#: view:procurement.order.compute:0
msgid "Compute Procurements"
-msgstr ""
+msgstr "Татан авалт тооцоолох"
#. module: procurement
#: field:procurement.order,message:0
@@ -102,7 +105,7 @@ msgstr "Сүүлийн алдаа"
#. module: procurement
#: help:mrp.property,composition:0
msgid "Not used in computations, for information purpose only."
-msgstr ""
+msgstr "Тооцоололд ашиглагдахгүй, зөвхөн мэдээллийн зорилгоор ашиглана."
#. module: procurement
#: field:stock.warehouse.orderpoint,procurement_id:0
@@ -117,7 +120,7 @@ msgstr "Тэмдэглэгээ"
#. module: procurement
#: help:procurement.order,message:0
msgid "Exception occurred while computing procurement orders."
-msgstr ""
+msgstr "Татан авалтын захиалгыг тооцоолж байх үед онцгой тохиолдол гардаг."
#. module: procurement
#: help:procurement.order,state:0
@@ -131,6 +134,13 @@ msgid ""
" It is in 'Waiting'. state when the procurement is waiting for another one "
"to finish."
msgstr ""
+"Татан авалт үүсэхэд төлөв нь 'Draft'.\n"
+"Татан авалт нь баталгаажсан бол төлөв нь 'Confirmed'.\n"
+"Баталгаажсаны дараа төлөв нь 'Running'.\n"
+"Хэрэв ямар нэгэн онцгой тохиолдол захиалгад үүсвэл төлөв нь 'Exception'.\n"
+"Онцгой тохиолдол устхад төлөв нь 'Ready'.\n"
+"Нэг татан авалт нь нөгөө татан авалтаа дуусахыг хүлээж байхад төлөв нь "
+"'Waiting' байна."
#. module: procurement
#: view:stock.warehouse.orderpoint:0
@@ -143,11 +153,14 @@ msgid ""
"When the virtual stock goes belong the Min Quantity, OpenERP generates a "
"procurement to bring the virtual stock to the Max Quantity."
msgstr ""
+"Виртуал агуулах нь хамгийн бага тоо хэмжээнд ойртож байвал, OpenERP нь "
+"виртуал агуулахыг хамгийн их тоо хэмжээнд хүргэхийн тулд татан авалтыг "
+"боловсруулдаг."
#. module: procurement
#: view:procurement.order.compute.all:0
msgid "Scheduler Parameters"
-msgstr ""
+msgstr "Төлөвлөгчийн үзүүлэлт"
#. module: procurement
#: model:ir.actions.act_window,name:procurement.procurement_action11
@@ -168,7 +181,7 @@ msgstr "Бэлэн"
#. module: procurement
#: field:procurement.order.compute.all,automatic:0
msgid "Automatic orderpoint"
-msgstr ""
+msgstr "Автомат захиалгын цэг"
#. module: procurement
#: selection:procurement.order,state:0
@@ -197,11 +210,13 @@ msgid ""
"Reference of the document that created this Procurement.\n"
"This is automatically completed by OpenERP."
msgstr ""
+"Татан авалтын үүсгэсэн баримтын дугаар. Үүнийг OpenERP автоматаар "
+"гүйцэтгэдэг."
#. module: procurement
#: model:ir.model,name:procurement.model_stock_warehouse_orderpoint
msgid "Minimum Inventory Rule"
-msgstr ""
+msgstr "Хамгийн бага эрхтэй оролцогч"
#. module: procurement
#: model:ir.actions.act_window,name:procurement.procurement_action4
@@ -257,7 +272,7 @@ msgstr "Нийлүүлэлт"
#. module: procurement
#: field:res.company,schedule_range:0
msgid "Scheduler Range Days"
-msgstr ""
+msgstr "Төлөвлөгчийн өдрийн хязгаар"
#. module: procurement
#: view:make.procurement:0
@@ -318,6 +333,8 @@ msgid ""
"If you encode manually a Procurement, you probably want to use a make to "
"order method."
msgstr ""
+"Татан авалтыг гараар кодлохоор бол, методуудыг цэгцлэхийн тулд загвар харах "
+"болно."
#. module: procurement
#: view:res.company:0
@@ -330,6 +347,8 @@ 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
@@ -422,6 +441,8 @@ 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
@@ -429,6 +450,9 @@ msgid ""
"When the virtual stock goes belong the Max Quantity, OpenERP generates a "
"procurement to bring the virtual stock to the Max Quantity."
msgstr ""
+"Виртуал агуулах нь хамгийн бага тоо хэмжээнд ойртож байвал, OpenERP нь "
+"виртуал агуулахыг хамгийн их тоо хэмжээнд хүргэхийн тулд татан авалтыг "
+"боловсруулдаг."
#. module: procurement
#: help:procurement.orderpoint.compute,automatic:0
@@ -477,6 +501,9 @@ msgid ""
"procurements. All procurements that are not between today and today+range "
"are skipped for futur computation."
msgstr ""
+"Энэ бол Татан авалтыг тооцоолж байх үед төлөвлөгчийн дүгнэсэн боломжит "
+"хугацаа юм. Өнөөдөр болон өнөөдрийн хязгаар хооронд багтаагүй татан авалт нь "
+"дараагийн тооцоолол хүртэл орхигдоно."
#. module: procurement
#: selection:procurement.order,priority:0
@@ -494,6 +521,8 @@ 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
@@ -525,12 +554,12 @@ msgstr "Алдаа"
#. module: procurement
#: model:ir.model,name:procurement.model_procurement_orderpoint_compute
msgid "Automatic Order Point"
-msgstr ""
+msgstr "Автомат захиалгын цэг"
#. module: procurement
#: field:stock.warehouse.orderpoint,qty_multiple:0
msgid "Qty Multiple"
-msgstr ""
+msgstr "Хуваагдах тоо хэмжээ"
#. module: procurement
#: model:ir.model,name:procurement.model_res_company
@@ -561,7 +590,7 @@ msgstr ""
#. module: procurement
#: selection:stock.warehouse.orderpoint,logic:0
msgid "Order to Max"
-msgstr ""
+msgstr "Хамгийн их захиалга"
#. module: procurement
#: field:procurement.order,date_close:0
@@ -571,7 +600,7 @@ msgstr "Хаагдсан огноо"
#. module: procurement
#: view:procurement.order:0
msgid "Late"
-msgstr ""
+msgstr "Хожимдсон"
#. module: procurement
#: field:mrp.property,composition:0
@@ -604,7 +633,7 @@ msgstr "Байршлууд"
#. module: procurement
#: selection:procurement.order,procure_method:0
msgid "from stock"
-msgstr ""
+msgstr "Агуулахаас"
#. module: procurement
#: view:stock.warehouse.orderpoint:0
@@ -624,7 +653,7 @@ msgstr "Дууссан"
#. module: procurement
#: help:stock.warehouse.orderpoint,qty_multiple:0
msgid "The procurement quantity will by rounded up to this multiple."
-msgstr ""
+msgstr "Татан авалтын тоо хэмжээ нь дараа дараагийн талбарт тоймлогдоно."
#. module: procurement
#: view:make.procurement:0
@@ -659,7 +688,7 @@ msgstr ""
#. module: procurement
#: view:procurement.order:0
msgid "Current"
-msgstr ""
+msgstr "Одоо"
#. module: procurement
#: code:addons/procurement/procurement.py:0
@@ -695,7 +724,7 @@ msgstr ""
#. module: procurement
#: view:procurement.order:0
msgid "Scheduled Date"
-msgstr ""
+msgstr "Төлөвлөгдсөн огноо"
#. module: procurement
#: field:make.procurement,product_id:0
@@ -749,7 +778,7 @@ msgstr "Хүлээж байна"
#. module: procurement
#: selection:procurement.order,procure_method:0
msgid "on order"
-msgstr ""
+msgstr "Захиалга"
#. module: procurement
#: field:procurement.order,move_id:0
@@ -767,6 +796,9 @@ 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
@@ -800,13 +832,15 @@ msgstr ""
#: model:ir.actions.act_window,name:procurement.action_compute_schedulers
#: view:procurement.order.compute.all:0
msgid "Compute Schedulers"
-msgstr ""
+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
@@ -826,7 +860,7 @@ msgstr "Маш яаралтай"
#. module: procurement
#: field:procurement.orderpoint.compute,automatic:0
msgid "Automatic Orderpoint"
-msgstr ""
+msgstr "Автомат захиалгын цэг"
#. module: procurement
#: view:procurement.order:0
@@ -848,6 +882,16 @@ msgid ""
" if product_id:\n"
" w = self.pool.get('product.product"
msgstr ""
+"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"
#. module: procurement
#: constraint:ir.rule:0
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..23b0a08af78 100644
--- a/addons/procurement/procurement_workflow.xml
+++ b/addons/procurement/procurement_workflow.xml
@@ -187,15 +187,15 @@
- action_check_finnished()
- stock.move
- [move_id.id]
+ action_check_finished()
+ stock.move
+ move_id and [move_id.id] or []
check_move_cancel()
-
+
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/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 7e9ae7ce45e..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.
-
@@ -306,9 +301,7 @@
-
-
@@ -462,7 +455,6 @@
-
@@ -487,7 +479,7 @@
-
+
@@ -559,7 +551,7 @@
-
+
@@ -580,7 +572,7 @@
-
+
@@ -637,5 +629,12 @@
form
+
+ Products
+ ir.ui.menu
+
+
+
+
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/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/project.py b/addons/project/project.py
index 27bbb2f8c7f..c0f9be5394e 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -315,7 +315,7 @@ class project(osv.osv):
if child_ids:
self.setActive(cr, uid, child_ids, value, context=None)
return True
-
+
project()
class users(osv.osv):
@@ -418,7 +418,7 @@ class task(osv.osv):
'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,
@@ -526,7 +526,7 @@ class task(osv.osv):
if not project_id: return False
task = self.browse(cr, uid, project_id, context=context)
project = task.project_id
- res = self.do_close(cr, uid, [project_id], context=context)
+ res = self.do_close(cr, uid, [project_id], context=context)
if project.warn_manager or project.warn_customer:
return {
'name': _('Send Email after close task'),
@@ -537,7 +537,7 @@ class task(osv.osv):
'target': 'new',
'nodestroy': True,
'context': {'active_id': task.id}
- }
+ }
return res
def do_close(self, cr, uid, ids, context=None):
@@ -678,7 +678,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
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 5e5be5ee4b0..6fd11bd245f 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -27,7 +27,7 @@
-
+
@@ -46,11 +46,11 @@
-
+
+
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
@@ -242,13 +244,13 @@
+
-
@@ -323,10 +325,10 @@
-
+
+
-
diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml
index 9521d321000..cb30a4b861c 100644
--- a/addons/project/report/project_report_view.xml
+++ b/addons/project/report/project_report_view.xml
@@ -186,13 +186,14 @@
-
- graph
-
+
+ tree
+
+
-
+
graph
@@ -240,7 +241,7 @@
project.vs.hours
tree
-
+
@@ -253,7 +254,7 @@
project.vs.hours
graph
-
+
@@ -262,6 +263,7 @@
+
Projects: Planned Vs Total hours
project.vs.hours
form
@@ -277,7 +279,7 @@
-
+
graph
diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml
index 1784ba942aa..62b31b7732e 100644
--- a/addons/project_issue/board_project_issue_view.xml
+++ b/addons/project_issue/board_project_issue_view.xml
@@ -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/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index a5032047c2a..4623f968c05 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -84,10 +84,10 @@
+
-
@@ -191,9 +191,9 @@
+
-
@@ -290,9 +290,9 @@
+
-
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_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_view.xml b/addons/project_long_term/project_long_term_view.xml
index fa645af4127..f2e4c6efd68 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -146,11 +146,11 @@
+
-
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_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..8e14631fb2c 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 @@
-
+
@@ -233,7 +232,7 @@
-
+
@@ -248,7 +247,7 @@
-
+
@@ -262,7 +261,7 @@
graph
-
+
@@ -281,7 +280,7 @@
-
+
@@ -324,7 +323,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/board_project_scrum_view.xml b/addons/project_scrum/board_project_scrum_view.xml
index 8b22233558b..76094000888 100644
--- a/addons/project_scrum/board_project_scrum_view.xml
+++ b/addons/project_scrum/board_project_scrum_view.xml
@@ -60,5 +60,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/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml
index 843b35646e4..7ae07d9eea8 100644
--- a/addons/project_scrum/project_scrum_view.xml
+++ b/addons/project_scrum/project_scrum_view.xml
@@ -113,12 +113,12 @@
+
-
diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py
index 370525f0ae3..d6ed37a8aae 100644
--- a/addons/project_timesheet/project_timesheet.py
+++ b/addons/project_timesheet/project_timesheet.py
@@ -46,7 +46,7 @@ class project_work(osv.osv):
raise osv.except_osv(_('Bad Configuration !'),
_('No journal defined on the related employee.\nFill in the timesheet tab of the employee form.'))
- a = emp.product_id.product_tmpl_id.property_account_expense.id
+ a = emp.product_id.product_tmpl_id.property_account_expense.id
if not a:
a = emp.product_id.categ_id.property_account_expense_categ.id
if not a:
@@ -108,7 +108,6 @@ class project_work(osv.osv):
def write(self, cr, uid, ids, vals, context=None):
if context is None:
context = {}
- obj = self.pool.get('hr.analytic.timesheet')
timesheet_obj = self.pool.get('hr.analytic.timesheet')
project_obj = self.pool.get('project.project')
uom_obj = self.pool.get('product.uom')
@@ -144,7 +143,7 @@ class project_work(osv.osv):
vals_line['unit_amount'] = uom_obj._compute_qty(cr, uid, default_uom, vals['hours'], result['product_uom_id'])
# Compute based on pricetype
- amount_unit = obj.on_change_unit_amount(cr, uid, line_id.id,
+ amount_unit = timesheet_obj.on_change_unit_amount(cr, uid, line_id.id,
prod_id=prod_id,
quantity=vals_line['unit_amount'], unit=False, context=context)
diff --git a/addons/project_timesheet/project_timesheet_view.xml b/addons/project_timesheet/project_timesheet_view.xml
index 2a1b94620a8..61834abbe66 100644
--- a/addons/project_timesheet/project_timesheet_view.xml
+++ b/addons/project_timesheet/project_timesheet_view.xml
@@ -11,9 +11,9 @@
-
-
-
+
+
+
diff --git a/addons/project_timesheet/report/task_report.py b/addons/project_timesheet/report/task_report.py
index 261f4e17c64..623d4e4a5cd 100644
--- a/addons/project_timesheet/report/task_report.py
+++ b/addons/project_timesheet/report/task_report.py
@@ -32,8 +32,8 @@ class report_timesheet_task_user(osv.osv):
def _get_task_hours(self, cr, uid, ids, name,args,context):
result = {}
for record in self.browse(cr, uid, ids,context):
- last_date = datetime(record.name, '%Y-%m-%d') + relativedelta(months=1) - 1
- task_obj=self.pool.get('project.task.work')
+ last_date = datetime.strptime(record.name, '%Y-%m-%d') + relativedelta(months=1) - relativedelta(days=1)
+ task_obj = self.pool.get('project.task.work')
task_ids = task_obj.search(cr, uid, [('user_id','=',record.user_id.id),('date','>=',record.name),('date','<=',last_date.strftime('%Y-%m-%d'))])
tsk_hrs = task_obj.read(cr, uid, task_ids, ['hours','date','user_id'])
total = 0.0
@@ -46,8 +46,8 @@ class report_timesheet_task_user(osv.osv):
result = {}
sum = 0.0
for record in self.browse(cr, uid, ids, context):
- last_date = datetime.strptime(record.name, '%Y-%m-%d') + relativedelta(months=1) - 1
- obj=self.pool.get('hr_timesheet_sheet.sheet.day')
+ last_date = datetime.strptime(record.name, '%Y-%m-%d') + relativedelta(months=1) - relativedelta(days=1)
+ obj = self.pool.get('hr_timesheet_sheet.sheet.day')
sheet_ids = obj.search(cr, uid, [('sheet_id.user_id','=',record.user_id.id),('name','>=',record.name),('name','<=',last_date.strftime('%Y-%m-%d'))])
data_days = obj.read(cr, uid, sheet_ids, ['name','sheet_id.user_id','total_attendance'])
total = 0.0
diff --git a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml
index 42e780642bf..76762ef8c28 100644
--- a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml
+++ b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml
@@ -1,5 +1,5 @@
-
- Create an user 'HR Manager'
+ Create a user 'HR Manager'
-
!record {model: res.users, id: res_users_hrmanager0}:
company_id: base.main_company
@@ -7,9 +7,11 @@
login: hr
name: HR Manager
password: hr
+ groups_id:
+ - base.group_hr_manager
-
- Create a product with type service used to specifies employees designation
+ Create a product with type service used to specify employees designation
-
!record {model: product.product, id: product_product_hrmanger0}:
categ_id: product.product_category_services
@@ -45,7 +47,7 @@
journal_id: account_analytic_journal_hrtimesheet0
-
- Create a timesheet sheet for hr manager
+ Create a timesheet sheet for HR manager
-
!record {model: hr_timesheet_sheet.sheet, id: hr_timesheet_sheet_sheet_sheetforhrmanager0}:
date_current: '2010-06-03'
@@ -54,6 +56,7 @@
name: Sheet for hr manager
state: new
user_id: res_users_hrmanager0
+ employee_id : 'hr_employee_hrmanager0'
-
Create a project 'Timesheet Management'
@@ -85,7 +88,7 @@
False, "active_id": ref("project_project_timesheetmanagement0"), })
-
- Make a work task entry 'Get work calendar of all employees' of 10 hours done by hr manager
+ Make a work task entry 'Get work calendar of all employees' of 10 hours done by HR manager
-
!record {model: project.task, id: project_task_getalltimesheetrecords0}:
work_ids:
@@ -95,7 +98,7 @@
user_id: res_users_hrmanager0
-
- Check for timesheet_ids in hr manager's timesheet
+ Check for timesheet_ids in HR manager's timesheet
-
!assert {model: hr_timesheet_sheet.sheet, id: hr_timesheet_sheet_sheet_sheetforhrmanager0, string: After hr manager's work task, length of timesheet line of current timesheet must be greater then 1}:
- len(timesheet_ids) > 0
\ No newline at end of file
diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py
index 7af6dbceff0..58b049e130e 100644
--- a/addons/purchase/__openerp__.py
+++ b/addons/purchase/__openerp__.py
@@ -46,8 +46,8 @@
'wizard/purchase_order_group_view.xml',
'wizard/purchase_installer.xml',
'wizard/purchase_line_invoice_view.xml',
- 'purchase_view.xml',
'purchase_report.xml',
+ 'purchase_view.xml',
'stock_view.xml',
'partner_view.xml',
'process/purchase_process.xml',
diff --git a/addons/purchase/board_purchase_view.xml b/addons/purchase/board_purchase_view.xml
index f5b131a69f5..6bbbe0e73e7 100644
--- a/addons/purchase/board_purchase_view.xml
+++ b/addons/purchase/board_purchase_view.xml
@@ -8,7 +8,7 @@
parent="base.next_id_73" sequence="0"/>
- Draft Purchases
+ Request for Quotations
ir.actions.act_window
purchase.order
form
@@ -17,7 +17,7 @@
- Quotation Request
+ Waiting Approval
ir.actions.act_window
purchase.order
form
@@ -26,6 +26,92 @@
+
+ purchase.order.monthly.categ.tree
+ purchase.report
+ tree
+
+
+
+
+
+
+
+
+
+ purchase.order.monthly.categ.graph
+ purchase.report
+ graph
+
+
+
+
+
+
+
+
+
+ Monthly Purchase by Category
+ purchase.report
+ form
+ graph,tree
+
+
+
+
+ tree
+
+
+
+
+
+ graph
+
+
+
+
+
+ negotiation.by.supplier.tree
+ purchase.report
+ tree
+
+
+
+
+
+
+
+
+ negotiation.by.supplier.graph
+ purchase.report
+ graph
+
+
+
+
+
+
+
+
+ Negotiation by Supplier
+ purchase.report
+ form
+ graph,tree
+
+
+
+
+ tree
+
+
+
+
+
+ graph
+
+
+
+
board.purchase.form
board.board
@@ -34,13 +120,22 @@
+
+
+
+
+
+
+
diff --git a/addons/purchase/i18n/de.po b/addons/purchase/i18n/de.po
index 7f2b499bf51..82ab4a9320c 100644
--- a/addons/purchase/i18n/de.po
+++ b/addons/purchase/i18n/de.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-08-29 10:22+0000\n"
+"PO-Revision-Date: 2010-10-11 07:17+0000\n"
"Last-Translator: Ferdinand-chricar \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-29 04:54+0000\n"
+"X-Launchpad-Export-Date: 2010-10-13 04:58+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: purchase
@@ -948,4 +948,4 @@ msgstr "In Bearbeitung"
#: code:addons/purchase/purchase.py:0
#, python-format
msgid "Cannot delete Purchase Order(s) which are in %s State!"
-msgstr ""
+msgstr "Einkaufsaufträge mit dem Status %s können nicht gelöscht werden"
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 51e294200cb..1522c4543f3 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -59,7 +59,7 @@ class purchase_order(osv.osv):
for line in order.order_line:
val1 += line.price_subtotal
for c in self.pool.get('account.tax').compute_all(cr, uid, line.taxes_id, line.price_unit, line.product_qty, order.partner_address_id.id, line.product_id.id, order.partner_id)['taxes']:
- val += c['amount']
+ val += c.get('amount', 0.0)
res[order.id]['amount_tax']=cur_obj.round(cr, uid, cur, val)
res[order.id]['amount_untaxed']=cur_obj.round(cr, uid, cur, val1)
res[order.id]['amount_total']=res[order.id]['amount_untaxed'] + res[order.id]['amount_tax']
@@ -150,12 +150,12 @@ class purchase_order(osv.osv):
('wait', 'Waiting'),
('confirmed', 'Waiting Supplier Ack'),
('approved', 'Approved'),
- ('except_picking', 'Shipping Exception'),
+ ('except_picking', 'Shipping Exception'),
('except_invoice', 'Invoice Exception'),
('done', 'Done'),
('cancel', 'Cancelled')
]
-
+
_columns = {
'name': fields.char('Order Reference', size=64, required=True, select=True, help="unique number of the purchase order,computed automatically when the purchase order is created"),
'origin': fields.char('Source Document', size=64,
@@ -451,7 +451,7 @@ class purchase_order(osv.osv):
'product_uos_qty': order_line.product_qty,
'product_uom': order_line.product_uom.id,
'product_uos': order_line.product_uom.id,
- 'date_planned': order_line.date_planned,
+ 'date': order_line.date_planned,
'date_expected': order_line.date_planned,
'location_id': loc_id,
'location_dest_id': dest,
diff --git a/addons/purchase/purchase_demo.xml b/addons/purchase/purchase_demo.xml
index ebd0b0becaf..b3fe345308a 100644
--- a/addons/purchase/purchase_demo.xml
+++ b/addons/purchase/purchase_demo.xml
@@ -3,19 +3,17 @@
-
-
+
+
-
-
-
-
+
+
+
-
@@ -30,7 +28,6 @@
150
5
- make_to_stock
@@ -57,4 +54,4 @@
-
\ No newline at end of file
+
diff --git a/addons/purchase/purchase_unit_test.xml b/addons/purchase/purchase_unit_test.xml
index 0c6de9312c2..93c0e42fae2 100644
--- a/addons/purchase/purchase_unit_test.xml
+++ b/addons/purchase/purchase_unit_test.xml
@@ -35,12 +35,6 @@
-
- confirmed
-
-
-
-
approved
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index e151cdc56f9..a9996202b20 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -35,19 +35,32 @@
action="base.action_partner_supplier_form" sequence="1"/>
-
+ name="Incoming Shipments" sequence="9"
+ groups="base.group_extended"/>
+
+
+ account.invoice
+ form
+ tree,form,calendar,graph
+
+ [('type','=','in_invoice')]
+ {'type':'in_invoice', 'journal_type': 'purchase', 'search_default_draft': 1}
+
+ This is the list of supplier invoice you are waiting for. You can select invoices and validate them once you have received the invoice and checked his data.
+
+
@@ -100,13 +113,13 @@
-
+
-
+
@@ -124,15 +137,16 @@
-
-
-
-
+
-
+
+
+
+
+
@@ -190,7 +204,7 @@
-
+
@@ -200,7 +214,7 @@
purchase.order
tree
-
+
@@ -222,7 +236,7 @@
ir.actions.act_window
purchase.order
form
- {'search_default_draft': 1,'search_default_create_uid':uid}
+ {'search_default_draft': 1}
tree,form,graph,calendar
With the Requests for quotation menu you can create new quotations, review existing one and confirm them to order once the supplier offer is approved.
@@ -257,7 +271,7 @@
-
+
-
+
-
+
@@ -287,7 +301,7 @@
purchase.order.line
tree
-
+
@@ -310,8 +324,8 @@
-
-
+
+
@@ -319,7 +333,7 @@
-
+
-
+
-
+
@@ -349,7 +363,7 @@
search
-
+
@@ -367,14 +381,14 @@
@@ -406,7 +420,7 @@
id="menu_purchase_line_order_draft"
groups="base.group_extended"
parent="menu_procurement_management_invoice"
- sequence="12"/>
+ sequence="72"/>
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 de25b07ff9d..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 @@
+
-
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 b377331a208..2f838c0b74c 100644
--- a/addons/report_designer/report_designer_installer.xml
+++ b/addons/report_designer/report_designer_installer.xml
@@ -28,7 +28,6 @@
-
diff --git a/addons/report_intrastat/i18n/it.po b/addons/report_intrastat/i18n/it.po
index 2c83dde0cb7..4dba312df22 100644
--- a/addons/report_intrastat/i18n/it.po
+++ b/addons/report_intrastat/i18n/it.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: 2009-11-17 10:23+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-10-12 20:22+0000\n"
+"Last-Translator: simone.sandri \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-29 05:04+0000\n"
+"X-Launchpad-Export-Date: 2010-10-13 04:59+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: report_intrastat
@@ -27,7 +27,7 @@ msgstr ""
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Canceled Invoice"
-msgstr ""
+msgstr "Fattura Cancellata"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
@@ -43,7 +43,7 @@ msgstr "Intrastat (questo mese)"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Supplier Invoice"
-msgstr ""
+msgstr "Fattura Fornitore"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
@@ -58,7 +58,7 @@ msgstr ""
#. module: report_intrastat
#: field:report.intrastat,name:0
msgid "Period"
-msgstr ""
+msgstr "Periodo"
#. module: report_intrastat
#: model:ir.ui.menu,name:report_intrastat.next_id_90
@@ -73,22 +73,22 @@ msgstr "Importa"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "VAT :"
-msgstr ""
+msgstr "IVA"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Document"
-msgstr ""
+msgstr "Documento"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "PRO-FORMA"
-msgstr ""
+msgstr "PRO-FORMA"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Taxes:"
-msgstr ""
+msgstr "Tasse:"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
@@ -109,7 +109,7 @@ msgstr ""
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Invoice Date"
-msgstr ""
+msgstr "Data della fattura"
#. module: report_intrastat
#: model:ir.module.module,shortdesc:report_intrastat.module_meta_information
@@ -119,17 +119,17 @@ msgstr ""
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Tel. :"
-msgstr ""
+msgstr "Tel. :"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Base"
-msgstr ""
+msgstr "Base"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Quantity"
-msgstr ""
+msgstr "Quantità"
#. module: report_intrastat
#: model:ir.ui.menu,name:report_intrastat.next_id_89
@@ -144,12 +144,12 @@ msgstr ""
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Total (inclu. taxes):"
-msgstr ""
+msgstr "Totale (tasse incluse)"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Refund"
-msgstr ""
+msgstr "Rimborso"
#. module: report_intrastat
#: constraint:ir.ui.view:0
@@ -164,17 +164,17 @@ msgstr "Report Intrastat"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Invoice"
-msgstr ""
+msgstr "Fattura"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Taxes"
-msgstr ""
+msgstr "Tasse"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Amount"
-msgstr ""
+msgstr "Importo"
#. module: report_intrastat
#: view:report.intrastat:0
@@ -214,7 +214,7 @@ msgstr "Codice Intrastat"
#. module: report_intrastat
#: field:report.intrastat,ref:0
msgid "Origin"
-msgstr ""
+msgstr "Origine"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
@@ -230,7 +230,7 @@ msgstr "Membro Intrastat"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Tax"
-msgstr ""
+msgstr "Tassa"
#. module: report_intrastat
#: field:report.intrastat,code:0
@@ -250,22 +250,22 @@ msgstr "Esporta"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Fax :"
-msgstr ""
+msgstr "Fax :"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Supplier Refund"
-msgstr ""
+msgstr "Rimborso Fornitore"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Total (excl. taxes):"
-msgstr ""
+msgstr "Totale (tasse escluse)"
#. module: report_intrastat
#: rml:account.invoice.intrastat:0
msgid "Price"
-msgstr ""
+msgstr "Prezzo"
#. module: report_intrastat
#: model:ir.actions.act_window,name:report_intrastat.action_report_intrastat_code_tree
diff --git a/addons/resource/i18n/de.po b/addons/resource/i18n/de.po
index 951474e7385..63c3fdd1e05 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-13 04:59+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..6848c21c15b
--- /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-12 07:44+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-10-13 04:59+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/process/sale_process.xml b/addons/sale/process/sale_process.xml
index 2c61e55c4e4..e20cf959c9b 100644
--- a/addons/sale/process/sale_process.xml
+++ b/addons/sale/process/sale_process.xml
@@ -63,7 +63,7 @@
-
+
@@ -85,7 +85,6 @@
-
@@ -251,7 +250,7 @@
-
+
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 ad418a567bc..8a26ef6ebba 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -75,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):
@@ -250,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',
@@ -461,6 +461,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 = {}
@@ -507,6 +535,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):
@@ -558,7 +587,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):
@@ -683,7 +712,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,
@@ -730,7 +759,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'
@@ -911,7 +940,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
@@ -1175,7 +1204,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'),
@@ -1205,11 +1234,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_view.xml b/addons/sale/sale_view.xml
index 62bdd41f2ca..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.
-
diff --git a/addons/sale/security/ir.model.access.csv b/addons/sale/security/ir.model.access.csv
index 89a2003698c..0d523202a10 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,1,1,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_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,1
"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 c1e9d9c3b89..774759c82c7 100644
--- a/addons/sale/wizard/sale_line_invoice.xml
+++ b/addons/sale/wizard/sale_line_invoice.xml
@@ -9,7 +9,7 @@
-
+
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/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/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/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 089a2389703..597def2c6aa 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,30 +109,10 @@ 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)
if make.close:
@@ -178,8 +152,6 @@ 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 Opportunity', help='Check this to close the opportunity after having created the sale order.'),
}
_defaults = {
@@ -189,48 +161,3 @@ class crm_make_sale(osv.osv_memory):
}
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 54550a08bf1..d73a2cee1ef 100644
--- a/addons/sale_crm/wizard/crm_make_sale_view.xml
+++ b/addons/sale_crm/wizard/crm_make_sale_view.xml
@@ -8,62 +8,18 @@
crm.make.sale
form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
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/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 19b6570a31a..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 create 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 cebacedeb01..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
|
diff --git a/addons/stock/report/lot_overview_all.py b/addons/stock/report/lot_overview_all.py
index c523b9775d1..0b4edcaecf4 100644
--- a/addons/stock/report/lot_overview_all.py
+++ b/addons/stock/report/lot_overview_all.py
@@ -37,7 +37,7 @@ class lot_overview_all(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_all_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_all.rml b/addons/stock/report/lot_overview_all.rml
index 4c4c71561a2..7d2360068a8 100644
--- a/addons/stock/report/lot_overview_all.rml
+++ b/addons/stock/report/lot_overview_all.rml
@@ -108,7 +108,7 @@
Unit Price
|
- Value([[ company.currency_id.name ]])
+ Value
|
diff --git a/addons/stock/report/product_stock.py b/addons/stock/report/product_stock.py
index e55405381b4..b7dd254234c 100644
--- a/addons/stock/report/product_stock.py
+++ b/addons/stock/report/product_stock.py
@@ -69,12 +69,12 @@ class report_stock(report_int):
if not loc_ids or not product_ids:
return (False, 'pdf')
- cr.execute("select sum(r.product_qty * u.factor), r.date_planned, r.product_id "
+ cr.execute("select sum(r.product_qty * u.factor), r.date, r.product_id "
"from stock_move r left join product_uom u on (r.product_uom=u.id) "
"where state IN %s"
"and location_id IN %s"
"and product_id IN %s"
- "group by date_planned,product_id",(('confirmed','assigned','waiting'),tuple(loc_ids) ,tuple(product_ids),))
+ "group by date,product_id",(('confirmed','assigned','waiting'),tuple(loc_ids) ,tuple(product_ids),))
for (qty, dt, prod_id) in cr.fetchall():
if dt<=dt_from:
dt= (datetime.now() + relativedelta(days=1)).strftime('%Y-%m-%d')
@@ -83,12 +83,12 @@ class report_stock(report_int):
products.setdefault(prod_id, [])
products[prod_id].append((dt,-qty))
- cr.execute("select sum(r.product_qty * u.factor), r.date_planned, r.product_id "
+ cr.execute("select sum(r.product_qty * u.factor), r.date, r.product_id "
"from stock_move r left join product_uom u on (r.product_uom=u.id) "
"where state IN %s"
"and location_dest_id IN %s"
"and product_id IN %s"
- "group by date_planned,product_id",(('confirmed','assigned','waiting'),tuple(loc_ids) ,tuple(product_ids),))
+ "group by date,product_id",(('confirmed','assigned','waiting'),tuple(loc_ids) ,tuple(product_ids),))
for (qty, dt, prod_id) in cr.fetchall():
if dt<=dt_from:
diff --git a/addons/stock/report/report_stock_move.py b/addons/stock/report/report_stock_move.py
index 92fb4559345..49c3f8fb327 100644
--- a/addons/stock/report/report_stock_move.py
+++ b/addons/stock/report/report_stock_move.py
@@ -29,7 +29,7 @@ class report_stock_move(osv.osv):
_description = "Moves Statistics"
_auto = False
_columns = {
- 'date_planned': fields.date('Date Planned', readonly=True ),
+ 'date': fields.date('Date', readonly=True),
'year': fields.char('Year', size=4, readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
@@ -39,26 +39,30 @@ class report_stock_move(osv.osv):
'product_id':fields.many2one('product.product', 'Product', readonly=True),
'company_id':fields.many2one('res.company', 'Company', readonly=True),
'picking_id':fields.many2one('stock.picking', 'Packing', readonly=True),
- 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True, select=True, help="Shipping type specify, goods coming in or going out."),
+ 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('other', 'Others')], 'Shipping Type', required=True, select=True, help="Shipping type specify, goods coming in or going out."),
'location_id': fields.many2one('stock.location', 'Source Location', readonly=True, select=True, help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
'location_dest_id': fields.many2one('stock.location', 'Dest. Location', readonly=True, select=True, help="Location where the system will stock the finished products."),
'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True),
- 'product_qty_in':fields.float('In Qty',readonly=True),
- 'product_qty_out':fields.float('Out Qty',readonly=True),
- 'value' : fields.float('Total Value', required=True, digits_compute=dp.get_precision('Sale Price')),
- 'day_diff2':fields.float('Delay (Days)',readonly=True, digits=(16,2), group_operator="avg"),
- 'day_diff1':fields.float('Planned (Days)',readonly=True, digits=(16,2), group_operator="avg"),
- 'day_diff':fields.float('Real (Days)',readonly=True, digits=(16,2), group_operator="avg"),
+ 'product_qty':fields.integer('Quantity',readonly=True),
+ 'categ_id': fields.many2one('product.category', 'Product Category', ),
+ 'product_qty_in':fields.integer('In Qty',readonly=True),
+ 'product_qty_out':fields.integer('Out Qty',readonly=True),
+ 'value' : fields.float('Total Value', required=True),
+ 'day_diff2':fields.float('Lag (Days)',readonly=True, digits_compute=dp.get_precision('Shipping Delay'), group_operator="avg"),
+ 'day_diff1':fields.float('Planned Lead Time (Days)',readonly=True, digits_compute=dp.get_precision('Shipping Delay'), group_operator="avg"),
+ 'day_diff':fields.float('Execution Lead Time (Days)',readonly=True, digits_compute=dp.get_precision('Shipping Delay'), group_operator="avg"),
+ 'stock_journal': fields.many2one('stock.journal','Stock Journal', select=True),
+
+
}
def init(self, cr):
tools.drop_view_if_exists(cr, 'report_stock_move')
cr.execute("""
- create or replace view report_stock_move as (
- select
+ CREATE OR REPLACE view report_stock_move AS (
+ SELECT
min(sm_id) as id,
- sum(value) as value,
- al.dp as date_planned,
+ al.dp as date,
al.curr_year as year,
al.curr_month as month,
al.curr_day as day,
@@ -69,56 +73,74 @@ class report_stock_move(osv.osv):
al.picking_id as picking_id,
al.company_id as company_id,
al.location_dest_id as location_dest_id,
+ al.product_qty,
al.out_qty as product_qty_out,
al.in_qty as product_qty_in,
al.address_id as partner_id,
al.product_id as product_id,
al.state as state ,
al.product_uom as product_uom,
- al.type as type
+ al.categ_id as categ_id,
+ coalesce(al.type, 'other') as type,
+ al.stock_journal as stock_journal,
+ sum(al.in_value - al.out_value) as value
FROM (SELECT
-
- CASE WHEN sp.type in ('out','delivery') THEN
- sum(sm.product_qty) END AS out_qty,
+ CASE WHEN sp.type in ('out') THEN
+ sum(sm.product_qty * pu.factor)
+ ELSE 0.0
+ END AS out_qty,
CASE WHEN sp.type in ('in') THEN
- sum(sm.product_qty) END AS in_qty,
+ sum(sm.product_qty * pu.factor)
+ ELSE 0.0
+ END AS in_qty,
+ CASE WHEN sp.type in ('out') THEN
+ sum(sm.product_qty * pu.factor) * pt.standard_price
+ ELSE 0.0
+ END AS out_value,
+ CASE WHEN sp.type in ('in') THEN
+ sum(sm.product_qty * pu.factor) * pt.standard_price
+ ELSE 0.0
+ END AS in_value,
min(sm.id) as sm_id,
- sm.date_planned as dp,
- to_char(date_trunc('day',sm.date_planned), 'YYYY') as curr_year,
- to_char(date_trunc('day',sm.date_planned), 'MM') as curr_month,
- to_char(date_trunc('day',sm.date_planned), 'YYYY-MM-DD') as curr_day,
- avg(date(sm.date_planned)-date(sm.create_date)) as curr_day_diff,
+ sm.date as dp,
+ to_char(date_trunc('day',sm.date), 'YYYY') as curr_year,
+ to_char(date_trunc('day',sm.date), 'MM') as curr_month,
+ to_char(date_trunc('day',sm.date), 'YYYY-MM-DD') as curr_day,
+ avg(date(sm.date)-date(sm.create_date)) as curr_day_diff,
avg(date(sm.date_expected)-date(sm.create_date)) as curr_day_diff1,
- avg(date(sm.date_planned)-date(sm.date_expected)) as curr_day_diff2,
+ avg(date(sm.date)-date(sm.date_expected)) as curr_day_diff2,
sm.location_id as location_id,
sm.location_dest_id as location_dest_id,
- pt.standard_price * sum(sm.product_qty) as value,
+ sum(sm.product_qty) as product_qty,
+ pt.categ_id as categ_id ,
sm.address_id as address_id,
sm.product_id as product_id,
sm.picking_id as picking_id,
sm.company_id as company_id,
sm.state as state,
sm.product_uom as product_uom,
- sp.type as type
- from
+ sp.type as type,
+ sp.stock_journal_id AS stock_journal
+ FROM
stock_move sm
- left join stock_picking sp on (sm.picking_id=sp.id)
- left join product_product pp on (sm.product_id=pp.id)
- left join product_template pt on (pp.product_tmpl_id=pt.id)
- left join stock_location sl on (sm.location_id = sl.id)
+ LEFT JOIN stock_picking sp ON (sm.picking_id=sp.id)
+ LEFT JOIN product_product pp ON (sm.product_id=pp.id)
+ LEFT JOIN product_uom pu ON (sm.product_uom=pu.id)
+ LEFT JOIN product_template pt ON (pp.product_tmpl_id=pt.id)
+ LEFT JOIN stock_location sl ON (sm.location_id = sl.id)
- group by
- sm.id,sp.type, sm.date_planned,sm.address_id,
+ GROUP BY
+ sm.id,sp.type, sm.date,sm.address_id,
sm.product_id,sm.state,sm.product_uom,sm.date_expected,
- sm.product_id,pt.standard_price, sm.picking_id,
- sm.company_id,sm.product_qty, sm.location_id,sm.location_dest_id)
- as al
+ sm.product_id,pt.standard_price, sm.picking_id, sm.product_qty,
+ sm.company_id,sm.product_qty, sm.location_id,sm.location_dest_id,pu.factor,pt.categ_id, sp.stock_journal_id)
+ AS al
- group by
+ GROUP BY
al.out_qty,al.in_qty,al.curr_year,al.curr_month,
al.curr_day,al.curr_day_diff,al.curr_day_diff1,al.curr_day_diff2,al.dp,al.location_id,al.location_dest_id,
al.address_id,al.product_id,al.state,al.product_uom,
- al.picking_id,al.company_id,al.type
+ al.picking_id,al.company_id,al.type,al.product_qty, al.categ_id, al.stock_journal
)
""")
@@ -130,14 +152,15 @@ class report_stock_inventory(osv.osv):
_description = "Stock Statistics"
_auto = False
_columns = {
- 'date_planned': fields.datetime('Date', readonly=True),
+ 'date': fields.datetime('Date', readonly=True),
'partner_id':fields.many2one('res.partner.address', 'Partner', readonly=True),
'product_id':fields.many2one('product.product', 'Product', readonly=True),
+ 'product_categ_id':fields.many2one('product.category', 'Product Category', readonly=True),
'location_id': fields.many2one('stock.location', 'Location', readonly=True),
'prodlot_id': fields.many2one('stock.production.lot', 'Lot', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
- 'product_qty':fields.float('Qty', digits=(16,2), readonly=True),
- 'value' : fields.float('Total Value', digits=(16,2), required=True, digits_compute=dp.get_precision('Sale Price')),
+ 'product_qty':fields.float('Quantity', digits_compute=dp.get_precision('Product UoM'), readonly=True),
+ 'value' : fields.float('Total Value', digits_compute=dp.get_precision('Account'), required=True),
'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True,
help='When the stock move is created it is in the \'Draft\' state.\n After that it is set to \'Confirmed\' state.\n If stock is available state is set to \'Avaiable\'.\n When the picking it done the state is \'Done\'.\
\nThe state is \'Waiting\' if the move is waiting for another one.'),
@@ -146,44 +169,44 @@ class report_stock_inventory(osv.osv):
def init(self, cr):
tools.drop_view_if_exists(cr, 'report_stock_inventory')
cr.execute("""
-create or replace view report_stock_inventory as (
- (select
- min(m.id) as id, m.date_planned as date_planned,
+CREATE OR REPLACE view report_stock_inventory AS (
+ (SELECT
+ min(m.id) as id, m.date as date,
m.address_id as partner_id, m.location_id as location_id,
- m.product_id as product_id, l.usage as location_type,
+ m.product_id as product_id, pt.categ_id as product_categ_id, l.usage as location_type,
m.company_id,
m.state as state, m.prodlot_id as prodlot_id,
- sum(-m.product_qty*u.factor)::decimal(16,2) as product_qty,
- sum(-pt.standard_price * m.product_qty * u.factor)::decimal(16,2) as value
- from
+ coalesce(sum(-m.product_qty * u.factor)::decimal, 0.0) as product_qty,
+ coalesce(sum(-pt.standard_price * m.product_qty * u.factor)::decimal, 0.0) as value
+ FROM
stock_move m
- left join stock_picking p on (m.picking_id=p.id)
- left join product_product pp on (m.product_id=pp.id)
- left join product_template pt on (pp.product_tmpl_id=pt.id)
- left join product_uom u on (m.product_uom=u.id)
- left join stock_location l on (m.location_id=l.id)
- group by
- m.id, m.product_id, m.address_id, m.location_id, m.prodlot_id,
- m.date_planned, m.state, l.usage, m.company_id
-) union all (
- select
- -m.id as id, m.date_planned as date_planned,
+ LEFT JOIN stock_picking p ON (m.picking_id=p.id)
+ LEFT JOIN product_product pp ON (m.product_id=pp.id)
+ LEFT JOIN product_template pt ON (pp.product_tmpl_id=pt.id)
+ LEFT JOIN product_uom u ON (m.product_uom=u.id)
+ LEFT JOIN stock_location l ON (m.location_id=l.id)
+ GROUP BY
+ m.id, m.product_id, m.product_uom, pt.categ_id, m.address_id, m.location_id, m.location_dest_id,
+ m.prodlot_id, m.date, m.state, l.usage, m.company_id
+) UNION ALL (
+ SELECT
+ -m.id as id, m.date as date,
m.address_id as partner_id, m.location_dest_id as location_id,
- m.product_id as product_id, l.usage as location_type,
+ m.product_id as product_id, pt.categ_id as product_categ_id, l.usage as location_type,
m.company_id,
m.state as state, m.prodlot_id as prodlot_id,
- sum(m.product_qty*u.factor)::decimal(16,2) as product_qty,
- sum(pt.standard_price * m.product_qty * u.factor)::decimal(16,2) as value
- from
+ coalesce(sum(m.product_qty*u.factor)::decimal, 0.0) as product_qty,
+ coalesce(sum(pt.standard_price * m.product_qty * u.factor)::decimal, 0.0) as value
+ FROM
stock_move m
- left join stock_picking p on (m.picking_id=p.id)
- left join product_product pp on (m.product_id=pp.id)
- left join product_template pt on (pp.product_tmpl_id=pt.id)
- left join product_uom u on (m.product_uom=u.id)
- left join stock_location l on (m.location_dest_id=l.id)
- group by
- m.id, m.product_id, m.address_id, m.location_id, m.location_dest_id,
- m.prodlot_id, m.date_planned, m.state, l.usage, m.company_id
+ LEFT JOIN stock_picking p ON (m.picking_id=p.id)
+ LEFT JOIN product_product pp ON (m.product_id=pp.id)
+ LEFT JOIN product_template pt ON (pp.product_tmpl_id=pt.id)
+ LEFT JOIN product_uom u ON (m.product_uom=u.id)
+ LEFT JOIN stock_location l ON (m.location_dest_id=l.id)
+ GROUP BY
+ m.id, m.product_id, m.product_uom, pt.categ_id, m.address_id, m.location_id, m.location_dest_id,
+ m.prodlot_id, m.date, m.state, l.usage, m.company_id
)
);
""")
diff --git a/addons/stock/report/report_stock_move_view.xml b/addons/stock/report/report_stock_move_view.xml
index 6377bd38e9a..1d9dc4a5ce4 100644
--- a/addons/stock/report/report_stock_move_view.xml
+++ b/addons/stock/report/report_stock_move_view.xml
@@ -13,7 +13,7 @@
tree
-
+
@@ -24,12 +24,15 @@
+
+
-
-
-
-
+
+
+
+
+
@@ -42,7 +45,18 @@
-
+
+
+
+
+
+ report.stock.move.graph
+ report.stock.move
+ graph
+
+
+
+
@@ -54,52 +68,42 @@
-
-
+ string="Month-1"
+ name="month-1"
+ 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="Last month"/>
+
-
-
-
-
-
+
+
+
-
+
-
-
-
-
-
-
-
-
-
+
@@ -109,13 +113,25 @@
+
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -126,28 +142,28 @@
form
tree,graph
- {'contact_display': 'partner', 'search_default_month':1, 'search_default_group_product':1,'search_default_done':1,'group_by':[], 'group_by_no_leaf':1}
+ {'full':'1','contact_display': 'partner','search_default_done':1, 'search_default_month':1, 'search_default_group_type':1, 'group_by': [], 'group_by_no_leaf':1,}
-
report.stock.inventory.tree
report.stock.inventory
tree
-
+
+
-
-
+
+
@@ -173,43 +189,46 @@
+ help="Analysis of current inventory (only moves that have already been processed)"/>
+ help = "Analysis including future moves (similar to virtual stock)"/>
-
-
-
-
+
+
-
-
-
-
-
-
-
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -220,7 +239,7 @@
form
tree,graph
- {'contact_display': 'partner', 'search_default_real':1, 'search_default_location_type_internal':1,'search_default_group_product':1,'search_default_group_location':1,'group_by':[], 'group_by_no_leaf':1}
+ {'contact_display': 'partner', 'search_default_real':1, 'search_default_location_type_internal':1,'search_default_group_product':1,'group_by':[], 'group_by_no_leaf':1}
diff --git a/addons/stock/report/report_stock_picking.py b/addons/stock/report/report_stock_picking.py
deleted file mode 100644
index 81f20ed8906..00000000000
--- a/addons/stock/report/report_stock_picking.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-from osv import fields,osv
-import tools
-
-class report_stock_picking(osv.osv):
- _name = "report.stock.picking"
- _description = "Stock Picking Report"
- _auto = False
- _columns = {
- 'year': fields.char('Year',size=64,required=False, readonly=True),
- 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
- ('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
- 'day': fields.char('Day', size=128, readonly=True),
- 'nbr': fields.integer('# of Lines', readonly=True),
- 'nbp': fields.integer('# of Picking', readonly=True),
- 'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
- 'product_qty': fields.float('# of Products', readonly=True),
- 'product_uos_qty': fields.float('# of Products', readonly=True),
- 'product_id': fields.many2one('product.product', 'Product', readonly=True),
- 'date': fields.date('Date', readonly=True),
- 'avg_days_late': fields.float('Avg Due Days', digits=(16,2), readonly=True, group_operator="avg"),
- 'avg_days_to_deliver': fields.float('Avg Days to Deliver', digits=(16,2), readonly=True, group_operator="avg",
- help="Number of Avg Days to deliver"),
- 'state': fields.selection([('draft', 'Draft'),('auto', 'Waiting'),('confirmed', 'Confirmed'),('assigned', 'Available'),('done', 'Done'),('cancel', 'Cancelled')], 'State'),
- 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True),
- 'company_id': fields.many2one('res.company', 'Company', readonly=True),
- 'invoice_state': fields.selection([
- ("invoiced", "Invoiced"),
- ("2binvoiced", "To Be Invoiced"),
- ("none", "Not from Picking")], "Invoice Status",readonly=True),
- 'min_date': fields.date('Expected Date',help="Expected date for Picking. Default it takes current date"),
- 'order_date': fields.date('Order Date', help="Date of Order"),
- 'date_done': fields.date('Date Done', help="Date of completion"),
- 'location_id': fields.many2one('stock.location', 'Source Location', help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
- 'location_dest_id': fields.many2one('stock.location', 'Dest. Location', help="Location where the system will stock the finished products."),
- 'max_date': fields.date('Max.Expected Date'),
- 'product_uos': fields.many2one('product.uom', 'Product UOS'),
- 'product_uom': fields.many2one('product.uom', 'Product UOM'),
- }
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'report_stock_picking')
- cr.execute("""
- create or replace view report_stock_picking as (
- select
- min(sm.id) as id,
- date_trunc('day',sp.min_date) as min_date,
- date_trunc('day',sp.date) as order_date,
- date_trunc('day',sp.date_done) as date_done,
- date_trunc('day',sp.max_date) as max_date,
- to_char(sp.create_date, 'YYYY') as year,
- to_char(sp.create_date, 'MM') as month,
- to_char(sp.create_date, 'YYYY-MM-DD') as day,
- sp.address_id as partner_id,
- to_date(to_char(sp.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY') as date,
- count(sm.id) as nbr,
- count(sp.id) as nbp,
- sum(sm.product_qty*u.factor) as product_qty,
- sum(sm.product_uos_qty) as product_uos_qty,
- sm.product_id as product_id,
- sm.location_dest_id as location_dest_id,
- sm.location_id as location_id,
- sp.type,
- sm.product_uos,
- sm.product_uom,
- sp.invoice_state,
- sp.company_id as company_id,
- avg(extract('epoch' from (sp.date_done-sp.create_date)))/(3600*24) as avg_days_to_deliver,
- avg(extract('epoch' from (sp.date_done-sp.min_date)))/(3600*24) as avg_days_late,
- sp.state
- from stock_picking as sp
- Inner join stock_move as sm ON (sm.picking_id=sp.id)
- Inner join product_uom u on (u.id=sm.product_uom)
- group by sp.type,
- sp.create_date,
- sp.address_id,
- sm.product_id,
- to_char(sp.create_date, 'YYYY'),
- sm.location_dest_id,
- sm.location_id,
- to_char(sp.create_date, 'MM'),
- to_char(sp.create_date, 'YYYY-MM-DD'),
- sm.product_uos,
- sm.product_uom,
- date_trunc('day',sp.min_date),
- date_trunc('day',sp.date),
- date_trunc('day',sp.date_done),
- date_trunc('day',sp.max_date),
- sp.invoice_state,
- sp.company_id,
- sp.state
-
- )""")
-report_stock_picking()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/report/report_stock_picking_view.xml b/addons/stock/report/report_stock_picking_view.xml
deleted file mode 100644
index edbd9e66b7d..00000000000
--- a/addons/stock/report/report_stock_picking_view.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
-
-
-
- report.stock.picking.tree
- report.stock.picking
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- report.stock.picking.graph
- report.stock.picking
- graph
-
-
-
-
-
-
-
-
-
-
-
- report.stock.picking.select
- report.stock.picking
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Picking
- report.stock.picking
- form
- tree,graph
-
-
- {'search_default_Partner':1,'search_default_month':1,'group_by_no_leaf':1,'group_by':[]}
-
-
-
-
- tree
-
-
-
-
-
-
- graph
-
-
-
-
-
-
-
-
-
diff --git a/addons/stock/report/stock_inventory_move.rml b/addons/stock/report/stock_inventory_move.rml
index 7cb18a4e161..9531c534dec 100755
--- a/addons/stock/report/stock_inventory_move.rml
+++ b/addons/stock/report/stock_inventory_move.rml
@@ -151,7 +151,7 @@
-
+
Location
@@ -172,7 +172,7 @@
[[ repeatIn(o.inventory_line_id, 'p') ]]
-
+
|
[[ p.location_id.name ]]
@@ -181,7 +181,7 @@
[[ p.prod_lot_id and p.prod_lot_id.name or '' ]]
|
- [[ p.product_id.name ]]
+ [ [[ p.product_id.code ]] ] [[ p.product_id.name ]]
|
[[ formatLang(p.product_qty) ]] [[ p.product_uom.name ]]
@@ -189,7 +189,7 @@
|
-
+
Total:
@@ -203,4 +203,4 @@
-
\ No newline at end of file
+
diff --git a/addons/stock/security/ir.model.access.csv b/addons/stock/security/ir.model.access.csv
index a120ce0c571..e879a03e9e1 100644
--- a/addons/stock/security/ir.model.access.csv
+++ b/addons/stock/security/ir.model.access.csv
@@ -32,17 +32,12 @@
"access_stock_lines_date_manager","report.stock.lines.date manager","model_report_stock_lines_date","stock.group_stock_manager",1,1,1,1
"access_stock_lines_date_system","report.stock.lines.date system","model_report_stock_lines_date","base.group_system",1,0,0,0
"access_stock_report_tracklots","stock.report.tracklots","model_stock_report_tracklots","stock.group_stock_user",1,1,1,1
-"access_report_products_to_received_planned","report.products.to.received.planned","model_report_products_to_received_planned","stock.group_stock_user",1,1,1,1
-"access_report_delivery_products_planned","report.delivery.products.planned","model_report_delivery_products_planned","stock.group_stock_user",1,1,1,1
"access_report_stock_move_user","report.stock.move user","model_report_stock_move","stock.group_stock_user",1,0,0,0
"access_report_stock_move_system","report.stock.move system","model_report_stock_move","base.group_system",1,0,0,0
"access_report_stock_move_manager","report.stock.move manager","model_report_stock_move","stock.group_stock_manager",1,1,1,1
"access_report_stock_inventory_user","report.stock.inventory user","model_report_stock_inventory","stock.group_stock_user",1,1,1,1
"access_report_stock_inventory_manager","report.stock.inventory manager","model_report_stock_inventory","stock.group_stock_manager",1,1,1,1
"access_report_stock_inventory_system","report.stock.inventory system","model_report_stock_inventory","base.group_system",1,0,0,0
-"access_report_stock_picking_user","report.stock.picking user","model_report_stock_picking","stock.group_stock_user",1,1,1,1
-"access_report_stock_picking_manager","report.stock.picking manager","model_report_stock_picking","stock.group_stock_manager",1,1,1,1
-"access_report_stock_picking_system","report.stock.picking system","model_report_stock_picking","base.group_system",1,0,0,0
"access_stock_warehouse_system","stock.warehouse.system","model_stock_warehouse","base.group_system",1,1,1,1
"access_stock_location_system","stock.location.system","model_stock_location","base.group_system",1,1,1,1
"access_stock_journal_system","stock.journal.system","model_stock_journal","base.group_system",1,1,1,1
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index f5c4ebd41e3..5717143c1a6 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -25,6 +25,7 @@ from operator import itemgetter
from itertools import groupby
from osv import fields, osv
+from tools import config
from tools.translate import _
import netsvc
import tools
@@ -61,7 +62,6 @@ class stock_journal(osv.osv):
}
stock_journal()
-
#----------------------------------------------------------
# Stock Location
#----------------------------------------------------------
@@ -105,6 +105,7 @@ class stock_location(osv.osv):
res[m.id] = _get_one_full_name(m)
return res
+
def _product_value(self, cr, uid, ids, field_names, arg, context=None):
"""Computes stock value (real and virtual) for a product, as well as stock qty (real and virtual).
@param field_names: Name of field
@@ -124,7 +125,6 @@ class stock_location(osv.osv):
currency_obj = self.pool.get('res.currency')
currency = self.pool.get('res.currency').browse(cr, uid, currency_id)
currency_obj.round(cr, uid, currency, 300)
-
for loc_id, product_ids in products_by_location.items():
c = (context or {}).copy()
c['location'] = loc_id
@@ -144,7 +144,6 @@ class stock_location(osv.osv):
amount = prod.virtual_available * prod.standard_price
amount = currency_obj.round(cr, uid, currency, amount)
result[loc_id][f] += amount
-
return result
_columns = {
@@ -187,7 +186,7 @@ class stock_location(osv.osv):
"validated automatically. With 'Manual Operation', the stock move has to be validated "\
"by a worker. With 'Automatic No Step Added', the location is replaced in the original move."
),
- 'chained_picking_type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', help="Shipping Type of the Picking List that will contain the chained move (leave empty to automatically detect the type based on the source and destination locations)."),
+ 'chained_picking_type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal')], 'Shipping Type', help="Shipping Type of the Picking List that will contain the chained move (leave empty to automatically detect the type based on the source and destination locations)."),
'chained_company_id': fields.many2one('res.company', 'Chained Company', help='The company the Picking List containing the chained move will belong to (leave empty to use the default company determination rules'),
'chained_delay': fields.integer('Chaining Lead Time',help="Delay between original move and chained move in days"),
'address_id': fields.many2one('res.partner.address', 'Location Address',help="Address of customer or supplier."),
@@ -200,8 +199,8 @@ class stock_location(osv.osv):
'parent_left': fields.integer('Left Parent', select=1),
'parent_right': fields.integer('Right Parent', select=1),
- 'stock_real_value': fields.function(_product_value, method=True, type='float', string='Real Stock Value', multi="stock"),
- 'stock_virtual_value': fields.function(_product_value, method=True, type='float', string='Virtual Stock Value', multi="stock"),
+ 'stock_real_value': fields.function(_product_value, method=True, type='float', string='Real Stock Value', multi="stock", digits_compute=dp.get_precision('Account')),
+ 'stock_virtual_value': fields.function(_product_value, method=True, type='float', string='Virtual Stock Value', multi="stock", digits_compute=dp.get_precision('Account')),
'company_id': fields.many2one('res.company', 'Company', select=1, help='Let this field empty if this location is shared between all companies'),
'scrap_location': fields.boolean('Scrap Location', help='Check this box to allow using this location to put scrapped/damaged goods.'),
}
@@ -243,7 +242,7 @@ class stock_location(osv.osv):
"""
result = 'internal'
if (from_location.usage=='internal') and (to_location and to_location.usage in ('customer', 'supplier')):
- result = 'delivery'
+ result = 'out'
elif (from_location.usage in ('supplier', 'customer')) and (to_location.usage == 'internal'):
result = 'in'
return result
@@ -262,8 +261,6 @@ class stock_location(osv.osv):
context = {}
product_obj = self.pool.get('product.product')
# Take the user company and pricetype
- price_type_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.property_valuation_price_type.id
- pricetype = self.pool.get('product.price.type').browse(cr, uid, price_type_id)
context['currency_id'] = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id
# To be able to offer recursive or non-recursive reports we need to prevent recursive quantities by default
@@ -302,7 +299,7 @@ class stock_location(osv.osv):
# Compute based on pricetype
# Choose the right filed standard_price to read
- amount_unit = product.price_get(pricetype.field, context)[product.id]
+ amount_unit = product.price_get('standard_price', context)[product.id]
price = qty[product_id] * amount_unit
total_price += price
@@ -540,12 +537,12 @@ class stock_picking(osv.osv):
ids = [ids]
for pick in self.browse(cr, uid, ids, context):
sql_str = """update stock_move set
- date_planned='%s'
+ date='%s'
where
picking_id=%d """ % (value, pick.id)
if pick.max_date:
- sql_str += " and (date_planned='" + pick.max_date + "' or date_planned>'" + value + "')"
+ sql_str += " and (date='" + pick.max_date + "' or date>'" + value + "')"
cr.execute(sql_str)
return True
@@ -562,11 +559,11 @@ class stock_picking(osv.osv):
ids = [ids]
for pick in self.browse(cr, uid, ids, context=context):
sql_str = """update stock_move set
- date_planned='%s'
+ date='%s'
where
picking_id=%s """ % (value, pick.id)
if pick.min_date:
- sql_str += " and (date_planned='" + pick.min_date + "' or date_planned<'" + value + "')"
+ sql_str += " and (date='" + pick.min_date + "' or date<'" + value + "')"
cr.execute(sql_str)
return True
@@ -581,8 +578,8 @@ class stock_picking(osv.osv):
return res
cr.execute("""select
picking_id,
- min(date_planned),
- max(date_planned)
+ min(date),
+ max(date)
from
stock_move
where
@@ -605,7 +602,7 @@ class stock_picking(osv.osv):
'name': fields.char('Reference', size=64, select=True),
'origin': fields.char('Origin', size=64, help="Reference of the document that produced this picking.", select=True),
'backorder_id': fields.many2one('stock.picking', 'Back Order of', help="If this picking was split this field links to the picking that contains the other part that has been processed already.", select=True),
- 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True, select=True, help="Shipping type specify, goods coming in or going out."),
+ 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal')], 'Shipping Type', required=True, select=True, help="Shipping type specify, goods coming in or going out."),
'note': fields.text('Notes'),
'stock_journal_id': fields.many2one('stock.journal','Stock Journal', select=True),
'location_id': fields.many2one('stock.location', 'Location', help="Keep empty if you produce at the location where the finished products are needed." \
@@ -628,14 +625,15 @@ class stock_picking(osv.osv):
"* Done: has been processed, can't be modified or cancelled anymore\n"\
"* Cancelled: has been cancelled, can't be confirmed anymore"),
'min_date': fields.function(get_min_max_date, fnct_inv=_set_minimum_date, multi="min_max_date",
- method=True, store=True, type='datetime', string='Expected Date', select=1, help="Expected date for the picking to be processed. Will be set to date of actual processing if not specified."),
+ method=True, store=True, type='datetime', string='Expected Date', select=1, help="Expected date for the picking to be processed"),
'date': fields.datetime('Order Date', help="Date of Order", select=True),
'date_done': fields.datetime('Date Done', help="Date of Completion"),
'max_date': fields.function(get_min_max_date, fnct_inv=_set_maximum_date, multi="min_max_date",
method=True, store=True, type='datetime', string='Max. Expected Date', select=2),
'move_lines': fields.one2many('stock.move', 'picking_id', 'Internal Moves', states={'done': [('readonly', True)], 'cancel': [('readonly', True)]}),
'auto_picking': fields.boolean('Auto-Picking'),
- 'address_id': fields.many2one('res.partner.address', 'Partner', help="Address of partner"),
+ 'address_id': fields.many2one('res.partner.address', 'Address', help="Address of partner"),
+ 'partner_id': fields.related('address_id','partner_id',type='many2one',relation='res.partner',string='Partner',store=True),
'invoice_state': fields.selection([
("invoiced", "Invoiced"),
("2binvoiced", "To Be Invoiced"),
@@ -767,7 +765,7 @@ class stock_picking(osv.osv):
self.log_picking(cr, uid, ids, context=context)
return True
- def test_finnished(self, cr, uid, ids):
+ def test_finished(self, cr, uid, ids):
""" Tests whether the move is in done or cancel state or not.
@return: True or False
"""
@@ -837,6 +835,7 @@ class stock_picking(osv.osv):
""" Gets payment term from partner.
@return: Payment term
"""
+ partner_obj = self.pool.get('res.partner')
partner = picking.address_id.partner_id
return partner.property_payment_term and partner.property_payment_term.id or False
@@ -867,11 +866,8 @@ class stock_picking(osv.osv):
if type in ('in_invoice', 'in_refund'):
# Take the user company and pricetype
- price_type_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.property_valuation_price_type.id
- pricetype = self.pool.get('product.price.type').browse(cr, uid, price_type_id)
context['currency_id'] = move_line.company_id.currency_id.id
-
- amount_unit = move_line.product_id.price_get(pricetype.field, context)[move_line.product_id.id]
+ amount_unit = move_line.product_id.price_get('standard_price', context)[move_line.product_id.id]
return amount_unit
else:
return move_line.product_id.list_price
@@ -984,6 +980,8 @@ class stock_picking(osv.osv):
invoices_group[partner.id] = invoice_id
res[picking.id] = invoice_id
for move_line in picking.move_lines:
+ if move_line.state == 'cancel':
+ continue
origin = move_line.picking_id.name or ''
if move_line.picking_id.origin:
origin += ':' + move_line.picking_id.origin
@@ -1017,12 +1015,6 @@ class stock_picking(osv.osv):
uos_id = move_line.product_uom.id
account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, partner.property_account_position, account_id)
- notes = False
- if ('sale_line_id' in move_line._columns.keys()) and move_line.sale_line_id:
- notes = move_line.sale_line_id.notes
- elif ('purchase_line_id' in move_line._columns.keys()) and move_line.purchase_line_id:
- notes = move_line.purchase_line_id.notes
-
invoice_line_id = invoice_line_obj.create(cr, uid, {
'name': name,
'origin': origin,
@@ -1035,7 +1027,6 @@ class stock_picking(osv.osv):
'quantity': move_line.product_uos_qty or move_line.product_qty,
'invoice_line_tax_id': [(6, 0, tax_ids)],
'account_analytic_id': account_analytic_id,
- 'note': notes,
}, context=context)
self._invoice_line_hook(cr, uid, move_line, invoice_line_id)
@@ -1074,7 +1065,15 @@ class stock_picking(osv.osv):
if move.state not in ('cancel',):
return False
return True
-
+
+ def allow_cancel(self, cr, uid, ids, context={}):
+ for pick in self.browse(cr, uid, ids, context=context):
+ if not pick.move_lines:
+ return True
+ for move in pick.move_lines:
+ if move.state == 'done':
+ raise osv.except_osv(_('Error'), _('You cannot cancel picking because stock move is in done state !'))
+ return True
def unlink(self, cr, uid, ids, context=None):
move_obj = self.pool.get('stock.move')
if context is None:
@@ -1094,6 +1093,7 @@ class stock_picking(osv.osv):
return super(stock_picking, self).unlink(cr, uid, ids, context=context)
+ # FIXME: needs refactoring, this code is partially duplicated in stock_move.do_partial()!
def do_partial(self, cr, uid, ids, partial_datas, context=None):
""" Makes partial picking and moves done.
@param partial_datas : Dictionary containing details of partial picking
@@ -1101,19 +1101,29 @@ class stock_picking(osv.osv):
delivery moves with product_id, product_qty, uom
@return: Dictionary of values
"""
+ import pdb
+ #pdb.set_trace()
+ if context is None:
+ context = {}
+ else:
+ context = dict(context)
res = {}
move_obj = self.pool.get('stock.move')
product_obj = self.pool.get('product.product')
currency_obj = self.pool.get('res.currency')
- users_obj = self.pool.get('res.users')
uom_obj = self.pool.get('product.uom')
price_type_obj = self.pool.get('product.price.type')
sequence_obj = self.pool.get('ir.sequence')
wf_service = netsvc.LocalService("workflow")
+ partner_id = partial_datas.get('partner_id', False)
+ address_id = partial_datas.get('address_id', False)
+ delivery_date = partial_datas.get('delivery_date', False)
for pick in self.browse(cr, uid, ids, context=context):
new_picking = None
+ new_moves = []
complete, too_many, too_few = [], [], []
move_product_qty = {}
+ prodlot_ids = {}
for move in pick.move_lines:
if move.state in ('done', 'cancel'):
continue
@@ -1124,6 +1134,8 @@ class stock_picking(osv.osv):
product_uom = partial_data.get('product_uom',False)
product_price = partial_data.get('product_price',0.0)
product_currency = partial_data.get('product_currency',False)
+ prodlot_id = partial_data.get('prodlot_id')
+ prodlot_ids[move.id] = prodlot_id
if move.product_qty == product_qty:
complete.append(move)
elif move.product_qty > product_qty:
@@ -1134,35 +1146,36 @@ class stock_picking(osv.osv):
# Average price computation
if (pick.type == 'in') and (move.product_id.cost_method == 'average'):
product = product_obj.browse(cr, uid, move.product_id.id)
- user = users_obj.browse(cr, uid, uid)
- context['currency_id'] = move.company_id.currency_id.id
+ move_currency_id = move.company_id.currency_id.id
+ context['currency_id'] = move_currency_id
qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id)
- pricetype = False
- if user.company_id.property_valuation_price_type:
- pricetype = price_type_obj.browse(cr, uid, user.company_id.property_valuation_price_type.id)
- if pricetype and qty > 0:
+ if qty > 0:
new_price = currency_obj.compute(cr, uid, product_currency,
- user.company_id.currency_id.id, product_price)
+ move_currency_id, product_price)
new_price = uom_obj._compute_price(cr, uid, product_uom, new_price,
product.uom_id.id)
if product.qty_available <= 0:
new_std_price = new_price
else:
# Get the standard price
- amount_unit = product.price_get(pricetype.field, context)[product.id]
+ amount_unit = product.price_get('standard_price', context)[product.id]
new_std_price = ((amount_unit * product.qty_available)\
+ (new_price * qty))/(product.qty_available + qty)
# Write the field according to price type field
- product_obj.write(cr, uid, [product.id],
- {pricetype.field: new_std_price})
- move_obj.write(cr, uid, [move.id], {'price_unit': new_price})
+ product_obj.write(cr, uid, [product.id], {'standard_price': new_std_price})
+
+ # Record the values that were chosen in the wizard, so they can be
+ # used for inventory valuation if real-time valuation is enabled.
+ move_obj.write(cr, uid, [move.id],
+ {'price_unit': product_price,
+ 'price_currency_id': product_currency})
for move in too_few:
product_qty = move_product_qty[move.id]
- if not new_picking:
+ if not new_picking:
new_picking = self.copy(cr, uid, pick.id,
{
'name': sequence_obj.get(cr, uid, 'stock.picking.%s'%(pick.type)),
@@ -1170,48 +1183,48 @@ class stock_picking(osv.osv):
'state':'draft',
})
if product_qty != 0:
-
- move_obj.copy(cr, uid, move.id,
- {
+ defaults = {
'product_qty' : product_qty,
'product_uos_qty': product_qty, #TODO: put correct uos_qty
'picking_id' : new_picking,
'state': 'assigned',
'move_dest_id': False,
'price_unit': move.price_unit,
- })
+ }
+ prodlot_id = prodlot_ids[move.id]
+ if prodlot_id:
+ defaults.update(prodlot_id=prodlot_id)
+ new_obj = move_obj.copy(cr, uid, move.id, defaults)
move_obj.write(cr, uid, [move.id],
{
'product_qty' : move.product_qty - product_qty,
'product_uos_qty':move.product_qty - product_qty, #TODO: put correct uos_qty
-
})
if new_picking:
move_obj.write(cr, uid, [c.id for c in complete], {'picking_id': new_picking})
- for move in too_many:
- product_qty = move_product_qty[move.id]
- move_obj.write(cr, uid, [move.id],
- {
- 'product_qty' : product_qty,
- 'product_uos_qty': product_qty, #TODO: put correct uos_qty
- 'picking_id': new_picking,
- })
- else:
- for move in too_many:
- product_qty = move_product_qty[move.id]
- move_obj.write(cr, uid, [move.id],
- {
- 'product_qty': product_qty,
- 'product_uos_qty': product_qty #TODO: put correct uos_qty
- })
+ for move in complete:
+ if prodlot_ids.get(move.id):
+ move_obj.write(cr, uid, move.id, {'prodlot_id': prodlot_ids[move.id]})
+ for move in too_many:
+ product_qty = move_product_qty[move.id]
+ defaults = {
+ 'product_qty' : product_qty,
+ 'product_uos_qty': product_qty, #TODO: put correct uos_qty
+ }
+ prodlot_id = prodlot_ids.get(move.id)
+ if prodlot_ids.get(move.id):
+ defaults.update(prodlot_id=prodlot_id)
+ if new_picking:
+ defaults.update(picking_id=new_picking)
+ move_obj.write(cr, uid, [move.id], defaults)
+
# At first we confirm the new picking (if necessary)
if new_picking:
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
- # Then we finish the good picking
- if new_picking:
+ # Then we finish the good picking
self.write(cr, uid, [pick.id], {'backorder_id': new_picking})
self.action_move(cr, uid, [new_picking])
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_done', cr)
@@ -1240,7 +1253,6 @@ class stock_picking(osv.osv):
'out':'Picking List',
'in':'Reception',
'internal': 'Internal picking',
- 'delivery': 'Delivery order'
}
message = type_list.get(pick.type, _('Document')) + " '" + (pick.name or 'n/a') + "' "
if pick.min_date:
@@ -1326,7 +1338,9 @@ class stock_production_lot(osv.osv):
'prefix': fields.char('Prefix', size=64, help="Optional prefix to prepend when displaying this serial number: PREFIX/SERIAL [INT_REF]"),
'product_id': fields.many2one('product.product', 'Product', required=True),
'date': fields.datetime('Creation Date', required=True),
- 'stock_available': fields.function(_get_stock, fnct_search=_stock_search, method=True, type="float", string="Available", select="2", help="Current quantity of products with this Production Lot Number available in company warehouses"),
+ 'stock_available': fields.function(_get_stock, fnct_search=_stock_search, method=True, type="float", string="Available", select=True,
+ help="Current quantity of products with this Production Lot Number available in company warehouses",
+ digits_compute=dp.get_precision('Product UoM')),
'revisions': fields.one2many('stock.production.lot.revision', 'lot_id', 'Revisions'),
'company_id': fields.many2one('res.company', 'Company', select=True),
'move_ids': fields.one2many('stock.move', 'prodlot_id', 'Moves for this production lot', readonly=True),
@@ -1426,20 +1440,19 @@ class stock_move(osv.osv):
_columns = {
'name': fields.char('Name', size=64, required=True, select=True),
'priority': fields.selection([('0', 'Not urgent'), ('1', 'Urgent')], 'Priority'),
+ 'create_date': fields.datetime('Creation Date', readonly=True),
+ 'date': fields.datetime('Date', required=True, help="Move date: scheduled date until move is done, then date of actual move processing", readonly=True),
+ 'date_expected': fields.datetime('Scheduled Date', required=True, help="Scheduled date for the processing of this move"),
+ 'product_id': fields.many2one('product.product', 'Product', required=True, select=True, domain=[('type','<>','service')],states={'done': [('readonly', True)]}),
- 'date': fields.datetime('Creation Date', select=True),
- 'date_planned': fields.datetime('Date', required=True, help="Scheduled date for the movement of the products or real date if the move is done."),
- 'date_expected': fields.datetime('Date Expected', readonly=True,required=True, help="Scheduled date for the movement of the products"),
- 'product_id': fields.many2one('product.product', 'Product', required=True, select=True, domain=[('type','<>','service')]),
-
- 'product_qty': fields.float('Quantity', required=True),
- 'product_uom': fields.many2one('product.uom', 'Unit of Measure', required=True),
- 'product_uos_qty': fields.float('Quantity (UOS)'),
+ 'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product UoM'), required=True,states={'done': [('readonly', True)]}),
+ 'product_uom': fields.many2one('product.uom', 'Unit of Measure', required=True,states={'done': [('readonly', True)]}),
+ 'product_uos_qty': fields.float('Quantity (UOS)', digits_compute=dp.get_precision('Product UoM')),
'product_uos': fields.many2one('product.uom', 'Product UOS'),
'product_packaging': fields.many2one('product.packaging', 'Packaging', help="It specifies attributes of packaging like type, quantity of packaging,etc."),
- 'location_id': fields.many2one('stock.location', 'Source Location', required=True, select=True, help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
- 'location_dest_id': fields.many2one('stock.location', 'Destination Location', required=True, select=True, help="Location where the system will stock the finished products."),
+ 'location_id': fields.many2one('stock.location', 'Source Location', required=True, select=True,states={'done': [('readonly', True)]}, help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
+ 'location_dest_id': fields.many2one('stock.location', 'Destination Location', required=True,states={'done': [('readonly', True)]}, select=True, help="Location where the system will stock the finished products."),
'address_id': fields.many2one('res.partner.address', 'Destination Address', help="Optional address where goods are to be delivered, specifically used for allotment"),
'prodlot_id': fields.many2one('stock.production.lot', 'Production Lot', help="Production lot is used to put a serial number on the production", select=True),
@@ -1450,13 +1463,13 @@ class stock_move(osv.osv):
'move_dest_id': fields.many2one('stock.move', 'Destination Move', help="Optional: next stock move when chaining them", select=True),
'move_history_ids': fields.many2many('stock.move', 'stock_move_history_ids', 'parent_id', 'child_id', 'Move History (child moves)'),
'move_history_ids2': fields.many2many('stock.move', 'stock_move_history_ids', 'child_id', 'parent_id', 'Move History (parent moves)'),
- 'picking_id': fields.many2one('stock.picking', 'Picking List', select=True),
+ 'picking_id': fields.many2one('stock.picking', 'Picking List', select=True,states={'done': [('readonly', True)]}),
'note': fields.text('Notes'),
'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True,
help='When the stock move is created it is in the \'Draft\' state.\n After that it is set to \'Confirmed\' state.\n If stock is available state is set to \'Available\'.\n When the picking is done the state is \'Done\'.\
\nThe state is \'Waiting\' if the move is waiting for another one.'),
- 'price_unit': fields.float('Unit Price',
- digits_compute= dp.get_precision('Account')),
+ 'price_unit': fields.float('Unit Price', digits_compute= dp.get_precision('Account'), help="Technical field used to record the product cost set by the user during a picking confirmation (when average price costing method is used)"),
+ 'price_currency_id': fields.many2one('res.currency', 'Currency for average price', help="Technical field used to record the currency chosen by the user during a picking confirmation (when average price costing method is used)"),
'company_id': fields.many2one('res.company', 'Company', required=True, select=True),
'partner_id': fields.related('picking_id','address_id','partner_id',type='many2one', relation="res.partner", string="Partner", store=True, select=True),
'backorder_id': fields.related('picking_id','backorder_id',type='many2one', relation="stock.picking", string="Back Order", select=True),
@@ -1509,7 +1522,6 @@ class stock_move(osv.osv):
'priority': '1',
'product_qty': 1.0,
'scrapped' : False,
- 'date_planned': time.strftime('%Y-%m-%d %H:%M:%S'),
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.move', context=c),
'date_expected': time.strftime('%Y-%m-%d %H:%M:%S'),
@@ -1517,9 +1529,9 @@ class stock_move(osv.osv):
def write(self, cr, uid, ids, vals, context=None):
if uid != 1:
+ frozen_fields = set(['product_qty', 'product_uom', 'product_uos_qty', 'product_uos', 'location_id', 'location_dest_id', 'product_id'])
for move in self.browse(cr, uid, ids):
if move.state == 'done':
- frozen_fields = set(['product_qty', 'product_uom', 'product_uos_qty', 'product_uos', 'location_id', 'location_dest_id', 'product_id'])
if frozen_fields.intersection(vals):
raise osv.except_osv(_('Operation forbidden'),
_('Quantities, UoMs, Products and Locations cannot be modified on stock moves that have already been processed (except by the Administrator)'))
@@ -1641,21 +1653,48 @@ class stock_move(osv.osv):
)
if dest:
if dest[1] == 'transparent':
+ newdate = (datetime.strptime(m.date, '%Y-%m-%d %H:%M:%S') + relativedelta(days=dest[2] or 0)).strftime('%Y-%m-%d')
self.write(cr, uid, [m.id], {
- 'date_planned': (datetime.strptime(m.date_planned, '%Y-%m-%d %H:%M:%S') + \
- relativedelta(days=dest[2] or 0)).strftime('%Y-%m-%d'),
+ 'date': newdate,
'location_dest_id': dest[0].id})
+ if m.picking_id and (dest[3] or dest[5]):
+ self.pool.get('stock.picking').write(cr, uid, [m.picking_id.id], {
+ 'stock_journal_id': dest[3] or m.picking_id.stock_journal_id.id,
+ 'type': dest[5] or m.picking_id.type
+ }, context=context)
+ m.location_dest_id = dest[0]
+ res2 = self._chain_compute(cr, uid, [m], context=context)
+ for pick_id in res2.keys():
+ result.setdefault(pick_id, [])
+ result[pick_id] += res2[pick_id]
else:
result.setdefault(m.picking_id, [])
result[m.picking_id].append( (m, dest) )
return result
-
+ def _create_chained_picking(self, cr, uid, pick_name,picking,ptype,move, context=None):
+ res_obj = self.pool.get('res.company')
+ picking_obj = self.pool.get('stock.picking')
+ pick_id= picking_obj.create(cr, uid, {
+ 'name': pick_name,
+ 'origin': str(picking.origin or ''),
+ 'type': ptype,
+ 'note': picking.note,
+ 'move_type': picking.move_type,
+ 'auto_picking': move[0][1][1] == 'auto',
+ 'stock_journal_id': move[0][1][3],
+ 'company_id': move[0][1][4] or res_obj._company_default_get(cr, uid, 'stock.company', context=context),
+ 'address_id': picking.address_id.id,
+ 'invoice_state': 'none',
+ 'date': picking.date,
+ })
+ return pick_id
def action_confirm(self, cr, uid, ids, context=None):
""" Confirms stock move.
@return: List of ids.
"""
moves = self.browse(cr, uid, ids)
self.write(cr, uid, ids, {'state': 'confirmed'})
+ i = 0
def create_chained_picking(self, cr, uid, moves, context=None):
new_moves = []
@@ -1667,29 +1706,10 @@ class stock_move(osv.osv):
for picking, todo in self._chain_compute(cr, uid, moves, context=context).items():
ptype = todo[0][1][5] and todo[0][1][5] or self.pool.get('stock.location').picking_type_get(cr, uid, todo[0][0].location_dest_id, todo[0][1][0])
pick_name = picking.name or ''
- if ptype == 'delivery':
- pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.delivery')
- check_picking_ids = picking_obj.search(cr, uid, [('name','=',picking.name),('origin','=',str(picking.origin or '')),('type','=',ptype),('move_type','=',picking.move_type)])
- if check_picking_ids:
- pickid = check_picking_ids[0]
+ if picking:
+ pickid = self._create_chained_picking(cr, uid, pick_name,picking,ptype,todo,context)
else:
- if picking:
- pickid = picking_obj.create(cr, uid, {
- 'name': pick_name,
- 'origin': str(picking.origin or ''),
- 'type': ptype,
- 'note': picking.note,
- 'move_type': picking.move_type,
- 'auto_picking': todo[0][1][1] == 'auto',
- 'stock_journal_id': todo[0][1][3],
- 'company_id': todo[0][1][4] or res_obj._company_default_get(cr, uid, 'stock.company', context=context),
- 'address_id': picking.address_id.id,
- 'invoice_state': 'none',
- 'date': picking.date,
- 'sale_id':' sale_id' in picking._columns.keys() and picking.sale_id.id or False
- })
- else:
- pickid = False
+ pickid = False
for move, (loc, auto, delay, journal, company_id, ptype) in todo:
new_id = move_obj.copy(cr, uid, move.id, {
'location_id': move.location_dest_id.id,
@@ -1699,7 +1719,7 @@ class stock_move(osv.osv):
'state': 'waiting',
'company_id': company_id or res_obj._company_default_get(cr, uid, 'stock.company', context=context) ,
'move_history_ids': [],
- 'date_planned': (datetime.strptime(move.date_planned, '%Y-%m-%d %H:%M:%S') + relativedelta(days=delay or 0)).strftime('%Y-%m-%d'),
+ 'date': (datetime.strptime(move.date, '%Y-%m-%d %H:%M:%S') + relativedelta(days=delay or 0)).strftime('%Y-%m-%d'),
'move_history_ids2': []}
)
move_obj.write(cr, uid, [move.id], {
@@ -1788,6 +1808,7 @@ class stock_move(osv.osv):
def setlast_tracking(self, cr, uid, ids, context=None):
tracking_obj = self.pool.get('stock.tracking')
+ tracking = context.get('tracking', False)
picking = self.browse(cr, uid, ids)[0].picking_id
if picking:
last_track = [line.tracking_id.id for line in picking.move_lines if line.tracking_id]
@@ -1831,56 +1852,131 @@ class stock_move(osv.osv):
wf_service.trg_trigger(uid, 'stock.move', id, cr)
return True
- def _get_accounting_values(self, cr, uid, move, context=None):
+ def _get_accounting_data_for_valuation(self, cr, uid, move, context=None):
+ """
+ Return the accounts and journal to use to post Journal Entries for the real-time
+ valuation of the move.
+
+ :param context: context dictionary that can explicitly mention the company to consider via the 'force_company' key
+ :raise: osv.except_osv() is any mandatory account or journal is not defined.
+ """
product_obj=self.pool.get('product.product')
- product_uom_obj = self.pool.get('product.uom')
- price_type_obj = self.pool.get('product.price.type')
- accounts = product_obj.get_product_accounts(cr,uid,move.product_id.id,context)
+ accounts = product_obj.get_product_accounts(cr, uid, move.product_id.id, context)
acc_src = accounts['stock_account_input']
acc_dest = accounts['stock_account_output']
acc_variation = accounts.get('property_stock_variation', False)
journal_id = accounts['stock_journal']
- if context is None:
- context = {}
-
if not acc_src:
- raise osv.except_osv(_('Error!'), _('There is no stock input account defined ' \
- 'for this product: "%s" (id: %d)') % \
+ raise osv.except_osv(_('Error!'), _('There is no stock input account defined for this product or its category: "%s" (id: %d)') % \
(move.product_id.name, move.product_id.id,))
if not acc_dest:
- raise osv.except_osv(_('Error!'), _('There is no stock output account defined ' \
- 'for this product: "%s" (id: %d)') % \
+ raise osv.except_osv(_('Error!'), _('There is no stock output account defined for this product or its category: "%s" (id: %d)') % \
(move.product_id.name, move.product_id.id,))
if not journal_id:
- raise osv.except_osv(_('Error!'), _('There is no journal defined '\
- 'on the product category: "%s" (id: %d)') % \
+ raise osv.except_osv(_('Error!'), _('There is no journal defined on the product category: "%s" (id: %d)') % \
(move.product_id.categ_id.name, move.product_id.categ_id.id,))
if not acc_variation:
- raise osv.except_osv(_('Error!'), _('There is no variation account defined '\
- 'on the product category: "%s" (id: %d)') % \
+ raise osv.except_osv(_('Error!'), _('There is no inventory variation account defined on the product category: "%s" (id: %d)') % \
(move.product_id.categ_id.name, move.product_id.categ_id.id,))
- if acc_src != acc_dest:
- default_uom = move.product_id.uom_id.id
- q = product_uom_obj._compute_qty(cr, uid, move.product_uom.id, move.product_qty, default_uom)
- if move.product_id.cost_method == 'average' and move.price_unit:
- amount = q * move.price_unit
- # Base computation on valuation price type
- else:
- context['currency_id'] = move.company_id.currency_id.id
- pricetype = price_type_obj.browse(cr,uid,move.company_id.property_valuation_price_type.id)
- amount_unit = move.product_id.price_get(pricetype.field, context)[move.product_id.id]
- amount = amount_unit * q or 1.0
- return journal_id, acc_src, acc_dest, acc_variation, amount
+
+ return journal_id, acc_src, acc_dest, acc_variation
+
+ def _get_reference_accounting_values_for_valuation(self, cr, uid, move, context=None):
+ """
+ Return the reference amount and reference currency representing the inventory valuation for this move.
+ These reference values should possibly be converted before being posted in Journals to adapt to the primary
+ and secondary currencies of the relevant accounts.
+ """
+ product_obj=self.pool.get('product.product')
+ product_uom_obj = self.pool.get('product.uom')
+ price_type_obj = self.pool.get('product.price.type')
+
+ # by default the reference currency is that of the move's company
+ reference_currency_id = move.company_id.currency_id.id
+
+ default_uom = move.product_id.uom_id.id
+ qty = product_uom_obj._compute_qty(cr, uid, move.product_uom.id, move.product_qty, default_uom)
+
+ # if product is set to average price and a specific value was entered in the picking wizard,
+ # we use it
+ if move.product_id.cost_method == 'average' and move.price_unit:
+ reference_amount = qty * move.price_unit
+ reference_currency_id = move.price_currency_id.id or reference_currency_id
+
+ # Otherwise we default to the company's valuation price type, considering that the values of the
+ # valuation field are expressed in the default currency of the move's company.
+ else:
+ if context is None:
+ context = {}
+ currency_ctx = dict(context, currency_id = move.company_id.currency_id.id)
+ amount_unit = move.product_id.price_get('standard_price', currency_ctx)[move.product_id.id]
+ reference_amount = amount_unit * qty or 1.0
+
+ return reference_amount, reference_currency_id
+
+
+ def _create_product_valuation_moves(self, cr, uid, move, context=None):
+ """
+ Generate the appropriate accounting moves if the product being moves is subject
+ to real_time valuation tracking, and the source or destination location is
+ a transit location or is outside of the company.
+ """
+ if move.product_id.valuation == 'real_time': # FIXME: product valuation should perhaps be a property?
+ if context is None:
+ context = {}
+ src_company_ctx = dict(context,force_company=move.location_id.company_id.id)
+ dest_company_ctx = dict(context,force_company=move.location_dest_id.company_id.id)
+ account_moves = []
+ # Outgoing moves (or cross-company output part)
+ if move.location_id.company_id \
+ and (move.location_id.usage == 'internal' and move.location_dest_id.usage != 'internal'\
+ or move.location_id.company_id != move.location_dest_id.company_id):
+ journal_id, acc_src, acc_dest, acc_variation = self._get_accounting_data_for_valuation(cr, uid, move, src_company_ctx)
+ reference_amount, reference_currency_id = self._get_reference_accounting_values_for_valuation(cr, uid, move, src_company_ctx)
+ account_moves += [(journal_id, self._create_account_move_line(cr, uid, move, acc_variation, acc_dest, reference_amount, reference_currency_id, context))]
+
+ # Incoming moves (or cross-company input part)
+ if move.location_dest_id.company_id \
+ and (move.location_id.usage != 'internal' and move.location_dest_id.usage == 'internal'\
+ or move.location_id.company_id != move.location_dest_id.company_id):
+ journal_id, acc_src, acc_dest, acc_variation = self._get_accounting_data_for_valuation(cr, uid, move, dest_company_ctx)
+ reference_amount, reference_currency_id = self._get_reference_accounting_values_for_valuation(cr, uid, move, src_company_ctx)
+ account_moves += [(journal_id, self._create_account_move_line(cr, uid, move, acc_src, acc_variation, reference_amount, reference_currency_id, context))]
+
+ move_obj = self.pool.get('account.move')
+ for j_id, move_lines in account_moves:
+ move_obj.create(cr, uid,
+ {'name': move.name,
+ 'journal_id': j_id,
+ 'line_id': move_lines,
+ 'ref': move.picking_id and move.picking_id.name})
+
def action_done(self, cr, uid, ids, context=None):
""" Makes the move done and if all moves are done, it will finish the picking.
@return:
"""
+ track_flag = False
+ partial_datas=''
picking_ids = []
- move_obj = self.pool.get('account.move')
+ product_uom_obj = self.pool.get('product.uom')
+ price_type_obj = self.pool.get('product.price.type')
+ product_obj = self.pool.get('product.product')
+ partial_obj=self.pool.get('stock.partial.picking')
+ partial_id=partial_obj.search(cr,uid,[])
+ if partial_id:
+ partial_datas=partial_obj.read(cr,uid,partial_id)[0]
if context is None:
context = {}
+
+ todo = []
+ for move in self.browse(cr, uid, ids):
+ if move.state=="draft":
+ todo.append(move.id)
+ if todo:
+ self.action_confirm(cr, uid, todo, context=context)
+
for move in self.browse(cr, uid, ids):
if move.picking_id:
picking_ids.append(move.picking_id.id)
@@ -1896,44 +1992,11 @@ class stock_move(osv.osv):
if move.move_dest_id.auto_validate:
self.action_done(cr, uid, [move.move_dest_id.id], context=context)
- #
- # Accounting Entries
- #
- acc_src = None
- acc_dest = None
- if move.product_id.valuation == 'real_time':
- lines = []
- if ((move.location_id.usage == 'internal' and move.location_dest_id.usage == 'customer') or (move.location_id.usage == 'internal' and move.location_dest_id.usage == 'transit')):
- if move.location_id.company_id:
- context.update({'force_company': move.location_id.company_id.id})
- journal_id, acc_src, acc_dest, acc_variation, amount = self._get_accounting_values(cr, uid, move, context)
- lines = [(journal_id, self.create_account_move(cr, uid, move, acc_dest, acc_variation, amount, context))]
-
- elif ((move.location_id.usage == 'supplier' and move.location_dest_id.usage == 'internal') or (move.location_id.usage == 'transit' and move.location_dest_id.usage == 'internal')):
- if move.location_dest_id.company_id:
- context.update({'force_company': move.location_dest_id.company_id.id})
- journal_id, acc_src, acc_dest, acc_variation, amount = self._get_accounting_values(cr, uid, move, context)
- lines = [(journal_id, self.create_account_move(cr, uid, move, acc_variation, acc_src, amount, context))]
- elif (move.location_id.usage == 'internal' and move.location_dest_id.usage == 'internal' and move.location_id.company_id != move.location_dest_id.company_id):
- if move.location_id.company_id:
- context.update({'force_company': move.location_id.company_id.id})
- journal_id, acc_src, acc_dest, acc_variation, amount = self._get_accounting_values(cr, uid, move, context)
- line1 = [(journal_id, self.create_account_move(cr, uid, move, acc_dest, acc_variation, amount, context))]
- if move.location_dest_id.company_id:
- context.update({'force_company': move.location_dest_id.company_id.id})
- journal_id, acc_src, acc_dest, acc_variation, amount = self._get_accounting_values(cr, uid, move, context)
- line2 = [(journal_id, self.create_account_move(cr, uid, move, acc_variation, acc_src, amount, context))]
- lines = line1 + line2
- for j_id, line in lines:
- move_obj.create(cr, uid, {
- 'name': move.name,
- 'journal_id': j_id,
- 'type':'cont_voucher',
- 'line_id': line,
- 'ref': move.picking_id and move.picking_id.name,
- })
-
- self.write(cr, uid, ids, {'state': 'done', 'date_planned': time.strftime('%Y-%m-%d %H:%M:%S')})
+ self._create_product_valuation_moves(cr, uid, move, context=context)
+ prodlot_id =partial_datas and partial_datas.get('move%s_prodlot_id'%(move.id), False)
+ if prodlot_id:
+ self.write(cr, uid, [move.id], {'prodlot_id': prodlot_id})
+ self.write(cr, uid, ids, {'state': 'done', 'date': time.strftime('%Y-%m-%d %H:%M:%S')})
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_trigger(uid, 'stock.move', id, cr)
@@ -1946,31 +2009,55 @@ class stock_move(osv.osv):
picking_obj.log_picking(cr, uid, picking_ids, context=context)
return True
- def create_account_move(self, cr, uid, move,account_id, account_variation, amount, context=None):
- if context is None:
- context = {}
- partner_id = move.picking_id.address_id and (move.picking_id.address_id.partner_id and move.picking_id.address_id.partner_id.id or False) or False
- lines=[(0, 0, {
- 'name': move.name,
- 'quantity': move.product_qty,
- 'product_id': move.product_id and move.product_id.id or False,
- 'credit': amount,
- 'account_id': account_id,
- 'ref': move.picking_id and move.picking_id.name or False,
- 'date': time.strftime('%Y-%m-%d') ,
- 'partner_id': partner_id,
- }),
- (0, 0, {
- 'name': move.name,
- 'product_id': move.product_id and move.product_id.id or False,
- 'quantity': move.product_qty,
- 'debit': amount,
- 'account_id': account_variation,
- 'ref': move.picking_id and move.picking_id.name or False,
- 'date': time.strftime('%Y-%m-%d') ,
- 'partner_id': partner_id,
- })]
- return lines
+ def _create_account_move_line(self, cr, uid, move, src_account_id, dest_account_id, reference_amount, reference_currency_id, context=None):
+ """
+ Generate the account.move.line values to post to track the stock valuation difference due to the
+ processing of the given stock move.
+ """
+ # prepare default values considering that the destination accounts have the reference_currency_id as their main currency
+ partner_id = (move.picking_id.address_id and move.picking_id.address_id.partner_id and move.picking_id.address_id.partner_id.id) or False
+ debit_line_vals = {
+ 'name': move.name,
+ 'product_id': move.product_id and move.product_id.id or False,
+ 'quantity': move.product_qty,
+ 'ref': move.picking_id and move.picking_id.name or False,
+ 'date': time.strftime('%Y-%m-%d'),
+ 'partner_id': partner_id,
+ 'debit': reference_amount,
+ 'account_id': dest_account_id,
+ }
+ credit_line_vals = {
+ 'name': move.name,
+ 'product_id': move.product_id and move.product_id.id or False,
+ 'quantity': move.product_qty,
+ 'ref': move.picking_id and move.picking_id.name or False,
+ 'date': time.strftime('%Y-%m-%d'),
+ 'partner_id': partner_id,
+ 'credit': reference_amount,
+ 'account_id': src_account_id,
+ }
+
+ # if we are posting to accounts in a different currency, provide correct values in both currencies correctly
+ # when compatible with the optional secondary currency on the account.
+ # Financial Accounts only accept amounts in secondary currencies if there's no secondary currency on the account
+ # or if it's the same as that of the secondary amount being posted.
+ account_obj = self.pool.get('account.account')
+ src_acct, dest_acct = account_obj.browse(cr, uid, [src_account_id, dest_account_id], context=context)
+ src_main_currency_id = src_acct.company_id.currency_id.id
+ dest_main_currency_id = dest_acct.company_id.currency_id.id
+ cur_obj = self.pool.get('res.currency')
+ if reference_currency_id != src_main_currency_id:
+ # fix credit line:
+ credit_line_vals['credit'] = cur_obj.compute(cr, uid, reference_currency_id, src_main_currency_id, reference_amount, context=context)
+ if (not src_acct.currency_id) or src_acct.currency_id.id == reference_currency_id:
+ credit_line_vals.update(currency_id=reference_currency_id, amount_currency=reference_amount)
+ if reference_currency_id != dest_main_currency_id:
+ # fix debit line:
+ debit_line_vals['debit'] = cur_obj.compute(cr, uid, reference_currency_id, dest_main_currency_id, reference_amount, context=context)
+ if (not dest_acct.currency_id) or dest_acct.currency_id.id == reference_currency_id:
+ debit_line_vals.update(currency_id=reference_currency_id, amount_currency=reference_amount)
+
+ return [(0, 0, debit_line_vals), (0, 0, credit_line_vals)]
def unlink(self, cr, uid, ids, context=None):
if context is None:
@@ -2159,26 +2246,34 @@ class stock_move(osv.osv):
return res
+ # FIXME: needs refactoring, this code is partially duplicated in stock_picking.do_partial()!
def do_partial(self, cr, uid, ids, partial_datas, context=None):
""" Makes partial pickings and moves done.
@param partial_datas: Dictionary containing details of partial picking
like partner_id, address_id, delivery_date, delivery
moves with product_id, product_qty, uom
"""
+ import pdb
+ #pdb.set_trace()
res = {}
picking_obj = self.pool.get('stock.picking')
product_obj = self.pool.get('product.product')
currency_obj = self.pool.get('res.currency')
- users_obj = self.pool.get('res.users')
uom_obj = self.pool.get('product.uom')
price_type_obj = self.pool.get('product.price.type')
+ sequence_obj = self.pool.get('ir.sequence')
wf_service = netsvc.LocalService("workflow")
+ partner_id = partial_datas.get('partner_id', False)
+ address_id = partial_datas.get('address_id', False)
+ delivery_date = partial_datas.get('delivery_date', False)
+ new_moves = []
if context is None:
context = {}
complete, too_many, too_few = [], [], []
move_product_qty = {}
+ prodlot_ids = {}
for move in self.browse(cr, uid, ids, context=context):
if move.state in ('done', 'cancel'):
continue
@@ -2189,6 +2284,7 @@ class stock_move(osv.osv):
product_uom = partial_data.get('product_uom',False)
product_price = partial_data.get('product_price',0.0)
product_currency = partial_data.get('product_currency',False)
+ prodlot_ids[move.id] = partial_data.get('prodlot_id')
if move.product_qty == product_qty:
complete.append(move)
elif move.product_qty > product_qty:
@@ -2199,42 +2295,46 @@ class stock_move(osv.osv):
# Average price computation
if (move.picking_id.type == 'in') and (move.product_id.cost_method == 'average'):
product = product_obj.browse(cr, uid, move.product_id.id)
- user = users_obj.browse(cr, uid, uid)
- context['currency_id'] = move.company_id.currency_id.id
+ move_currency_id = move.company_id.currency_id.id
+ context['currency_id'] = move_currency_id
qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id)
- pricetype = False
- if user.company_id.property_valuation_price_type:
- pricetype = price_type_obj.browse(cr, uid, user.company_id.property_valuation_price_type.id)
- if pricetype and qty > 0:
+ if qty > 0:
new_price = currency_obj.compute(cr, uid, product_currency,
- user.company_id.currency_id.id, product_price)
+ move_currency_id, product_price)
new_price = uom_obj._compute_price(cr, uid, product_uom, new_price,
product.uom_id.id)
if product.qty_available <= 0:
new_std_price = new_price
else:
# Get the standard price
- amount_unit = product.price_get(pricetype.field, context)[product.id]
+ amount_unit = product.price_get('standard_price', context)[product.id]
new_std_price = ((amount_unit * product.qty_available)\
+ (new_price * qty))/(product.qty_available + qty)
- # Write the field according to price type field
- product_obj.write(cr, uid, [product.id],
- {pricetype.field: new_std_price})
- self.write(cr, uid, [move.id], {'price_unit': new_price})
+ product_obj.write(cr, uid, [product.id],{'standard_price': new_std_price})
+
+ # Record the values that were chosen in the wizard, so they can be
+ # used for inventory valuation if real-time valuation is enabled.
+ self.write(cr, uid, [move.id],
+ {'price_unit': product_price,
+ 'price_currency_id': product_currency,
+ })
for move in too_few:
product_qty = move_product_qty[move.id]
if product_qty != 0:
- new_move = self.copy(cr, uid, move.id,
- {
- 'product_qty' : product_qty,
- 'product_uos_qty': product_qty,
- 'picking_id' : move.picking_id.id,
- 'state': 'assigned',
- 'move_dest_id': False,
- 'price_unit': move.price_unit,
- })
+ defaults = {
+ 'product_qty' : product_qty,
+ 'product_uos_qty': product_qty,
+ 'picking_id' : move.picking_id.id,
+ 'state': 'assigned',
+ 'move_dest_id': False,
+ 'price_unit': move.price_unit,
+ }
+ prodlot_id = prodlot_ids[move.id]
+ if prodlot_id:
+ defaults.update(prodlot_id=prodlot_id)
+ new_move = self.copy(cr, uid, move.id, defaults)
complete.append(self.browse(cr, uid, new_move))
self.write(cr, uid, move.id,
{
@@ -2252,6 +2352,8 @@ class stock_move(osv.osv):
complete.append(move)
for move in complete:
+ if prodlot_ids.get(move.id):
+ self.write(cr, uid, [move.id],{'prodlot_id': prodlot_ids.get(move.id)})
self.action_done(cr, uid, [move.id], context=context)
if move.picking_id.id :
# TOCHECK : Done picking if all moves are done
@@ -2265,10 +2367,7 @@ class stock_move(osv.osv):
picking_obj.action_move(cr, uid, [move.picking_id.id])
wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr)
- done_move_ids = []
- for move in complete:
- done_move_ids.append(move.id)
- return done_move_ids
+ return [move.id for move in complete]
stock_move()
@@ -2304,13 +2403,19 @@ class stock_inventory(osv.osv):
"""
if context is None:
context = {}
+
+ # to perform the correct inventory corrections we need analyze stock location by
+ # location, never recursively, so we use a special context
+ product_context = dict(context, compute_child=False)
+
+ location_obj = self.pool.get('stock.location')
for inv in self.browse(cr, uid, ids):
move_ids = []
+ move_line = []
for line in inv.inventory_line_id:
pid = line.product_id.id
-
- amount = self.pool.get('stock.location')._product_get(cr, uid, line.location_id.id, [pid], {'uom': line.product_uom.id})[pid]
- #TOCHECK: Why put restriction like new inventory qty should greater available qty ?
+ product_context.update(uom=line.product_uom.id)
+ amount = location_obj._product_get(cr, uid, line.location_id.id, [pid], product_context)[pid]
change = line.product_qty - amount
lot_id = line.prod_lot_id.id
if change:
@@ -2321,7 +2426,7 @@ class stock_inventory(osv.osv):
'product_uom': line.product_uom.id,
'prodlot_id': lot_id,
'date': inv.date,
- 'date_planned': inv.date,
+ 'date': inv.date,
'state': 'done'
}
if change > 0:
@@ -2375,7 +2480,7 @@ class stock_inventory_line(osv.osv):
'location_id': fields.many2one('stock.location', 'Location', required=True),
'product_id': fields.many2one('product.product', 'Product', required=True, select=True),
'product_uom': fields.many2one('product.uom', 'Product UOM', required=True),
- 'product_qty': fields.float('Quantity'),
+ 'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product UoM')),
'company_id': fields.related('inventory_id','company_id',type='many2one',relation='res.company',string='Company',store=True, select=True),
'prod_lot_id': fields.many2one('stock.production.lot', 'Production Lot', domain="[('product_id','=',product_id)]"),
'state': fields.related('inventory_id','state',type='char',string='State',readonly=True),
@@ -2455,6 +2560,7 @@ class stock_picking_move_wizard(osv.osv_memory):
def action_move(self, cr, uid, ids, context=None):
move_obj = self.pool.get('stock.move')
picking_obj = self.pool.get('stock.picking')
+ account_move_obj = self.pool.get('account.move')
for act in self.read(cr, uid, ids):
move_lines = move_obj.browse(cr, uid, act['move_ids'])
for line in move_lines:
@@ -2471,75 +2577,5 @@ class stock_picking_move_wizard(osv.osv_memory):
stock_picking_move_wizard()
-class report_products_to_received_planned(osv.osv):
- _name = "report.products.to.received.planned"
- _description = "Received Products vs Planned"
- _auto = False
- _columns = {
- 'date':fields.date('Date'),
- 'qty': fields.integer('Actual Qty'),
- 'planned_qty': fields.integer('Planned Qty'),
-
- }
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'report_products_to_received_planned')
- cr.execute("""
- create or replace view report_products_to_received_planned as (
- select stock.date, min(stock.id) as id, sum(stock.product_qty) as qty, 0 as planned_qty
- from stock_picking picking
- inner join stock_move stock
- on picking.id = stock.picking_id and picking.type = 'in'
- where stock.date between (select cast(date_trunc('week', current_date) as date)) and (select cast(date_trunc('week', current_date) as date) + 7)
- group by stock.date
-
- union
-
- select stock.date_planned, min(stock.id) as id, 0 as actual_qty, sum(stock.product_qty) as planned_qty
- from stock_picking picking
- inner join stock_move stock
- on picking.id = stock.picking_id and picking.type = 'in'
- where stock.date_planned between (select cast(date_trunc('week', current_date) as date)) and (select cast(date_trunc('week', current_date) as date) + 7)
- group by stock.date_planned
- )
- """)
-
-report_products_to_received_planned()
-
-class report_delivery_products_planned(osv.osv):
- _name = "report.delivery.products.planned"
- _description = "Delivered products vs Planned"
- _auto = False
- _columns = {
- 'date':fields.date('Date'),
- 'qty': fields.integer('Actual Qty'),
- 'planned_qty': fields.integer('Planned Qty'),
-
- }
-
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'report_delivery_products_planned')
- cr.execute("""
- create or replace view report_delivery_products_planned as (
- select stock.date, min(stock.id) as id, sum(stock.product_qty) as qty, 0 as planned_qty
- from stock_picking picking
- inner join stock_move stock
- on picking.id = stock.picking_id and picking.type = 'out'
- where stock.date between (select cast(date_trunc('week', current_date) as date)) and (select cast(date_trunc('week', current_date) as date) + 7)
- group by stock.date
-
- union
-
- select stock.date_planned, min(stock.id), 0 as actual_qty, sum(stock.product_qty) as planned_qty
- from stock_picking picking
- inner join stock_move stock
- on picking.id = stock.picking_id and picking.type = 'out'
- where stock.date_planned between (select cast(date_trunc('week', current_date) as date)) and (select cast(date_trunc('week', current_date) as date) + 7)
- group by stock.date_planned
-
-
- )
- """)
-
-report_delivery_products_planned()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/stock_data.xml b/addons/stock/stock_data.xml
index 6933db289a0..be1881634eb 100644
--- a/addons/stock/stock_data.xml
+++ b/addons/stock/stock_data.xml
@@ -74,11 +74,17 @@
view
+
+
+ Delivery Orders
+
Output
internal
customer
+ out
+
Stock
@@ -114,7 +120,13 @@
-
+
+
+
+ Shipping Delay
+
+
+
diff --git a/addons/stock/stock_demo.xml b/addons/stock/stock_demo.xml
index 91acb5c6406..33d130c2d77 100644
--- a/addons/stock/stock_demo.xml
+++ b/addons/stock/stock_demo.xml
@@ -3,8 +3,8 @@
+ Resource: stock.location
+ -->
IT Suppliers
@@ -30,30 +30,18 @@
customer
-
- Stock Level 1
-
-
Shelf 2
-
-
-
- Sub Products
-
-
-
- Workshop
Shelf 1
-
+
+ Resource: stock.inventory
+ -->
Starting Inventory
@@ -62,8 +50,8 @@
+ Resource: stock.inventory.line
+ -->
@@ -189,7 +177,7 @@
-
+
@@ -206,7 +194,7 @@
-
+
@@ -223,7 +211,7 @@
-
+
@@ -234,14 +222,14 @@
-
+
-
+
@@ -263,17 +251,18 @@
-
+
property_stock_variation
-
-
+
+
-
+
PACKO1
out
direct
2binvoiced
+
diff --git a/addons/stock/stock_report.xml b/addons/stock/stock_report.xml
index 1332e840e10..e634d27153e 100644
--- a/addons/stock/stock_report.xml
+++ b/addons/stock/stock_report.xml
@@ -5,7 +5,6 @@
-
diff --git a/addons/stock/stock_sequence.xml b/addons/stock/stock_sequence.xml
index 06d898c6637..cabf24dda5b 100644
--- a/addons/stock/stock_sequence.xml
+++ b/addons/stock/stock_sequence.xml
@@ -20,14 +20,9 @@
stock.picking.internal
-
- Picking Delivery
- stock.picking.delivery
-
-
-
+
Picking IN
@@ -50,13 +45,6 @@
5
-
- Picking DLV
- stock.picking.delivery
- DLV/
- 5
-
-
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 84670ab514b..2a4bec6fe3b 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -2,13 +2,13 @@
-
-
+
+
-
-
+
+
@@ -41,7 +41,7 @@
+ type="action" icon="terp-stock_effects-object-colorize"/>
@@ -85,46 +85,58 @@
stock.inventory
form
-
+
-
+
-
-
+ type="action" icon="terp-stock_effects-object-colorize" states="draft"/>
+
+
-
+
+
-
+ type="action" icon="terp-stock_effects-object-colorize"/>
+
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -132,7 +144,7 @@
- Periodical Inventory
+ Physical Inventories
ir.actions.act_window
stock.inventory
form
@@ -143,7 +155,7 @@
- Draft Periodical Inventories
+ Draft Physical Inventories
ir.actions.act_window
stock.inventory
form
@@ -200,7 +212,7 @@
@@ -288,7 +300,22 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -342,7 +369,7 @@
{'full':'1',"search_default_available":1}
-
+
#
# Lot composition (history)
@@ -363,8 +390,8 @@
-
-
+
+
@@ -388,8 +415,8 @@
-
-
+
+
@@ -481,7 +508,7 @@
{'full':1, 'search_default_in_location':1}
-
+
stock.location.tree
@@ -502,7 +529,7 @@
tree
-
+
stock.warehouse
@@ -541,7 +568,7 @@
form
-
+
stock.picking.move.wizard.form
@@ -554,7 +581,7 @@
-
+
@@ -562,14 +589,14 @@
-
-
+ id="act_stock_picking_move_wizard"/>
+
stock.picking.calendar
stock.picking
@@ -597,7 +624,7 @@
-
+
@@ -625,7 +652,6 @@
-
@@ -633,10 +659,9 @@
-
-
@@ -678,14 +702,14 @@
-
-
+
+
-
-
+
+
@@ -708,10 +732,10 @@
+
-
@@ -722,8 +746,8 @@
-
-
+
+
@@ -761,228 +785,18 @@
+
+
+
+
-
- stock.picking.delivery.tree
- stock.picking
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- stock.picking.delivery.form
- stock.picking
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- stock.view_stock_delivery_filter.list.select
- stock.picking
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Delivery Orders
- stock.picking
- ir.actions.act_window
- form
- tree,form,calendar
- [('type','=','delivery')]
- {'contact_display': 'partner',"search_default_available":1}
-
-
-
-
- tree
-
-
-
-
-
- form
-
-
-
-
-
- calendar
-
-
-
-
-
+
+ stock.move.tree3
+ stock.move
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
stock.move.form2
@@ -1712,8 +1554,8 @@
+
-
@@ -1739,7 +1581,7 @@
-
+
@@ -1747,15 +1589,15 @@
-
- stock.move.search2
+
+ stock.move.incoming.search2
stock.move
search
-
+
@@ -1767,12 +1609,49 @@
+
-
+
+
+
+
+
+
+
+
+
+
+
+ stock.move.outgoing.search2
+ stock.move
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1791,7 +1670,7 @@
['|','&',('picking_id','=',False),('location_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','in')]
{"search_default_receive":1}
-
+
@@ -1888,80 +1767,6 @@
-
-
-
-
- Products To Received
- report.products.to.received.planned
- tree
-
-
-
-
-
-
-
-
-
-
- Products To Received
- report.products.to.received.planned
- graph
-
-
-
-
-
-
-
-
-
-
- Number of Products to receive Vs planned
- report.products.to.received.planned
- ir.actions.act_window
- form
- graph,tree
-
-
-
-
-
- Delivery Products
- report.delivery.products.planned
- tree
-
-
-
-
-
-
-
-
-
-
- Delivery Products
- report.delivery.products.planned
- graph
-
-
-
-
-
-
-
-
-
-
- Delivery Products Vs Planned
- report.delivery.products.planned
- ir.actions.act_window
- form
- graph,tree
-
-
-
Customers Packings
stock.picking
@@ -1999,7 +1804,7 @@
['|','&',('picking_id','=',False),('location_dest_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','out')]
{"search_default_receive":1}
-
+
@@ -2061,7 +1866,7 @@
diff --git a/addons/stock/stock_workflow.xml b/addons/stock/stock_workflow.xml
index 3254f7b6984..7a1f786ebf8 100644
--- a/addons/stock/stock_workflow.xml
+++ b/addons/stock/stock_workflow.xml
@@ -86,21 +86,23 @@
- test_finnished()
+ test_finished()
- not test_finnished()
+ not test_finished()
+ allow_cancel()
button_cancel
+ allow_cancel()
button_cancel
diff --git a/addons/stock/test/stock_report.yml b/addons/stock/test/stock_report.yml
index 491fd7fa9d7..f6bcd60ad5e 100644
--- a/addons/stock/test/stock_report.yml
+++ b/addons/stock/test/stock_report.yml
@@ -1,22 +1,14 @@
-
In order to test the PDF reports defined on a stock, we will print a Stock Overviewall(childs) report
--
+-
!python {model: stock.location}: |
import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('stock.stock_location_13')], {}, {})
+ (data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('stock.stock_location_stock')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'stock-overviewall'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on stock location, we will print a lot location report
--
- !python {model: stock.location}: |
- import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.lot.location').create(cr, uid, [ref('stock.stock_location_components')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'stock-stock_lot_location.'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on stock inventory, we will print a Stock Inventory Move report
--
+-
!python {model: stock.inventory}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.stock.inventory.move').create(cr, uid, [ref('stock.stock_inventory_0')], {}, {})
@@ -24,7 +16,7 @@
file(os.path.join(tools.config['test_report_directory'], 'stock-stock_inventory_move.'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on a stock, we will print a Stock Overview report
--
+-
!python {model: stock.location}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.lot.stock.overview').create(cr, uid, [ref('stock.stock_location_14')], {}, {})
@@ -32,17 +24,17 @@
file(os.path.join(tools.config['test_report_directory'], 'stock-overview'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on a stock, we will print a Stock Picking List report
--
+-
!python {model: stock.picking}: |
import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('stock.stock_picking_1')], {}, {})
+ (data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('stock.stock_picking_0')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'stock-picking_list'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on a Stock, we will print Product Stock Report
--
+-
!python {model: product.product}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.stock.product.history').create(cr, uid, [ref('product.product_product_pc1')], {}, {})
if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'stock-product_stock_report.'+format), 'wb+').write(data)
\ No newline at end of file
+ file(os.path.join(tools.config['test_report_directory'], 'stock-product_stock_report.'+format), 'wb+').write(data)
diff --git a/addons/stock/test/stock_test.yml b/addons/stock/test/stock_test.yml
index 442cc8735b9..8b54e555a7b 100644
--- a/addons/stock/test/stock_test.yml
+++ b/addons/stock/test/stock_test.yml
@@ -53,7 +53,7 @@
I create Receivable Account .
-
!record {model: account.account, id: account_account_receivable0}:
- code: '40000'
+ code: '40000-stock-test'
company_id: base.main_company
currency_mode: current
name: Receivable
@@ -65,7 +65,7 @@
I create Payable Account.
-
!record {model: account.account, id: account_account_payable0}:
- code: '440000'
+ code: '440000-stock-test'
company_id: base.main_company
currency_mode: current
name: Payable
@@ -111,7 +111,7 @@
I create Product Sale Account.
-
!record {model: account.account, id: account_account_productsale0}:
- code: '001'
+ code: '001-stock-test'
company_id: base.main_company
currency_mode: current
name: Product Sale
@@ -123,7 +123,7 @@
I create Product Purchase Account.
-
!record {model: account.account, id: account_account_productpurchase0}:
- code: '0002'
+ code: '0002-stock-test'
company_id: base.main_company
currency_mode: current
name: Product Purchase
@@ -267,7 +267,7 @@
-
!record {model: stock.move.split, id: stock_move_split_0}:
line_ids:
- - name: '00001'
+ - name: '00001-stock-test'
quantity: 5
product_id: stock.product_product_hpcdwriters0
@@ -288,17 +288,17 @@
-
!record {model: stock.picking, id: stock_picking_0}:
name: test_picking
- address_id: res_partner_address_0
+ address_id: base.res_partner_address_4
company_id: base.main_company
date: '2010-05-11 15:18:52'
invoice_state: none
move_lines:
- company_id: base.main_company
- date_planned: '2010-05-11 15:18:57'
+ date: '2010-05-11 15:18:57'
location_dest_id: stock.stock_location_customers
location_id: stock.stock_location_stock
name: HP CD writers
- product_id: stock.product_product_hpcdwriters0
+ product_id: product.product_product_pc1
product_qty: 3.0
product_uom: product.product_uom_unit
date: '2010-05-11 15:18:57'
@@ -343,4 +343,4 @@
'product_qty': move.product_qty,
'product_uom': move.product_uom.id,
}
- self.do_partial(cr, uid, [ref('stock_picking_0')],partial_datas)
\ No newline at end of file
+ self.do_partial(cr, uid, [ref('stock_picking_0')],partial_datas)
diff --git a/addons/stock/wizard/__init__.py b/addons/stock/wizard/__init__.py
index 7a13dc26fd5..f6021e0fbe2 100644
--- a/addons/stock/wizard/__init__.py
+++ b/addons/stock/wizard/__init__.py
@@ -27,7 +27,6 @@ import stock_partial_move
import stock_replacement
import stock_ups
import stock_inventory_merge
-import stock_inventory_set_stock_zero
import stock_fill_inventory
import stock_inventory_line_split
import stock_invoice_onshipping
diff --git a/addons/stock/wizard/stock_change_standard_price.py b/addons/stock/wizard/stock_change_standard_price.py
index 47fb5387f26..ecbaef57a36 100644
--- a/addons/stock/wizard/stock_change_standard_price.py
+++ b/addons/stock/wizard/stock_change_standard_price.py
@@ -21,12 +21,13 @@
from osv import fields, osv
from tools.translate import _
+import decimal_precision as dp
class change_standard_price(osv.osv_memory):
_name = "stock.change.standard.price"
_description = "Change Standard Price"
_columns = {
- 'new_price': fields.float('Price', required=True,
+ 'new_price': fields.float('Price', required=True, digits_compute=dp.get_precision('Account'),
help="If cost price is increased, stock variation account will be debited "
"and stock output account will be credited with the value = (difference of amount * quantity available).\n"
"If cost price is decreased, stock variation account will be creadited and stock input account will be debited."),
diff --git a/addons/stock/wizard/stock_fill_inventory.py b/addons/stock/wizard/stock_fill_inventory.py
index e133a9fc879..599377fec1e 100644
--- a/addons/stock/wizard/stock_fill_inventory.py
+++ b/addons/stock/wizard/stock_fill_inventory.py
@@ -24,14 +24,32 @@ from tools.translate import _
class stock_fill_inventory(osv.osv_memory):
_name = "stock.fill.inventory"
- _description = "Fill Inventory"
+ _description = "Import Inventory"
_columns = {
'location_id': fields.many2one('stock.location', 'Location', required=True),
- 'recursive': fields.boolean("Include all children for the location"),
+ 'recursive': fields.boolean("Include children",help="If checked, products contained in child locations of selected location will be included as well."),
+ 'set_stock_zero': fields.boolean("Set to zero",help="If checked, all product quantities will be set to zero to help ensure a real physical inventory is done"),
}
+ def view_init(self, cr, uid, fields_list, context=None):
+ """
+ Creates view dynamically and adding fields at runtime.
+ @param self: The object pointer.
+ @param cr: A database cursor
+ @param uid: ID of the user currently logged in
+ @param context: A standard dictionary
+ @return: New arch of view with new columns.
+ """
+ if context==None:
+ context={}
+ res = super(stock_fill_inventory, self).view_init(cr, uid, fields_list, context=context)
+ if context.get('active_id', False):
+ stock = self.pool.get('stock.inventory').browse(cr, uid, context.get('active_id', False))
+ if stock.state=='done':
+ raise osv.except_osv('Error!','Stock Inventory is done')
+ True
- def fill_inventory(self, cr, uid, ids, context):
- """ To fill stock inventory according to products available in the selected locations.
+ def fill_inventory(self, cr, uid, ids, context=None):
+ """ To Import stock inventory according to products available in the selected locations.
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@@ -39,36 +57,43 @@ class stock_fill_inventory(osv.osv_memory):
@param context: A standard dictionary
@return:
"""
+ if context==None:
+ context={}
inventory_line_obj = self.pool.get('stock.inventory.line')
location_obj = self.pool.get('stock.location')
product_obj = self.pool.get('product.product')
stock_location_obj = self.pool.get('stock.location')
- for fill_inventory in self.browse(cr, uid, ids):
- res = {}
- res_location = {}
- if fill_inventory.recursive :
- location_ids = location_obj.search(cr, uid, [('location_id',
- 'child_of', fill_inventory.location_id.id)])
- for location in location_ids :
- res = location_obj._product_get(cr, uid, location)
- res_location[location] = res
- else:
- context.update({'compute_child': False})
- res = location_obj._product_get(cr, uid,
- fill_inventory.location_id.id, context=context)
- res_location[fill_inventory.location_id.id] = res
-
+ if ids and len(ids):
+ ids = ids[0]
+ else:
+ return {}
+ fill_inventory = self.browse(cr, uid, ids)
+ res = {}
+ res_location = {}
+ if fill_inventory.recursive :
+ location_ids = location_obj.search(cr, uid, [('location_id',
+ 'child_of', fill_inventory.location_id.id)])
+ for location in location_ids :
+ res = location_obj._product_get(cr, uid, location)
+ res_location[location] = res
+ else:
+ context.update({'compute_child': False})
+ res = location_obj._product_get(cr, uid,
+ fill_inventory.location_id.id, context=context)
+ res_location[fill_inventory.location_id.id] = res
+
product_ids = []
for location in res_location.keys():
res = res_location[location]
for product_id in res.keys():
prod = product_obj.browse(cr, uid, [product_id])[0]
uom = prod.uom_id.id
- context.update({'uom': uom})
+ context.update(uom=uom, compute_child=False)
amount = stock_location_obj._product_get(cr, uid,
location, [product_id], context=context)[product_id]
-
if(amount):
+ if fill_inventory.set_stock_zero:
+ amount = 0
line_ids=inventory_line_obj.search(cr, uid,
[('inventory_id', '=', context['active_ids']),
('location_id', '=', location),
diff --git a/addons/stock/wizard/stock_fill_inventory_view.xml b/addons/stock/wizard/stock_fill_inventory_view.xml
index ef95a3bf447..3db42eb7be5 100644
--- a/addons/stock/wizard/stock_fill_inventory_view.xml
+++ b/addons/stock/wizard/stock_fill_inventory_view.xml
@@ -2,28 +2,30 @@
- Fill Inventory
+ Import Inventory
stock.fill.inventory
form
-
-
+
+
+
-
+
-
diff --git a/addons/stock/wizard/stock_inventory_merge.py b/addons/stock/wizard/stock_inventory_merge.py
index 46c589f18e9..cbb9f380cb1 100644
--- a/addons/stock/wizard/stock_inventory_merge.py
+++ b/addons/stock/wizard/stock_inventory_merge.py
@@ -25,7 +25,25 @@ from tools.translate import _
class stock_inventory_merge(osv.osv_memory):
_name = "stock.inventory.merge"
_description = "Merge Inventory"
-
+
+ def fields_view_get(self, cr, uid, view_id=None, view_type='form',
+ context=None, toolbar=False, submenu=False):
+ """
+ Changes the view dynamically
+ @param self: The object pointer.
+ @param cr: A database cursor
+ @param uid: ID of the user currently logged in
+ @param context: A standard dictionary
+ @return: New arch of view.
+ """
+ if not context:
+ context={}
+ res = super(stock_inventory_merge, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
+ if context.get('active_model','') == 'stock.inventory' and len(context['active_ids']) < 2:
+ raise osv.except_osv(_('Warning'),
+ _('Please select multiple physical inventories to merge in the list view.'))
+ return res
+
def do_merge(self, cr, uid, ids, context):
""" To merge selected Inventories.
@param self: The object pointer.
@@ -37,13 +55,7 @@ class stock_inventory_merge(osv.osv_memory):
"""
invent_obj = self.pool.get('stock.inventory')
invent_line_obj = self.pool.get('stock.inventory.line')
-
invent_lines = {}
-
- if len(context['active_ids']) < 2:
- raise osv.except_osv(_('Warning'),
- _('Please select at least two inventories.'))
-
for inventory in invent_obj.browse(cr, uid, context['active_ids'], context=context):
if inventory.state == "done":
raise osv.except_osv(_('Warning'),
diff --git a/addons/stock/wizard/stock_inventory_merge_view.xml b/addons/stock/wizard/stock_inventory_merge_view.xml
index 5ae2987b59a..62cac877179 100644
--- a/addons/stock/wizard/stock_inventory_merge_view.xml
+++ b/addons/stock/wizard/stock_inventory_merge_view.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/addons/stock/wizard/stock_inventory_set_stock_zero.py b/addons/stock/wizard/stock_inventory_set_stock_zero.py
deleted file mode 100644
index 4cbba93bdb6..00000000000
--- a/addons/stock/wizard/stock_inventory_set_stock_zero.py
+++ /dev/null
@@ -1,74 +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 _
-
-class inventory_set_stock_zero(osv.osv_memory):
- _name = "stock.inventory.set.stock.zero"
- _description = "Set Stock to 0"
-
- _columns = {
- 'location_id': fields.many2one('stock.location', 'Location', required=True),
- }
-
- def do_merge(self, cr, uid, ids, context):
- """ To set stock to Zero
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param ids: the ID or list of IDs if we want more than one
- @param context: A standard dictionary
- @return:
- """
- invent_obj = self.pool.get('stock.inventory')
- invent_line_obj = self.pool.get('stock.inventory.line')
- prod_obj = self.pool.get('product.product')
-
- if len(context['active_ids']) <> 1:
- raise osv.except_osv(_('Warning'),
- _('Please select one and only one inventory !'))
- for id in ids:
- datas = self.read(cr, uid, id)
- loc = str(datas['location_id'])
-
- cr.execute('select distinct location_id,product_id \
- from stock_inventory_line \
- where inventory_id=%s', (context['active_id'],))
- inv = cr.fetchall()
- cr.execute('select distinct product_id from stock_move where \
- location_dest_id=%s or location_id=%s', (loc, loc,))
- stock = cr.fetchall()
- for s in stock:
- if (loc, s[0]) not in inv:
- p = prod_obj.browse(cr, uid, s[0])
- invent_line_obj.create(cr, uid, {
- 'inventory_id': context['active_id'],
- 'location_id': loc,
- 'product_id': s[0],
- 'product_uom': p.uom_id.id,
- 'product_qty': 0.0,
- })
- return {}
-
-inventory_set_stock_zero()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/wizard/stock_inventory_set_stock_zero_view.xml b/addons/stock/wizard/stock_inventory_set_stock_zero_view.xml
deleted file mode 100644
index 0ee84d2045d..00000000000
--- a/addons/stock/wizard/stock_inventory_set_stock_zero_view.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- Set Stock to Zero
- stock.inventory.set.stock.zero
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/stock/wizard/stock_invoice_onshipping.py b/addons/stock/wizard/stock_invoice_onshipping.py
index f931e575b2f..7e0693b9045 100644
--- a/addons/stock/wizard/stock_invoice_onshipping.py
+++ b/addons/stock/wizard/stock_invoice_onshipping.py
@@ -48,22 +48,22 @@ class stock_invoice_onshipping(osv.osv_memory):
if context is None:
context = {}
picking_obj = self.pool.get('stock.picking')
- usage = 'customer'
+ src_usage = dest_usage = None
pick = picking_obj.browse(cr, uid, context['active_id'], context=context)
if pick.invoice_state == 'invoiced':
raise osv.except_osv(_('UserError'), _('Invoice is already created.'))
if pick.invoice_state == 'none':
raise osv.except_osv(_('UserError'), _('This picking does not require any invoicing.'))
if pick.move_lines:
- usage = pick.move_lines[0].location_id.usage
-
- if pick.type == 'out' and usage == 'supplier':
+ src_usage = pick.move_lines[0].location_id.usage
+ dest_usage = pick.move_lines[0].location_dest_id.usage
+ if pick.type == 'out' and dest_usage == 'supplier':
type = 'in_refund'
- elif pick.type == 'out' and usage == 'customer':
+ elif pick.type == 'out' and dest_usage == 'customer':
type = 'out_invoice'
- elif pick.type == 'in' and usage == 'supplier':
+ elif pick.type == 'in' and src_usage == 'supplier':
type = 'in_invoice'
- elif pick.type == 'in' and usage == 'customer':
+ elif pick.type == 'in' and src_usage == 'customer':
type = 'out_refund'
else:
type = 'out_invoice'
diff --git a/addons/stock/wizard/stock_invoice_onshipping_view.xml b/addons/stock/wizard/stock_invoice_onshipping_view.xml
index e1e742d7aee..6284121553c 100644
--- a/addons/stock/wizard/stock_invoice_onshipping_view.xml
+++ b/addons/stock/wizard/stock_invoice_onshipping_view.xml
@@ -16,8 +16,8 @@
-
-
+
+
diff --git a/addons/stock/wizard/stock_location_product_view.xml b/addons/stock/wizard/stock_location_product_view.xml
index 518bc6eab35..2459daac189 100644
--- a/addons/stock/wizard/stock_location_product_view.xml
+++ b/addons/stock/wizard/stock_location_product_view.xml
@@ -16,7 +16,7 @@
-
+
diff --git a/addons/stock/wizard/stock_move_view.xml b/addons/stock/wizard/stock_move_view.xml
index 46d3893900b..06f6822e3c7 100644
--- a/addons/stock/wizard/stock_move_view.xml
+++ b/addons/stock/wizard/stock_move_view.xml
@@ -13,7 +13,7 @@
+ string="_Cancel" />
diff --git a/addons/stock/wizard/stock_partial_move.py b/addons/stock/wizard/stock_partial_move.py
index 1016d6c3977..5c7fd3c9472 100644
--- a/addons/stock/wizard/stock_partial_move.py
+++ b/addons/stock/wizard/stock_partial_move.py
@@ -38,7 +38,7 @@ class stock_partial_move(osv.osv_memory):
context={}
for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
if m.state in ('done', 'cancel'):
- raise osv.except_osv(_('Invalid action !'), _('Cannot delivery products which are already delivered !'))
+ raise osv.except_osv(_('Invalid action !'), _('Cannot deliver products which are already delivered !'))
if 'move%s_product_id'%(m.id) not in self._columns:
@@ -47,7 +47,9 @@ class stock_partial_move(osv.osv_memory):
self._columns['move%s_product_qty'%(m.id)] = fields.float("Quantity")
if 'move%s_product_uom'%(m.id) not in self._columns:
self._columns['move%s_product_uom'%(m.id)] = fields.many2one('product.uom',string="Product UOM")
-
+ if 'move%s_prodlot_id'%(m.id) not in self._columns:
+ self._columns['move%s_prodlot_id'%(m.id)] = fields.many2one('stock.production.lot', string="Lot")
+
if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
if 'move%s_product_price'%(m.id) not in self._columns:
self._columns['move%s_product_price'%(m.id)] = fields.float("Price")
@@ -89,7 +91,12 @@ class stock_partial_move(osv.osv_memory):
'relation': 'product.uom',
'required' : True,
'readonly' : True,
- }
+ },
+ 'move%s_prodlot_id'%(m.id): {
+ 'string': _('Production Lot'),
+ 'type': 'many2one',
+ 'relation': 'stock.production.lot',
+ }
})
_moves_arch_lst += """
@@ -97,7 +104,8 @@ class stock_partial_move(osv.osv_memory):
- """%(m.id, m.id, m.id)
+
+ """%(m.id, m.id, m.id,m.id,m.id)
if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
_moves_fields.update({
'move%s_product_price'%(m.id) : {
@@ -162,29 +170,11 @@ class stock_partial_move(osv.osv_memory):
res['move%s_product_qty'%(m.id)] = m.product_qty
if 'move%s_product_uom'%(m.id) in fields:
res['move%s_product_uom'%(m.id)] = m.product_uom.id
- if (m.picking_id.type == 'out') and (m.product_id.cost_method == 'average') and 'sale_id' in m.picking_id._columns.keys():
- price = 0
- if hasattr(m, 'sale_line_id') and m.sale_line_id:
- price = m.sale_line_id.price_unit
-
+ if 'move%s_prodlot_id'%(m.id) in fields:
+ res['move%s_prodlot_id'%(m.id)] = m.prodlot_id.id
+ if m.product_id.cost_method == 'average' :
+ price = m.product_id.standard_price
currency = False
- if hasattr(m.picking_id, 'sale_id') and m.picking_id.sale_id:
- currency = m.picking_id.sale_id.pricelist_id.currency_id.id
-
- if 'move%s_product_price'%(m.id) in fields:
- res['move%s_product_price'%(m.id)] = price
- if 'move%s_product_currency'%(m.id) in fields:
- res['move%s_product_currency'%(m.id)] = currency
-
- if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average') and 'purchase_id' in m.picking_id._columns.keys():
- price = 0
- if hasattr(m, 'purchase_line_id') and m.purchase_line_id:
- price = m.purchase_line_id.price_unit
-
- currency = False
- if hasattr(m.picking_id, 'purchase_id') and m.picking_id.purchase_id:
- currency = m.picking_id.purchase_id.pricelist_id.currency_id.id
-
if 'move%s_product_price'%(m.id) in fields:
res['move%s_product_price'%(m.id)] = price
if 'move%s_product_currency'%(m.id) in fields:
@@ -213,7 +203,8 @@ class stock_partial_move(osv.osv_memory):
partial_datas['move%s'%(m.id)] = {
'product_id' : getattr(partial, 'move%s_product_id'%(m.id)).id,
'product_qty' : getattr(partial, 'move%s_product_qty'%(m.id)),
- 'product_uom' : getattr(partial, 'move%s_product_uom'%(m.id)).id
+ 'product_uom' : getattr(partial, 'move%s_product_uom'%(m.id)).id,
+ 'prodlot_id' : getattr(partial, 'move%s_prodlot_id'%(m.id)).id
}
if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
diff --git a/addons/stock/wizard/stock_partial_move_view.xml b/addons/stock/wizard/stock_partial_move_view.xml
index a7b4271a5b2..457ddc34ff7 100644
--- a/addons/stock/wizard/stock_partial_move_view.xml
+++ b/addons/stock/wizard/stock_partial_move_view.xml
@@ -2,7 +2,7 @@
-
-
+
"""
@@ -97,7 +97,6 @@ class stock_partial_picking(osv.osv_memory):
'string': _('Production Lot'),
'type': 'many2one',
'relation': 'stock.production.lot',
- 'readonly': True,
}
})
@@ -106,8 +105,8 @@ class stock_partial_picking(osv.osv_memory):
-
- """%(m.id, m.id, m.id, m.id)
+
+ """%(m.id, m.id, m.id, m.id,m.id)
if (m.product_id.cost_method == 'average'):
_moves_fields.update({
'move%s_product_price'%(m.id) : {
@@ -171,20 +170,9 @@ class stock_partial_picking(osv.osv_memory):
res['move%s_product_uom'%(m.id)] = m.product_uom.id
if 'move%s_prodlot_id'%(m.id) in fields:
res['move%s_prodlot_id'%(m.id)] = m.prodlot_id.id
-
if (m.product_id.cost_method == 'average'):
currency = False
- price = 0
- if (pick.type == 'in') and 'purchase_id' in pick._columns.keys():
- if hasattr(m, 'purchase_line_id') and m.purchase_line_id:
- price = m.purchase_line_id.price_unit
- if hasattr(pick, 'purchase_id') and pick.purchase_id:
- currency = pick.purchase_id.pricelist_id.currency_id.id
- if (pick.type == 'out') and 'sale_id' in pick._columns.keys():
- if hasattr(m, 'sale_line_id') and m.sale_line_id:
- price = m.sale_line_id.price_unit
- if hasattr(pick, 'sale_id') and pick.sale_id:
- currency = pick.sale_id.pricelist_id.currency_id.id
+ price = m.product_id.standard_price
if 'move%s_product_price'%(m.id) in fields:
res['move%s_product_price'%(m.id)] = price
if 'move%s_product_currency'%(m.id) in fields:
diff --git a/addons/stock/wizard/stock_partial_picking_view.xml b/addons/stock/wizard/stock_partial_picking_view.xml
index b399576c83d..4887c1e16d8 100644
--- a/addons/stock/wizard/stock_partial_picking_view.xml
+++ b/addons/stock/wizard/stock_partial_picking_view.xml
@@ -2,7 +2,7 @@
- Making Picking
+ Process Picking
stock.partial.picking
form
form
diff --git a/addons/stock/wizard/stock_picking_make_view.xml b/addons/stock/wizard/stock_picking_make_view.xml
index fa77042c5d8..4ecebed1031 100644
--- a/addons/stock/wizard/stock_picking_make_view.xml
+++ b/addons/stock/wizard/stock_picking_make_view.xml
@@ -12,7 +12,7 @@
width="600" height="300"/>
+ string="_Cancel" />
diff --git a/addons/stock/wizard/stock_replacement_view.xml b/addons/stock/wizard/stock_replacement_view.xml
index ce5f7efbc9f..cea5bfedbe8 100644
--- a/addons/stock/wizard/stock_replacement_view.xml
+++ b/addons/stock/wizard/stock_replacement_view.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py
index 74aa96e8e63..4bddc9a7ee4 100644
--- a/addons/stock/wizard/stock_return_picking.py
+++ b/addons/stock/wizard/stock_return_picking.py
@@ -65,18 +65,27 @@ class stock_return_picking(osv.osv_memory):
@return: New arch of view with new columns.
"""
res = super(stock_return_picking, self).view_init(cr, uid, fields_list, context=context)
- record_id = context and context.get('active_id', False) or False
+ record_id = context and context.get('active_id', False)
if record_id:
pick_obj = self.pool.get('stock.picking')
- try:
- pick = pick_obj.browse(cr, uid, record_id)
- for m in [line for line in pick.move_lines]:
- if 'return%s'%(m.id) not in self._columns:
- self._columns['return%s'%(m.id)] = fields.float(string=m.name, required=True)
- if 'invoice_state' not in self._columns:
- self._columns['invoice_state'] = fields.selection([('2binvoiced', 'To be Invoiced'), ('none', 'None')], string='Invoice State', required=True)
- except Exception:
- return res
+ pick = pick_obj.browse(cr, uid, record_id)
+ if pick.state not in ['done','confirmed','assigned']:
+ raise osv.except_osv(_('Warning !'), _("You may only return pickings that are Confirmed, Available or Done!"))
+ return_history = {}
+ valid_lines = 0
+ for m in [line for line in pick.move_lines]:
+ if m.state == 'done':
+ return_history[m.id] = 0
+ for rec in m.move_history_ids2:
+ return_history[m.id] += (rec.product_qty * rec.product_uom.factor)
+ if m.product_qty * m.product_uom.factor > return_history[m.id]:
+ valid_lines += 1
+ if 'return%s'%(m.id) not in self._columns:
+ self._columns['return%s'%(m.id)] = fields.float(string=m.name, required=True)
+ if 'invoice_state' not in self._columns:
+ self._columns['invoice_state'] = fields.selection([('2binvoiced', 'To be Invoiced'), ('none', 'None')], string='Invoice State', required=True)
+ if not valid_lines:
+ raise osv.except_osv(_('Warning !'), _("There are no products to return (only lines in Done state and not fully returned yet can be returned)!"))
return res
def fields_view_get(self, cr, uid, view_id=None, view_type='form',
@@ -97,36 +106,29 @@ class stock_return_picking(osv.osv_memory):
if record_id:
pick_obj = self.pool.get('stock.picking')
pick = pick_obj.browse(cr, uid, record_id)
- if pick.state != 'done':
- raise osv.except_osv(_('Warning !'), _("The Picking is not completed yet!\nYou cannot return picking which is not in 'Done' state!"))
-
return_history = {}
- for m_line in pick.move_lines:
- return_history[m_line.id] = 0
- for rec in m_line.move_history_ids2:
- return_history[m_line.id] += rec.product_qty
res['fields'].clear()
arch_lst=['', '' % _('Return lines'), '' % _('Provide the quantities of the returned products.')]
- for m in [line for line in pick.move_lines]:
+ for m in pick.move_lines:
+ return_history[m.id] = 0
+ for rec in m.move_history_ids2:
+ return_history[m.id] += rec.product_qty
quantity = m.product_qty
- if quantity > return_history[m.id] and (quantity - return_history[m.id])>0:
+ if m.state=='done' and quantity > return_history[m.id]:
arch_lst.append('\n' % (m.id,))
res['fields']['return%s' % m.id]={'string':m.name, 'type':'float', 'required':True}
res.setdefault('returns', []).append(m.id)
- if not res.get('returns',False):
- raise osv.except_osv(_('Warning!'),_('There is no product to return!'))
-
arch_lst.append('\n')
res['fields']['invoice_state']={'string':_('Invoice state'), 'type':'selection','required':True, 'selection':[('2binvoiced', _('To Be Invoiced')), ('none', _('None'))]}
arch_lst.append('')
arch_lst.append('')
- arch_lst.append('')
+ arch_lst.append('')
arch_lst.append('')
arch_lst.append('')
res['arch'] = '\n'.join(arch_lst)
return res
- def _create_returns(self, cr, uid, ids, context):
+ def create_returns(self, cr, uid, ids, context):
"""
Creates return picking.
@param self: The object pointer.
@@ -149,6 +151,7 @@ class stock_return_picking(osv.osv_memory):
move_ids = [m.id for m in [line for line in pick.move_lines]]
set_invoice_state_to_none = True
+ returned_lines = 0
for move in move_obj.browse(cr, uid, move_ids):
if not new_picking:
if pick.type=='out':
@@ -161,57 +164,45 @@ class stock_return_picking(osv.osv_memory):
'move_lines':[], 'state':'draft', 'type':new_type,
'date':date_cur, 'invoice_state':data['invoice_state'],})
new_location=move.location_dest_id.id
+ if move.state=='done':
+ new_qty = data['return%s' % move.id]
+ returned_qty = move.product_qty
- new_qty = data['return%s' % move.id]
- returned_qty = move.product_qty
-
- for rec in move.move_history_ids2:
- returned_qty -= rec.product_qty
-
- if returned_qty != new_qty:
- set_invoice_state_to_none = False
-
- new_move=move_obj.copy(cr, uid, move.id, {
- 'product_qty': new_qty,
- 'product_uos_qty': uom_obj._compute_qty(cr, uid, move.product_uom.id,
- new_qty, move.product_uos.id),
- 'picking_id':new_picking, 'state':'draft',
- 'location_id':new_location, 'location_dest_id':move.location_id.id,
- 'date':date_cur, 'date_planned':date_cur,})
- move_obj.write(cr, uid, [move.id], {'move_history_ids2':[(4,new_move)]})
-
+ for rec in move.move_history_ids2:
+ returned_qty -= rec.product_qty
+
+ if returned_qty != new_qty:
+ set_invoice_state_to_none = False
+
+ if new_qty:
+ returned_lines += 1
+ new_move=move_obj.copy(cr, uid, move.id, {
+ 'product_qty': new_qty,
+ 'product_uos_qty': uom_obj._compute_qty(cr, uid, move.product_uom.id,
+ new_qty, move.product_uos.id),
+ 'picking_id':new_picking, 'state':'draft',
+ 'location_id':new_location, 'location_dest_id':move.location_id.id,
+ 'date':date_cur,})
+ move_obj.write(cr, uid, [move.id], {'move_history_ids2':[(4,new_move)]})
+
+ if not returned_lines:
+ raise osv.except_osv(_('Warning !'), _("Please specify at least one non-zero quantity!"))
+
if set_invoice_state_to_none:
pick_obj.write(cr, uid, [pick.id], {'invoice_state':'none'})
-
- if new_picking:
- if new_picking:
- wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
- pick_obj.force_assign(cr, uid, [new_picking], context)
- return new_picking
-
- def action_open_window(self, cr, uid, ids, context):
- """
- Opens return picking list.
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param ids: List of ids selected
- @param context: A standard dictionary
- @return: A dictionary which of fields with values.
- """
- res = self._create_returns(cr, uid, ids, context)
- if not res:
- return {}
+ wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
+ pick_obj.force_assign(cr, uid, [new_picking], context)
return {
- 'domain': "[('id', 'in', ["+str(res)+"])]",
+ 'domain': "[('id', 'in', ["+str(new_picking)+"])]",
'name': 'Picking List',
'view_type':'form',
'view_mode':'tree,form',
'res_model':'stock.picking',
'view_id':False,
'type':'ir.actions.act_window',
+ 'context':context,
}
-
+
stock_return_picking()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/wizard/stock_splitinto.py b/addons/stock/wizard/stock_splitinto.py
index 20b1940e1c7..c514c9714eb 100644
--- a/addons/stock/wizard/stock_splitinto.py
+++ b/addons/stock/wizard/stock_splitinto.py
@@ -21,13 +21,13 @@
from osv import fields, osv
from tools.translate import _
-
+import decimal_precision as dp
class stock_split_into(osv.osv_memory):
_name = "stock.split.into"
_description = "Split into"
_columns = {
- 'quantity': fields.float('Quantity', digits=(16,2)),
+ 'quantity': fields.float('Quantity',digits_compute=dp.get_precision('Product UOM')),
}
_defaults = {
'quantity': lambda *x: 0,
@@ -41,14 +41,14 @@ class stock_split_into(osv.osv_memory):
quantity = self.browse(cr, uid, data[0], context).quantity or 0.0
for move in move_obj.browse(cr, uid, rec_id):
quantity_rest = move.product_qty - quantity
- if move.tracking_id :
- raise osv.except_osv(_('Error!'), _('The current move line is already assigned to a pack, please remove it first if you really want to change it ' \
- 'for this product: "%s" (id: %d)') % \
- (move.product_id.name, move.product_id.id,))
+ #if move.tracking_id :
+ # raise osv.except_osv(_('Error!'), _('The current move line is already assigned to a pack, please remove it first if you really want to change it ' \
+ # 'for this product: "%s" (id: %d)') % \
+ # (move.product_id.name, move.product_id.id,))
if quantity > move.product_qty:
raise osv.except_osv(_('Error!'), _('Total quantity after split exceeds the quantity to split ' \
'for this product: "%s" (id: %d)') % \
- (move.product_id.name, move.product_id.id,))
+ (move.product_id.name, move.product_id.id,))
if quantity > 0:
move_obj.setlast_tracking(cr, uid, [move.id], context=context)
move_obj.write(cr, uid, [move.id], {
@@ -63,12 +63,12 @@ class stock_split_into(osv.osv_memory):
move_obj.write(cr, uid, [move.id], {'tracking_id': tracking_id})
else:
default_val = {
- 'product_qty': quantity_rest,
- 'product_uos_qty': quantity_rest,
- 'tracking_id': tracking_id,
- 'state': move.state,
- 'product_uos': move.product_uom.id
- }
+ 'product_qty': quantity_rest,
+ 'product_uos_qty': quantity_rest,
+ 'tracking_id': tracking_id,
+ 'state': move.state,
+ 'product_uos': move.product_uom.id
+ }
move_obj.copy(cr, uid, move.id, default_val)
return {}
stock_split_into()
diff --git a/addons/stock/wizard/stock_splitinto_view.xml b/addons/stock/wizard/stock_splitinto_view.xml
index a325519ca75..7ed7266a163 100644
--- a/addons/stock/wizard/stock_splitinto_view.xml
+++ b/addons/stock/wizard/stock_splitinto_view.xml
@@ -10,7 +10,7 @@
+ string="_Cancel" />
diff --git a/addons/stock/wizard/stock_ups_view.xml b/addons/stock/wizard/stock_ups_view.xml
index 89b5fe131e8..cbce721e1b9 100644
--- a/addons/stock/wizard/stock_ups_view.xml
+++ b/addons/stock/wizard/stock_ups_view.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/addons/stock_location/__openerp__.py b/addons/stock_location/__openerp__.py
index beb24997fb8..5c2ae8e63e5 100644
--- a/addons/stock_location/__openerp__.py
+++ b/addons/stock_location/__openerp__.py
@@ -21,31 +21,82 @@
{
- 'name': 'Stock Location Paths',
+ 'name': 'Warehouse Locations Paths',
'version': '1.0',
'category': 'Generic Modules/Inventory Control',
'description': """
-Manages product's path in locations.
+This module supplements the Warehouse application by adding support for per-product
+location paths, effectively implementing Push and Pull inventory flows.
-This module may be useful for different purposes:
-* Manages the product in his whole manufacturing chain
-* Manages different default locations by products
-* Define paths within the warehouse to route products based on operations:
+Typically this could be used to:
+* Manage product manufacturing chains
+* Manage default locations per product
+* Define routes within your warehouse according to business needs, such as:
- Quality Control
- After Sales Services
- - Supplier Return
-* Manage products to be rent.
+ - Supplier Returns
+* Help rental management, by generating automated return moves for rented products
+
+Once this module is installed, an additional tab appear on the product form, where you can add
+Push and Pull flow specifications. The demo data of CPU1 product for that push/pull :
+
+Push flows
+----------
+Push flows are useful when the arrival of certain products in a given location should always
+be followed by a corresponding move to another location, optionally after a certain delay.
+The original Warehouse application already supports such Push flow specifications on the
+Locations themselves, but these cannot be refined per-product.
+
+A push flow specification indicates which location is chained with which location, and with
+what parameters. As soon as a given quantity of products is moved in the source location,
+a chained move is automatically foreseen according to the parameters set on the flow specification
+(destination location, delay, type of move, journal, etc.) The new move can be automatically
+processed, or require a manual confirmation, depending on the parameters.
+
+Pull flows
+----------
+Pull flows are a bit different from Pull flows, in the sense that they are not related to
+the processing of product moves, but rather to the processing of procurement orders.
+What is being pulled is a need, not directly products.
+A classical example of Push flow is when you have an Outlet company, with a parent Company
+that is responsible for the supplies of the Outlet.
+
+ [ Customer ] <- A - [ Outlet ] <- B - [ Holding ] <~ C ~ [ Supplier ]
+
+When a new procurement order (A, coming from the confirmation of a Sale Order for example) arrives
+in the Outlet, it is converted into another procurement (B, via a Push flow of type 'move')
+requested from the Holding. When procurement order B is processed by the Holding company, and
+if the product is out of stock, it can be converted into a Purchase Order (C) from the Supplier
+(Push flow of type Purchase). The result is that the procurement order, the need, is pushed
+all the way between the Customer and Supplier.
+
+Technically, Pull flows allow to process procurement orders differently, not only depending on
+the product being considered, but also depending on which location holds the "need" for that
+product (i.e. the destination location of that procurement order).
+
+Use-Case
+--------
+
+You can use the demo data as follow:
+ CPU1: Sell some CPU1 from Shop 1 and run the scheduler
+ - Warehouse: delivery order, Shop 1: reception
+ CPU3:
+ - When receiving the product, it goes to Quality Control location then stored to shelf 2.
+ - When delivering the customer: Pick List -> Packing -> Delivery Order from Gate A
""",
'author': 'OpenERP SA',
- 'depends': ['procurement','stock'],
+ 'depends': ['procurement','stock','sale'],
'init_xml': [],
'update_xml': ['stock_location_view.xml', 'security/ir.model.access.csv', 'mrp_pull_workflow.xml'],
- 'demo_xml': [],
+ 'demo_xml': [
+ 'stock_location_demo_cpu1.xml',
+ 'stock_location_demo_cpu3.yml',
+ ],
'installable': True,
'test':[
- 'test/stock_location.yml'
- ],
+# 'test/stock_location_pull_flow.yml',
+# 'test/stock_location_push_flow.yml',
+ ],
'active': False,
'certificate': '0046505115101',
}
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock_location/mrp_pull.py b/addons/stock_location/mrp_pull.py
index b4a68ca1b74..f4c9868a58f 100644
--- a/addons/stock_location/mrp_pull.py
+++ b/addons/stock_location/mrp_pull.py
@@ -18,13 +18,8 @@
#
##############################################################################
-from osv import fields,osv
-import tools
-import ir
-import pooler
+from osv import osv
import netsvc
-from mx import DateTime
-import time
from tools.translate import _
class procurement_order(osv.osv):
@@ -32,7 +27,6 @@ class procurement_order(osv.osv):
def check_buy(self, cr, uid, ids, context=None):
for procurement in self.browse(cr, uid, ids):
for line in procurement.product_id.flow_pull_ids:
-
if line.location_id==procurement.location_id:
return line.type_proc=='buy'
return super(procurement_order, self).check_buy(cr, uid, ids)
@@ -56,7 +50,7 @@ class procurement_order(osv.osv):
def action_move_create(self, cr, uid, ids,context=None):
proc_obj = self.pool.get('procurement.order')
move_obj = self.pool.get('stock.move')
- location_obj = self.pool.get('stock.location')
+ picking_obj=self.pool.get('stock.picking')
wf_service = netsvc.LocalService("workflow")
for proc in proc_obj.browse(cr, uid, ids, context=context):
line = None
@@ -65,7 +59,7 @@ class procurement_order(osv.osv):
break
assert line, 'Line can not be False if we are on this state of the workflow'
origin = (proc.origin or proc.name or '').split(':')[0] +':'+line.name
- picking_id = self.pool.get('stock.picking').create(cr, uid, {
+ picking_id =picking_obj.create(cr, uid, {
'origin': origin,
'company_id': line.company_id and line.company_id.id or False,
'type': line.picking_type,
@@ -75,12 +69,12 @@ class procurement_order(osv.osv):
'note': line.name, # TODO: note on procurement ?
'invoice_state': line.invoice_state,
})
- move_id = self.pool.get('stock.move').create(cr, uid, {
+ move_id =move_obj.create(cr, uid, {
'name': line.name,
'picking_id': picking_id,
'company_id': line.company_id and line.company_id.id or False,
'product_id': proc.product_id.id,
- 'date_planned': proc.date_planned,
+ 'date': proc.date_planned,
'product_qty': proc.product_qty,
'product_uom': proc.product_uom.id,
'product_uos_qty': (proc.product_uos and proc.product_uos_qty)\
@@ -97,10 +91,10 @@ class procurement_order(osv.osv):
'note': line.name, # TODO: same as above
})
if proc.move_id and proc.move_id.state in ('confirmed'):
- self.pool.get('stock.move').write(cr,uid, [proc.move_id.id], {
+ move_obj.write(cr,uid, [proc.move_id.id], {
'state':'waiting'
}, context=context)
- proc_id = self.pool.get('procurement.order').create(cr, uid, {
+ proc_id = proc_obj.create(cr, uid, {
'name': line.name,
'origin': origin,
'company_id': line.company_id and line.company_id.id or False,
@@ -120,7 +114,7 @@ class procurement_order(osv.osv):
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
if proc.move_id:
- self.pool.get('stock.move').write(cr, uid, [proc.move_id.id],
+ move_obj.write(cr, uid, [proc.move_id.id],
{'location_id':proc.location_id.id})
self.write(cr, uid, [proc.id], {'state':'running','message':_('Moved from other location')})
diff --git a/addons/stock_location/stock_location.py b/addons/stock_location/stock_location.py
index 5404946e3ee..baa9692ba75 100644
--- a/addons/stock_location/stock_location.py
+++ b/addons/stock_location/stock_location.py
@@ -26,20 +26,21 @@ import pooler
class stock_location_path(osv.osv):
_name = "stock.location.path"
+ _description = "Pushed Flows"
_columns = {
'name': fields.char('Operation', size=64),
'company_id': fields.many2one('res.company', 'Company'),
'product_id' : fields.many2one('product.product', 'Products', ondelete='cascade', select=1),
'journal_id': fields.many2one('stock.journal','Journal'),
- 'location_from_id' : fields.many2one('stock.location', 'Source Location', ondelete='cascade', select=1),
- 'location_dest_id' : fields.many2one('stock.location', 'Destination Location', ondelete='cascade', select=1),
+ 'location_from_id' : fields.many2one('stock.location', 'Source Location', ondelete='cascade', select=1, required=True),
+ 'location_dest_id' : fields.many2one('stock.location', 'Destination Location', ondelete='cascade', select=1, required=True),
'delay': fields.integer('Delay (days)', help="Number of days to do this transition"),
'invoice_state': fields.selection([
("invoiced", "Invoiced"),
("2binvoiced", "To Be Invoiced"),
("none", "Not from Picking")], "Invoice Status",
required=True,),
- 'picking_type': fields.selection([('out','Sending Goods'),('in','Getting Goods'),('internal','Internal'),('delivery','Delivery')], 'Shipping Type', required=True, select=True, help="Depending on the company, choose whatever you want to receive or send products"),
+ 'picking_type': fields.selection([('out','Sending Goods'),('in','Getting Goods'),('internal','Internal')], 'Shipping Type', required=True, select=True, help="Depending on the company, choose whatever you want to receive or send products"),
'auto': fields.selection(
[('auto','Automatic Move'), ('manual','Manual Operation'),('transparent','Automatic No Step Added')],
'Automatic Move',
@@ -71,7 +72,7 @@ class product_pulled_flow(osv.osv):
'type_proc': fields.selection([('produce','Produce'),('buy','Buy'),('move','Move')], 'Type of Procurement', required=True),
'company_id': fields.many2one('res.company', 'Company', help="Is used to know to which company belong packings and moves"),
'partner_address_id': fields.many2one('res.partner.address', 'Partner Address'),
- 'picking_type': fields.selection([('out','Sending Goods'),('in','Getting Goods'),('internal','Internal'),('delivery','Delivery')], 'Shipping Type', required=True, select=True, help="Depending on the company, choose whatever you want to receive or send products"),
+ 'picking_type': fields.selection([('out','Sending Goods'),('in','Getting Goods'),('internal','Internal')], 'Shipping Type', required=True, select=True, help="Depending on the company, choose whatever you want to receive or send products"),
'product_id':fields.many2one('product.product','Product'),
'invoice_state': fields.selection([
("invoiced", "Invoiced"),
diff --git a/addons/stock_location/stock_location_demo_cpu1.xml b/addons/stock_location/stock_location_demo_cpu1.xml
new file mode 100644
index 00000000000..01f711839d4
--- /dev/null
+++ b/addons/stock_location/stock_location_demo_cpu1.xml
@@ -0,0 +1,92 @@
+
+
+
+
+ This product is configured with example of push/pull flows
+
+
+ Quality Control
+
+
+
+
+
+
+ internal
+ none
+ Quality Control
+ manual
+
+
+
+
+ transparent
+ none
+
+ Receptions to Quality Control
+
+
+ in
+
+
+
+
+ manual
+ none
+
+ Store in Shelf
+
+
+ internal
+
+
+
+
+
+
+
+ none
+
+ move
+
+ make_to_order
+ in
+ Receive from Warehouse
+
+
+
+
+
+
+ move
+ none
+
+
+ make_to_stock
+ out
+ Deliver Shop
+
+
+ 20.0
+ 10.0
+
+
+
+
+
+
+
+
+ Shop 1
+
+
+
+
+
+ Shop 2
+
+
+
+
+
+
diff --git a/addons/stock_location/stock_location_demo_cpu3.yml b/addons/stock_location/stock_location_demo_cpu3.yml
new file mode 100644
index 00000000000..74c9998b1b6
--- /dev/null
+++ b/addons/stock_location/stock_location_demo_cpu3.yml
@@ -0,0 +1,55 @@
+-
+ !record {model: stock.journal, id: journal_pick}:
+ name: Pick List
+-
+ !record {model: stock.journal, id: journal_pack}:
+ name: Packing
+-
+ !record {model: stock.journal, id: journal_gate_a}:
+ name: Delivery Gate A
+-
+ !record {model: stock.journal, id: journal_gate_b}:
+ name: Delivery Gate B
+-
+ !record {model: stock.location, id: location_order}:
+ name: Order Processing
+ usage: internal
+ location_id: stock.stock_location_company
+-
+ !record {model: stock.location, id: location_dispatch_zone}:
+ name: Dispatch Zone
+ usage: internal
+ location_id: location_order
+-
+ !record {model: stock.location, id: location_gate_a}:
+ name: Gate A
+ usage: internal
+ location_id: location_dispatch_zone
+ chained_journal_id: journal_gate_a
+ chained_location_type: customer
+ chained_auto_packing: manual
+ chained_picking_type: out
+-
+ !record {model: stock.location, id: location_pack_zone}:
+ name: Pack Zone
+ usage: internal
+ location_id: location_order
+ chained_journal_id: journal_pack
+ chained_location_id: location_gate_a
+ chained_location_type: fixed
+ chained_auto_packing: manual
+ chained_picking_type: internal
+-
+ !record {model: stock.location, id: location_gate_b}:
+ name: Gate B
+ usage: internal
+ location_id: location_dispatch_zone
+-
+ !record {model: stock.location.path, id: push_pick}:
+ name: Pick List
+ product_id: product.product_product_cpu3
+ journal_id: journal_pick
+ location_from_id: stock.stock_location_output
+ location_dest_id: location_pack_zone
+ picking_type: internal
+ auto: transparent
diff --git a/addons/stock_location/stock_location_view.xml b/addons/stock_location/stock_location_view.xml
index 49c3a808e70..eca4ade39fa 100644
--- a/addons/stock_location/stock_location_view.xml
+++ b/addons/stock_location/stock_location_view.xml
@@ -43,10 +43,11 @@
-
-
-
-
+
+
+
+
+
@@ -64,11 +65,12 @@
+
-
+
@@ -86,13 +88,14 @@
+
-
+
diff --git a/addons/stock_location/test/stock_location.yml b/addons/stock_location/test/stock_location.yml
deleted file mode 100644
index c5360ce67c5..00000000000
--- a/addons/stock_location/test/stock_location.yml
+++ /dev/null
@@ -1,270 +0,0 @@
-
--
- In order to test the stock location module, I will create product, locations, SO, warehouse.
-
--
- Creating a account.account.type record
--
- !record {model: account.account.type, id: account_account_type_asset0}:
- close_method: balance
- code: asset
- name: Asset
- sign: 1
-
-
--
- Creating a account.account.type record
--
- !record {model: account.account.type, id: account_account_type_income0}:
- close_method: unreconciled
- code: income
- name: Income
- sign: 1
-
-
--
- Creating a account.account.type record
--
- !record {model: account.account.type, id: account_account_type_expense0}:
- close_method: unreconciled
- code: expense
- name: Expense
- sign: 1
--
- Creating a account.account.type record
--
- !record {model: account.account.type, id: account_account_type_receivable0}:
- close_method: balance
- code: receivable
- name: Receivable
- sign: 1
--
-
- Creating a account.account record
--
- !record {model: account.account, id: account_account_receivable0}:
- code: '40000'
- company_id: base.main_company
- currency_mode: current
- name: Receivable
- parent_left: 1
- parent_right: 2
- type: receivable
- user_type: account_account_type_receivable0
--
- Creating a account.account record
--
- !record {model: account.account, id: account_account_payable0}:
- code: '440000'
- company_id: base.main_company
- currency_mode: current
- name: Payable
- parent_left: 3
- parent_right: 4
- type: payable
- user_type: account_account_type_expense0
--
- Creating a account.journal record
--
- !record {model: account.journal, id: account_journal_purchasejournal0}:
- code: pur
- company_id: base.main_company
- name: Purchase Journal
- sequence_id: account.sequence_purchase_journal
- type: purchase
- view_id: account.account_journal_bank_view
-
--
- Creating a account.journal record
--
- !record {model: account.journal, id: account_journal_salejouran0}:
- code: sal
- company_id: base.main_company
- name: Sale Jouran
- sequence_id: account.sequence_sale_journal
- type: sale
- view_id: account.account_journal_view
-
--
- Creating a account.account record
--
- !record {model: account.account, id: account_account_expenseaccount0}:
- code: Expe
- company_id: base.main_company
- currency_mode: current
- name: Expense Account
- parent_left: 5
- parent_right: 6
- type: consolidation
- user_type: account_account_type_asset0
--
- Creating a account.account record
--
- !record {model: account.account, id: account_account_productsale0}:
- code: '001'
- company_id: base.main_company
- currency_mode: current
- name: Product Sale
- type: other
- user_type: account_account_type_income0
-
--
- Creating a account.account record
--
- !record {model: account.account, id: account_account_productpurchase0}:
- code: '0002'
- company_id: base.main_company
- currency_mode: current
- name: Product Purchase
- type: other
- user_type: account_account_type_expense0
-
--
- Creating a res.partner record
--
- !record {model: res.partner, id: res_partner_shawtrust0}:
- address:
- - country_id: base.in
- - street: St James House, Vicar Lane, Sheffield
- lang: en_US
- name: 'Shaw Trust '
- property_account_payable: account_account_payable0
- property_account_receivable: account_account_receivable0
--
- Creating a res.partner record
--
- !record {model: res.partner, id: res_partner_diasorinltd0}:
- address:
- - country_id: base.in
- street: Ash House, Ash Road
- name: DiaSorin Ltd
- supplier: true
-
-
--
- Creating a res.partner record
--
- !record {model: res.partner, id: res_partner_microlinktechnologies0}:
- address:
- - street: Kailash Vaibhav, Parksite
- name: Micro Link Technologies
- property_account_payable: account_account_payable0
- property_account_receivable: account_account_receivable0
- supplier: true
-
--
- Creating a res.partner.address record
--
- !record {model: res.partner.address, id: res_partner_address_0}:
- country_id: base.in
- partner_id: res_partner_microlinktechnologies0
- street: Ash House, Ash Road
- title: base.res_partner_title_miss
-
-
--
- Creating a product.category record
--
- !record {model: product.category, id: product_category_computer0}:
- name: Computer
--
- Creating a stock.location record
--
- !record {model: stock.location, id: stock_location_suppiler0}:
- chained_auto_packing: auto
- chained_delay: 15
- chained_location_type: none
- company_id: base.main_company
- name: Suppiler1
- usage: supplier
--
-
- Creating a product.product record
--
- !record {model: product.product, id: product_product_hpcdwriters0}:
- categ_id: product_category_computer0
- cost_method: standard
- list_price: 1000.0
- mes_type: fixed
- name: HP CD writers
- procure_method: make_to_stock
- seller_ids:
- - delay: 1
- name: res_partner_shawtrust0
- min_qty: 5.0
- supply_method: buy
- type: product
- uom_id: product.product_uom_unit
- uom_po_id: product.product_uom_unit
- property_account_expense: account_account_productpurchase0
- property_account_income: account_account_productsale0
- path_ids:
- - auto: auto
- delay: 30
- location_dest_id: stock.location_inventory
- location_from_id: stock_location_suppiler0
- property_stock_inventory: stock.location_inventory
- property_stock_procurement: stock.location_procurement
- property_stock_production: stock.location_production
--
- Creating a stock.location record
--
- !record {model: stock.location, id: stock_location_suppiler0}:
- address_id: res_partner_address_0
- chained_auto_packing: manual
- chained_delay: 20
- chained_location_type: none
- company_id: base.main_company
- name: Suppiler 1
- usage: internal
--
- I create warehouse.
--
- !record {model: stock.warehouse, id: warehouse0}:
- company_id: base.main_company
- lot_input_id: stock.stock_location_stock
- lot_output_id: stock_location_suppiler0
- lot_stock_id: stock_location_suppiler0
- name: OpenERP S.A.
- partner_address_id: res_partner_address_0
--
- I create Sale order for HP CD writers.
--
- !record {model: sale.order, id: sale_order_01}:
- date_order: '2010-04-20'
- invoice_quantity: order
- name: Test/location
- order_line:
- - name: HP CD writers
- price_unit: 1000.0
- product_uom: product.product_uom_unit
- product_uom_qty: 5.0
- state: draft
- product_id: product_product_hpcdwriters0
- type: make_to_order
- order_policy: manual
- partner_id: base.res_partner_agrolait
- partner_invoice_id: base.res_partner_address_8
- partner_order_id: base.res_partner_address_8
- partner_shipping_id: base.res_partner_address_8
- picking_policy: direct
- pricelist_id: product.list0
- shop_id: sale.shop
--
- I confirm the sale order.
--
- !workflow {model: sale.order, action: order_confirm, ref: sale_order_01}
--
- I check the delay mentioned in pushed flow in move.
--
- !python {model: stock.move}: |
- product_id=self.pool.get('product.product').search(cr,uid,[('name','=','HP CD writers')])
- location_id=self.pool.get('stock.location').search(cr,uid,[('name','=','Inventory loss')])
- move_ids =self.search(cr, uid, [('product_id','in',product_id),('location_dest_id','=',location_id)])
- if move_ids:
- move_obj=self.browse(cr,uid,move_ids)[0]
- import time
- from_dt = time.mktime(time.strptime(move_obj.date,'%Y-%m-%d %H:%M:%S'))
- to_dt = time.mktime(time.strptime(move_obj.date_planned,'%Y-%m-%d %H:%M:%S'))
- diff_day = (to_dt-from_dt)/(3600*24)
- assert (round(diff_day)+1 ==30)
diff --git a/addons/stock_location/test/stock_location_pull_flow.yml b/addons/stock_location/test/stock_location_pull_flow.yml
new file mode 100644
index 00000000000..a6f7a8e913a
--- /dev/null
+++ b/addons/stock_location/test/stock_location_pull_flow.yml
@@ -0,0 +1,226 @@
+-
+ In order to test the product pulled flow , I create ,partner,product,procurement
+-
+ I create a account type Asset.
+-
+ !record {model: account.account.type, id: account_account_type_asset0}:
+ close_method: balance
+ code: asset
+ name: Asset
+ sign: 1
+-
+ I create a account type income.
+-
+ !record {model: account.account.type, id: account_account_type_income0}:
+ close_method: unreconciled
+ code: income
+ name: Income
+ sign: 1
+-
+ I create a account type Expense.
+-
+ !record {model: account.account.type, id: account_account_type_expense0}:
+ close_method: unreconciled
+ code: expense
+ name: Expense
+ sign: 1
+-
+ I create a account type Receivable.
+-
+ !record {model: account.account.type, id: account_account_type_receivable0}:
+ close_method: balance
+ code: receivable
+ name: Receivable
+ sign: 1
+-
+
+ I create a account Receivable.
+-
+ !record {model: account.account, id: account_account_receivable0}:
+ code: '40000'
+ company_id: base.main_company
+ currency_mode: current
+ name: Receivable
+ parent_left: 1
+ parent_right: 2
+ type: receivable
+ user_type: account_account_type_receivable0
+-
+ I create a account Payable.
+-
+ !record {model: account.account, id: account_account_payable0}:
+ code: '440000'
+ company_id: base.main_company
+ currency_mode: current
+ name: Payable
+ parent_left: 3
+ parent_right: 4
+ type: payable
+ user_type: account_account_type_expense0
+-
+ I create a Purchase Journal.
+-
+ !record {model: account.journal, id: account_journal_purchasejournal0}:
+ code: pur
+ company_id: base.main_company
+ name: Purchase Journal
+ sequence_id: account.sequence_purchase_journal
+ type: purchase
+ view_id: account.account_journal_bank_view
+
+-
+ I create a Sale Journal.
+-
+ !record {model: account.journal, id: account_journal_salejouran0}:
+ code: sal
+ company_id: base.main_company
+ name: Sale Journal
+ sequence_id: account.sequence_sale_journal
+ type: sale
+ view_id: account.account_journal_view
+
+-
+ I create a Sale Journal.
+-
+ !record {model: account.account, id: account_account_expenseaccount0}:
+ code: Expe
+ company_id: base.main_company
+ currency_mode: current
+ name: Expense Account
+ parent_left: 5
+ parent_right: 6
+ type: consolidation
+ user_type: account_account_type_asset0
+-
+ I create Product Sale account.
+-
+ !record {model: account.account, id: account_account_productsale0}:
+ code: '001'
+ company_id: base.main_company
+ currency_mode: current
+ name: Product Sale
+ type: other
+ user_type: account_account_type_income0
+
+-
+ I create Product Product Purchase.
+-
+ !record {model: account.account, id: account_account_productpurchase0}:
+ code: '0002'
+ company_id: base.main_company
+ currency_mode: current
+ name: Product Purchase
+ type: other
+ user_type: account_account_type_expense0
+-
+ I create Supplier.
+-
+ !record {model: res.partner, id: res_partner_shawtrust0}:
+ address:
+ - country_id: base.in
+ - street: St James House, Vicar Lane, Sheffield
+ lang: en_US
+ name: 'Shaw Trust '
+ property_account_payable: account_account_payable0
+ property_account_receivable: account_account_receivable0
+-
+ I create product category.
+-
+ !record {model: product.category, id: product_category_computer0}:
+ name: Computer
+-
+ I create product and define the pulled flow condition for stock move.
+ I set shipping type Sending Goods. and set Procurement type move.
+-
+ !record {model: product.product, id: product_product_hpcdwriters0}:
+ categ_id: product_category_computer0
+ cost_method: standard
+ list_price: 1000.0
+ mes_type: fixed
+ name: HP CD writers
+ procure_method: make_to_stock
+ seller_ids:
+ - delay: 1
+ name: res_partner_shawtrust0
+ min_qty: 5.0
+ supply_method: buy
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+ property_account_expense: account_account_productpurchase0
+ property_account_income: account_account_productsale0
+ flow_pull_ids:
+ - invoice_state: none
+ location_id: stock.stock_location_shop0
+ location_src_id: stock.stock_location_shop1
+ name: E001
+ partner_address_id: base.res_partner_address_2
+ picking_type: out
+ procure_method: make_to_stock
+ type_proc: move
+ - invoice_state: none
+ location_id: stock.stock_location_shop1
+ location_src_id: stock.stock_location_suppliers
+ name: E002
+ partner_address_id: base.res_partner_address_7
+ picking_type: out
+ procure_method: make_to_stock
+ type_proc: move
+ - invoice_state: none
+ location_id: stock.stock_location_suppliers
+ location_src_id: stock.stock_location_stock
+ name: E003
+ type_proc: buy
+ property_stock_inventory: stock.location_inventory
+ property_stock_procurement: stock.location_procurement
+ property_stock_production: stock.location_production
+ qty_available: 15
+-
+ I create procurement order.
+-
+ !record {model: procurement.order, id: procurement_order_test0}:
+ company_id: base.main_company
+ date_planned: '2010-10-07 18:24:24'
+ location_id: stock.stock_location_shop0
+ name: Testing pulled flow
+ priority: '1'
+ procure_method: make_to_order
+ product_id: product_product_hpcdwriters0
+ product_qty: 5.0
+ product_uom: product.product_uom_unit
+ product_uos: product.product_uom_unit
+ product_uos_qty: 0.0
+-
+ I confirm procurement order.
+-
+ !workflow {model: procurement.order, action: button_confirm, ref: procurement_order_test0}
+-
+ I launch the scheduler to compute procurement.
+-
+ !python {model: procurement.order.compute.all}: |
+ proc_obj = self.pool.get('procurement.order')
+ proc_obj._procure_confirm(cr,uid)
+-
+ I check the state of procurement order is cancel and stock move is cancel.
+-
+ !python {model: procurement.order }: |
+ from tools.translate import _
+ procurement_ids=self.search(cr, uid, [('id', '=', ref('procurement_order_test0'))])
+ if procurement_ids:
+ order=self.browse(cr,uid,procurement_ids)[0]
+ assert(order.state=='cancel')
+-
+ I check the new of procurement order create .
+-
+ !python {model: procurement.order }: |
+ from tools.translate import _
+ procurement_ids=self.search(cr, uid, [('name','=','E001')])
+ assert len(procurement_ids), "Procurement order hasn't Created."
+-
+ I check the Outgoing Picking is create for source location Shop 2 and destination shop1.
+-
+ !python {model: stock.picking }: |
+ from tools.translate import _
+ picking_id = self.search(cr, uid, [('origin','=','Testing pulled flow:E001'),('type','=','out')])
+ assert len(picking_id), "Picking hasn't Created."
+
\ No newline at end of file
diff --git a/addons/stock_location/test/stock_location_push_flow.yml b/addons/stock_location/test/stock_location_push_flow.yml
new file mode 100644
index 00000000000..3f473026c8b
--- /dev/null
+++ b/addons/stock_location/test/stock_location_push_flow.yml
@@ -0,0 +1,134 @@
+-
+ In order to test the product pushed flow , I create account ,partner,product,shipment
+ Push flow specification indicates which location is chained with which location.
+-
+ I create product category.
+-
+ !record {model: product.category, id: product_category_computer0}:
+ name: Computer
+
+-
+ I create Supplier.
+-
+ !record {model: res.partner, id: res_partner_microlinktechnologies0}:
+ address:
+ - street: Kailash Vaibhav, Parksite
+ name: Micro Link Technologies
+ property_account_payable: account_account_payable0
+ property_account_receivable: account_account_receivable0
+ supplier: true
+
+-
+ I create Supplier address.
+-
+ !record {model: res.partner.address, id: res_partner_address_0}:
+ country_id: base.in
+ partner_id: res_partner_microlinktechnologies0
+ street: Ash House, Ash Road
+ title: base.res_partner_title_miss
+
+-
+ I create product and define the pushed flow .
+-
+ I set the chain location Supplier to stock Input
+ Stock Input to Quality test and Quality test -Stock .
+-
+ !record {model: product.product, id: product_product_hpcdwriters0}:
+ categ_id: product_category_computer0
+ cost_method: standard
+ list_price: 1000.0
+ mes_type: fixed
+ name: HP CD writers
+ procure_method: make_to_stock
+ seller_ids:
+ - delay: 1
+ name: res_partner_microlinktechnologies0
+ min_qty: 5.0
+ path_ids:
+ - auto: auto
+ invoice_state: none
+ location_dest_id: stock.stock_location_stock
+ location_from_id: stock.stock_location_suppliers
+ - auto: auto
+ invoice_state: none
+ location_dest_id: stock_location.stock_location_qualitytest0
+ location_from_id: stock.stock_location_stock
+ - auto: auto
+ invoice_state: none
+ location_dest_id: stock.stock_location_stock
+ location_from_id: stock_location.stock_location_qualitytest0
+ supply_method: buy
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+ property_stock_inventory: stock.location_inventory
+ property_stock_procurement: stock.location_procurement
+ property_stock_production: stock.location_production
+-
+ In order to test pushed flow .I buy the product from Micro Link Technologies supplier. I create a Picking.
+-
+ !record {model: stock.picking , id: stock_picking_in0}:
+ address_id: res_partner_address_0
+ company_id: base.main_company
+ invoice_state: none
+ move_lines:
+ - date_expected: '2010-10-08 15:36:53'
+ location_dest_id: stock.stock_location_stock
+ location_id: stock.stock_location_suppliers
+ name: 'HP CD writers'
+ product_id: product_product_hpcdwriters0
+ product_qty: 6.0
+ product_uom: product.product_uom_unit
+ product_uos_qty: 6.0
+ name: Pushed Flow Test
+ type: in
+-
+ I confirm picking.
+-
+ !python {model: stock.picking }: |
+ self.draft_force_assign(cr, uid, [ref("stock_picking_in0")], {"lang": "en_US",
+ "search_default_available": 1, "tz": False, "active_model": "ir.ui.menu",
+ "contact_display": "partner_address", "active_ids": [ref("stock.menu_action_picking_tree4")],
+ "active_id": ref("stock.menu_action_picking_tree4"), })
+-
+ I check that the outgoing order of the supplier is create with two move line.
+ Stock/Input To Quality test and Quality test To Stock.
+-
+ I check the move is in waiting state.
+-
+ !python {model: stock.picking }: |
+ from tools.translate import _
+ picking_id = self.search(cr, uid, [('origin','=','Pushed Flow Test'),('type','=','out')])
+ if picking_id:
+ pick=self.browse(cr,uid,picking_id[0])
+ for move in pick.move_lines:
+ assert(move.state == 'waiting'), _('Stock is not in waiting state')
+-
+ I receive the order of the supplier Micro Link Technologies from the Incoming Shipments menu.
+-
+ !python {model: stock.picking }: |
+ import time
+ picking_id = self.search(cr, uid, [('address_id.partner_id','=',ref('res_partner_microlinktechnologies0')),('type','=','in')])
+ if picking_id:
+ pick=self.browse(cr,uid,picking_id[0])
+ move =pick.move_lines[0]
+ partial_datas = {
+ 'partner_id':pick.address_id.partner_id.id,
+ 'address_id': pick.address_id.id,
+ 'delivery_date' : time.strftime('%Y-%m-%d'),
+ }
+ partial_datas['move%s'%(move.id)]= {
+ 'product_id': move.product_id.id,
+ 'product_qty': move.product_qty,
+ 'product_uom': move.product_uom.id,
+ }
+ self.do_partial(cr, uid, picking_id,partial_datas)
+-
+ I check the Outgoing Orders is automatically done.
+-
+ !python {model: stock.picking }: |
+ from tools.translate import _
+ picking_id = self.search(cr, uid, [('origin','=','Pushed Flow Test'),('type','=','out')])
+ if picking_id:
+ pick=self.browse(cr,uid,picking_id[0])
+ assert(pick.state == 'done'), _('Picking is not in done state')
diff --git a/addons/stock_no_autopicking/test/stock_no_autopicking.yml b/addons/stock_no_autopicking/test/stock_no_autopicking.yml
index 9732e17194c..34e20eeb6c4 100644
--- a/addons/stock_no_autopicking/test/stock_no_autopicking.yml
+++ b/addons/stock_no_autopicking/test/stock_no_autopicking.yml
@@ -86,7 +86,7 @@
-
!record {model: mrp.routing, id: mrp_routing_productionrouting0}:
name: Production Routing
- location_id: stock.stock_location_13
+ location_id: stock.stock_location_stock
workcenter_lines:
- cycle_nbr: 1.0
hour_nbr: 0.5
diff --git a/addons/stock_planning/i18n/de.po b/addons/stock_planning/i18n/de.po
new file mode 100644
index 00000000000..3234d49ae52
--- /dev/null
+++ b/addons/stock_planning/i18n/de.po
@@ -0,0 +1,1470 @@
+# 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:50+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: stock_planning
+#: code:addons/stock_planning/wizard/stock_planning_createlines.py:0
+#, python-format
+msgid ""
+"No forecasts for selected period or no products in selected category !"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,stock_only:0
+msgid ""
+"Check to calculate stock location of selected warehouse only. If not "
+"selected calculation is made for input, stock and output location of "
+"warehouse."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,maximum_op:0
+msgid "Maximum Rule"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_per_company:0
+msgid "This Copmany Period1"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+#: view:stock.sale.forecast:0
+msgid "Group By..."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Already Out: "
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,product_amt:0
+msgid ""
+"Forecast value which will be converted to Product Quantity according to "
+"prices."
+msgstr ""
+
+#. module: stock_planning
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Incoming Left must be greater than 0 !"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,outgoing_before:0
+msgid ""
+"Planned Out in periods before calculated. Between start date of current "
+"period and one day before start of calculated period."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/wizard/stock_planning_forecast.py:0
+#, python-format
+msgid "No products in selected category !"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast.createlines,warehouse_id:0
+msgid ""
+"Warehouse which forecasts will concern. If during stock planning you will "
+"need sales forecast for all warehouses choose any warehouse now."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,outgoing_left:0
+msgid "Expected Out"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid " "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,incoming_left:0
+msgid "Incoming Left"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Requisition history"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast.createlines:0
+msgid "Create Forecasts Lines"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,outgoing:0
+msgid "Quantity of all confirmed outgoing moves in calculated Period."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Create Daily Periods"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+#: field:stock.planning,company_id:0
+#: field:stock.planning.createlines,company_id:0
+#: view:stock.sale.forecast:0
+#: field:stock.sale.forecast,company_id:0
+#: field:stock.sale.forecast.createlines,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,warehouse_forecast:0
+msgid ""
+"All sales forecasts for selected Warehouse of selected Product during "
+"selected Period."
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.ui.menu,name:stock_planning.menu_stock_period_creatlines
+msgid "Create Stock and Sales Periods"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Minimum Stock Rule Indicators"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast.createlines,period_id:0
+msgid "Period which forecasts will concern."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,stock_only:0
+msgid "Stock Location Only"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,already_out:0
+msgid ""
+"Quantity which is already dispatched out of this warehouse in current period."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,procure_to_stock:0
+msgid ""
+"Chect to make procurement to stock location of selected warehouse. If not "
+"selected procurement will be made into input location of warehouse."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Current Period Situation"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Planned Out Before: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Create Monthly Periods"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,supply_warehouse_id:0
+msgid ""
+"Warehouse used as source in supply pick move created by 'Supply from Another "
+"Warhouse'."
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_period_createlines
+msgid "stock.period.createlines"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,outgoing_before:0
+msgid "Planned Out Before"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning.createlines,forecasted_products:0
+msgid "All Products with Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Periods :"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,already_in:0
+msgid ""
+"Quantity which is already picked up to this warehouse in current period."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Confirmed In Before: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Stock and Sales Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_sale_forecast
+msgid "stock.sale.forecast"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_dept_id:0
+msgid "This Department"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,to_procure:0
+msgid "Planned In"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,stock_simulation:0
+msgid "Stock Simulation"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_planning_createlines
+msgid "stock.planning.createlines"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,incoming_before:0
+msgid ""
+"Confirmed incoming in periods before calculated (Including Already In). "
+"Between start date of current period and one day before start of calculated "
+"period."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Search Sales Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_per_user:0
+msgid "This User Period5"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,history:0
+msgid "History of procurement or internal supply of this planning line."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,company_forecast:0
+msgid ""
+"All sales forecasts for whole company (for all Warehouses) of selected "
+"Product during selected Period."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_per_user:0
+msgid "This User Period1"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_per_user:0
+msgid "This User Period3"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.ui.menu,name:stock_planning.menu_stock_planning_main
+#: view:stock.planning:0
+msgid "Stock Planning"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,minimum_op:0
+msgid "Minimum Rule"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Procure Incoming Left"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+msgid "Closed"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Pick List "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning.createlines:0
+#: view:stock.sale.forecast.createlines:0
+msgid "Create"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_view_stock_planning_form
+#: model:ir.module.module,shortdesc:stock_planning.module_meta_information
+#: model:ir.ui.menu,name:stock_planning.menu_stock_planning
+#: view:stock.planning:0
+msgid "Master Procurement Schedule"
+msgstr ""
+
+#. module: stock_planning
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Creation Date: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,period_id:0
+#: field:stock.planning.createlines,period_id:0
+#: field:stock.sale.forecast,period_id:0
+#: field:stock.sale.forecast.createlines,period_id:0
+msgid "Period"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+#: field:stock.period,state:0
+#: field:stock.planning,state:0
+#: field:stock.sale.forecast,state:0
+msgid "State"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast.createlines,product_categ_id:0
+msgid "Product Category of products which created forecasts will concern."
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_period
+msgid "stock period"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_sale_forecast_createlines
+msgid "stock.sale.forecast.createlines"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,warehouse_id:0
+#: field:stock.planning.createlines,warehouse_id:0
+#: field:stock.sale.forecast,warehouse_id:0
+#: field:stock.sale.forecast.createlines,warehouse_id:0
+msgid "Warehouse"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,stock_simulation:0
+msgid ""
+"Stock simulation at the end of selected Period.\n"
+" For current period it is: \n"
+"Initial Stock - Already Out + Already In - Expected Out + Incoming Left.\n"
+"For periods ahead it is: \n"
+"Initial Stock - Planned Out Before + Incoming Before - Planned Out + Planned "
+"In."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,analyze_company:0
+msgid "Check this box to see the sales for whole company."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,name:0
+msgid "Name"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Search Stock Planning"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,incoming_before:0
+msgid "Incoming Before"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning.createlines,product_categ_id:0
+#: field:stock.sale.forecast.createlines,product_categ_id:0
+msgid "Product Category"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#: code:addons/stock_planning/wizard/stock_planning_createlines.py:0
+#: code:addons/stock_planning/wizard/stock_planning_forecast.py:0
+#, python-format
+msgid "Error !"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Manual planning for "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_user_id:0
+msgid "This User"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Forecasts"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Supply from Another Warehouse"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Calculate Planning"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Procurement created in MPS by user: "
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Invalid action !"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,stock_start:0
+msgid "Stock quantity one day before current period."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Create Weekly Periods"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,maximum_op:0
+msgid "Maximum quantity set in Minimum Stock Rules for this Warhouse"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "You must specify a Source Warehouse !"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning.createlines:0
+msgid "Creates planning lines for selected period and warehouse."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Warehouse Forecast: "
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Cannot delete Validated Sale Forecasts !"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_per_user:0
+msgid "This User Period4"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning.createlines:0
+#: view:stock.sale.forecast.createlines:0
+msgid "Note: Doesn't duplicate existing lines created by you."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+msgid "Stock and Sales Period"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,company_forecast:0
+msgid "Company Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,product_uom:0
+#: help:stock.sale.forecast,product_uom:0
+msgid ""
+"Unit of Measure used to show the quanities of stock calculation.You can use "
+"units form default category or from second category (UoS category)."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Per User :"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.period,name:0
+#: field:stock.period.createlines,name:0
+msgid "Period Name"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,user_id:0
+msgid "Created/Validated by"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,warehouse_forecast:0
+msgid "Warehouse Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_per_company:0
+msgid "This Company Period4"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_per_company:0
+msgid "This Company Period5"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Planned Out: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_per_company:0
+msgid "This Company Period2"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_per_company:0
+msgid "This Company Period3"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.period,date_start:0
+#: field:stock.period.createlines,date_start:0
+msgid "Start Date"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_per_user:0
+msgid "This User Period2"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,confirmed_forecasts_only:0
+msgid "Validated Forecasts"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning.createlines,product_categ_id:0
+msgid ""
+"Planning will be created for products from Product Category selected by this "
+"field. This field is ignored when you check \"All Forecasted Product\" box."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,planned_outgoing:0
+msgid "Planned Out"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: selection:stock.period,state:0
+#: selection:stock.planning,state:0
+#: selection:stock.sale.forecast,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: stock_planning
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+#: view:stock.sale.forecast:0
+msgid "Warehouse "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_per_dept:0
+msgid "This Dept Period5"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Create periods for Stock and Sales Planning"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,planned_outgoing:0
+msgid ""
+"Enter planned outgoing quantity from selected Warehouse during the selected "
+"Period of selected Product. To plan this value look at Confirmed Out or "
+"Sales Forecasts. This value should be equal or greater than Confirmed Out."
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.module.module,description:stock_planning.module_meta_information
+msgid ""
+"\n"
+"This module is based on original OpenERP SA module stock_planning version "
+"1.0 of the same name Master Procurement Schedule.\n"
+"\n"
+"Purpose of MPS is to allow create a manual procurement (requisition) apart "
+"of MRP scheduler (which works automatically on minimum stock rules).\n"
+"\n"
+"Terms used in the module:\n"
+"- Stock and Sales Period - is the time (between Start Date and End Date) for "
+"which you plan Stock and Sales Forecast and make Procurement Planning. \n"
+"- Stock and Sales Forecast - is the quantity of products you plan to sell in "
+"the Period.\n"
+"- Stock Planning - is the quantity of products you plan to purchase or "
+"produce for the Period.\n"
+"\n"
+"Because we have another module sale_forecast which uses terms \"Sales "
+"Forecast\" and \"Planning\" as amount values we will use terms \"Stock and "
+"Sales Forecast\" and \"Stock Planning\" to emphasize that we use quantity "
+"values. \n"
+"\n"
+"Activity with this module is divided to three steps:\n"
+"- Creating Periods. Mandatory step.\n"
+"- Creating Sale Forecasts and entering quantities to them. Optional step but "
+"useful for further planning.\n"
+"- Creating Planning lines, entering quantities to them and making "
+"Procurement. Making procurement is the final step for the Period.\n"
+"\n"
+"Periods\n"
+"=======\n"
+"You have two menu items for Periods in \"Sales Management - Configuration\". "
+"There are:\n"
+"- \"Create Sales Periods\" - Which automates creating daily, weekly or "
+"monthly periods.\n"
+"- \"Stock and sales Periods\" - Which allows to create any type of periods, "
+"change the dates and change the State of period.\n"
+"\n"
+"Creating periods is the first step you have to do to use modules features. "
+"You can create custom periods using \"New\" button in \"Stock and Sales "
+"Periods\" form or view but it is recommended to use automating tool.\n"
+"\n"
+"Remarks:\n"
+"- These periods (officially Stock and Sales Periods) are separated of "
+"Financial or other periods in the system.\n"
+"- Periods are not assigned to companies (when you use multicompany feature "
+"at all). Module suppose that you use the same periods across companies. If "
+"you wish to use different periods for different companies define them as you "
+"wish (they can overlap). Later on in this text will be indications how to "
+"use such periods.\n"
+"- When periods are created automatically their start and finish dates are "
+"with start hour 00:00:00 and end hour 23:59:00. Fe. when you create daily "
+"periods they will have start date 31.01.2010 00:00:00 and end date "
+"31.01.2010 23:59:00. It works only in automatic creation of periods. When "
+"you create periods manually you have to take care about hours because you "
+"can have incorrect values form sales or stock. \n"
+"- If you use overlapping periods for the same product, warehouse and company "
+"results can be unpredictable.\n"
+"- If current date doesn't belong to any period or you have holes between "
+"periods results can be unpredictable.\n"
+"\n"
+"Sales Forecasts\n"
+"===============\n"
+"You have few menus for Sales forecast in \"Sales Management - Sales "
+"Forecasts\".\n"
+"- \"Create Sales Forecasts for Sales Periods\" - which automates creating "
+"forecasts lines according to some parameters.\n"
+"- \"Sales Forecasts\" - few menus for working with forecasts lists and "
+"forms.\n"
+"\n"
+"Menu \"Create Sales Forecasts for Sales Periods\" creates Forecasts for "
+"products from selected Category, for selected Period and for selected "
+"Warehouse. It is an option \"Copy Last Forecast\" to copy forecast and other "
+"settings of period before this one to created one.\n"
+"\n"
+"Remarks:\n"
+"- This tool doesn't create lines, if relevant lines (for the same Product, "
+"Period, Warehouse and validated or created by you) already exists. If you "
+"wish to create another forecast, if relevant lines exists you have to do it "
+"manually using menus described bellow.\n"
+"- When created lines are validated by someone else you can use this tool to "
+"create another lines for the same Period, Product and Warehouse. \n"
+"- When you choose \"Copy Last Forecast\" created line takes quantity and "
+"some settings from your (validated by you or created by you if not validated "
+"yet) forecast which is for last period before period of created forecast. If "
+"there are few your forecasts for period before this one (it is possible) "
+"system takes one of them (no rule which of them).\n"
+"\n"
+"\n"
+"Menus \"Sales Forecasts\"\n"
+"On \"Sales Forecast\" form mainly you have to enter a forecast quantity in "
+"\"Product Quantity\". Further calculation can work for draft forecasts. But "
+"validation can save your data against any accidental changes. You can click "
+"\"Validate\" button but it is not mandatory.\n"
+"\n"
+"Instead of forecast quantity you can enter amount of forecast sales in field "
+"\"Product Amount\". System will count quantity from amount according to Sale "
+"price of the Product.\n"
+"\n"
+"All values on the form are expressed in unit of measure selected on form. "
+"You can select one of unit of measure from default category or from second "
+"category. When you change unit of measure the quanities will be recalculated "
+"according to new UoM: editable values (blue fields) immediately, non edited "
+"fields after clicking of \"Calculate Planning\" button.\n"
+"\n"
+"To find proper value for Sale Forecast you can use \"Sales History\" table "
+"for this product. You have to enter parameters to the top and left of this "
+"table and system will count sale quantities according to these parameters. "
+"So you can select fe. your department (at the top) then (to the left): last "
+"period, period before last and period year ago.\n"
+"\n"
+"Remarks:\n"
+"\n"
+"\n"
+"Procurement Planning\n"
+"====================\n"
+"Menu for Planning you can find in \"Warehouse - Stock Planning\".\n"
+"- \"Create Stock Planning Lines\" - allows you to automate creating planning "
+"lines according to some parameters.\n"
+"- \"Master Procurement Scheduler\" - is the most important menu of the "
+"module which allows to create procurement.\n"
+"\n"
+"As Sales forecast is phase of planning sales. The Procurement Planning "
+"(Planning) is the phase of scheduling Purchasing or Producing. You can "
+"create Procurement Planning quickly using tool from menu \"Create Stock "
+"Planning Lines\", then you can review created planning and make procurement "
+"using menu \"Master Procurement Schedule\".\n"
+"\n"
+"Menu \"Create Stock Planning Lines\" allows you to create quickly Planning "
+"lines for products from selected Category, for selected Period, and for "
+"selected Warehouse. When you check option \"All Products with Forecast\" "
+"system creates lines for all products having forecast for selected Period "
+"and Warehouse. Selected Category will be ignored in this case.\n"
+"\n"
+"Under menu \"Master Procurement Scheduler\" you can generally change the "
+"values \"Planned Out\" and \"Planned In\" to observe the field \"Stock "
+"Simulation\" and decide if this value would be accurate for end of the "
+"Period. \n"
+"\"Planned Out\" can be based on \"Warehouse Forecast\" which is the sum of "
+"all forecasts for Period and Warehouse. But your planning can be based on "
+"any other information you have. It is not necessary to have any forecast. \n"
+"\"Planned In\" quantity is used to calculate field \"Incoming Left\" which "
+"is the quantity to be procured to make stock as indicated in \"Stock "
+"Simulation\" at the end of Period. You can compare \"Stock Simulation\" "
+"quantity to minimum stock rules visible on the form. But you can plan "
+"different quantity than in Minimum Stock Rules. Calculation is made for "
+"whole Warehouse by default. But if you want to see values for Stock location "
+"of calculated warehouse you can use check box \"Stock Location Only\".\n"
+"\n"
+"If after few tries you decide that you found correct quantities for "
+"\"Planned Out\" and \"Planned In\" and you are satisfied with end of period "
+"stock calculated in \"Stock Simulation\" you can click \"Procure Incoming "
+"Left\" button to procure quantity of field \"Incoming Left\" into the "
+"Warehouse. System creates appropriate Procurement Order. You can decide if "
+"procurement will be made to Stock or Input location of calculated Warehouse. "
+"\n"
+"\n"
+"If you don't want to Produce or Buy the product but just pick calculated "
+"quantity from another warehouse you can click \"Supply from Another "
+"Warehouse\" (instead of \"Procure Incoming Left\"). System creates pick list "
+"with move from selected source Warehouse to calculated Warehouse (as "
+"destination). You can also decide if this pick should be done from Stock or "
+"Output location of source warehouse. Destination location (Stock or Input) "
+"of destination warehouse will be used as set for \"Procure Incoming Left\". "
+"\n"
+"\n"
+"To see proper quantities in fields \"Confirmed In\", \"Confirmed Out\", "
+"\"Confirmed In Before\", \"Planned Out Before\" and \"Stock Simulation\" you "
+"have to click button \"Calculate Planning\".\n"
+"\n"
+"All values on the form are expressed in unit of measure selected on form. "
+"You can select one of unit of measure from default category or from second "
+"category. When you change unit of measure the quanities will be recalculated "
+"according to new UoM: editable values (blue fields) immediately, non edited "
+"fields after clicking of \"Calculate Planning\" button.\n"
+"\n"
+"How Stock Simulation field is calculated:\n"
+"Generally Stock Simulation shows the stock for end of the calculated period "
+"according to some planned or confirmed stock moves. Calculation always "
+"starts with quantity of real stock of beginning of current period. Then "
+"calculation adds or subtracts quantities of calculated period or periods "
+"before calculated.\n"
+"When you are in the same period (current period is the same as calculated) "
+"Stock Simulation is calculated as follows:\n"
+"Stock Simulation = \n"
+"\tStock of beginning of current Period\n"
+"\t- Planned Out \n"
+"\t+ Planned In\n"
+"\n"
+"When you calculate period next to current:\n"
+"Stock Simulation = \n"
+"\tStock of beginning of current Period\n"
+"\t- Planned Out of current Period \n"
+"\t+ Confirmed In of current Period (incl. Already In)\n"
+"\t- Planned Out of calculated Period \n"
+"\t+ Planned In of calculated Period .\n"
+"\n"
+"As you see calculated Period is taken the same way like in case above. But "
+"calculation of current Period are made a little bit different. First you "
+"should note that system takes for current Period only Confirmed In moves. It "
+"means that you have to make planning and procurement for current Period "
+"before this calculation (for Period next to current). \n"
+"\n"
+"When you calculate Period ahead:\n"
+"Stock Simulation = \n"
+"\tStock of beginning of current Period \n"
+"\t- Sum of Planned Out of Periods before calculated \n"
+"\t+ Sum of Confirmed In of Periods before calculated (incl. Already In) \n"
+"\t- Planned Out of calculated Period \n"
+"\t+ Planned In of calculated Period.\n"
+"\n"
+"Periods before calculated means periods starting from current till period "
+"before calculated.\n"
+"\n"
+"Remarks:\n"
+"- Remember to make planning for all periods before calculated because "
+"omitting these quantities and procurements can cause wrong suggestions for "
+"procurements few periods ahead.\n"
+"- If you made planning few periods ahead and you find that real Confirmed "
+"Out is bigger than Planned Out in some periods before you can repeat "
+"Planning and make another procurement. You should do it in the same planning "
+"line. If you create another planning line the suggestions can be wrong.\n"
+"- When you wish to work with different periods for some part of products "
+"define two kinds of periods (fe. Weekly and Monthly) and use them for "
+"different products. Example: If you use always Weekly periods for Products "
+"A, and Monthly periods for Products B your all calculations will work "
+"correctly. You can also use different kind of periods for the same products "
+"from different warehouse or companies. But you cannot use overlapping "
+"periods for the same product, warehouse and company because results can be "
+"unpredictable. The same apply to Forecasts lines.\n"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Incoming Left: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Internal Supply"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"You must specify a Source Warehouse different than calculated (destination) "
+"Warehouse !"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_stock_sale_forecast_createlines_form
+#: model:ir.ui.menu,name:stock_planning.menu_stock_sale_forecast_createlines
+msgid "Create Sales Forecasts"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast.createlines:0
+msgid "Creates forecast lines for selected warehouse and period."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Requisition ("
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,outgoing_left:0
+msgid ""
+"Quantity expected to go out in selected period. As a difference between "
+"Planned Out and Confirmed Out. For current period Already Out is also "
+"calculated"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_id:0
+msgid "Period4"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Already In: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_id:0
+msgid "Period2"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_id:0
+msgid "Period3"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_id:0
+msgid "Period1"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Initial Stock: "
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Minimum stock: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,active_uom:0
+#: field:stock.sale.forecast,active_uom:0
+msgid "Active UoM"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_stock_planning_createlines_form
+#: model:ir.ui.menu,name:stock_planning.menu_stock_planning_createlines
+#: view:stock.planning.createlines:0
+msgid "Create Stock Planning Lines"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "General Info"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_view_stock_sale_forecast_form
+msgid "Sales Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Planning and Situation for Calculated Period"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_per_warehouse:0
+msgid "This Warehouse Period1"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Confirmed In: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Sales history"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,supply_warehouse_id:0
+msgid "Source Warehouse"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,product_qty:0
+msgid "Forecasted quantity."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Stock"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Stock Simulation: "
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Confirmed Out: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,stock_supply_location:0
+msgid "Stock Supply Location"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.period.createlines,date_stop:0
+msgid "Ending date for planning period."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning.createlines,forecasted_products:0
+msgid ""
+"Check this box to create planning for all products having any forecast for "
+"selected Warehouse and Period. Product Category field will be ignored."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,already_in:0
+msgid "Already In"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,product_uom_categ:0
+#: field:stock.planning,product_uos_categ:0
+#: field:stock.sale.forecast,product_uom_categ:0
+msgid "Product UoM Category"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,incoming:0
+msgid "Confirmed In"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,line_time:0
+msgid "Past/Future"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,product_uos_categ:0
+msgid "Product UoS Category"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,product_qty:0
+msgid "Product Quantity"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast.createlines,copy_forecast:0
+msgid "Copy Last Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,product_id:0
+msgid "Shows which product this forecast concerns."
+msgstr ""
+
+#. module: stock_planning
+#: selection:stock.planning,state:0
+msgid "Done"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.period.createlines,period_ids:0
+msgid "Periods"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " according to state:"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Cancel"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+#: selection:stock.period,state:0
+#: view:stock.planning.createlines:0
+#: view:stock.sale.forecast.createlines:0
+msgid "Close"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+#: selection:stock.sale.forecast,state:0
+msgid "Validated"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+#: selection:stock.period,state:0
+msgid "Open"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast.createlines,copy_forecast:0
+msgid "Copy quantities from last Stock and Sale Forecast."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_per_dept:0
+msgid "This Dept Period1"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_per_dept:0
+msgid "This Dept Period3"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_per_dept:0
+msgid "This Dept Period2"
+msgstr ""
+
+#. module: stock_planning
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_per_dept:0
+msgid "This Dept Period4"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_per_warehouse:0
+msgid "This Warehouse Period2"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_per_warehouse:0
+msgid "This Warehouse Period3"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,outgoing:0
+msgid "Confirmed Out"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,create_uid:0
+msgid "Responsible"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Default UOM"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_per_warehouse:0
+msgid "This Warehouse Period4"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_per_warehouse:0
+msgid "This Warehouse Period5"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+msgid "Current"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_planning
+msgid "stock.planning"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,warehouse_id:0
+msgid ""
+"Shows which warehouse this forecast concerns. If during stock planning you "
+"will need sales forecast for all warehouses choose any warehouse now."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning.createlines,warehouse_id:0
+msgid "Warehouse which planning will concern."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyze_company:0
+msgid "Per Company"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,to_procure:0
+msgid ""
+"Enter quantity which (by your plan) should come in. Change this value and "
+"observe Stock simulation. This value should be equal or greater than "
+"Confirmed In."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning.createlines,period_id:0
+msgid "Period which planning will concern."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,already_out:0
+msgid "Already Out"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,product_id:0
+msgid "Product which this planning is created for."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Per Warehouse :"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+"For period: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,history:0
+msgid "Procurement History"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.period.createlines,date_start:0
+msgid "Starting date for planning period."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Planned In: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Per Department :"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,incoming:0
+msgid "Quantity of all confirmed incoming moves in calculated Period."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.period,date_stop:0
+#: field:stock.period.createlines,date_stop:0
+msgid "End Date"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,stock_supply_location:0
+msgid ""
+"Check to supply from Stock location of Supply Warehouse. If not checked "
+"supply will be made from Output location of Supply Warehouse. Used in "
+"'Supply from Another Warhouse' with Supply Warehouse."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "No Requisition"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,minimum_op:0
+msgid "Minimum quantity set in Minimum Stock Rules for this Warhouse"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,period_id:0
+msgid "Shows which period this forecast concerns."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,product_uom:0
+msgid "UoM"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Calculated Period Simulation"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+#: field:stock.planning,product_id:0
+#: view:stock.sale.forecast:0
+#: field:stock.sale.forecast,product_id:0
+msgid "Product"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Expected Out: "
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.ui.menu,name:stock_planning.menu_stock_sale_forecast
+#: model:ir.ui.menu,name:stock_planning.menu_stock_sale_forecast_all
+#: view:stock.sale.forecast:0
+msgid "Sales Forecasts"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,product_uom:0
+msgid "Product UoM"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "MPS("
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Pick created from MPS by user: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,procure_to_stock:0
+msgid "Procure To Stock Location"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Approve"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,period_id:0
+msgid ""
+"Period for this planning. Requisition will be created for beginning of the "
+"period."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Calculate Sales History"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,product_amt:0
+msgid "Product Amount"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,confirmed_forecasts_only:0
+msgid ""
+"Check to take validated forecasts only. If not checked system takes "
+"validated and draft forecasts."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_id:0
+msgid "Period5"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_stock_period_createlines_form
+msgid "Stock and Sales Planning Periods"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_warehouse_id:0
+msgid "This Warehouse"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_stock_period_form
+#: model:ir.ui.menu,name:stock_planning.menu_stock_period
+#: model:ir.ui.menu,name:stock_planning.menu_stock_period_main
+#: view:stock.period:0
+#: view:stock.period.createlines:0
+msgid "Stock and Sales Periods"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,user_id:0
+msgid "Shows who created this forecast, or who validated."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,incoming_left:0
+msgid ""
+"Quantity left to Planned incoming quantity. This is calculated difference "
+"between Planned In and Confirmed In. For current period Already In is also "
+"calculated. This value is used to create procurement for lacking quantity."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,stock_start:0
+msgid "Initial Stock"
+msgstr ""
diff --git a/addons/stock_planning/stock_planning.py b/addons/stock_planning/stock_planning.py
index 9d9102d67b3..546e83e0053 100644
--- a/addons/stock_planning/stock_planning.py
+++ b/addons/stock_planning/stock_planning.py
@@ -691,7 +691,7 @@ class stock_planning(osv.osv):
'name': _('MPS(') + str(user.login) +') '+ obj.period_id.name,
'picking_id': picking_id,
'product_id': obj.product_id.id,
- 'date_planned': obj.period_id.date_start,
+ 'date': obj.period_id.date_start,
'product_qty': uom_qty,
'product_uom': uom,
'product_uos_qty': uos_qty,
diff --git a/addons/subscription/security/ir.model.access.csv b/addons/subscription/security/ir.model.access.csv
index e19fdde993b..4d4f829092b 100644
--- a/addons/subscription/security/ir.model.access.csv
+++ b/addons/subscription/security/ir.model.access.csv
@@ -1,10 +1,8 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_subscription_document,subscription.document,model_subscription_document,base.group_system,1,1,1,1
-access_subscription_document_fields,subscription.document.fields,model_subscription_document_fields,base.group_system,1,1,1,1
-access_subscription_subscription,subscription.subscription,model_subscription_subscription,base.group_user,1,1,1,1
-access_subscription_subscription_history,subscription.subscription.history,model_subscription_subscription_history,base.group_user,1,1,1,1
+access_subscription_document_fields,subscription.document.fields,model_subscription_document_fields,base.group_tool_manager,1,1,1,1
access_subscription_subscription_user,subscription.subscription user,model_subscription_subscription,base.group_tool_user,1,1,1,1
-access_subscription_subscription_manager,subscription.subscription manager,model_subscription_subscription,base.group_tool_manager,1,0,0,0
access_subscription_subscription_history_user,subscription.subscription.history user,model_subscription_subscription_history,base.group_tool_user,1,1,1,1
-access_subscription_subscription_system,subscription.subscription system,model_subscription_subscription,base.group_system,1,0,0,0
access_subscription_document_user,subscription.document user,model_subscription_document,base.group_tool_user,1,1,1,1
+access_res_partner_user,res.partner.user,base.model_res_partner,base.group_tool_user,1,1,1,1
+access_res_partner_address_user,res.partner.address.user,base.model_res_partner_address,base.group_tool_user,1,1,1,1
+access_ir_cron_user,ir.cron.user,base.model_ir_cron,base.group_tool_user,1,1,1,1
diff --git a/addons/subscription/subscription_view.xml b/addons/subscription/subscription_view.xml
index b27414bb60c..37841919b1b 100644
--- a/addons/subscription/subscription_view.xml
+++ b/addons/subscription/subscription_view.xml
@@ -212,7 +212,7 @@
+ id="base.menu_lunch_survey_root" sequence="20" groups="base.group_tool_manager" />
diff --git a/addons/survey/report/survey_analysis_report.py b/addons/survey/report/survey_analysis_report.py
index c95bd33ac32..0d866368bf2 100644
--- a/addons/survey/report/survey_analysis_report.py
+++ b/addons/survey/report/survey_analysis_report.py
@@ -29,7 +29,6 @@ from report import report_sxw
class survey_analysis(report_rml):
def create(self, cr, uid, ids, datas, context):
-
surv_obj = pooler.get_pool(cr.dbname).get('survey')
user_obj = pooler.get_pool(cr.dbname).get('res.users')
rml_obj=report_sxw.rml_parse(cr, uid, surv_obj._name,context)
@@ -46,9 +45,6 @@ class survey_analysis(report_rml):
"""+to_xml(rml_obj.formatLang(time.strftime("%Y-%m-%d %H:%M:%S"),date_time=True))+"""
"""+ to_xml(company.name) +"""
-
- /
-
1.3cm 28.1cm 20cm 28.1cm
@@ -426,6 +422,7 @@ class survey_analysis(report_rml):
rml += """"""
report_type = datas.get('report_type', 'pdf')
create_doc = self.generators[report_type]
+ self.internal_header=True
pdf = create_doc(rml, title=self.title)
return (pdf, report_type)
diff --git a/addons/survey/report/survey_browse_response.py b/addons/survey/report/survey_browse_response.py
index a8bfa906c90..2cdb98622a9 100644
--- a/addons/survey/report/survey_browse_response.py
+++ b/addons/survey/report/survey_browse_response.py
@@ -273,7 +273,7 @@ class survey_browse_response(report_rml):
style = 'tbl_white'
else:
style = 'tbl_gainsboro'
- i +=1
+ i +=1
rml += """"""
table_data = col_heading.browse(cr, uid, col_heading.search(cr, uid, [('response_table_id', '=', answer[0].id), ('name', '=', row)]))
for column in matrix_ans:
@@ -521,7 +521,6 @@ class survey_browse_response(report_rml):
report_type = datas.get('report_type', 'pdf')
create_doc = self.generators[report_type]
pdf = create_doc(rml, title=self.title)
-
return (pdf, report_type)
survey_browse_response('report.survey.browse.response', 'survey','','')
diff --git a/addons/survey/report/survey_form.py b/addons/survey/report/survey_form.py
index 5a7d5e283e3..1a623db4211 100644
--- a/addons/survey/report/survey_form.py
+++ b/addons/survey/report/survey_form.py
@@ -390,7 +390,6 @@ class survey_form(report_rml):
report_type = datas.get('report_type', 'pdf')
create_doc = self.generators[report_type]
pdf = create_doc(rml, title=self.title)
-
return (pdf, report_type)
survey_form('report.survey.form', 'survey','','')
diff --git a/addons/survey/security/ir.model.access.csv b/addons/survey/security/ir.model.access.csv
index 5ea4017fb01..1a1c8cab818 100644
--- a/addons/survey/security/ir.model.access.csv
+++ b/addons/survey/security/ir.model.access.csv
@@ -1,51 +1,37 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_survey_type_manager","survey.type manager","model_survey_type","base.group_tool_manager",1,1,1,1
-"access_survey_type_user","survey.type user","model_survey_type","base.group_tool_user",1,1,1,1
-"access_survey_manager","survey","model_survey","base.group_tool_manager",1,1,1,1
-"access_survey_system","survey","model_survey","base.group_system",1,0,0,0
-"access_survey_user","survey","model_survey","base.group_tool_user",1,1,1,1
+"access_survey_res_partner_manager","survey.res.partner.manager","base.model_res_partner","base.group_tool_manager",1,1,1,1
+"access_survey_type_manager","survey.type.manager","model_survey_type","base.group_tool_manager",1,1,1,1
+"access_survey_manager","survey.manager","model_survey","base.group_tool_manager",1,1,1,1
"access_survey_page_manager","survey.page manager","model_survey_page","base.group_tool_manager",1,1,1,1
-"access_survey_page_system","survey.page system","model_survey_page","base.group_system",1,0,0,0
-"access_survey_page_user","survey.page user","model_survey_page","base.group_tool_user",1,1,1,1
"access_survey_question_manager","survey.question manager","model_survey_question","base.group_tool_manager",1,1,1,1
-"access_survey_question_user","survey.question user","model_survey_question","base.group_tool_user",1,1,1,1
"access_survey_answer_manager","survey.answer manager","model_survey_answer","base.group_tool_manager",1,1,1,1
-"access_survey_answer_user","survey.answer user","model_survey_answer","base.group_tool_user",1,1,1,1
"access_survey_response_manager","survey.response manager","model_survey_response","base.group_tool_manager",1,1,1,1
-"access_survey_response_user","survey.response user","model_survey_response","base.group_tool_user",1,1,1,1
"access_survey_response_answer_manager","survey.response.answer manager","model_survey_response_answer","base.group_tool_manager",1,1,1,1
+"access_survey_history_manager","survey.history.manager","model_survey_history","base.group_tool_manager",1,1,1,1
+"access_survey_question_column_heading_manager","survey.question.column.heading manager","model_survey_question_column_heading","base.group_tool_manager",1,1,1,1
+"access_survey_request_manager","survey.request manager","model_survey_request","base.group_tool_manager",1,1,1,1
+"access_survey_tbl_column_heading_manager","survey.tbl.column.heading manager","model_survey_tbl_column_heading","base.group_tool_manager",1,1,1,1
+"access_survey_response_line_manager","survey.response.line manager","model_survey_response_line","base.group_tool_manager",1,1,1,1
+"access_survey_res_partner_address_manager","survey.res.partner.address.manager","base.model_res_partner_address","base.group_tool_manager",1,1,1,0
+"access_survey_res_partner_manager","survey.res.partner.manager","base.model_res_partner","base.group_tool_manager",1,1,1,1
+"access_survey_res_partner_user","survey.res.partner.user","base.model_res_partner","base.group_tool_user",1,1,1,1
+"access_survey_user","survey.user","model_survey","base.group_tool_user",1,1,1,1
+"access_survey_page_user","survey.page user","model_survey_page","base.group_tool_user",1,1,1,1
+"access_survey_question_user","survey.question user","model_survey_question","base.group_tool_user",1,1,1,1
+"access_survey_answer_user","survey.answer user","model_survey_answer","base.group_tool_user",1,1,1,1
+"access_survey_response_user","survey.response user","model_survey_response","base.group_tool_user",1,1,1,1
"access_survey_response_answer_user","survey.response.answer user","model_survey_response_answer","base.group_tool_user",1,1,1,1
"access_survey_history_user","survey.history.user","model_survey_history","base.group_tool_user",1,1,1,1
-"access_survey_question_column_heading_manager","survey.question.column.heading manager","model_survey_question_column_heading","base.group_tool_manager",1,1,1,1
-"access_survey_question_column_heading_user","survey.question.column.heading user","model_survey_question_column_heading","base.group_tool_user",1,0,0,0
-"access_survey_request_manager","survey.request manager","model_survey_request","base.group_tool_manager",1,1,1,1
-"access_survey_request_user","survey.request user","model_survey_request","base.group_tool_user",1,1,1,1
-"access_survey_request_system","survey.request system","model_survey_request","base.group_system",1,0,0,0
-"access_survey_tbl_column_heading_manager","survey.tbl.column.heading manager","model_survey_tbl_column_heading","base.group_tool_manager",1,1,1,1
-"access_survey_tbl_column_heading_user","survey.tbl.column.heading user","model_survey_tbl_column_heading","base.group_tool_user",1,1,1,1
-"access_survey_response_line_manager","survey.response.line manager","model_survey_response_line","base.group_tool_manager",1,1,1,1
"access_survey_response_line_user","survey.response.line user","model_survey_response_line","base.group_tool_user",1,1,1,1
-"access_survey_history_survey_manager","survey.history manager","model_survey_history","base.group_tool_manager",1,1,1,1
-"access_survey_type_system","survey.type system","model_survey_type","base.group_system",1,0,0,0
-"access_survey_question_system","survey.question system","model_survey_question","base.group_system",1,0,0,0
-"access_survey_history_system","survey.history.system","model_survey_history","base.group_system",1,0,0,0
-"access_survey_answer_system","survey.answer system","model_survey_answer","base.group_system",1,0,0,0
-"access_survey_answer_base_user","survey.answer.base.user","model_survey_answer","base.group_user",1,1,1,1
-"access_survey_question_base_user","survey.question.base.user","model_survey_question","base.group_user",1,1,1,1
"access_survey_res_partner_address_user","survey.res.partner.address.user","base.model_res_partner_address","base.group_tool_user",1,1,1,0
-"access_survey_request_employee","survey.request.employee","model_survey_request","base.group_user",1,0,0,0
-"access_survey_response_employee","survey.response employee","model_survey_response","base.group_user",1,0,0,0
-"access_survey_employee","survey.employee","model_survey","base.group_user",1,0,0,0
+"access_survey_res_partner_user","survey.res.partner.user","base.model_res_partner","base.group_tool_user",1,1,1,1
"access_survey_survey_user","survey.survey.user","model_survey","group_survey_user",1,1,1,1
-"access_survey_type_survey_user","survey.type.survey.user","model_survey_type","group_survey_user",1,1,1,1
"access_survey_page_survey_user","survey.page.survey.user","model_survey_page","group_survey_user",1,1,1,1
-"access_survey_request_survey_user","survey.request.survey.user","model_survey_request","group_survey_user",1,1,1,1
"access_survey_question_survey_user","survey.question.survey.user","model_survey_question","group_survey_user",1,1,1,1
"access_survey_answer_survey_user","survey.answer.survey.user","model_survey_answer","group_survey_user",1,1,1,1
"access_survey_response_survey_user","survey.response.survey.user","model_survey_response","group_survey_user",1,1,1,1
"access_survey_response_answer_survey_user","survey.response.answer.survey.user","model_survey_response_answer","group_survey_user",1,1,1,1
"access_survey_history_survey_user","survey.history.survey.user","model_survey_history","group_survey_user",1,1,1,1
-"access_survey_question_column_heading_survey_user","survey.question.column.heading.survey.user","model_survey_question_column_heading","group_survey_user",1,0,0,0
-"access_survey_tbl_column_heading_survey_user","survey.tbl.column.heading.survey.user","model_survey_tbl_column_heading","group_survey_user",1,1,1,1
"access_survey_response_line_survey_user","survey.response.line.survey.user","model_survey_response_line","group_survey_user",1,1,1,1
-"access_survey_res_partner_address_survey_user","survey.res.partner.address.survey.user","base.model_res_partner_address","group_survey_user",1,1,1,0
+"access_survey_question_column_heading_survey_user","survey.question.column.heading.survey.user","model_survey_question_column_heading","group_survey_user",1,0,0,0
+"access_survey_question_column_heading_user","survey.question.column.heading user","model_survey_question_column_heading","base.group_tool_user",1,1,1,1
diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml
index 4fc58962442..44bcb4475b5 100644
--- a/addons/survey/survey_view.xml
+++ b/addons/survey/survey_view.xml
@@ -3,12 +3,11 @@
-
+
-
+
@@ -184,6 +183,8 @@
+
@@ -191,8 +192,6 @@
states="draft" type="object" icon="gtk-go-forward"/>
-
@@ -292,7 +291,7 @@
+ groups="base.group_tool_manager"/>
| | |