[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ '..'*(a['level']-1) ]][[ a['name'] ]]
[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['debit']) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[formatLang(a['debit']) ]]
[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font')]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['credit']) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['credit']) ]]
-
[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['balance']) ]] [[ company.currency_id.symbol ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['balance']) ]] [[ company.currency_id.symbol ]]
+
[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['balance'], currency_obj=company.currency_id) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['balance'], currency = company.currency_id) ]]
diff --git a/addons/account/report/account_balance_sheet.py b/addons/account/report/account_balance_sheet.py
index b1e51e6fc46..ce9e3c51f06 100644
--- a/addons/account/report/account_balance_sheet.py
+++ b/addons/account/report/account_balance_sheet.py
@@ -136,7 +136,7 @@ class report_balancesheet_horizontal(report_sxw.rml_parse, common_report_header)
'code': account.code,
'name': account.name,
'level': account.level,
- 'balance':account.balance,
+ 'balance': account.balance != 0 and account.balance * account.user_type.sign or account.balance,
'type': account.type,
}
currency = account.currency_id and account.currency_id or account.company_id.currency_id
diff --git a/addons/account/report/account_balance_sheet.rml b/addons/account/report/account_balance_sheet.rml
index 8b9f6d1b5a3..99a39c49321 100644
--- a/addons/account/report/account_balance_sheet.rml
+++ b/addons/account/report/account_balance_sheet.rml
@@ -236,12 +236,12 @@
- [[ a['level1']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[ formatLang(a['balance1']) ]] [[ company.currency_id.symbol ]]
+ [[ a['level1']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[ formatLang(a['balance1'], currency_obj=company.currency_id) ]]
@@ -224,7 +224,7 @@
[[ ( a['level']<4 or a['name']=='Net Profit') and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]
- [[(a['code'] and a['name']) and formatLang(a['balance']) or removeParentNode('font')]] [[ company.currency_id.symbol ]]
+ [[(a['code'] and a['name']) and formatLang(a['balance'], currency_obj=company.currency_id) or removeParentNode('font')]]
- [[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account')) + o.currency_id.symbol or '' ]]
+ [[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account'),currency_obj=o.currency_id) or '' ]]
- [[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account')) + o.currency_id.symbol or '' ]]
+ [[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account'),currency_obj=o.currency_id) or '' ]]
[[ repeatIn(lines(), 'a') ]][[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ a['ref'] ]] [[ a['type']==3 and a['code'] ]]
[[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ a['name'] ]]
[[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['debit']) ]]
[[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['credit']) ]]
-
[[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['balance']) ]] [[ company.currency_id.symbol ]]
-
[[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['enlitige'] or 0.0) ]] [[ company.currency_id.symbol ]]
+
[[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['balance'], currency_obj=company.currency_id) ]]
+
[[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['enlitige'] or 0.0, currency_obj=company.currency_id) ]]
[[ line['blocked'] and 'X' or '' ]]
@@ -244,7 +244,7 @@
[[ formatLang((reduce(lambda x, y: x + ((y['account_id']['type'] == 'receivable' and y['credit'] or 0) or (y['account_id']['type'] == 'payable' and y['debit'] * -1 or 0)), getLines(o), 0))) ]]
@@ -279,10 +279,10 @@
- Total amount due: [[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), getLines(o), 0))) ]] [[ company.currency_id.symbol ]].
+ Total amount due: [[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), getLines(o), 0)), currency_obj=company.currency_id) ]].
-
\ No newline at end of file
+
diff --git a/addons/account/report/account_profit_horizontal.rml b/addons/account/report/account_profit_horizontal.rml
index bf19d0b61fc..e4ed9139fa0 100644
--- a/addons/account/report/account_profit_horizontal.rml
+++ b/addons/account/report/account_profit_horizontal.rml
@@ -221,7 +221,7 @@
- [[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[ formatLang(abs(a['balance'])) ]] [[ company.currency_id.symbol ]]
+ [[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[ formatLang(abs(a['balance']), currency_obj=company.currency_id) ]]
@@ -234,7 +234,7 @@
- [[ a['level1']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[(a['code1'] and a['name1']) and formatLang(abs(a['balance1'])) or removeParentNode('font') ]] [[ company.currency_id.symbol ]]
+ [[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[(a['code1'] and a['name1']) and formatLang(abs(a['balance1']), currency_obj=company.currency_id) or removeParentNode('font') ]]
@@ -247,7 +247,7 @@
[[ final_result()['type'] == 'Net Profit' and final_result()['type'] or '' ]]
- [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(abs(final_result()['balance'])) ]] [[ company.currency_id.symbol ]]
+ [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(abs(final_result()['balance']), currency_obj=company.currency_id) ]]
@@ -256,7 +256,7 @@
[[ final_result()['type'] == 'Net Loss' and final_result()['type'] or '' ]]
- [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and formatLang(abs(final_result()['balance'])) ]] [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and company.currency_id.symbol ]]
+ [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and formatLang(abs(final_result()['balance']), currency_obj=company.currency_id) ]]
@@ -141,4 +141,4 @@
-
\ No newline at end of file
+
diff --git a/addons/account/report/account_tax_report.rml b/addons/account/report/account_tax_report.rml
index de4aa415fef..f489ee1143e 100644
--- a/addons/account/report/account_tax_report.rml
+++ b/addons/account/report/account_tax_report.rml
@@ -153,7 +153,7 @@
[[ repeatIn(get_lines(data['form']['based_on'], data['form']['company_id']), 'o') ]][[ (o['level']) ]] [[ (len(o['level'])<5 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ o['code'] ]] [[ o['name'] ]]
[[ len(o['level'])<5 and setTag('para','para',{'fontName':"Helvetica-Bold"}) or removeParentNode('font')]][[ o['type']=='view' and removeParentNode('font') ]][[ formatLang(o['debit']) ]][[ o['type']<>'view' and removeParentNode('font') ]][[ formatLang(o['debit']) ]]
[[ len(o['level'])<5 and setTag('para','para',{'fontName':"Helvetica-Bold"}) or removeParentNode('font')]][[ o['type']=='view' and removeParentNode('font') ]][[ formatLang(o['credit']) ]][[ o['type']<>'view' and removeParentNode('font') ]][[ formatLang(o['credit'])]]
-
[[ len(o['level'])<5 and setTag('para','para',{'fontName':"Helvetica-Bold"}) or removeParentNode('font')]][[ o['type']=='view' and removeParentNode('font') ]][[ formatLang(o['tax_amount']) ]] [[ company.currency_id.symbol ]][[ o['type']<>'view' and removeParentNode('font') ]][[ formatLang(o['tax_amount']) ]] [[ company.currency_id.symbol ]]
+
[[ len(o['level'])<5 and setTag('para','para',{'fontName':"Helvetica-Bold"}) or removeParentNode('font')]][[ o['type']=='view' and removeParentNode('font') ]][[ formatLang(o['tax_amount'], currency_obj=company.currency_id) ]][[ o['type']<>'view' and removeParentNode('font') ]][[ formatLang(o['tax_amount'], currency_obj=company.currency_id) ]]
diff --git a/addons/account/wizard/account_financial_report_view.xml b/addons/account/wizard/account_financial_report_view.xml
index 2083fd0ed53..1472da4ba87 100644
--- a/addons/account/wizard/account_financial_report_view.xml
+++ b/addons/account/wizard/account_financial_report_view.xml
@@ -31,7 +31,7 @@
- Financial Report
+ Financial Reportsaccounting.reportir.actions.act_windowform
diff --git a/addons/account/wizard/account_fiscalyear_close.py b/addons/account/wizard/account_fiscalyear_close.py
index 927f895bb3b..297911f15f7 100644
--- a/addons/account/wizard/account_fiscalyear_close.py
+++ b/addons/account/wizard/account_fiscalyear_close.py
@@ -52,9 +52,11 @@ class account_fiscalyear_close(osv.osv_memory):
obj_acc_period = self.pool.get('account.period')
obj_acc_fiscalyear = self.pool.get('account.fiscalyear')
obj_acc_journal = self.pool.get('account.journal')
+ obj_acc_move = self.pool.get('account.move')
obj_acc_move_line = self.pool.get('account.move.line')
obj_acc_account = self.pool.get('account.account')
obj_acc_journal_period = self.pool.get('account.journal.period')
+ currency_obj = self.pool.get('res.currency')
data = self.browse(cr, uid, ids, context=context)
@@ -81,150 +83,178 @@ class account_fiscalyear_close(osv.osv_memory):
raise osv.except_osv(_('UserError'),
_('The journal must have centralised counterpart without the Skipping draft state option checked!'))
- move_ids = obj_acc_move_line.search(cr, uid, [
- ('journal_id', '=', new_journal.id), ('period_id.fiscalyear_id', '=', new_fyear.id)])
-
+ #delete existing move and move lines if any
+ move_ids = obj_acc_move.search(cr, uid, [
+ ('journal_id', '=', new_journal.id), ('period_id', '=', period.id)])
if move_ids:
- obj_acc_move_line._remove_move_reconcile(cr, uid, move_ids, context=context)
- obj_acc_move_line.unlink(cr, uid, move_ids, context=context)
+ move_line_ids = obj_acc_move_line.search(cr, uid, [('move_id', 'in', move_ids)])
+ obj_acc_move_line._remove_move_reconcile(cr, uid, move_line_ids, context=context)
+ obj_acc_move_line.unlink(cr, uid, move_line_ids, context=context)
+ obj_acc_move.unlink(cr, uid, move_ids, context=context)
cr.execute("SELECT id FROM account_fiscalyear WHERE date_stop < %s", (str(new_fyear.date_start),))
result = cr.dictfetchall()
fy_ids = ','.join([str(x['id']) for x in result])
query_line = obj_acc_move_line._query_get(cr, uid,
obj='account_move_line', context={'fiscalyear': fy_ids})
- cr.execute('select id from account_account WHERE active AND company_id = %s', (old_fyear.company_id.id,))
- ids = map(lambda x: x[0], cr.fetchall())
- for account in obj_acc_account.browse(cr, uid, ids,
- context={'fiscalyear': fy_id}):
- accnt_type_data = account.user_type
- if not accnt_type_data:
- continue
- if accnt_type_data.close_method=='none' or account.type == 'view':
- continue
- if accnt_type_data.close_method=='balance':
- balance_in_currency = 0.0
- if account.currency_id:
- cr.execute('SELECT sum(amount_currency) as balance_in_currency FROM account_move_line ' \
- 'WHERE account_id = %s ' \
- 'AND ' + query_line + ' ' \
- 'AND currency_id = %s', (account.id, account.currency_id.id))
- balance_in_currency = cr.dictfetchone()['balance_in_currency']
+ #create the opening move
+ vals = {
+ 'name': '/',
+ 'ref': '',
+ 'period_id': period.id,
+ 'journal_id': new_journal.id,
+ }
+ move_id = obj_acc_move.create(cr, uid, vals, context=context)
- if abs(account.balance)>0.0001:
- obj_acc_move_line.create(cr, uid, {
- 'debit': account.balance>0 and account.balance,
- 'credit': account.balance<0 and -account.balance,
- 'name': data[0].report_name,
- 'date': period.date_start,
- 'journal_id': new_journal.id,
- 'period_id': period.id,
- 'account_id': account.id,
- 'currency_id': account.currency_id and account.currency_id.id or False,
- 'amount_currency': balance_in_currency,
- }, {'journal_id': new_journal.id, 'period_id':period.id})
- if accnt_type_data.close_method == 'unreconciled':
- offset = 0
- limit = 100
- while True:
- cr.execute('SELECT id, name, quantity, debit, credit, account_id, ref, ' \
- 'amount_currency, currency_id, blocked, partner_id, ' \
- 'date_maturity, date_created ' \
- 'FROM account_move_line ' \
- 'WHERE account_id = %s ' \
- 'AND ' + query_line + ' ' \
- 'AND reconcile_id is NULL ' \
- 'ORDER BY id ' \
- 'LIMIT %s OFFSET %s', (account.id, limit, offset))
- result = cr.dictfetchall()
- if not result:
- break
- for move in result:
- move.pop('id')
- move.update({
- 'date': period.date_start,
- 'journal_id': new_journal.id,
- 'period_id': period.id,
- })
- obj_acc_move_line.create(cr, uid, move, {
- 'journal_id': new_journal.id,
- 'period_id': period.id,
- })
- offset += limit
+ #1. report of the accounts with defferal method == 'unreconciled'
+ cr.execute('''
+ SELECT a.id
+ FROM account_account a
+ LEFT JOIN account_account_type t ON (a.user_type = t.id)
+ WHERE a.active
+ AND a.type != 'view'
+ AND t.close_method = %s''', ('unreconciled', ))
+ account_ids = map(lambda x: x[0], cr.fetchall())
- #We have also to consider all move_lines that were reconciled
- #on another fiscal year, and report them too
- offset = 0
- limit = 100
- while True:
- cr.execute('SELECT DISTINCT b.id, b.name, b.quantity, b.debit, b.credit, b.account_id, b.ref, ' \
- 'b.amount_currency, b.currency_id, b.blocked, b.partner_id, ' \
- 'b.date_maturity, b.date_created ' \
- 'FROM account_move_line a, account_move_line b ' \
- 'WHERE b.account_id = %s ' \
- 'AND b.reconcile_id is NOT NULL ' \
- 'AND a.reconcile_id = b.reconcile_id ' \
- 'AND b.period_id IN ('+fy_period_set+') ' \
- 'AND a.period_id IN ('+fy2_period_set+') ' \
- 'ORDER BY id ' \
- 'LIMIT %s OFFSET %s', (account.id, limit, offset))
- result = cr.dictfetchall()
- if not result:
- break
- for move in result:
- move.pop('id')
- move.update({
- 'date': period.date_start,
- 'journal_id': new_journal.id,
- 'period_id': period.id,
- })
- obj_acc_move_line.create(cr, uid, move, {
- 'journal_id': new_journal.id,
- 'period_id': period.id,
- })
- offset += limit
- if accnt_type_data.close_method=='detail':
- offset = 0
- limit = 100
- while True:
- cr.execute('SELECT id, name, quantity, debit, credit, account_id, ref, ' \
- 'amount_currency, currency_id, blocked, partner_id, ' \
- 'date_maturity, date_created ' \
- 'FROM account_move_line ' \
- 'WHERE account_id = %s ' \
- 'AND ' + query_line + ' ' \
- 'ORDER BY id ' \
- 'LIMIT %s OFFSET %s', (account.id, limit, offset))
+ if account_ids:
+ cr.execute('''
+ INSERT INTO account_move_line (
+ name, create_uid, create_date, write_uid, write_date,
+ statement_id, journal_id, currency_id, date_maturity,
+ partner_id, blocked, credit, state, debit,
+ ref, account_id, period_id, date, move_id, amount_currency,
+ quantity, product_id, company_id)
+ (SELECT name, create_uid, create_date, write_uid, write_date,
+ statement_id, %s,currency_id, date_maturity, partner_id,
+ blocked, credit, 'draft', debit, ref, account_id,
+ %s, date, %s, amount_currency, quantity, product_id, company_id
+ FROM account_move_line
+ WHERE account_id IN %s
+ AND ''' + query_line + '''
+ AND reconcile_id IS NULL)''', (new_journal.id, period.id, move_id, tuple(account_ids),))
- result = cr.dictfetchall()
- if not result:
- break
- for move in result:
- move.pop('id')
- move.update({
- 'date': period.date_start,
- 'journal_id': new_journal.id,
- 'period_id': period.id,
- })
- obj_acc_move_line.create(cr, uid, move)
- offset += limit
- ids = obj_acc_move_line.search(cr, uid, [('journal_id','=',new_journal.id),
+ #We have also to consider all move_lines that were reconciled
+ #on another fiscal year, and report them too
+ cr.execute('''
+ INSERT INTO account_move_line (
+ name, create_uid, create_date, write_uid, write_date,
+ statement_id, journal_id, currency_id, date_maturity,
+ partner_id, blocked, credit, state, debit,
+ ref, account_id, period_id, date, move_id, amount_currency,
+ quantity, product_id, company_id)
+ (SELECT
+ b.name, b.create_uid, b.create_date, b.write_uid, b.write_date,
+ b.statement_id, %s, b.currency_id, b.date_maturity,
+ b.partner_id, b.blocked, b.credit, 'draft', b.debit,
+ b.ref, b.account_id, %s, b.date, %s, b.amount_currency,
+ b.quantity, b.product_id, b.company_id
+ FROM account_move_line b
+ WHERE b.account_id IN %s
+ AND b.reconcile_id IS NOT NULL
+ AND b.period_id IN ('''+fy_period_set+''')
+ AND b.reconcile_id IN (SELECT DISTINCT(reconcile_id)
+ FROM account_move_line a
+ WHERE a.period_id IN ('''+fy2_period_set+''')))''', (new_journal.id, period.id, move_id, tuple(account_ids),))
+
+ #2. report of the accounts with defferal method == 'detail'
+ cr.execute('''
+ SELECT a.id
+ FROM account_account a
+ LEFT JOIN account_account_type t ON (a.user_type = t.id)
+ WHERE a.active
+ AND a.type != 'view'
+ AND t.close_method = %s''', ('detail', ))
+ account_ids = map(lambda x: x[0], cr.fetchall())
+
+ if account_ids:
+ cr.execute('''
+ INSERT INTO account_move_line (
+ name, create_uid, create_date, write_uid, write_date,
+ statement_id, journal_id, currency_id, date_maturity,
+ partner_id, blocked, credit, state, debit,
+ ref, account_id, period_id, date, move_id, amount_currency,
+ quantity, product_id, company_id)
+ (SELECT name, create_uid, create_date, write_uid, write_date,
+ statement_id, %s,currency_id, date_maturity, partner_id,
+ blocked, credit, 'draft', debit, ref, account_id,
+ %s, date, %s, amount_currency, quantity, product_id, company_id
+ FROM account_move_line
+ WHERE account_id IN %s
+ AND ''' + query_line + ''')
+ ''', (new_journal.id, period.id, move_id, tuple(account_ids),))
+
+
+ #3. report of the accounts with defferal method == 'balance'
+ cr.execute('''
+ SELECT a.id
+ FROM account_account a
+ LEFT JOIN account_account_type t ON (a.user_type = t.id)
+ WHERE a.active
+ AND a.type != 'view'
+ AND t.close_method = %s''', ('balance', ))
+ account_ids = map(lambda x: x[0], cr.fetchall())
+
+ query_1st_part = """
+ INSERT INTO account_move_line (
+ debit, credit, name, date, move_id, journal_id, period_id,
+ account_id, currency_id, amount_currency, company_id, state) VALUES
+ """
+ query_2nd_part = ""
+ query_2nd_part_args = []
+ for account in obj_acc_account.browse(cr, uid, account_ids, context={'fiscalyear': fy_id}):
+ balance_in_currency = 0.0
+ if account.currency_id:
+ cr.execute('SELECT sum(amount_currency) as balance_in_currency FROM account_move_line ' \
+ 'WHERE account_id = %s ' \
+ 'AND ' + query_line + ' ' \
+ 'AND currency_id = %s', (account.id, account.currency_id.id))
+ balance_in_currency = cr.dictfetchone()['balance_in_currency']
+
+ company_currency_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id
+ if not currency_obj.is_zero(cr, uid, company_currency_id, abs(account.balance)):
+ if query_2nd_part:
+ query_2nd_part += ','
+ query_2nd_part += "(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
+ query_2nd_part_args += (account.balance > 0 and account.balance or 0.0,
+ account.balance < 0 and -account.balance or 0.0,
+ data[0].report_name,
+ period.date_start,
+ move_id,
+ new_journal.id,
+ period.id,
+ account.id,
+ account.currency_id and account.currency_id.id or None,
+ balance_in_currency,
+ account.company_id.id,
+ 'draft')
+ if query_2nd_part:
+ cr.execute(query_1st_part + query_2nd_part, tuple(query_2nd_part_args))
+
+ #validate and centralize the opening move
+ obj_acc_move.validate(cr, uid, [move_id], context=context)
+
+ #reconcile all the move.line of the opening move
+ ids = obj_acc_move_line.search(cr, uid, [('journal_id', '=', new_journal.id),
('period_id.fiscalyear_id','=',new_fyear.id)])
context['fy_closing'] = True
-
if ids:
- obj_acc_move_line.reconcile(cr, uid, ids, context=context)
+ reconcile_id = obj_acc_move_line.reconcile(cr, uid, ids, context=context)
+ #set the creation date of the reconcilation at the first day of the new fiscalyear, in order to have good figures in the aged trial balance
+ self.pool.get('account.move.reconcile').write(cr, uid, [reconcile_id], {'create_date': new_fyear.date_start}, context=context)
+
+ #create the journal.period object and link it to the old fiscalyear
new_period = data[0].period_id.id
- ids = obj_acc_journal_period.search(cr, uid, [('journal_id','=',new_journal.id),('period_id','=',new_period)])
+ ids = obj_acc_journal_period.search(cr, uid, [('journal_id', '=', new_journal.id), ('period_id', '=', new_period)])
if not ids:
ids = [obj_acc_journal_period.create(cr, uid, {
- 'name': (new_journal.name or '')+':'+(period.code or ''),
+ 'name': (new_journal.name or '') + ':' + (period.code or ''),
'journal_id': new_journal.id,
'period_id': period.id
})]
cr.execute('UPDATE account_fiscalyear ' \
'SET end_journal_period_id = %s ' \
'WHERE id = %s', (ids[0], old_fyear.id))
+
return {'type': 'ir.actions.act_window_close'}
account_fiscalyear_close()
diff --git a/addons/account/wizard/account_report_common.py b/addons/account/wizard/account_report_common.py
index 7aa4c465e0d..0d0b69ce132 100644
--- a/addons/account/wizard/account_report_common.py
+++ b/addons/account/wizard/account_report_common.py
@@ -68,6 +68,7 @@ class account_common_report(osv.osv_memory):
FROM account_period p
LEFT JOIN account_fiscalyear f ON (p.fiscalyear_id = f.id)
WHERE f.id = %s
+ AND p.special = false
ORDER BY p.date_start ASC, p.special ASC
LIMIT 1) AS period_start
UNION
@@ -76,6 +77,7 @@ class account_common_report(osv.osv_memory):
LEFT JOIN account_fiscalyear f ON (p.fiscalyear_id = f.id)
WHERE f.id = %s
AND p.date_start < NOW()
+ AND p.special = false
ORDER BY p.date_stop DESC
LIMIT 1) AS period_stop''', (fiscalyear_id, fiscalyear_id))
periods = [i[0] for i in cr.fetchall()]
diff --git a/addons/account_analytic_plans/account_analytic_plans_installer_view.xml b/addons/account_analytic_plans/account_analytic_plans_installer_view.xml
index fa40ef1e618..c9d21147458 100644
--- a/addons/account_analytic_plans/account_analytic_plans_installer_view.xml
+++ b/addons/account_analytic_plans/account_analytic_plans_installer_view.xml
@@ -2,7 +2,7 @@
- Account Analytic Plans
+ Define your Analytic Plansir.actions.act_windowaccount.analytic.planform
diff --git a/addons/account_analytic_plans/report/crossovered_analytic.rml b/addons/account_analytic_plans/report/crossovered_analytic.rml
index 6e331ed1b83..f374aa5a2c2 100644
--- a/addons/account_analytic_plans/report/crossovered_analytic.rml
+++ b/addons/account_analytic_plans/report/crossovered_analytic.rml
@@ -240,7 +240,7 @@
[[ formatLang(a['ref_qty']) ]]
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/l10n_be/account_tax_template.xml b/addons/l10n_be/account_tax_template.xml
index a4d42779a97..d72b093b5f8 100644
--- a/addons/l10n_be/account_tax_template.xml
+++ b/addons/l10n_be/account_tax_template.xml
@@ -6,7 +6,7 @@
10VAT-OUT-21-S
- VAT 21%
+ VAT 21% - Services
@@ -48,7 +48,7 @@
20VAT-OUT-12-S
- VAT 12%
+ VAT 12% - Services
@@ -90,7 +90,7 @@
30VAT-OUT-06-S
- VAT 6%
+ VAT 6% - Services
@@ -132,7 +132,7 @@
40VAT-OUT-00-S
- VAT 0%
+ VAT 0% - Services0percent
@@ -2070,7 +2070,7 @@
722VAT-IN-V82-CAR-EXC-C2
- Frais de voiture - VAT 50% Deductible
+ Frais de voiture - VAT 50% Deductible (Price Excl.)
@@ -2090,7 +2090,7 @@
723VAT-IN-V82-CAR-EXC-C3
- Frais de voiture - Montant de la note de crédit
+ Frais de voiture - Montant de la note de crédit (Price Excl.)0
diff --git a/addons/l10n_be_hr_payroll/security/hr.salary.rule.csv b/addons/l10n_be_hr_payroll/security/hr.salary.rule.csv
deleted file mode 100644
index a8b6906d244..00000000000
--- a/addons/l10n_be_hr_payroll/security/hr.salary.rule.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_hr_salary_rule_category","hr.salary.rule.category","model_hr_salary_rule_category","base.group_hr_user",1,1,1,1
-"access_hr_salary_rule","hr.salary.rule","model_hr_salary_rule","base.group_hr_user",1,1,1,1
diff --git a/addons/l10n_br/data/account.account.template.csv b/addons/l10n_br/data/account.account.template.csv
index 5657769538c..d0468c68995 100644
--- a/addons/l10n_br/data/account.account.template.csv
+++ b/addons/l10n_br/data/account.account.template.csv
@@ -323,312 +323,312 @@
"account_template_322","3.1","CUSTOS","account_template_321","view","despesa","True"
"account_template_323","3.1.01","CUSTOS DAS MERCADORIAS E PRODUTOS","account_template_322","view","despesa","True"
"account_template_324","3.1.01.01","CUSTOS DAS MERCADORIAS VENDIDAS","account_template_323","view","despesa","True"
-"account_template_325","3.1.01.01.0001","Custo das Mercadorias Vendidas","account_template_324","payable","despesa","True"
+"account_template_325","3.1.01.01.0001","Custo das Mercadorias Vendidas","account_template_324","other","despesa","True"
"account_template_326","3.1.02","CUSTO DOS PRODUTOS VENDIDOS","account_template_322","view","despesa","True"
"account_template_327","3.1.02.01","CUSTO DAS MATÉRIAS PRIMAS","account_template_326","view","despesa","True"
-"account_template_328","3.1.02.01.0001","Custo das Matérias Primas","account_template_327","payable","despesa","True"
+"account_template_328","3.1.02.01.0001","Custo das Matérias Primas","account_template_327","other","despesa","True"
"account_template_329","3.1.02.02","CUSTO DOS PRODUTOS ACABADOS","account_template_326","view","despesa","True"
-"account_template_330","3.1.02.02.0001","Custo dos Produtos Acabados","account_template_329","payable","despesa","True"
+"account_template_330","3.1.02.02.0001","Custo dos Produtos Acabados","account_template_329","other","despesa","True"
"account_template_331","3.1.02.03","CUSTO DE MÃO-DE-OBRA DIRETA","account_template_326","view","despesa","True"
-"account_template_332","3.1.02.03.0001","Salários","account_template_331","payable","despesa","True"
-"account_template_333","3.1.02.03.0002","Horas Extras","account_template_331","payable","despesa","True"
-"account_template_334","3.1.02.03.0003","Adicional Noturno","account_template_331","payable","despesa","True"
-"account_template_335","3.1.02.03.0004","Férias","account_template_331","payable","despesa","True"
-"account_template_336","3.1.02.03.0005","13º Salário","account_template_331","payable","despesa","True"
-"account_template_337","3.1.02.03.0006","Aviso Prévio/Indeniz.Trabalhistas","account_template_331","payable","despesa","True"
-"account_template_338","3.1.02.03.0007","Gratificações","account_template_331","payable","despesa","True"
-"account_template_339","3.1.02.03.0008","INSS Empresa","account_template_331","payable","despesa","True"
-"account_template_340","3.1.02.03.0009","FGTS ","account_template_331","payable","despesa","True"
-"account_template_341","3.1.02.03.0010","Adicional Insalubridade","account_template_331","payable","despesa","True"
-"account_template_342","3.1.02.03.0011","Vale Transporte","account_template_331","payable","despesa","True"
-"account_template_343","3.1.02.03.0012","PAT - Programa Alim. Trabalhador","account_template_331","payable","despesa","True"
-"account_template_344","3.1.02.03.0013","Assistência Médica","account_template_331","payable","despesa","True"
-"account_template_345","3.1.02.03.0014","DSR - Descanso Semanal Remunerado","account_template_331","payable","despesa","True"
-"account_template_346","3.1.02.03.0015","Salário Estagiários","account_template_331","payable","despesa","True"
-"account_template_347","3.1.02.03.0016","Previdência Privada","account_template_331","payable","despesa","True"
-"account_template_348","3.1.02.03.0017","Vestuário","account_template_331","payable","despesa","True"
-"account_template_349","3.1.02.03.0018","Assiduidade","account_template_331","payable","despesa","True"
-"account_template_350","3.1.02.03.0019","Abono Salarial","account_template_331","payable","despesa","True"
-"account_template_351","3.1.02.03.0020","Vale Refeição","account_template_331","payable","despesa","True"
-"account_template_352","3.1.02.03.0021","Farmácia","account_template_331","payable","despesa","True"
-"account_template_353","3.1.02.03.0022","Pró-Labore","account_template_331","payable","despesa","True"
+"account_template_332","3.1.02.03.0001","Salários","account_template_331","other","despesa","True"
+"account_template_333","3.1.02.03.0002","Horas Extras","account_template_331","other","despesa","True"
+"account_template_334","3.1.02.03.0003","Adicional Noturno","account_template_331","other","despesa","True"
+"account_template_335","3.1.02.03.0004","Férias","account_template_331","other","despesa","True"
+"account_template_336","3.1.02.03.0005","13º Salário","account_template_331","other","despesa","True"
+"account_template_337","3.1.02.03.0006","Aviso Prévio/Indeniz.Trabalhistas","account_template_331","other","despesa","True"
+"account_template_338","3.1.02.03.0007","Gratificações","account_template_331","other","despesa","True"
+"account_template_339","3.1.02.03.0008","INSS Empresa","account_template_331","payable","passivo","True"
+"account_template_340","3.1.02.03.0009","FGTS ","account_template_331","payable","passivo","True"
+"account_template_341","3.1.02.03.0010","Adicional Insalubridade","account_template_331","other","despesa","True"
+"account_template_342","3.1.02.03.0011","Vale Transporte","account_template_331","other","despesa","True"
+"account_template_343","3.1.02.03.0012","PAT - Programa Alim. Trabalhador","account_template_331","other","despesa","True"
+"account_template_344","3.1.02.03.0013","Assistência Médica","account_template_331","other","despesa","True"
+"account_template_345","3.1.02.03.0014","DSR - Descanso Semanal Remunerado","account_template_331","other","despesa","True"
+"account_template_346","3.1.02.03.0015","Salário Estagiários","account_template_331","other","despesa","True"
+"account_template_347","3.1.02.03.0016","Previdência Privada","account_template_331","other","despesa","True"
+"account_template_348","3.1.02.03.0017","Vestuário","account_template_331","other","despesa","True"
+"account_template_349","3.1.02.03.0018","Assiduidade","account_template_331","other","despesa","True"
+"account_template_350","3.1.02.03.0019","Abono Salarial","account_template_331","other","despesa","True"
+"account_template_351","3.1.02.03.0020","Vale Refeição","account_template_331","other","despesa","True"
+"account_template_352","3.1.02.03.0021","Farmácia","account_template_331","other","despesa","True"
+"account_template_353","3.1.02.03.0022","Pró-Labore","account_template_331","other","despesa","True"
"account_template_354","3.1.02.04","GASTOS GERAIS DE FABRICAÇÃO","account_template_326","view","despesa","True"
-"account_template_355","3.1.02.04.0001","Aluguel","account_template_354","payable","despesa","True"
-"account_template_356","3.1.02.04.0002","Água e Esgoto","account_template_354","payable","despesa","True"
-"account_template_357","3.1.02.04.0003","Energia Elétrica","account_template_354","payable","despesa","True"
-"account_template_358","3.1.02.04.0004","Fretes e Carretos","account_template_354","payable","despesa","True"
-"account_template_359","3.1.02.04.0005","Material de Consumo","account_template_354","payable","despesa","True"
-"account_template_360","3.1.02.04.0006","Condução","account_template_354","payable","despesa","True"
-"account_template_361","3.1.02.04.0007","Contribuição Sindical/Assoc.de Classe","account_template_354","payable","despesa","True"
-"account_template_362","3.1.02.04.0008","Material de Limpeza","account_template_354","payable","despesa","True"
-"account_template_363","3.1.02.04.0009","Seguros","account_template_354","payable","despesa","True"
-"account_template_364","3.1.02.04.0010","Viagens e Estadias","account_template_354","payable","despesa","True"
-"account_template_365","3.1.02.04.0011","Manutenção de Equipamentos","account_template_354","payable","despesa","True"
-"account_template_366","3.1.02.04.0012","Depreciações e Amortizações","account_template_354","payable","despesa","True"
-"account_template_367","3.1.02.04.0013","Combustíveis e Lubrificantes","account_template_354","payable","despesa","True"
-"account_template_368","3.1.02.04.0014","Bens de Pequeno Valor","account_template_354","payable","despesa","True"
-"account_template_369","3.1.02.04.0015","Leasing","account_template_354","payable","despesa","True"
-"account_template_370","3.1.02.04.0016","Formação de Pessoal","account_template_354","payable","despesa","True"
-"account_template_371","3.1.02.04.0017","Serviços de Terceiros - Pessoa Jurídica","account_template_354","payable","despesa","True"
-"account_template_372","3.1.02.04.0018","Locação de Equipamentos","account_template_354","payable","despesa","True"
-"account_template_373","3.1.02.04.0019","Feiras/Congressos/Simpósios/Cursos","account_template_354","payable","despesa","True"
-"account_template_374","3.1.02.04.0020","Telefone","account_template_354","payable","despesa","True"
-"account_template_375","3.1.02.04.0021","Comissões sobre Serviços","account_template_354","payable","despesa","True"
-"account_template_376","3.1.02.04.0022","Jornais, Revistas e Periódicos","account_template_354","payable","despesa","True"
-"account_template_377","3.1.02.04.0023","Confraternizações","account_template_354","payable","despesa","True"
-"account_template_378","3.1.02.04.0024","Manutenção de Prédios","account_template_354","payable","despesa","True"
-"account_template_379","3.1.02.04.0025","Brindes e Amostras","account_template_354","payable","despesa","True"
-"account_template_380","3.1.02.04.0026","Aluguel de Equipamentos","account_template_354","payable","despesa","True"
-"account_template_381","3.1.02.04.0027","Serv.de Terceiros P.Física - Autônomos","account_template_354","payable","despesa","True"
-"account_template_382","3.1.02.04.0028","Manutenção de Veículos","account_template_354","payable","despesa","True"
-"account_template_383","3.1.02.04.0029","Despesas de Importação","account_template_354","payable","despesa","True"
-"account_template_384","3.1.02.04.0030","(-) Crédito PIS Não-Cumulativo","account_template_354","payable","despesa","True"
-"account_template_385","3.1.02.04.0031","(-) Crédito Cofins Não-Cumulativo","account_template_354","payable","despesa","True"
+"account_template_355","3.1.02.04.0001","Aluguel","account_template_354","other","despesa","True"
+"account_template_356","3.1.02.04.0002","Água e Esgoto","account_template_354","other","despesa","True"
+"account_template_357","3.1.02.04.0003","Energia Elétrica","account_template_354","other","despesa","True"
+"account_template_358","3.1.02.04.0004","Fretes e Carretos","account_template_354","other","despesa","True"
+"account_template_359","3.1.02.04.0005","Material de Consumo","account_template_354","other","despesa","True"
+"account_template_360","3.1.02.04.0006","Condução","account_template_354","other","despesa","True"
+"account_template_361","3.1.02.04.0007","Contribuição Sindical/Assoc.de Classe","account_template_354","other","despesa","True"
+"account_template_362","3.1.02.04.0008","Material de Limpeza","account_template_354","other","despesa","True"
+"account_template_363","3.1.02.04.0009","Seguros","account_template_354","other","despesa","True"
+"account_template_364","3.1.02.04.0010","Viagens e Estadias","account_template_354","other","despesa","True"
+"account_template_365","3.1.02.04.0011","Manutenção de Equipamentos","account_template_354","other","despesa","True"
+"account_template_366","3.1.02.04.0012","Depreciações e Amortizações","account_template_354","other","despesa","True"
+"account_template_367","3.1.02.04.0013","Combustíveis e Lubrificantes","account_template_354","other","despesa","True"
+"account_template_368","3.1.02.04.0014","Bens de Pequeno Valor","account_template_354","other","despesa","True"
+"account_template_369","3.1.02.04.0015","Leasing","account_template_354","other","despesa","True"
+"account_template_370","3.1.02.04.0016","Formação de Pessoal","account_template_354","other","despesa","True"
+"account_template_371","3.1.02.04.0017","Serviços de Terceiros - Pessoa Jurídica","account_template_354","other","despesa","True"
+"account_template_372","3.1.02.04.0018","Locação de Equipamentos","account_template_354","other","despesa","True"
+"account_template_373","3.1.02.04.0019","Feiras/Congressos/Simpósios/Cursos","account_template_354","other","despesa","True"
+"account_template_374","3.1.02.04.0020","Telefone","account_template_354","other","despesa","True"
+"account_template_375","3.1.02.04.0021","Comissões sobre Serviços","account_template_354","other","despesa","True"
+"account_template_376","3.1.02.04.0022","Jornais, Revistas e Periódicos","account_template_354","other","despesa","True"
+"account_template_377","3.1.02.04.0023","Confraternizações","account_template_354","other","despesa","True"
+"account_template_378","3.1.02.04.0024","Manutenção de Prédios","account_template_354","other","despesa","True"
+"account_template_379","3.1.02.04.0025","Brindes e Amostras","account_template_354","other","despesa","True"
+"account_template_380","3.1.02.04.0026","Aluguel de Equipamentos","account_template_354","other","despesa","True"
+"account_template_381","3.1.02.04.0027","Serv.de Terceiros P.Física - Autônomos","account_template_354","other","despesa","True"
+"account_template_382","3.1.02.04.0028","Manutenção de Veículos","account_template_354","other","despesa","True"
+"account_template_383","3.1.02.04.0029","Despesas de Importação","account_template_354","other","despesa","True"
+"account_template_384","3.1.02.04.0030","(-) Crédito PIS Não-Cumulativo","account_template_354","other","despesa","True"
+"account_template_385","3.1.02.04.0031","(-) Crédito Cofins Não-Cumulativo","account_template_354","other","despesa","True"
"account_template_386","3.1.02.05","ESTOQUE INICIAL DE PROD.EM ELABORAÇÃO","account_template_326","view","despesa","True"
-"account_template_387","3.1.02.05.0001","Estoque Inicial de Prod. em Elaboração","account_template_386","payable","despesa","True"
+"account_template_387","3.1.02.05.0001","Estoque Inicial de Prod. em Elaboração","account_template_386","other","despesa","True"
"account_template_388","3.1.02.06","ESTOQUE INICIAL DE PROD.ACABADOS","account_template_326","view","despesa","True"
-"account_template_389","3.1.02.06.0001","Estoque Inicial de Prod.Acabados","account_template_388","payable","despesa","True"
+"account_template_389","3.1.02.06.0001","Estoque Inicial de Prod.Acabados","account_template_388","other","despesa","True"
"account_template_390","3.1.02.07","ESTOQUE FINAL DE PROD.EM ELABORAÇÃO","account_template_326","view","despesa","True"
-"account_template_391","3.1.02.07.0001","Estoque Final de Prod.em Elaboração","account_template_390","payable","despesa","True"
+"account_template_391","3.1.02.07.0001","Estoque Final de Prod.em Elaboração","account_template_390","other","despesa","True"
"account_template_392","3.1.02.08","ESTOQUE FINAL DE PROD.ACABADOS","account_template_326","view","despesa","True"
-"account_template_393","3.1.02.08.0001","Estoque Final de Prod.Acabados","account_template_392","payable","despesa","True"
+"account_template_393","3.1.02.08.0001","Estoque Final de Prod.Acabados","account_template_392","other","despesa","True"
"account_template_394","3.2","despesa","account_template_321","view","despesa","True"
"account_template_395","3.2.01","DESPESAS OPERACIONAIS COMERCIAIS","account_template_394","view","despesa","True"
"account_template_396","3.2.01.01","DESPESAS TRABALHISTAS","account_template_395","view","despesa","True"
-"account_template_397","3.2.01.01.0001","Salários","account_template_396","payable","despesa","True"
-"account_template_398","3.2.01.01.0002","Horas Extras","account_template_396","payable","despesa","True"
-"account_template_399","3.2.01.01.0003","Vale Transporte","account_template_396","payable","despesa","True"
-"account_template_400","3.2.01.01.0004","Férias","account_template_396","payable","despesa","True"
-"account_template_401","3.2.01.01.0005","13º Salário","account_template_396","payable","despesa","True"
-"account_template_402","3.2.01.01.0006","Aviso Prévio/Indeniz.Trabalhisas","account_template_396","payable","despesa","True"
-"account_template_403","3.2.01.01.0007","Gratificações","account_template_396","payable","despesa","True"
-"account_template_404","3.2.01.01.0008","Assiduidade","account_template_396","payable","despesa","True"
-"account_template_405","3.2.01.01.0009","Abono Salarial","account_template_396","payable","despesa","True"
-"account_template_406","3.2.01.01.0010","Adicional de Insalubridade","account_template_396","payable","despesa","True"
-"account_template_407","3.2.01.01.0011","Vale Refeição","account_template_396","payable","despesa","True"
-"account_template_408","3.2.01.01.0012","Adicional Noturno","account_template_396","payable","despesa","True"
-"account_template_409","3.2.01.01.0013","Farmácia","account_template_396","payable","despesa","True"
-"account_template_410","3.2.01.01.0014","PAT - Programa Alim. Trabalhador","account_template_396","payable","despesa","True"
-"account_template_411","3.2.01.01.0015","Pró-Labore","account_template_396","payable","despesa","True"
-"account_template_412","3.2.01.01.0016","Assistência Médica","account_template_396","payable","despesa","True"
+"account_template_397","3.2.01.01.0001","Salários","account_template_396","other","despesa","True"
+"account_template_398","3.2.01.01.0002","Horas Extras","account_template_396","other","despesa","True"
+"account_template_399","3.2.01.01.0003","Vale Transporte","account_template_396","other","despesa","True"
+"account_template_400","3.2.01.01.0004","Férias","account_template_396","other","despesa","True"
+"account_template_401","3.2.01.01.0005","13º Salário","account_template_396","other","despesa","True"
+"account_template_402","3.2.01.01.0006","Aviso Prévio/Indeniz.Trabalhisas","account_template_396","other","despesa","True"
+"account_template_403","3.2.01.01.0007","Gratificações","account_template_396","other","despesa","True"
+"account_template_404","3.2.01.01.0008","Assiduidade","account_template_396","other","despesa","True"
+"account_template_405","3.2.01.01.0009","Abono Salarial","account_template_396","other","despesa","True"
+"account_template_406","3.2.01.01.0010","Adicional de Insalubridade","account_template_396","other","despesa","True"
+"account_template_407","3.2.01.01.0011","Vale Refeição","account_template_396","other","despesa","True"
+"account_template_408","3.2.01.01.0012","Adicional Noturno","account_template_396","other","despesa","True"
+"account_template_409","3.2.01.01.0013","Farmácia","account_template_396","other","despesa","True"
+"account_template_410","3.2.01.01.0014","PAT - Programa Alim. Trabalhador","account_template_396","other","despesa","True"
+"account_template_411","3.2.01.01.0015","Pró-Labore","account_template_396","other","despesa","True"
+"account_template_412","3.2.01.01.0016","Assistência Médica","account_template_396","other","despesa","True"
"account_template_413","3.2.01.02","ENCARGOS SOCIAIS","account_template_395","view","despesa","True"
-"account_template_414","3.2.01.02.0001","Inss","account_template_413","payable","despesa","True"
-"account_template_415","3.2.01.02.0002","Fgts","account_template_413","payable","despesa","True"
+"account_template_414","3.2.01.02.0001","Inss","account_template_413","other","despesa","True"
+"account_template_415","3.2.01.02.0002","Fgts","account_template_413","other","despesa","True"
"account_template_416","3.2.01.03","DESPESAS GERAIS COMERCIAIS","account_template_395","view","despesa","True"
-"account_template_417","3.2.01.03.0001","Comissões sobre Vendas","account_template_416","payable","despesa","True"
-"account_template_418","3.2.01.03.0002","Aluguel","account_template_416","payable","despesa","True"
-"account_template_419","3.2.01.03.0003","Agua e Esgoto","account_template_416","payable","despesa","True"
-"account_template_420","3.2.01.03.0004","Energia Elétrica","account_template_416","payable","despesa","True"
-"account_template_421","3.2.01.03.0006","Material de Expediente","account_template_416","payable","despesa","True"
-"account_template_422","3.2.01.03.0007","Condução","account_template_416","payable","despesa","True"
-"account_template_423","3.2.01.03.0008","Correios e Malotes","account_template_416","payable","despesa","True"
-"account_template_424","3.2.01.03.0009","Material de Limpeza","account_template_416","payable","despesa","True"
-"account_template_425","3.2.01.03.0010","Seguros","account_template_416","payable","despesa","True"
-"account_template_426","3.2.01.03.0011","Viagens e Estadias","account_template_416","payable","despesa","True"
-"account_template_427","3.2.01.03.0012","Manutenção e Conservação","account_template_416","payable","despesa","True"
-"account_template_428","3.2.01.03.0013","Depreciação e Amortização","account_template_416","payable","despesa","True"
-"account_template_429","3.2.01.03.0014","Propaganda e Publicidade","account_template_416","payable","despesa","True"
-"account_template_430","3.2.01.03.0015","Fretes e Carretos","account_template_416","payable","despesa","True"
-"account_template_431","3.2.01.03.0016","Combustíveis e Lubrificantes","account_template_416","payable","despesa","True"
-"account_template_432","3.2.01.03.0017","Leasing","account_template_416","payable","despesa","True"
-"account_template_433","3.2.01.03.0018","Serv.Terceiros P.Física - Autônomos","account_template_416","payable","despesa","True"
-"account_template_434","3.2.01.03.0019","Serv.Terceiros Pessoa Jurídica","account_template_416","payable","despesa","True"
-"account_template_435","3.2.01.03.0020","Feiras/Congressos/Simpósios/Cursos","account_template_416","payable","despesa","True"
-"account_template_436","3.2.01.03.0021","Telefone","account_template_416","payable","despesa","True"
-"account_template_437","3.2.01.03.0022","Despesas com Exportação","account_template_416","payable","despesa","True"
-"account_template_438","3.2.01.03.0024","Jornais, Revistas e Periódicos","account_template_416","payable","despesa","True"
-"account_template_439","3.2.01.03.0025","Refeições e Lanches","account_template_416","payable","despesa","True"
-"account_template_440","3.2.01.03.0026","Confraternizações","account_template_416","payable","despesa","True"
-"account_template_441","3.2.01.03.0027","Brindes","account_template_416","payable","despesa","True"
-"account_template_442","3.2.01.03.0028","Internet","account_template_416","payable","despesa","True"
+"account_template_417","3.2.01.03.0001","Comissões sobre Vendas","account_template_416","other","despesa","True"
+"account_template_418","3.2.01.03.0002","Aluguel","account_template_416","other","despesa","True"
+"account_template_419","3.2.01.03.0003","Agua e Esgoto","account_template_416","other","despesa","True"
+"account_template_420","3.2.01.03.0004","Energia Elétrica","account_template_416","other","despesa","True"
+"account_template_421","3.2.01.03.0006","Material de Expediente","account_template_416","other","despesa","True"
+"account_template_422","3.2.01.03.0007","Condução","account_template_416","other","despesa","True"
+"account_template_423","3.2.01.03.0008","Correios e Malotes","account_template_416","other","despesa","True"
+"account_template_424","3.2.01.03.0009","Material de Limpeza","account_template_416","other","despesa","True"
+"account_template_425","3.2.01.03.0010","Seguros","account_template_416","other","despesa","True"
+"account_template_426","3.2.01.03.0011","Viagens e Estadias","account_template_416","other","despesa","True"
+"account_template_427","3.2.01.03.0012","Manutenção e Conservação","account_template_416","other","despesa","True"
+"account_template_428","3.2.01.03.0013","Depreciação e Amortização","account_template_416","other","despesa","True"
+"account_template_429","3.2.01.03.0014","Propaganda e Publicidade","account_template_416","other","despesa","True"
+"account_template_430","3.2.01.03.0015","Fretes e Carretos","account_template_416","other","despesa","True"
+"account_template_431","3.2.01.03.0016","Combustíveis e Lubrificantes","account_template_416","other","despesa","True"
+"account_template_432","3.2.01.03.0017","Leasing","account_template_416","other","despesa","True"
+"account_template_433","3.2.01.03.0018","Serv.Terceiros P.Física - Autônomos","account_template_416","other","despesa","True"
+"account_template_434","3.2.01.03.0019","Serv.Terceiros Pessoa Jurídica","account_template_416","other","despesa","True"
+"account_template_435","3.2.01.03.0020","Feiras/Congressos/Simpósios/Cursos","account_template_416","other","despesa","True"
+"account_template_436","3.2.01.03.0021","Telefone","account_template_416","other","despesa","True"
+"account_template_437","3.2.01.03.0022","Despesas com Exportação","account_template_416","other","despesa","True"
+"account_template_438","3.2.01.03.0024","Jornais, Revistas e Periódicos","account_template_416","other","despesa","True"
+"account_template_439","3.2.01.03.0025","Refeições e Lanches","account_template_416","other","despesa","True"
+"account_template_440","3.2.01.03.0026","Confraternizações","account_template_416","other","despesa","True"
+"account_template_441","3.2.01.03.0027","Brindes","account_template_416","other","despesa","True"
+"account_template_442","3.2.01.03.0028","Internet","account_template_416","other","despesa","True"
"account_template_443","3.2.02","DESPESAS ADMINISTRATIVAS","account_template_394","view","despesa","True"
"account_template_444","3.2.02.01","DESPESAS TRABALHISTAS","account_template_443","view","despesa","True"
-"account_template_445","3.2.02.01.0001","Pro-Labore","account_template_444","payable","despesa","True"
-"account_template_446","3.2.02.01.0002","Salários","account_template_444","payable","despesa","True"
-"account_template_447","3.2.02.01.0003","Horas Extras","account_template_444","payable","despesa","True"
-"account_template_448","3.2.02.01.0004","Férias","account_template_444","payable","despesa","True"
-"account_template_449","3.2.02.01.0005","13º Salário","account_template_444","payable","despesa","True"
-"account_template_450","3.2.02.01.0006","Aviso Prévio/Indeniz.Trabalhistas","account_template_444","payable","despesa","True"
-"account_template_451","3.2.02.01.0007","Gratificações","account_template_444","payable","despesa","True"
-"account_template_452","3.2.02.01.0008","Adicional Insalubridade","account_template_444","payable","despesa","True"
-"account_template_453","3.2.02.01.0009","Adicional Noturno","account_template_444","payable","despesa","True"
-"account_template_454","3.2.02.01.0010","Vale Transporte","account_template_444","payable","despesa","True"
-"account_template_455","3.2.02.01.0011","Farmácia","account_template_444","payable","despesa","True"
-"account_template_456","3.2.02.01.0012","Vale Refeição","account_template_444","payable","despesa","True"
-"account_template_457","3.2.02.01.0013","PAT - Programa Alim. Trabalhador","account_template_444","payable","despesa","True"
-"account_template_458","3.2.02.01.0014","Salário Estagiários","account_template_444","payable","despesa","True"
-"account_template_459","3.2.02.01.0015","Assiduidade","account_template_444","payable","despesa","True"
-"account_template_460","3.2.02.01.0016","Abono Salarial","account_template_444","payable","despesa","True"
-"account_template_461","3.2.02.01.0017","Previdência Privada","account_template_444","payable","despesa","True"
-"account_template_462","3.2.02.01.0018","Assistência Médica","account_template_444","payable","despesa","True"
+"account_template_445","3.2.02.01.0001","Pro-Labore","account_template_444","other","despesa","True"
+"account_template_446","3.2.02.01.0002","Salários","account_template_444","other","despesa","True"
+"account_template_447","3.2.02.01.0003","Horas Extras","account_template_444","other","despesa","True"
+"account_template_448","3.2.02.01.0004","Férias","account_template_444","other","despesa","True"
+"account_template_449","3.2.02.01.0005","13º Salário","account_template_444","other","despesa","True"
+"account_template_450","3.2.02.01.0006","Aviso Prévio/Indeniz.Trabalhistas","account_template_444","other","despesa","True"
+"account_template_451","3.2.02.01.0007","Gratificações","account_template_444","other","despesa","True"
+"account_template_452","3.2.02.01.0008","Adicional Insalubridade","account_template_444","other","despesa","True"
+"account_template_453","3.2.02.01.0009","Adicional Noturno","account_template_444","other","despesa","True"
+"account_template_454","3.2.02.01.0010","Vale Transporte","account_template_444","other","despesa","True"
+"account_template_455","3.2.02.01.0011","Farmácia","account_template_444","other","despesa","True"
+"account_template_456","3.2.02.01.0012","Vale Refeição","account_template_444","other","despesa","True"
+"account_template_457","3.2.02.01.0013","PAT - Programa Alim. Trabalhador","account_template_444","other","despesa","True"
+"account_template_458","3.2.02.01.0014","Salário Estagiários","account_template_444","other","despesa","True"
+"account_template_459","3.2.02.01.0015","Assiduidade","account_template_444","other","despesa","True"
+"account_template_460","3.2.02.01.0016","Abono Salarial","account_template_444","other","despesa","True"
+"account_template_461","3.2.02.01.0017","Previdência Privada","account_template_444","other","despesa","True"
+"account_template_462","3.2.02.01.0018","Assistência Médica","account_template_444","other","despesa","True"
"account_template_463","3.2.02.02","ENCARGOS SOCIAIS","account_template_443","view","despesa","True"
-"account_template_464","3.2.02.02.0001","Inss","account_template_463","payable","despesa","True"
-"account_template_465","3.2.02.02.0002","Fgts","account_template_463","payable","despesa","True"
+"account_template_464","3.2.02.02.0001","Inss","account_template_463","other","despesa","True"
+"account_template_465","3.2.02.02.0002","Fgts","account_template_463","other","despesa","True"
"account_template_466","3.2.02.03","DESPESAS GERAIS ADMINISTRATIVAS","account_template_443","view","despesa","True"
-"account_template_467","3.2.02.03.0001","Aluguel","account_template_466","payable","despesa","True"
-"account_template_468","3.2.02.03.0002","Água e Esgoto","account_template_466","payable","despesa","True"
-"account_template_469","3.2.02.03.0003","Energia Elétrica","account_template_466","payable","despesa","True"
-"account_template_470","3.2.02.03.0004","Copa, Cozinha e Refeitório","account_template_466","payable","despesa","True"
-"account_template_471","3.2.02.03.0005","Material de Escritório","account_template_466","payable","despesa","True"
-"account_template_472","3.2.02.03.0006","Fretes e Carretos","account_template_466","payable","despesa","True"
-"account_template_473","3.2.02.03.0007","Correios e Malotes","account_template_466","payable","despesa","True"
-"account_template_474","3.2.02.03.0008","Material de Limpeza","account_template_466","payable","despesa","True"
-"account_template_475","3.2.02.03.0009","Seguros","account_template_466","payable","despesa","True"
-"account_template_476","3.2.02.03.0010","Viagens e Estadias","account_template_466","payable","despesa","True"
-"account_template_477","3.2.02.03.0011","Manutenção e Conservação","account_template_466","payable","despesa","True"
-"account_template_478","3.2.02.03.0012","Depreciação e Amortização","account_template_466","payable","despesa","True"
-"account_template_479","3.2.02.03.0013","Sindicato Patronal/Assoc.de Classe","account_template_466","payable","despesa","True"
-"account_template_480","3.2.02.03.0014","Feiras/Congressos/Simpósios/Cursos","account_template_466","payable","despesa","True"
-"account_template_481","3.2.02.03.0015","Internet","account_template_466","payable","despesa","True"
-"account_template_482","3.2.02.03.0016","Combustíveis e Lubrificantes","account_template_466","payable","despesa","True"
-"account_template_483","3.2.02.03.0017","Leasing","account_template_466","payable","despesa","True"
-"account_template_484","3.2.02.03.0018","Serviço de Terceiros - Pessoa Jurídica","account_template_466","payable","despesa","True"
-"account_template_485","3.2.02.03.0019","Telefone","account_template_466","payable","despesa","True"
-"account_template_486","3.2.02.03.0020","Legais e Judiciais","account_template_466","payable","despesa","True"
-"account_template_487","3.2.02.03.0021","Bens de Pequeno Valor","account_template_466","payable","despesa","True"
-"account_template_488","3.2.02.03.0022","Jornais Revistas e Periódicos","account_template_466","payable","despesa","True"
-"account_template_489","3.2.02.03.0023","Cópias e Reproduções","account_template_466","payable","despesa","True"
-"account_template_490","3.2.02.03.0024","Confraternizações","account_template_466","payable","despesa","True"
-"account_template_491","3.2.02.03.0025","Formação de Pessoal","account_template_466","payable","despesa","True"
-"account_template_492","3.2.02.03.0026","Segurança e Vigilância","account_template_466","payable","despesa","True"
-"account_template_493","3.2.02.03.0027","Despesas com Veículos","account_template_466","payable","despesa","True"
-"account_template_494","3.2.02.03.0028","Impressos","account_template_466","payable","despesa","True"
-"account_template_495","3.2.02.03.0029","Refeições e Lanches","account_template_466","payable","despesa","True"
-"account_template_496","3.2.02.03.0030","Comissões","account_template_466","payable","despesa","True"
-"account_template_497","3.2.02.03.0031","Condução ","account_template_466","payable","despesa","True"
-"account_template_498","3.2.02.03.0032","Telefone Linha Fixa","account_template_466","payable","despesa","True"
-"account_template_499","3.2.02.03.0033","Telefone Móvel Celular","account_template_466","payable","despesa","True"
-"account_template_500","3.2.02.03.0034","Telefone Nextel","account_template_466","payable","despesa","True"
-"account_template_501","3.2.02.03.0035","Crea-PR","account_template_466","payable","despesa","True"
-"account_template_502","3.2.02.03.0036","Despesas de Cartório","account_template_466","payable","despesa","True"
-"account_template_503","3.2.02.03.0037","Material de Consumo","account_template_466","payable","despesa","True"
-"account_template_504","3.2.02.03.0038","Donativos e Contribuições","account_template_466","payable","despesa","True"
-"account_template_505","3.2.02.03.0039","Locação de Equipamentos","account_template_466","payable","despesa","True"
+"account_template_467","3.2.02.03.0001","Aluguel","account_template_466","other","despesa","True"
+"account_template_468","3.2.02.03.0002","Água e Esgoto","account_template_466","other","despesa","True"
+"account_template_469","3.2.02.03.0003","Energia Elétrica","account_template_466","other","despesa","True"
+"account_template_470","3.2.02.03.0004","Copa, Cozinha e Refeitório","account_template_466","other","despesa","True"
+"account_template_471","3.2.02.03.0005","Material de Escritório","account_template_466","other","despesa","True"
+"account_template_472","3.2.02.03.0006","Fretes e Carretos","account_template_466","other","despesa","True"
+"account_template_473","3.2.02.03.0007","Correios e Malotes","account_template_466","other","despesa","True"
+"account_template_474","3.2.02.03.0008","Material de Limpeza","account_template_466","other","despesa","True"
+"account_template_475","3.2.02.03.0009","Seguros","account_template_466","other","despesa","True"
+"account_template_476","3.2.02.03.0010","Viagens e Estadias","account_template_466","other","despesa","True"
+"account_template_477","3.2.02.03.0011","Manutenção e Conservação","account_template_466","other","despesa","True"
+"account_template_478","3.2.02.03.0012","Depreciação e Amortização","account_template_466","other","despesa","True"
+"account_template_479","3.2.02.03.0013","Sindicato Patronal/Assoc.de Classe","account_template_466","other","despesa","True"
+"account_template_480","3.2.02.03.0014","Feiras/Congressos/Simpósios/Cursos","account_template_466","other","despesa","True"
+"account_template_481","3.2.02.03.0015","Internet","account_template_466","other","despesa","True"
+"account_template_482","3.2.02.03.0016","Combustíveis e Lubrificantes","account_template_466","other","despesa","True"
+"account_template_483","3.2.02.03.0017","Leasing","account_template_466","other","despesa","True"
+"account_template_484","3.2.02.03.0018","Serviço de Terceiros - Pessoa Jurídica","account_template_466","other","despesa","True"
+"account_template_485","3.2.02.03.0019","Telefone","account_template_466","other","despesa","True"
+"account_template_486","3.2.02.03.0020","Legais e Judiciais","account_template_466","other","despesa","True"
+"account_template_487","3.2.02.03.0021","Bens de Pequeno Valor","account_template_466","other","despesa","True"
+"account_template_488","3.2.02.03.0022","Jornais Revistas e Periódicos","account_template_466","other","despesa","True"
+"account_template_489","3.2.02.03.0023","Cópias e Reproduções","account_template_466","other","despesa","True"
+"account_template_490","3.2.02.03.0024","Confraternizações","account_template_466","other","despesa","True"
+"account_template_491","3.2.02.03.0025","Formação de Pessoal","account_template_466","other","despesa","True"
+"account_template_492","3.2.02.03.0026","Segurança e Vigilância","account_template_466","other","despesa","True"
+"account_template_493","3.2.02.03.0027","Despesas com Veículos","account_template_466","other","despesa","True"
+"account_template_494","3.2.02.03.0028","Impressos","account_template_466","other","despesa","True"
+"account_template_495","3.2.02.03.0029","Refeições e Lanches","account_template_466","other","despesa","True"
+"account_template_496","3.2.02.03.0030","Comissões","account_template_466","other","despesa","True"
+"account_template_497","3.2.02.03.0031","Condução ","account_template_466","other","despesa","True"
+"account_template_498","3.2.02.03.0032","Telefone Linha Fixa","account_template_466","other","despesa","True"
+"account_template_499","3.2.02.03.0033","Telefone Móvel Celular","account_template_466","other","despesa","True"
+"account_template_500","3.2.02.03.0034","Telefone Nextel","account_template_466","other","despesa","True"
+"account_template_501","3.2.02.03.0035","Crea-PR","account_template_466","other","despesa","True"
+"account_template_502","3.2.02.03.0036","Despesas de Cartório","account_template_466","other","despesa","True"
+"account_template_503","3.2.02.03.0037","Material de Consumo","account_template_466","other","despesa","True"
+"account_template_504","3.2.02.03.0038","Donativos e Contribuições","account_template_466","other","despesa","True"
+"account_template_505","3.2.02.03.0039","Locação de Equipamentos","account_template_466","other","despesa","True"
"account_template_506","3.2.02.04","DESPESAS INDEDUTÍVEIS","account_template_443","view","despesa","True"
-"account_template_507","3.2.02.04.0001","Autos de Infração","account_template_506","payable","despesa","True"
-"account_template_508","3.2.02.04.0002","Multas Punitívas","account_template_506","payable","despesa","True"
-"account_template_509","3.2.02.04.0003","Contribuições e Doações","account_template_506","payable","despesa","True"
-"account_template_510","3.2.02.04.0004","Impostos Federais - Exerc. Anteriores","account_template_506","payable","despesa","True"
-"account_template_511","3.2.02.04.0005","Impostos Estaduais - Exerc. Anteriores","account_template_506","payable","despesa","True"
-"account_template_512","3.2.02.04.0006","Impostos Municipais - Exerc.Anteriores","account_template_506","payable","despesa","True"
+"account_template_507","3.2.02.04.0001","Autos de Infração","account_template_506","other","despesa","True"
+"account_template_508","3.2.02.04.0002","Multas Punitívas","account_template_506","other","despesa","True"
+"account_template_509","3.2.02.04.0003","Contribuições e Doações","account_template_506","other","despesa","True"
+"account_template_510","3.2.02.04.0004","Impostos Federais - Exerc. Anteriores","account_template_506","other","despesa","True"
+"account_template_511","3.2.02.04.0005","Impostos Estaduais - Exerc. Anteriores","account_template_506","other","despesa","True"
+"account_template_512","3.2.02.04.0006","Impostos Municipais - Exerc.Anteriores","account_template_506","other","despesa","True"
"account_template_513","3.2.03","DESPESAS FINANCEIRAS","account_template_394","view","despesa","True"
"account_template_514","3.2.03.01","DESPESAS COM ATUALIZAÇÕES","account_template_513","view","despesa","True"
-"account_template_515","3.2.03.01.0001","Variação Monetária Passiva","account_template_514","payable","despesa","True"
-"account_template_516","3.2.03.01.0002","Variação Cambial Passiva","account_template_514","payable","despesa","True"
-"account_template_517","3.2.03.01.0003","Despesas de Cobrança","account_template_514","payable","despesa","True"
-"account_template_518","3.2.03.01.0004","Despesas Bancárias","account_template_514","payable","despesa","True"
+"account_template_515","3.2.03.01.0001","Variação Monetária Passiva","account_template_514","other","despesa","True"
+"account_template_516","3.2.03.01.0002","Variação Cambial Passiva","account_template_514","other","despesa","True"
+"account_template_517","3.2.03.01.0003","Despesas de Cobrança","account_template_514","other","despesa","True"
+"account_template_518","3.2.03.01.0004","Despesas Bancárias","account_template_514","other","despesa","True"
"account_template_519","3.2.03.02","JUROS E DESCONTOS","account_template_513","view","despesa","True"
-"account_template_520","3.2.03.02.0001","Juros de Mora","account_template_519","payable","despesa","True"
-"account_template_521","3.2.03.02.0002","Descontos Concedidos","account_template_519","payable","despesa","True"
-"account_template_522","3.2.03.02.0003","Juros s/ Empréstimos e Financiamentos","account_template_519","payable","despesa","True"
-"account_template_523","3.2.03.02.0004","Juros s/ Descontos de Duplicatas","account_template_519","payable","despesa","True"
+"account_template_520","3.2.03.02.0001","Juros de Mora","account_template_519","other","despesa","True"
+"account_template_521","3.2.03.02.0002","Descontos Concedidos","account_template_519","other","despesa","True"
+"account_template_522","3.2.03.02.0003","Juros s/ Empréstimos e Financiamentos","account_template_519","other","despesa","True"
+"account_template_523","3.2.03.02.0004","Juros s/ Descontos de Duplicatas","account_template_519","other","despesa","True"
"account_template_524","3.2.04","DESPESAS TRIBUTÁRIAS","account_template_394","view","despesa","True"
"account_template_525","3.2.04.01","IMPOSTOS, TAXAS E CONTRIBUIÇÕES","account_template_524","view","despesa","True"
-"account_template_526","3.2.04.01.0001","IOF","account_template_525","payable","despesa","True"
-"account_template_527","3.2.04.01.0002","CPMF","account_template_525","payable","despesa","True"
-"account_template_528","3.2.04.01.0003","IPTU","account_template_525","payable","despesa","True"
-"account_template_529","3.2.04.01.0004","IPVA","account_template_525","payable","despesa","True"
-"account_template_530","3.2.04.01.0005","IRF (Exclusivo na Fonte)","account_template_525","payable","despesa","True"
-"account_template_531","3.2.04.01.0006","Impostos e Taxas Federais","account_template_525","payable","despesa","True"
-"account_template_532","3.2.04.01.0007","Impostos e Taxas Estaduais","account_template_525","payable","despesa","True"
-"account_template_533","3.2.04.01.0008","Impostos e Taxas Municipais","account_template_525","payable","despesa","True"
+"account_template_526","3.2.04.01.0001","IOF","account_template_525","other","despesa","True"
+"account_template_527","3.2.04.01.0002","CPMF","account_template_525","other","despesa","True"
+"account_template_528","3.2.04.01.0003","IPTU","account_template_525","other","despesa","True"
+"account_template_529","3.2.04.01.0004","IPVA","account_template_525","other","despesa","True"
+"account_template_530","3.2.04.01.0005","IRF (Exclusivo na Fonte)","account_template_525","other","despesa","True"
+"account_template_531","3.2.04.01.0006","Impostos e Taxas Federais","account_template_525","other","despesa","True"
+"account_template_532","3.2.04.01.0007","Impostos e Taxas Estaduais","account_template_525","other","despesa","True"
+"account_template_533","3.2.04.01.0008","Impostos e Taxas Municipais","account_template_525","other","despesa","True"
"account_template_534","3.2.04.02","MULTAS","account_template_524","view","despesa","True"
-"account_template_535","3.2.04.02.0001","Multas Fiscais Compensatórias","account_template_534","payable","despesa","True"
-"account_template_536","3.2.04.02.0002","Multas de Mora","account_template_534","payable","despesa","True"
-"account_template_537","3.2.04.02.0003","Multas Contratuais","account_template_534","payable","despesa","True"
+"account_template_535","3.2.04.02.0001","Multas Fiscais Compensatórias","account_template_534","other","despesa","True"
+"account_template_536","3.2.04.02.0002","Multas de Mora","account_template_534","other","despesa","True"
+"account_template_537","3.2.04.02.0003","Multas Contratuais","account_template_534","other","despesa","True"
"account_template_538","3.2.05","OUTRAS DESPESAS OPERACIONAIS","account_template_394","view","despesa","True"
"account_template_539","3.2.05.01","PERDAS","account_template_538","view","despesa","True"
-"account_template_540","3.2.05.01.0001","Perdas com Duplicatas Incobráveis","account_template_539","payable","despesa","True"
+"account_template_540","3.2.05.01.0001","Perdas com Duplicatas Incobráveis","account_template_539","other","despesa","True"
"account_template_541","3.2.06","DESPESAS NÃO OPERACIONAIS","account_template_394","view","despesa","True"
"account_template_542","3.2.06.01","PERDAS","account_template_541","view","despesa","True"
-"account_template_543","3.2.06.01.0002","Perda crédito de ICMS s/ Imobilizado","account_template_542","payable","despesa","True"
-"account_template_544","3.2.06.01.0003","Perdas com Sinistros","account_template_542","payable","despesa","True"
-"account_template_545","3.2.06.01.0004","Perdas na Alienação de Imobilizado","account_template_542","payable","despesa","True"
-"account_template_546","3.2.06.01.0001","Perdas na Alienação de Investimentos","account_template_542","payable","despesa","True"
-"account_template_547","3.2.06.01.0005","Perdas, Deterioração de Mercadorias","account_template_542","payable","despesa","True"
+"account_template_543","3.2.06.01.0002","Perda crédito de ICMS s/ Imobilizado","account_template_542","other","despesa","True"
+"account_template_544","3.2.06.01.0003","Perdas com Sinistros","account_template_542","other","despesa","True"
+"account_template_545","3.2.06.01.0004","Perdas na Alienação de Imobilizado","account_template_542","other","despesa","True"
+"account_template_546","3.2.06.01.0001","Perdas na Alienação de Investimentos","account_template_542","other","despesa","True"
+"account_template_547","3.2.06.01.0005","Perdas, Deterioração de Mercadorias","account_template_542","other","despesa","True"
"account_template_548","4","CONTAS DE RESULTADO - RECEITAS","account_template_1","view","receita","True"
"account_template_549","4.1","RECEITAS","account_template_548","view","receita","True"
"account_template_550","4.1.01","RECEITAS OPERACIONAIS VENDAS E SERVIÇOS","account_template_549","view","receita","True"
"account_template_551","4.1.01.01","RECEITA BRUTA VENDAS NO PAÍS ","account_template_550","view","receita","True"
-"account_template_552","4.1.01.01.0001","Venda Produtos Fabricação Própria","account_template_551","receivable","receita","True"
-"account_template_553","4.1.01.01.0002","Industrialização de Mercadorias","account_template_551","receivable","receita","True"
-"account_template_554","4.1.01.01.0003","Revenda de Mercadorias","account_template_551","receivable","receita","True"
-"account_template_555","4.1.01.01.0004","Venda Fabricação Própria","account_template_551","receivable","receita","True"
-"account_template_556","4.1.01.01.0005","Industriazalição de Mercadorias","account_template_551","receivable","receita","True"
-"account_template_557","4.1.01.01.0006","Revenda de Mercadorias","account_template_551","receivable","receita","True"
+"account_template_552","4.1.01.01.0001","Venda Produtos Fabricação Própria","account_template_551","other","receita","True"
+"account_template_553","4.1.01.01.0002","Industrialização de Mercadorias","account_template_551","other","receita","True"
+"account_template_554","4.1.01.01.0003","Revenda de Mercadorias","account_template_551","other","receita","True"
+"account_template_555","4.1.01.01.0004","Venda Fabricação Própria","account_template_551","other","receita","True"
+"account_template_556","4.1.01.01.0005","Industriazalição de Mercadorias","account_template_551","other","receita","True"
+"account_template_557","4.1.01.01.0006","Revenda de Mercadorias","account_template_551","other","receita","True"
"account_template_558","4.1.01.02","RECEITA DE SERVIÇOS NO PAIS ","account_template_550","view","receita","True"
-"account_template_559","4.1.01.02.0001","Receita de Serviços","account_template_558","receivable","receita","True"
-"account_template_560","4.1.01.02.0002","Receita de Serviços","account_template_558","receivable","receita","True"
+"account_template_559","4.1.01.02.0001","Receita de Serviços","account_template_558","other","receita","True"
+"account_template_560","4.1.01.02.0002","Receita de Serviços","account_template_558","other","receita","True"
"account_template_561","4.1.01.03","RECEITA BRUTA DE VENDAS P/EXTERIOR","account_template_550","view","receita","True"
-"account_template_562","4.1.01.03.0001","Venda de Produtos Fabricação Própria(EX)","account_template_561","receivable","receita","True"
-"account_template_563","4.1.01.03.0002","Revenda de Mercadorias (EX)","account_template_561","receivable","receita","True"
+"account_template_562","4.1.01.03.0001","Venda de Produtos Fabricação Própria(EX)","account_template_561","other","receita","True"
+"account_template_563","4.1.01.03.0002","Revenda de Mercadorias (EX)","account_template_561","other","receita","True"
"account_template_564","4.1.02","(-) DEDUÇÕES DA RECEITA BRUTA","account_template_549","view","receita","True"
"account_template_565","4.1.02.01","DEVOLUÇÕES E ABATIMENTOS","account_template_564","view","receita","True"
-"account_template_566","4.1.02.01.0001","Devolução de Vendas","account_template_565","receivable","receita","True"
-"account_template_567","4.1.02.01.0002","Abatimentos Concedidos","account_template_565","receivable","receita","True"
-"account_template_568","4.1.02.01.0003","Devolução de Vendas","account_template_565","receivable","receita","True"
-"account_template_569","4.1.02.01.0004","Abatimentos Concedidos","account_template_565","receivable","receita","True"
+"account_template_566","4.1.02.01.0001","Devolução de Vendas","account_template_565","other","receita","True"
+"account_template_567","4.1.02.01.0002","Abatimentos Concedidos","account_template_565","other","receita","True"
+"account_template_568","4.1.02.01.0003","Devolução de Vendas","account_template_565","other","receita","True"
+"account_template_569","4.1.02.01.0004","Abatimentos Concedidos","account_template_565","other","receita","True"
"account_template_570","4.1.02.02","IMPOSTOS SOBRE VENDAS E SERVIÇOS","account_template_564","view","receita","True"
-"account_template_571","4.1.02.02.0001","ICMS sobre Vendas","account_template_570","receivable","receita","True"
-"account_template_572","4.1.02.02.0002","IPI sobre Vendas","account_template_570","receivable","receita","True"
-"account_template_573","4.1.02.02.0003","PIS sobre Vendas ","account_template_570","receivable","receita","True"
-"account_template_574","4.1.02.02.0004","COFINS sobre Vendas","account_template_570","receivable","receita","True"
-"account_template_575","4.1.02.02.0005","ISS sobre Serviços","account_template_570","receivable","receita","True"
+"account_template_571","4.1.02.02.0001","ICMS sobre Vendas","account_template_570","other","receita","True"
+"account_template_572","4.1.02.02.0002","IPI sobre Vendas","account_template_570","other","receita","True"
+"account_template_573","4.1.02.02.0003","PIS sobre Vendas ","account_template_570","other","receita","True"
+"account_template_574","4.1.02.02.0004","COFINS sobre Vendas","account_template_570","other","receita","True"
+"account_template_575","4.1.02.02.0005","ISS sobre Serviços","account_template_570","other","receita","True"
"account_template_579","4.1.02.03","(-) IMPOSTOS S/ DEVOLUÇÃO DE VENDAS","account_template_564","view","receita","True"
-"account_template_580","4.1.02.03.0001","(-) Cofins Não-Cumulativo s/ Dev. Vendas","account_template_579","receivable","receita","True"
-"account_template_581","4.1.02.03.0002","(-) ICMS sobre Devolução de Vendas","account_template_579","receivable","receita","True"
-"account_template_582","4.1.02.03.0003","(-) IPI s/Devolução de Vendas","account_template_579","receivable","receita","True"
-"account_template_583","4.1.02.03.0004","(-) Pis Não-Cumulativo s/ Dev. Vendas","account_template_579","receivable","receita","True"
+"account_template_580","4.1.02.03.0001","(-) Cofins Não-Cumulativo s/ Dev. Vendas","account_template_579","other","receita","True"
+"account_template_581","4.1.02.03.0002","(-) ICMS sobre Devolução de Vendas","account_template_579","other","receita","True"
+"account_template_582","4.1.02.03.0003","(-) IPI s/Devolução de Vendas","account_template_579","other","receita","True"
+"account_template_583","4.1.02.03.0004","(-) Pis Não-Cumulativo s/ Dev. Vendas","account_template_579","other","receita","True"
"account_template_584","4.1.03","RECEITAS FINANCEIRAS","account_template_549","view","receita","True"
"account_template_585","4.1.03.01","RECEITAS COM ATUALIZAÇÕES","account_template_584","view","receita","True"
-"account_template_586","4.1.03.01.0001","Variação Monetária Ativa","account_template_585","receivable","receita","True"
-"account_template_587","4.1.03.01.0002","Variação Cambial Ativa","account_template_585","receivable","receita","True"
+"account_template_586","4.1.03.01.0001","Variação Monetária Ativa","account_template_585","other","receita","True"
+"account_template_587","4.1.03.01.0002","Variação Cambial Ativa","account_template_585","other","receita","True"
"account_template_588","4.1.03.02","GANHOS COM APLICAÇÕES FINANCEIRAS","account_template_584","view","receita","True"
-"account_template_589","4.1.03.02.0001","Rend. Aplic.Automática C/Corrente","account_template_588","receivable","receita","True"
-"account_template_590","4.1.03.02.0002","Ganho Real Aplicações Renda Fixa","account_template_588","receivable","receita","True"
-"account_template_591","4.1.03.02.0003","Ganho Real Aplic.Renda Variável","account_template_588","receivable","receita","True"
-"account_template_592","4.1.03.02.0004","Rendimento Caderneta de Poupança","account_template_588","receivable","receita","True"
+"account_template_589","4.1.03.02.0001","Rend. Aplic.Automática C/Corrente","account_template_588","other","receita","True"
+"account_template_590","4.1.03.02.0002","Ganho Real Aplicações Renda Fixa","account_template_588","other","receita","True"
+"account_template_591","4.1.03.02.0003","Ganho Real Aplic.Renda Variável","account_template_588","other","receita","True"
+"account_template_592","4.1.03.02.0004","Rendimento Caderneta de Poupança","account_template_588","other","receita","True"
"account_template_593","4.1.03.03","JUROS E DESCONTOS OBTIDOS","account_template_584","view","receita","True"
-"account_template_594","4.1.03.03.0001","Juros Recebidos","account_template_593","receivable","receita","True"
-"account_template_595","4.1.03.03.0002","Descontos Obtidos","account_template_593","receivable","receita","True"
+"account_template_594","4.1.03.03.0001","Juros Recebidos","account_template_593","other","receita","True"
+"account_template_595","4.1.03.03.0002","Descontos Obtidos","account_template_593","other","receita","True"
"account_template_596","4.1.03.04","(-) TRIBUTOS S/RECEITAS FINANCEIRAS","account_template_584","view","receita","True"
-"account_template_597","4.1.03.04.0001","PIS sobre Receitas Financeiras","account_template_596","receivable","receita","True"
-"account_template_598","4.1.03.04.0002","COFINS sobre Receitas Financeiras","account_template_596","receivable","receita","True"
+"account_template_597","4.1.03.04.0001","PIS sobre Receitas Financeiras","account_template_596","other","receita","True"
+"account_template_598","4.1.03.04.0002","COFINS sobre Receitas Financeiras","account_template_596","other","receita","True"
"account_template_599","4.1.04","OUTRAS RECEITAS OPERACIONAIS","account_template_549","view","receita","True"
"account_template_600","4.1.04.01","LUCROS PARTIC.EM OUTRAS SOCIEDADES","account_template_599","view","receita","True"
-"account_template_601","4.1.04.01.0001","Resultado de Coligadas e Controladas","account_template_600","receivable","receita","True"
+"account_template_601","4.1.04.01.0001","Resultado de Coligadas e Controladas","account_template_600","other","receita","True"
"account_template_602","4.1.04.02","VENDAS DIVERSAS","account_template_599","view","receita","True"
-"account_template_603","4.1.04.02.0001","Venda de Sucatas","account_template_602","receivable","receita","True"
+"account_template_603","4.1.04.02.0001","Venda de Sucatas","account_template_602","other","receita","True"
"account_template_604","4.1.04.03","BRINDES E AMOSTRAS","account_template_599","view","receita","True"
-"account_template_605","4.1.04.03.0001","Brindes e Bonificações","account_template_604","receivable","receita","True"
-"account_template_606","4.1.04.03.0002","Amostras","account_template_604","receivable","receita","True"
+"account_template_605","4.1.04.03.0001","Brindes e Bonificações","account_template_604","other","receita","True"
+"account_template_606","4.1.04.03.0002","Amostras","account_template_604","other","receita","True"
"account_template_607","4.2","RESULTADOS NÃO OPERACIONAIS","account_template_548","view","receita","True"
"account_template_608","4.2.01","ALIENAÇÃO DE BENS PERMANENTES","account_template_607","view","receita","True"
"account_template_609","4.2.01.01","ALIENAÇÃO DE INVESTIMENTOS","account_template_608","view","receita","True"
-"account_template_610","4.2.01.01.0001","Dividendos Recebidos","account_template_609","receivable","receita","True"
-"account_template_611","4.2.01.01.0002","Alienação Partic.Societárias","account_template_609","receivable","receita","True"
+"account_template_610","4.2.01.01.0001","Dividendos Recebidos","account_template_609","other","receita","True"
+"account_template_611","4.2.01.01.0002","Alienação Partic.Societárias","account_template_609","other","receita","True"
"account_template_612","4.2.01.02","ALIENAÇÃO DE IMOBILIZADO","account_template_608","view","receita","True"
-"account_template_613","4.2.01.02.0001","Alienação de Máquinas e Equipamentos","account_template_612","receivable","receita","True"
-"account_template_614","4.2.01.02.0002","Alienação de Móveis e Utensílios","account_template_612","receivable","receita","True"
-"account_template_615","4.2.01.02.0003","Alienação de Ferramentas","account_template_612","receivable","receita","True"
-"account_template_616","4.2.01.02.0004","Alienação de Imóveis","account_template_612","receivable","receita","True"
-"account_template_617","4.2.01.02.0005","Alienação de Veículos","account_template_612","receivable","receita","True"
-"account_template_618","4.2.01.02.0006","Alienação de Equip.de Informática","account_template_612","receivable","receita","True"
+"account_template_613","4.2.01.02.0001","Alienação de Máquinas e Equipamentos","account_template_612","other","receita","True"
+"account_template_614","4.2.01.02.0002","Alienação de Móveis e Utensílios","account_template_612","other","receita","True"
+"account_template_615","4.2.01.02.0003","Alienação de Ferramentas","account_template_612","other","receita","True"
+"account_template_616","4.2.01.02.0004","Alienação de Imóveis","account_template_612","other","receita","True"
+"account_template_617","4.2.01.02.0005","Alienação de Veículos","account_template_612","other","receita","True"
+"account_template_618","4.2.01.02.0006","Alienação de Equip.de Informática","account_template_612","other","receita","True"
"account_template_619","4.2.02","DEDUÇÕES DAS ALIENAÇÕES DE BENS","account_template_607","view","receita","True"
"account_template_620","4.2.02.01","CUSTO DA ALIENAÇÃO DE INVESTIMENTOS","account_template_619","view","receita","True"
-"account_template_621","4.2.02.01.0001","Custo Alienação Partic.Societárias","account_template_620","receivable","receita","True"
+"account_template_621","4.2.02.01.0001","Custo Alienação Partic.Societárias","account_template_620","other","receita","True"
"account_template_622","4.2.02.02","CUSTO DA ALIENAÇÃO DE IMOBILIZADO","account_template_619","view","receita","True"
-"account_template_623","4.2.02.02.0001","Custo Alienação Máqs.e Equipamentos","account_template_622","receivable","receita","True"
-"account_template_624","4.2.02.02.0002","Custo Alienação Movs.e Utensílios","account_template_622","receivable","receita","True"
-"account_template_625","4.2.02.02.0003","Custo Alienação Ferramentas","account_template_622","receivable","receita","True"
-"account_template_626","4.2.02.02.0004","Custo Alienação de Imóveis","account_template_622","receivable","receita","True"
-"account_template_627","4.2.02.02.0005","Custo Alienação de Veículos","account_template_622","receivable","receita","True"
-"account_template_628","4.2.02.02.0006","Custo Alienação Equip.Informática","account_template_622","receivable","receita","True"
+"account_template_623","4.2.02.02.0001","Custo Alienação Máqs.e Equipamentos","account_template_622","other","receita","True"
+"account_template_624","4.2.02.02.0002","Custo Alienação Movs.e Utensílios","account_template_622","other","receita","True"
+"account_template_625","4.2.02.02.0003","Custo Alienação Ferramentas","account_template_622","other","receita","True"
+"account_template_626","4.2.02.02.0004","Custo Alienação de Imóveis","account_template_622","other","receita","True"
+"account_template_627","4.2.02.02.0005","Custo Alienação de Veículos","account_template_622","other","receita","True"
+"account_template_628","4.2.02.02.0006","Custo Alienação Equip.Informática","account_template_622","other","receita","True"
"account_template_629","4.2.03","OUTRAS RECEITAS NÃO OPERACIONAIS","account_template_607","view","receita","True"
"account_template_630","4.2.03.01","INDENIZAÇÃO DE SEGUROS","account_template_629","view","receita","True"
-"account_template_631","4.2.03.01.0001","Indenização de Seguros","account_template_630","receivable","receita","True"
+"account_template_631","4.2.03.01.0001","Indenização de Seguros","account_template_630","other","receita","True"
"account_template_632","4.2.03.02","OUTRAS RECEITAS","account_template_629","view","receita","True"
-"account_template_633","4.2.03.02.0001","Recuperação de Despesas","account_template_632","receivable","receita","True"
+"account_template_633","4.2.03.02.0001","Recuperação de Despesas","account_template_632","other","receita","True"
"account_template_634","5","CONTAS DE FECHAMENTO DE BALANÇO","account_template_1","view","resultado","True"
"account_template_635","5.1","RESULTADO DO EXERCÍCIO","account_template_634","view","resultado","True"
"account_template_636","5.1.01","RESULTADO OPERACIONAL","account_template_635","view","resultado","True"
diff --git a/addons/l10n_br/data/account.account.type.csv b/addons/l10n_br/data/account.account.type.csv
index 1b1d8cfddac..9f3844cdd2e 100644
--- a/addons/l10n_br/data/account.account.type.csv
+++ b/addons/l10n_br/data/account.account.type.csv
@@ -1,6 +1,6 @@
"id","code","name","close_method"
-"ativo","1","Ativo","balance"
-"passivo","2","Passivo","balance"
+"ativo","1","Ativo","unreconciled"
+"passivo","2","Passivo","unreconciled"
"despesa","3","Despesas","balance"
"receita","4","Receita","balance"
"resultado","5","Resultado","balance"
diff --git a/addons/l10n_br/i18n/ar.po b/addons/l10n_br/i18n/ar.po
new file mode 100644
index 00000000000..7afeef593cc
--- /dev/null
+++ b/addons/l10n_br/i18n/ar.po
@@ -0,0 +1,36 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-07 06:40+0000\n"
+"PO-Revision-Date: 2011-09-22 02:56+0000\n"
+"Last-Translator: kifcaliph \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-23 04:39+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: l10n_br
+#: model:ir.actions.todo,note:l10n_br.config_call_account_template_brazilian_localization
+msgid ""
+"Generate Chart of Accounts from a Chart Template. You will be asked to pass "
+"the name of the company, the chart template to follow, the no. of digits to "
+"generate the code for your accounts and Bank account, currency to create "
+"Journals. Thus,the pure copy of chart Template is generated.\n"
+" This is the same wizard that runs from Financial "
+"Management/Configuration/Financial Accounting/Financial Accounts/Generate "
+"Chart of Accounts from a Chart Template."
+msgstr ""
+
+#. module: l10n_br
+#: model:ir.module.module,description:l10n_br.module_meta_information
+#: model:ir.module.module,shortdesc:l10n_br.module_meta_information
+msgid "Brazilian Localization"
+msgstr "النظام للبرازيل"
diff --git a/addons/l10n_cn/account_chart.xml b/addons/l10n_cn/account_chart.xml
index 624e76a190e..cadd288c810 100644
--- a/addons/l10n_cn/account_chart.xml
+++ b/addons/l10n_cn/account_chart.xml
@@ -12,13 +12,13 @@
资产类1
- balance
+ unreconciledasset负债类2
- balance
+ unreconciledliability
@@ -767,7 +767,7 @@
4103
- payable
+ other本年利润
diff --git a/addons/l10n_de/account_chart_skr03.xml b/addons/l10n_de/account_chart_skr03.xml
index 187f0259dbb..7a7e1fb8ee0 100644
--- a/addons/l10n_de/account_chart_skr03.xml
+++ b/addons/l10n_de/account_chart_skr03.xml
@@ -1228,7 +1228,7 @@
1490receivable
-
+
@@ -1732,7 +1732,7 @@
1401receivable
-
+
@@ -1740,7 +1740,7 @@
1400receivable
-
+
@@ -3164,7 +3164,7 @@
1450receivable
-
+
@@ -3476,7 +3476,7 @@
1630payable
-
+
@@ -3684,7 +3684,7 @@
1480receivable
-
+
@@ -3836,7 +3836,7 @@
1650payable
-
+
@@ -4836,7 +4836,7 @@
1470receivable
-
+
@@ -4844,7 +4844,7 @@
1610payable
-
+
@@ -5956,7 +5956,7 @@
1640payable
-
+
@@ -7084,7 +7084,7 @@
1601payable
-
+
@@ -7092,7 +7092,7 @@
1600payable
-
+
@@ -7108,7 +7108,7 @@
1605payable
-
+
@@ -7116,7 +7116,7 @@
1607payable
-
+
@@ -7124,7 +7124,7 @@
1606payable
-
+
@@ -7732,7 +7732,7 @@
1410receivable
-
+
@@ -8404,7 +8404,7 @@
1446receivable
-
+
@@ -8844,7 +8844,7 @@
1447receivable
-
+
diff --git a/addons/l10n_de/account_chart_skr04.xml b/addons/l10n_de/account_chart_skr04.xml
index 8ca8f35b98f..09af6c20e28 100644
--- a/addons/l10n_de/account_chart_skr04.xml
+++ b/addons/l10n_de/account_chart_skr04.xml
@@ -3313,7 +3313,7 @@
receivable
-
+
@@ -3367,7 +3367,7 @@
receivable
-
+
@@ -3376,7 +3376,7 @@
receivable
-
+
@@ -3385,7 +3385,7 @@
receivable
-
+
@@ -3394,7 +3394,7 @@
receivable
-
+
@@ -3403,7 +3403,7 @@
receivable
-
+
@@ -3412,7 +3412,7 @@
receivable
-
+
@@ -3546,7 +3546,7 @@
receivable
-
+
@@ -3670,7 +3670,7 @@
receivable
-
+
@@ -3794,7 +3794,7 @@
receivable
-
+
@@ -6214,7 +6214,7 @@
payable
-
+
@@ -6223,7 +6223,7 @@
payable
-
+
@@ -6232,7 +6232,7 @@
payable
-
+
@@ -6241,7 +6241,7 @@
payable
-
+
@@ -6268,7 +6268,7 @@
payable
-
+
@@ -6304,7 +6304,7 @@
payable
-
+
@@ -6445,7 +6445,7 @@
payable
-
+
@@ -6525,7 +6525,7 @@
payable
-
+
diff --git a/addons/l10n_es/account_chart.xml b/addons/l10n_es/account_chart.xml
index df0b218ae49..5147024deae 100644
--- a/addons/l10n_es/account_chart.xml
+++ b/addons/l10n_es/account_chart.xml
@@ -37,18 +37,18 @@
Terceros - A Cobrarterceros - recasset
- balance
+ unreconciledTerceros - A Pagarterceros - payliability
- balance
+ unreconciledImpuestostax
- balance
+ unreconciledFinancieras
diff --git a/addons/l10n_in/l10n_in_chart.xml b/addons/l10n_in/l10n_in_chart.xml
index f6851050604..0253756838c 100644
--- a/addons/l10n_in/l10n_in_chart.xml
+++ b/addons/l10n_in/l10n_in_chart.xml
@@ -37,11 +37,13 @@
Assetasset
+ unreconciledassetLiabilityliability
+ unreconciledliability
diff --git a/addons/l10n_it/data/account.account.template.csv b/addons/l10n_it/data/account.account.template.csv
index ff91ccba79a..388d037ad4e 100644
--- a/addons/l10n_it/data/account.account.template.csv
+++ b/addons/l10n_it/data/account.account.template.csv
@@ -66,8 +66,8 @@
2,2,"PASSIVO ",0,"account_type_view","view",TRUE
20,20,"PATRIMONIO NETTO ",2,"account_type_view","view",TRUE
2101,2101,"patrimonio netto ",20,"account_type_view","other",TRUE
-2102,2102,"utile d'esercizio ",20,"account_type_view","receivable",TRUE
-2103,2103,"perdita d'esercizio ",20,"account_type_view","payable",TRUE
+2102,2102,"utile d'esercizio ",20,"account_type_receivable","receivable",TRUE
+2103,2103,"perdita d'esercizio ",20,"account_type_payable","payable",TRUE
2104,2104,"prelevamenti extra gestione ",20,"account_type_view","other",TRUE
2105,2105,"titolare c/ritenute subite ",20,"account_type_view","other",TRUE
22,22,"FONDI PER RISCHI E ONERI ",2,"account_type_view","view",TRUE
diff --git a/addons/l10n_uk/__openerp__.py b/addons/l10n_uk/__openerp__.py
index 58a687e4be9..cf97b79d323 100644
--- a/addons/l10n_uk/__openerp__.py
+++ b/addons/l10n_uk/__openerp__.py
@@ -44,6 +44,7 @@
'demo_xml' : [
'demo/demo.xml'
],
- 'installable': 'True'
+ 'installable': 'True',
+ 'images': ['images/config_chart_l10n_uk.jpeg','images/l10n_uk_chart.jpeg'],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/lunch/lunch.py b/addons/lunch/lunch.py
index 771779310cb..3c658333e14 100644
--- a/addons/lunch/lunch.py
+++ b/addons/lunch/lunch.py
@@ -138,7 +138,7 @@ class lunch_order(osv.osv):
'cashmove': fields.many2one('lunch.cashmove', 'CashMove' , readonly=True),
'descript': fields.char('Description Order', readonly=True, size=250, \
states = {'draft':[('readonly', False)]}),
- 'state': fields.selection([('draft', 'Draft'), ('confirmed', 'Confirmed'), ], \
+ 'state': fields.selection([('draft', 'New'), ('confirmed', 'Confirmed'), ], \
'State', readonly=True, select=True),
'price': fields.function(_price_get, string="Price"),
'category': fields.many2one('lunch.category','Category'),
diff --git a/addons/lunch/lunch_installer_view.xml b/addons/lunch/lunch_installer_view.xml
index a318df9eee0..693ac9aa27f 100644
--- a/addons/lunch/lunch_installer_view.xml
+++ b/addons/lunch/lunch_installer_view.xml
@@ -1,18 +1,32 @@
-
-
- Define Your Lunch Products
- ir.actions.act_window
- lunch.product
- form
- tree,form
-
-
-
-
-
-
- 50
-
+
+
+ Define Your Lunch Products
+ ir.actions.act_window
+ lunch.product
+ form
+ tree,form
+
+
+
+
+
+
+ 50
+
+
+
+ Create CashBox
+ ir.actions.act_window
+ lunch.cashbox
+ form
+ form
+
+
+
+
+
+ 51
+
diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml
index 6721dd7c1e3..0b2cdf04e89 100644
--- a/addons/lunch/lunch_view.xml
+++ b/addons/lunch/lunch_view.xml
@@ -34,7 +34,7 @@
-
+
diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py
index e9716be9e8e..08473cad102 100644
--- a/addons/mail/__openerp__.py
+++ b/addons/mail/__openerp__.py
@@ -62,6 +62,7 @@ The main features are:
"res_partner_view.xml",
'security/ir.model.access.csv',
'mail_data.xml',
+ 'mail_installer.xml',
],
'installable': True,
'active': False,
diff --git a/addons/mail/mail_installer.xml b/addons/mail/mail_installer.xml
new file mode 100644
index 00000000000..3faf5fad630
--- /dev/null
+++ b/addons/mail/mail_installer.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ Configure Email Server
+ ir.actions.act_window
+ ir.mail_server
+ form
+ form
+
+
+
+
+
+
+
+
diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py
index 27c91fcc3fe..547281911c4 100644
--- a/addons/marketing_campaign/marketing_campaign.py
+++ b/addons/marketing_campaign/marketing_campaign.py
@@ -113,7 +113,7 @@ this campaign to be run"),
Test in Realtime - It creates and processes all the activities directly but does not send emails or produce reports.
With Manual Confirmation - the campaigns runs normally, but the user has to validate all workitem manually.
Normal - the campaign runs normally and automatically sends all emails and reports (be very careful with this mode, you're live!)"""),
- 'state': fields.selection([('draft', 'Draft'),
+ 'state': fields.selection([('draft', 'New'),
('running', 'Running'),
('done', 'Done'),
('cancelled', 'Cancelled'),],
@@ -267,7 +267,7 @@ class marketing_campaign_segment(osv.osv):
'"No duplicates" prevents selecting records which have already entered the campaign previously.'\
'If the campaign has a "unique field" set, "no duplicates" will also prevent selecting records which have '\
'the same value for the unique field as other records that already entered the campaign.'),
- 'state': fields.selection([('draft', 'Draft'),
+ 'state': fields.selection([('draft', 'New'),
('running', 'Running'),
('done', 'Done'),
('cancelled', 'Cancelled')],
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index cd872e64635..a60b3943a41 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -36,7 +36,7 @@
-
+
@@ -161,7 +161,7 @@
-
+
@@ -382,7 +382,7 @@
-
+
diff --git a/addons/membership/report/report_membership_view.xml b/addons/membership/report/report_membership_view.xml
index 0e6ddc630f6..61a0a1d52ce 100644
--- a/addons/membership/report/report_membership_view.xml
+++ b/addons/membership/report/report_membership_view.xml
@@ -36,14 +36,19 @@
-
-
+
+
+
-
+
@@ -91,7 +96,7 @@
report.membershipform
- {"search_default_member":1, 'search_default_Revenue':1, 'search_default_salesman':1, }
+ {"search_default_member":1, 'search_default_Revenue':1, 'search_default_this_month':1, 'search_default_salesman':1, }
diff --git a/addons/mrp/i18n/da.po b/addons/mrp/i18n/da.po
new file mode 100644
index 00000000000..b1858f9621c
--- /dev/null
+++ b/addons/mrp/i18n/da.po
@@ -0,0 +1,2394 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-09-22 19:10+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-23 04:38+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: mrp
+#: field:mrp.production,move_created_ids:0
+#: field:mrp.production,move_created_ids2:0
+msgid "Moves Created"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.mrp_production_action
+msgid ""
+"Manufacturing Orders are usually proposed automatically by OpenERP based on "
+"the bill of materials and the procurement rules, but you can also create "
+"manufacturing orders manually. OpenERP will handle the consumption of the "
+"raw materials (stock decrease) and the production of the finished products "
+"(stock increase) when the order is processed."
+msgstr ""
+
+#. module: mrp
+#: help:mrp.production,location_src_id:0
+msgid "Location where the system will look for components."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,workcenter_lines:0
+msgid "Work Centers Utilisation"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.routing.workcenter:0
+msgid "Routing Work Centers"
+msgstr ""
+
+#. module: mrp
+#: model:ir.module.module,shortdesc:mrp.module_meta_information
+msgid "Manufacturing Resource Planning"
+msgstr ""
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "No. Of Cycles"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.routing.workcenter,cycle_nbr:0
+msgid "Number of Cycles"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_minimumstockprocure0
+msgid ""
+"The 'Minimum stock rule' allows the system to create procurement orders "
+"automatically as soon as the minimum stock is reached."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,picking_id:0
+#: field:mrp.production.order,picking_id:0
+msgid "Picking list"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:121
+#, python-format
+msgid "Hourly Cost"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:130
+#, python-format
+msgid "Cost Price per Uom"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Scrap Products"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+#: field:mrp.production.order,day:0
+msgid "Day"
+msgstr "Dag"
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.mrp_routing_action
+#: model:ir.ui.menu,name:mrp.menu_mrp_routing_action
+msgid "Routings"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.workcenter,product_id:0
+msgid "Work Center Product"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.bom:0
+msgid "Search Bill Of Material"
+msgstr "Søg stykliste"
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_stockproduct1
+msgid "For stockable products and consumables"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_stockproduction0
+msgid "To Produce"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.routing.workcenter,cycle_nbr:0
+msgid ""
+"Number of iterations this work center has to do in the specified operation "
+"of the routing."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.bom:0
+#: field:mrp.bom,code:0
+#: view:mrp.production:0
+#: field:mrp.production,name:0
+msgid "Reference"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Finished Products"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_servicerfq0
+#: model:process.transition,name:mrp.process_transition_stockrfq0
+msgid "To Buy"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+msgid "Raw Material Location"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.installer,mrp_operations:0
+msgid ""
+"Enhances production orders with readiness states as well as the start date "
+"and end date of execution of the order."
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_purchaseprocure0
+msgid "The system launches automatically a RFQ to the preferred supplier."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Products to Finish"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.bom,method:0
+msgid "Set / Pack"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.installer,mrp_subproduct:0
+msgid "MRP Subproducts"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+#: field:mrp.production,state:0
+#: view:mrp.production.order:0
+#: field:mrp.production.order,state:0
+msgid "State"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.workcenter,costs_hour:0
+msgid "Cost per hour"
+msgstr "Kost pr. time"
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_stockproduction0
+msgid ""
+"In case the Supply method of the product is Produce, the system creates a "
+"production order."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "UOM"
+msgstr ""
+
+#. module: mrp
+#: field:change.production.qty,product_qty:0
+#: field:mrp.bom,product_qty:0
+#: field:mrp.production,product_qty:0
+#: view:mrp.production.order:0
+#: field:mrp.production.order,product_qty:0
+#: field:mrp.production.product.line,product_qty:0
+msgid "Product Qty"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.workcenter,product_id:0
+msgid ""
+"Fill this product to track easily your production costs in the analytic "
+"accounting."
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_purchaseprocure0
+msgid "For purchased material"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom.revision,indice:0
+msgid "Revision"
+msgstr ""
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.next_id_77
+msgid "Reporting"
+msgstr "Rapportering"
+
+#. module: mrp
+#: field:mrp.workcenter,costs_cycle_account_id:0
+msgid "Cycle Account"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:121
+#, python-format
+msgid "Work Cost"
+msgstr ""
+
+#. module: mrp
+#: report:bom.structure:0
+msgid "["
+msgstr "["
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_procureserviceproduct0
+msgid "Procurement of services"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.workcenter:0
+msgid "Capacity Information"
+msgstr ""
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "Destination Location"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.installer:0
+msgid "title"
+msgstr ""
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.menu_mrp_bom
+msgid "Master Data"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_stockmts0
+msgid ""
+"The system waits for the products to be available in the stock. These "
+"products are typically procured manually or through a minimum stock rule."
+msgstr ""
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "Partner Ref"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.workcenter.load,measure_unit:0
+msgid "Amount in hours"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,product_lines:0
+msgid "Scheduled goods"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.bom,type:0
+msgid "Sets / Phantom"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,position:0
+msgid "Reference to a position in an external plan."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "August"
+msgstr "August"
+
+#. module: mrp
+#: constraint:stock.move:0
+msgid "You try to assign a lot which is not from the same product"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_production_order
+msgid "Production Order Report"
+msgstr "Produktionsordre rapport"
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "June"
+msgstr "Juni"
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_product_produce
+msgid "Product Produce"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "October"
+msgstr "Oktober"
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:177
+#, python-format
+msgid "Components Cost of "
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_procurestockableproduct0
+msgid "Procurement of stockable Product"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.bom:0
+msgid "Default UOM"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:130
+#: report:bom.structure:0
+#: field:mrp.product_price,number:0
+#: report:mrp.production.order:0
+#, python-format
+msgid "Quantity"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production.workcenter.line,hour:0
+msgid "Nbr of hours"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Confirm Production"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_stockproduct0
+msgid ""
+"The system creates an order (production or purchased) depending on the sold "
+"quantity and the products parameters."
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_servicemts0
+msgid ""
+"This is used in case of a service without any impact in the system, a "
+"training session for instance."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.installer,mrp_repair:0
+msgid "Repairs"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.installer,stock_location:0
+msgid "Advanced Routes"
+msgstr ""
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.menu_view_resource_calendar_search_mrp
+msgid "Working Time"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.action_report_in_out_picking_tree
+msgid "Weekly Stock Value Variation"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.installer,mrp_repair:0
+msgid ""
+"Enables warranty and repair management (and their impact on stocks and "
+"invoicing)."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,date_planned_date:0
+#: report:mrp.production.order:0
+#: field:mrp.production.order,date_planned:0
+msgid "Scheduled Date"
+msgstr ""
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "Bill Of Material"
+msgstr "Stykliste"
+
+#. module: mrp
+#: help:mrp.routing,location_id:0
+msgid ""
+"Keep empty if you produce at the location where the finished products are "
+"needed.Set a location if you produce at a fixed location. This can be a "
+"partner location if you subcontract the manufacturing operations."
+msgstr ""
+
+#. module: mrp
+#: view:board.board:0
+msgid "Stock Value Variation"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.action2
+msgid "Bill of Materials Structure"
+msgstr "Stykliste struktur"
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_serviceproduct0
+msgid "Product type is service"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.mrp_property_group_action
+msgid ""
+"Define specific property groups that can be assigned to the properties of "
+"your bill of materials."
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_bom0
+msgid "Manufacturing decomposition"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_serviceproduct1
+msgid "For Services."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom.revision,date:0
+msgid "Modification Date"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.workcenter,costs_cycle_account_id:0
+#: help:mrp.workcenter,costs_hour_account_id:0
+msgid ""
+"Complete this only if you want automatic analytic accounting entries on "
+"production orders."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production.workcenter.line,cycle:0
+msgid "Nbr of cycles"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_orderrfq0
+#: model:process.node,note:mrp.process_node_rfq0
+msgid "Request for Quotation."
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_billofmaterialrouting0
+msgid ""
+"The Bill of Material is linked to a routing, i.e. the succession of work "
+"centers."
+msgstr ""
+
+#. module: mrp
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.routing:0
+#: field:mrp.routing,location_id:0
+msgid "Production Location"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Change Qty"
+msgstr "Ændre antal"
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Force Reservation"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom.revision,author_id:0
+msgid "Author"
+msgstr ""
+
+#. module: mrp
+#: field:report.mrp.inout,value:0
+msgid "Stock value"
+msgstr "Lager værdi"
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.action_product_bom_structure
+msgid "Product BoM Structure"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Search Production"
+msgstr "Søg produktion"
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:130
+#, python-format
+msgid "Supplier Price per Uom"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "March"
+msgstr "Marts"
+
+#. module: mrp
+#: field:mrp.bom,child_complete_ids:0
+msgid "BoM Hierarchy"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.act_mrp_product_produce
+#: view:mrp.product.produce:0
+#: view:mrp.production:0
+msgid "Produce"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.workcenter,costs_cycle:0
+msgid "Specify Cost of Work Center per cycle."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,state:0
+#: view:mrp.production.order:0
+#: selection:mrp.production.order,state:0
+msgid "Picking Exception"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,bom_lines:0
+msgid "BoM Lines"
+msgstr "Stykliste linier"
+
+#. module: mrp
+#: field:mrp.workcenter,time_start:0
+msgid "Time before prod."
+msgstr ""
+
+#. module: mrp
+#: help:mrp.routing,active:0
+msgid ""
+"If the active field is set to False, it will allow you to hide the routing "
+"without removing it."
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_billofmaterialrouting0
+msgid "Material Routing"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+#: field:mrp.production,move_lines2:0
+#: report:mrp.production.order:0
+#: field:mrp.production.order,consumed_products:0
+msgid "Consumed Products"
+msgstr ""
+
+#. module: mrp
+#: constraint:mrp.bom:0
+msgid "Error ! You can not create recursive BoM."
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.action_mrp_workcenter_load_wizard
+#: model:ir.model,name:mrp.model_mrp_workcenter_load
+#: model:ir.model,name:mrp.model_report_workcenter_load
+msgid "Work Center Load"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/procurement.py:45
+#, python-format
+msgid "No BoM defined for this product !"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.mrp_bom_form_action2
+#: model:ir.ui.menu,name:mrp.menu_mrp_bom_form_action2
+msgid "Bill of Material Components"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production.order,nbr:0
+msgid "# of Lines"
+msgstr ""
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.menu_mrp_planning
+msgid "Planning"
+msgstr "Planlægning"
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Ready"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.production,routing_id:0
+msgid ""
+"The list of operations (list of work centers) to produce the finished "
+"product. The routing is mainly used to compute work center costs during "
+"operations and to plan future loads on work centers based on production "
+"plannification."
+msgstr ""
+
+#. module: mrp
+#: help:mrp.workcenter,time_cycle:0
+msgid "Time in hours for doing one cycle."
+msgstr ""
+
+#. module: mrp
+#: report:bom.structure:0
+msgid "BOM Ref"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+#: selection:mrp.production,state:0
+#: view:mrp.production.order:0
+#: selection:mrp.production.order,state:0
+msgid "In Production"
+msgstr ""
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.menu_mrp_property
+msgid "Master Bill of Materials"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,product_uos:0
+msgid ""
+"Product UOS (Unit of Sale) is the unit of measurement for the invoicing and "
+"promotion of stock."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.product_price:0
+#: view:mrp.workcenter.load:0
+msgid "Print"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.bom:0
+#: view:mrp.workcenter:0
+msgid "Type"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:150
+#: code:addons/mrp/report/price.py:201
+#, python-format
+msgid "Total Cost of "
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_minimumstockrule0
+msgid "Linked to the 'Minimum stock rule' supplying method."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.workcenter.load,time_unit:0
+msgid "Per month"
+msgstr "Pr. måned"
+
+#. module: mrp
+#: code:addons/mrp/mrp.py:595
+#: code:addons/mrp/wizard/change_production_qty.py:77
+#: code:addons/mrp/wizard/change_production_qty.py:82
+#, python-format
+msgid "Couldn't find bill of material for product"
+msgstr ""
+
+#. module: mrp
+#: report:bom.structure:0
+msgid "Product Name"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/mrp.py:495
+#, python-format
+msgid "Invalid action !"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,product_efficiency:0
+msgid "A factor of 0.9 means a loss of 10% within the production process."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.installer:0
+msgid ""
+"Add more functionalities to the core Manufacturing Application with the "
+"following addons."
+msgstr ""
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "Printing date"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,name:mrp.process_node_orderrfq0
+#: model:process.node,name:mrp.process_node_rfq0
+msgid "RFQ"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_producttostockrules0
+msgid "Procurement rule"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.workcenter,costs_hour:0
+msgid "Specify Cost of Work center per hour."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Partial"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "September"
+msgstr "September"
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "WorkCenter"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_procureserviceproduct0
+msgid ""
+"Depending on the chosen method to 'supply' the service, the procurement "
+"order creates a RFQ for a subcontracting purchase order or waits until the "
+"service is done (= the delivery of the products)."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,priority:0
+#: selection:mrp.production.order,priority:0
+msgid "Urgent"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_routing_workcenter
+msgid "Work Center Usage"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_productionprocureproducts0
+msgid "Procurement of raw material"
+msgstr "Indkøb af råmaterialer"
+
+#. module: mrp
+#: help:mrp.routing.workcenter,hour_nbr:0
+msgid ""
+"Time in hours for this work center to achieve the operation of the specified "
+"routing."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+#: field:mrp.production,cycle_total:0
+msgid "Total Cycles"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,state:0
+#: view:mrp.production.order:0
+#: selection:mrp.production.order,state:0
+msgid "Ready to Produce"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom.revision,name:0
+msgid "Modification name"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.bom:0
+#: view:mrp.production:0
+#: field:mrp.production.order,date:0
+msgid "Date"
+msgstr "Dato"
+
+#. module: mrp
+#: field:mrp.bom,type:0
+msgid "BoM Type"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+msgid "Extended Filters..."
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/procurement.py:47
+#, python-format
+msgid ""
+"Procurement '%s' has an exception: 'No BoM defined for this product !'"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+#: view:mrp.property:0
+msgid "Search"
+msgstr "Søg"
+
+#. module: mrp
+#: field:report.workcenter.load,cycle:0
+msgid "Nbr of cycle"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_res_company
+msgid "Companies"
+msgstr "Virksomheder"
+
+#. module: mrp
+#: model:process.node,name:mrp.process_node_minimumstockrule0
+#: model:process.node,name:mrp.process_node_productminimumstockrule0
+msgid "Minimum Stock"
+msgstr "Minimum lager"
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.menus_dash_mrp
+msgid "Dashboard"
+msgstr "Oversigt"
+
+#. module: mrp
+#: view:board.board:0
+msgid "Work Center Future Load"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,name:mrp.process_node_stockproduct0
+#: model:process.node,name:mrp.process_node_stockproduct1
+#: model:process.process,name:mrp.process_process_stockableproductprocess0
+msgid "Stockable Product"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:121
+#, python-format
+msgid "Work Center name"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.routing,code:0
+msgid "Code"
+msgstr ""
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "No. Of Hours"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.installer,mrp_jit:0
+msgid "Just In Time Scheduling"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.property:0
+#: view:mrp.property.group:0
+msgid "Property Group"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Qty"
+msgstr "Antal"
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_production0
+msgid "Manufacturing Plan."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.routing:0
+#: view:mrp.workcenter:0
+msgid "Inactive"
+msgstr "Inaktiv"
+
+#. module: mrp
+#: help:mrp.installer,mrp_subproduct:0
+msgid ""
+"Enables multiple product output from a single production order: without "
+"this, a production order can have only one output product."
+msgstr ""
+
+#. module: mrp
+#: view:change.production.qty:0
+#: view:mrp.product.produce:0
+#: view:mrp.product_price:0
+#: view:mrp.production:0
+#: view:mrp.workcenter.load:0
+msgid "Cancel"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Split in production lots"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.workcenter,capacity_per_cycle:0
+msgid ""
+"Number of operations this Work Center can do in parallel. If this Work "
+"Center represents a team of 5 workers, the capacity per cycle is 5."
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_servicerfq0
+msgid ""
+"If the service has a 'Buy' supply method, this creates a RFQ, a "
+"subcontracting demand for instance."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,move_prod_id:0
+msgid "Move product"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Late"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,name:mrp.process_node_servicemts0
+msgid "Make to stock"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.routing.workcenter,sequence:0
+msgid ""
+"Gives the sequence order when displaying a list of routing work centers."
+msgstr ""
+
+#. module: mrp
+#: report:bom.structure:0
+msgid "BOM Name"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Start Production"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.open_board_manufacturing
+#: model:ir.ui.menu,name:mrp.menu_board_manufacturing
+msgid "Production Dashboard"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Source Loc."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,position:0
+msgid "Internal Reference"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.installer,stock_location:0
+msgid ""
+"Manages product routes and paths within and between locations (e.g. "
+"warehouses)."
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_billofmaterial0
+msgid "Product's structure"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,name:0
+#: report:mrp.production.order:0
+#: field:mrp.production.product.line,name:0
+#: field:mrp.routing,name:0
+#: field:mrp.routing.workcenter,name:0
+msgid "Name"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.installer:0
+msgid "MRP Application Configuration"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.installer,mrp_jit:0
+msgid ""
+"Enables Just In Time computation of procurement orders.\n"
+"\n"
+"While it's more resource intensive than the default setup, the JIT computer "
+"avoids having to wait for the procurement scheduler to run or having to run "
+"the procurement scheduler manually."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.product.produce,mode:0
+msgid "Mode"
+msgstr ""
+
+#. module: mrp
+#: report:bom.structure:0
+msgid "]"
+msgstr "]"
+
+#. module: mrp
+#: field:mrp.workcenter.load,measure_unit:0
+msgid "Amount measuring unit"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.mrp_production_action_planning
+msgid ""
+"Manufacturing Orders describe the operations that need to be carried out and "
+"the raw materials usage for each production stage. You use specifications "
+"(bills of materials or BoM) to work out the raw material requirements and "
+"the manufacturing orders needed for the finished products. Once the bills of "
+"materials have been defined, OpenERP is capable of automatically deciding on "
+"the manufacturing route depending on the needs of the company."
+msgstr ""
+
+#. module: mrp
+#: constraint:mrp.production:0
+msgid "Order quantity cannot be negative or zero !"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.mrp_production_action3
+msgid "Manufacturing Orders in Progress"
+msgstr "Igangværende produktionsordre"
+
+#. module: mrp
+#: model:ir.module.module,description:mrp.module_meta_information
+msgid ""
+"\n"
+" This is the base module to manage the manufacturing process in OpenERP.\n"
+"\n"
+" Features:\n"
+" * Make to Stock / Make to Order (by line)\n"
+" * Multi-level BoMs, no limit\n"
+" * Multi-level routing, no limit\n"
+" * Routing and work center integrated with analytic accounting\n"
+" * Scheduler computation periodically / Just In Time module\n"
+" * Multi-pos, multi-warehouse\n"
+" * Different reordering policies\n"
+" * Cost method by product: standard price, average price\n"
+" * Easy analysis of troubles or needs\n"
+" * Very flexible\n"
+" * Allows to browse Bill of Materials in complete structure\n"
+" that include child and phantom BoMs\n"
+" It supports complete integration and planification of stockable goods,\n"
+" consumable of services. Services are completely integrated with the "
+"rest\n"
+" of the software. For instance, you can set up a sub-contracting service\n"
+" in a BoM to automatically purchase on order the assembly of your "
+"production.\n"
+"\n"
+" Reports provided by this module:\n"
+" * Bill of Material structure and components\n"
+" * Load forecast on Work Centers\n"
+" * Print a production order\n"
+" * Stock forecasts\n"
+" Dashboard provided by this module::\n"
+" * List of next production orders\n"
+" * List of deliveries (out picking)\n"
+" * Graph of work center load\n"
+" * List of procurement in exception\n"
+" "
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.mrp_production_action4
+msgid "Manufacturing Orders Waiting Products"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.bom:0
+#: view:mrp.production:0
+#: view:mrp.production.order:0
+#: view:mrp.property:0
+#: view:mrp.routing:0
+#: view:mrp.workcenter:0
+msgid "Group By..."
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:121
+#, python-format
+msgid "Cycles Cost"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.workcenter.load,measure_unit:0
+msgid "Amount in cycles"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,location_dest_id:0
+#: view:mrp.production.order:0
+#: field:mrp.production.order,location_dest_id:0
+msgid "Finished Products Location"
+msgstr ""
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.menu_pm_resources_config
+msgid "Resources"
+msgstr "Ressourcer"
+
+#. module: mrp
+#: field:mrp.workcenter,costs_journal_id:0
+msgid "Analytic Journal"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.mrp_workcenter_action
+#: model:ir.ui.menu,name:mrp.menu_view_resource_search_mrp
+#: field:mrp.routing,workcenter_lines:0
+msgid "Work Centers"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.workcenter.load,time_unit:0
+msgid "Per week"
+msgstr "Pr. uge"
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.mrp_routing_action
+msgid ""
+"Routings allow you to create and manage the manufacturing operations that "
+"should be followed within your work centers in order to produce a product. "
+"They are attached to bills of materials that will define the required raw "
+"materials."
+msgstr ""
+
+#. module: mrp
+#: field:report.workcenter.load,hour:0
+msgid "Nbr of hour"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.routing:0
+msgid "Work Center Operations"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.routing:0
+msgid "Notes"
+msgstr "Noter"
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_bom
+#: view:mrp.bom:0
+#: field:mrp.production,bom_id:0
+#: field:mrp.production.order,bom_id:0
+#: model:process.node,name:mrp.process_node_billofmaterial0
+msgid "Bill of Material"
+msgstr "Stykliste"
+
+#. module: mrp
+#: view:mrp.workcenter.load:0
+msgid "Select time unit"
+msgstr ""
+
+#. module: mrp
+#: view:report.workcenter.load:0
+msgid "Work Center load"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.production,location_dest_id:0
+msgid "Location where the system will stock the finished products."
+msgstr ""
+
+#. module: mrp
+#: help:mrp.production,picking_id:0
+msgid ""
+"This is the internal picking list that brings the finished product to the "
+"production plan"
+msgstr ""
+
+#. module: mrp
+#: field:stock.change.standard.price,change_parent_price:0
+msgid "Change Parent Price"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_stock_move
+msgid "Stock Move"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_producttostockrules0
+msgid ""
+"The Minimum Stock Rule is an automatic procurement rule based on a mini and "
+"maxi quantity. It's available in the Inventory management menu and "
+"configured by product."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.workcenter.load,time_unit:0
+msgid "Day by day"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.bom:0
+msgid "Revisions"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.installer:0
+msgid "Configure Your Manufacturing Resource Planning Application"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,priority:0
+#: field:mrp.production.order,priority:0
+msgid "Priority"
+msgstr "Prioritet"
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_stock_picking
+msgid "Picking List"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+msgid "Month -1"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/mrp.py:924
+#, python-format
+msgid "Manufacturing order '%s' is scheduled for the %s."
+msgstr ""
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "Production Order N° :"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/mrp.py:640
+#, python-format
+msgid "Manufacturing order '%s' is ready to produce."
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_production_product_line
+msgid "Production Scheduled Product"
+msgstr ""
+
+#. module: mrp
+#: help:res.company,manufacturing_lead:0
+msgid "Security days for each manufacturing operation."
+msgstr ""
+
+#. module: mrp
+#: model:process.node,name:mrp.process_node_mts0
+#: model:process.transition,name:mrp.process_transition_servicemts0
+#: model:process.transition,name:mrp.process_transition_stockmts0
+msgid "Make to Stock"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "July"
+msgstr "Juli"
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.mrp_bom_form_action
+msgid ""
+"Master Bills of Materials allow you to create and manage the list of "
+"necessary raw materials used to make a finished product. OpenERP will use "
+"these BoMs to automatically propose manufacturing orders according to "
+"product needs. You can either create a bill of materials to define specific "
+"production steps or define a single multi-level bill of materials."
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_stockrfq0
+msgid ""
+"In case the Supply method of the product is Buy, the system creates a "
+"purchase order."
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_procurement_order
+msgid "Procurement"
+msgstr "Indkøb"
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.action_view_mrp_product_price_wizard
+#: view:mrp.product_price:0
+msgid "Product Cost Structure"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:130
+#, python-format
+msgid "Components suppliers"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_installer
+msgid "mrp.installer"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Production Work Centers"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+#: field:mrp.production.order,month:0
+msgid "Month"
+msgstr "Måned"
+
+#. module: mrp
+#: code:addons/mrp/wizard/change_production_qty.py:62
+#, python-format
+msgid "Active Id is not found"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.workcenter:0
+msgid "Search for mrp workcenter"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.bom:0
+msgid "BoM Structure"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,date_start:0
+#: field:mrp.production.order,date_start:0
+msgid "Start Date"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.workcenter,costs_hour_account_id:0
+msgid "Hour Account"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Destination Loc."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production.order,product_id2:0
+msgid "Product Consumed"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Pending"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,active:0
+#: field:mrp.routing,active:0
+msgid "Active"
+msgstr "Aktiv"
+
+#. module: mrp
+#: model:process.node,name:mrp.process_node_procureproducts0
+msgid "Procure Products"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.action_report_workcenter_load_tree
+#: view:report.workcenter.load:0
+msgid "Work Center Loads"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.mrp_property_action
+#: model:ir.ui.menu,name:mrp.menu_mrp_property_action
+#: view:mrp.bom:0
+#: field:mrp.bom,property_ids:0
+#: view:mrp.property:0
+#: view:procurement.order:0
+#: field:procurement.order,property_ids:0
+msgid "Properties"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.production,origin:0
+msgid ""
+"Reference of the document that generated this production order request."
+msgstr ""
+
+#. module: mrp
+#: sql_constraint:mrp.bom:0
+msgid ""
+"All product quantities must be greater than 0.\n"
+"You should install the mrp_subproduct module if you want to manage extra "
+"products on BoMs !"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Extra Information"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_change_production_qty
+msgid "Change Quantity of Products"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_productionorder0
+msgid "Drives the procurement orders for raw material."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+msgid "Current"
+msgstr "Nuværende"
+
+#. module: mrp
+#: field:mrp.workcenter,costs_general_account_id:0
+msgid "General Account"
+msgstr ""
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "SO Number"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,state:0
+#: view:mrp.production.order:0
+#: selection:mrp.production.order,state:0
+msgid "Done"
+msgstr "Udført!"
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_stock_change_standard_price
+msgid "Change Standard Price"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,origin:0
+#: report:mrp.production.order:0
+#: field:mrp.production.order,origin:0
+msgid "Source Document"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,priority:0
+#: selection:mrp.production.order,priority:0
+msgid "Not urgent"
+msgstr ""
+
+#. module: mrp
+#: help:stock.change.standard.price,change_parent_price:0
+msgid ""
+"This will change the price of parent products also according to the BoM "
+"structure specified for the product."
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.mrp_production_action2
+msgid "Manufacturing Orders To Start"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/mrp.py:495
+#, python-format
+msgid "Cannot delete Production Order(s) which are in %s State!"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_workcenter
+#: field:mrp.production.workcenter.line,workcenter_id:0
+#: field:mrp.routing.workcenter,workcenter_id:0
+#: view:mrp.workcenter:0
+#: field:report.workcenter.load,workcenter_id:0
+msgid "Work Center"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.workcenter,capacity_per_cycle:0
+msgid "Capacity per Cycle"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_product_product
+#: view:mrp.bom:0
+#: field:mrp.bom,product_id:0
+#: view:mrp.production:0
+#: field:mrp.production,product_id:0
+#: report:mrp.production.order:0
+#: view:mrp.production.order:0
+#: field:mrp.production.order,product_id:0
+#: field:mrp.production.product.line,product_id:0
+msgid "Product"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+#: field:mrp.production,hour_total:0
+msgid "Total Hours"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,location_src_id:0
+#: field:mrp.production.order,location_src_id:0
+msgid "Raw Materials Location"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.product_price:0
+msgid "Print Cost Structure of Product."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,product_uos:0
+#: field:mrp.production.product.line,product_uos:0
+msgid "Product UOS"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.mrp_workcenter_action
+msgid ""
+"Work Centers allow you to create and manage manufacturing units consisting "
+"of one or more persons and/or machines that can be considered as a unit for "
+"capacity and planning forecasting."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Consume Products"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,product_uom:0
+#: field:mrp.production,product_uom:0
+#: field:mrp.production.order,product_uom:0
+#: field:mrp.production.product.line,product_uom:0
+msgid "Product UOM"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,name:mrp.process_node_stock0
+#: model:process.transition,name:mrp.process_transition_servicemto0
+#: model:process.transition,name:mrp.process_transition_stockproduct0
+msgid "Make to Order"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.action_report_mrp_production_order
+#: model:ir.ui.menu,name:mrp.menu_report_mrp_production_orders_tree
+msgid "Production Analysis"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/mrp.py:349
+#, python-format
+msgid "Copy"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.lot.line:0
+msgid "Production Products"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,date_finished:0
+#: field:mrp.production.order,date_finished:0
+msgid "End Date"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.workcenter,resource_id:0
+msgid "Resource"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,date_start:0
+#: help:mrp.bom,date_stop:0
+msgid "Validity of this BoM or component. Keep empty if it's always valid."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,product_uos:0
+msgid "Product UoS"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+msgid "#Line Orders"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,priority:0
+#: selection:mrp.production.order,priority:0
+msgid "Very Urgent"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,routing_id:0
+msgid ""
+"The list of operations (list of work centers) to produce the finished "
+"product. The routing is mainly used to compute work center costs during "
+"operations and to plan future loads on work centers based on production "
+"planning."
+msgstr ""
+
+#. module: mrp
+#: view:change.production.qty:0
+msgid "Approve"
+msgstr "Godkend"
+
+#. module: mrp
+#: view:mrp.property.group:0
+msgid "Properties categories"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.production.workcenter.line,sequence:0
+msgid "Gives the sequence order when displaying a list of work orders."
+msgstr ""
+
+#. module: mrp
+#: report:mrp.production.order:0
+msgid "Source Location"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+#: view:mrp.production.product.line:0
+msgid "Scheduled Products"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.lot.line:0
+msgid "Production Products Consommation"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.mrp_production_action
+#: model:ir.actions.act_window,name:mrp.mrp_production_action_planning
+#: model:ir.ui.menu,name:mrp.menu_mrp_production_action
+#: model:ir.ui.menu,name:mrp.menu_mrp_production_order_action
+#: view:mrp.production:0
+msgid "Manufacturing Orders"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.product.produce,mode:0
+msgid ""
+"'Consume only' mode will only consume the products with the quantity "
+"selected.\n"
+"'Consume & Produce' mode will consume as well as produce the products with "
+"the quantity selected and it will finish the production order when total "
+"ordered quantities are produced."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+#: report:mrp.production.order:0
+msgid "Work Orders"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.workcenter,costs_cycle:0
+msgid "Cost per cycle"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,name:mrp.process_node_serviceproduct0
+#: model:process.node,name:mrp.process_node_serviceproduct1
+msgid "Service"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,state:0
+#: selection:mrp.production.order,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+msgid "BOM"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,product_uom:0
+msgid ""
+"UoM (Unit of Measure) is the unit of measurement for the inventory control"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_bom0
+msgid ""
+"The Bill of Material is the product's decomposition. The components (that "
+"are products themselves) can also have their own Bill of Material (multi-"
+"level)."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,company_id:0
+#: field:mrp.production,company_id:0
+#: view:mrp.production.order:0
+#: field:mrp.production.order,company_id:0
+#: field:mrp.routing,company_id:0
+#: field:mrp.routing.workcenter,company_id:0
+#: view:mrp.workcenter:0
+msgid "Company"
+msgstr "Virksomhed"
+
+#. module: mrp
+#: field:mrp.workcenter,time_cycle:0
+msgid "Time for 1 cycle (hour)"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.report.xml,name:mrp.report_mrp_production_report
+#: field:mrp.production.product.line,production_id:0
+#: field:mrp.production.workcenter.line,production_id:0
+#: model:process.node,name:mrp.process_node_production0
+#: model:process.node,name:mrp.process_node_productionorder0
+msgid "Production Order"
+msgstr "Produktionsordre"
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_productminimumstockrule0
+msgid "Automatic procurement rule"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Compute Data"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,product_uos_qty:0
+msgid "Product UoS Qty"
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:130
+#: view:mrp.bom:0
+#, python-format
+msgid "Components"
+msgstr ""
+
+#. module: mrp
+#: report:bom.structure:0
+#: model:ir.actions.report.xml,name:mrp.report_bom_structure
+msgid "BOM Structure"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,date_stop:0
+msgid "Valid Until"
+msgstr "Gyldig indtil"
+
+#. module: mrp
+#: field:mrp.bom,date_start:0
+msgid "Valid From"
+msgstr "Gyldig fra"
+
+#. module: mrp
+#: selection:mrp.bom,type:0
+msgid "Normal BoM"
+msgstr ""
+
+#. module: mrp
+#: field:res.company,manufacturing_lead:0
+msgid "Manufacturing Lead Time"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,product_uos_qty:0
+#: field:mrp.production.product.line,product_uos_qty:0
+msgid "Product UOS Qty"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.action_report_in_out_picking_tree
+msgid ""
+"Weekly Stock Value Variation enables you to track the stock value evolution "
+"linked to manufacturing activities, receptions of products and delivery "
+"orders."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.product.produce:0
+msgid "Confirm"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,product_efficiency:0
+msgid "Manufacturing Efficiency"
+msgstr ""
+
+#. module: mrp
+#: constraint:res.company:0
+msgid "Error! You can not create recursive companies."
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,active:0
+msgid ""
+"If the active field is set to False, it will allow you to hide the bills of "
+"material without removing it."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,product_rounding:0
+msgid "Product Rounding"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_production_workcenter_line
+#: field:mrp.production.workcenter.line,name:0
+msgid "Work Order"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.action_report_mrp_production_order
+msgid ""
+"This reporting allows you to analyse your manufacturing activities and "
+"performance."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.product.produce,mode:0
+msgid "Consume Only"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Recreate Picking"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,type:0
+msgid ""
+"If a sub-product is used in several products, it can be useful to create its "
+"own BoM. Though if you don't want separated production orders for this sub-"
+"product, select Set/Phantom as BoM type. If a Phantom BoM is used for a root "
+"product, it will be sold and shipped as a set of components, instead of "
+"being produced."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,method:0
+msgid "Method"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.production,state:0
+msgid ""
+"When the production order is created the state is set to 'Draft'.\n"
+" If the order is confirmed the state is set to 'Waiting Goods'.\n"
+" If any exceptions are there, the state is set to 'Picking Exception'. "
+" \n"
+"If the stock is available then the state is set to 'Ready to Produce'.\n"
+" When the production gets started then the state is set to 'In Production'.\n"
+" When the production is over, the state is set to 'Done'."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.bom,method:0
+msgid "On Order"
+msgstr ""
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.menu_mrp_configuration
+#: view:res.company:0
+msgid "Configuration"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.workcenter,time_stop:0
+msgid "Time after prod."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.workcenter.load,time_unit:0
+msgid "Type of period"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Total Qty"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.routing.workcenter,hour_nbr:0
+msgid "Number of Hours"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.workcenter:0
+msgid "Costing Information"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,name:mrp.process_node_purchaseprocure0
+msgid "Procurement Orders"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,product_rounding:0
+msgid "Rounding applied on the product quantity."
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_stock0
+msgid "Assignment from Production or Purchase Order."
+msgstr ""
+
+#. module: mrp
+#: field:mrp.routing.workcenter,routing_id:0
+msgid "Parent Routing"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.installer:0
+msgid "Configure"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.workcenter,time_start:0
+msgid "Time in hours for the setup."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "December"
+msgstr "December"
+
+#. module: mrp
+#: field:mrp.installer,config_logo:0
+msgid "Image"
+msgstr "Billede"
+
+#. module: mrp
+#: field:mrp.bom.revision,bom_id:0
+#: field:procurement.order,bom_id:0
+msgid "BoM"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_report_mrp_inout
+#: view:report.mrp.inout:0
+msgid "Stock value variation"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_mts0
+#: model:process.node,note:mrp.process_node_servicemts0
+msgid "Assignment from stock."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,state:0
+#: view:mrp.production.order:0
+#: selection:mrp.production.order,state:0
+msgid "Waiting Goods"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom.revision,last_indice:0
+msgid "last indice"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.bom,revision_ids:0
+#: view:mrp.bom.revision:0
+msgid "BoM Revisions"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,state:0
+#: selection:mrp.production.order,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: mrp
+#: field:report.mrp.inout,date:0
+#: field:report.workcenter.load,name:0
+msgid "Week"
+msgstr "Uge"
+
+#. module: mrp
+#: field:mrp.installer,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production,priority:0
+#: selection:mrp.production.order,priority:0
+msgid "Normal"
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_routing0
+msgid "Manufacturing Steps."
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:136
+#: model:ir.actions.report.xml,name:mrp.report_cost_structure
+#, python-format
+msgid "Cost Structure"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.product.produce,mode:0
+msgid "Consume & Produce"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "November"
+msgstr "November"
+
+#. module: mrp
+#: field:mrp.bom,bom_id:0
+msgid "Parent BoM"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.mrp_bom_form_action2
+msgid ""
+"Bills of materials components are components and sub-products used to create "
+"master bills of materials. Use this menu to search in which BoM a specific "
+"component is used."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "January"
+msgstr "Januar"
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_stockproduct0
+msgid "Product type is Stockable or Consumable."
+msgstr ""
+
+#. module: mrp
+#: code:addons/mrp/mrp.py:595
+#: code:addons/mrp/wizard/change_production_qty.py:77
+#: code:addons/mrp/wizard/change_production_qty.py:82
+#, python-format
+msgid "Error"
+msgstr "Fejl"
+
+#. module: mrp
+#: field:mrp.product.produce,product_qty:0
+msgid "Select Quantity"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.act_product_product_2_mrp_bom
+#: model:ir.actions.act_window,name:mrp.mrp_bom_form_action
+#: model:ir.ui.menu,name:mrp.menu_mrp_bom_form_action
+#: field:product.product,bom_ids:0
+msgid "Bill of Materials"
+msgstr "Stykliste"
+
+#. module: mrp
+#: help:mrp.routing.workcenter,routing_id:0
+msgid ""
+"Routing indicates all the Work Centers used, for how long and/or cycles.If "
+"Routing is indicated then,the third tab of a production order (Work Centers) "
+"will be automatically pre-completed."
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_bom_revision
+msgid "Bill of Material Revision"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.routing.workcenter:0
+#: view:mrp.workcenter:0
+msgid "General Information"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+msgid "Productions"
+msgstr "Produktioner"
+
+#. module: mrp
+#: code:addons/mrp/report/price.py:194
+#, python-format
+msgid "Work Cost of "
+msgstr ""
+
+#. module: mrp
+#: help:mrp.workcenter,note:0
+msgid ""
+"Description of the Work Center. Explain here what's a cycle according to "
+"this Work Center."
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_routing
+#: view:mrp.bom:0
+#: field:mrp.bom,routing_id:0
+#: view:mrp.production:0
+#: field:mrp.production,routing_id:0
+#: field:mrp.production.order,routing_id:0
+#: view:mrp.routing:0
+#: model:process.node,name:mrp.process_node_routing0
+msgid "Routing"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.installer,mrp_operations:0
+msgid "Manufacturing Operations"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,date_planned:0
+msgid "Scheduled date"
+msgstr ""
+
+#. module: mrp
+#: constraint:stock.move:0
+msgid "You must assign a production lot for this product"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.mrp_property_action
+msgid ""
+"The Properties in OpenERP are used to select the right bill of materials for "
+"manufacturing a product when you have different ways of building the same "
+"product. You can assign several properties to each Bill of Materials. When a "
+"sales person creates a sales order, he can relate it to several properties "
+"and OpenERP will automatically select the BoM to use according the the needs."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+#: field:stock.move,production_id:0
+msgid "Production"
+msgstr "Produktion"
+
+#. module: mrp
+#: view:board.board:0
+msgid "Procurements in Exception"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_minimumstockprocure0
+msgid "'Minimum stock rule' material"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_mrp_product_price
+msgid "Product Price"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.action_mrp_installer
+msgid "MRP Applications Configuration"
+msgstr ""
+
+#. module: mrp
+#: model:ir.model,name:mrp.model_stock_move_split
+msgid "Split in Production lots"
+msgstr ""
+
+#. module: mrp
+#: view:change.production.qty:0
+msgid "Change Quantity"
+msgstr ""
+
+#. module: mrp
+#: view:change.production.qty:0
+#: model:ir.actions.act_window,name:mrp.action_change_production_qty
+msgid "Change Product Qty"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.bom.revision:0
+#: field:mrp.bom.revision,description:0
+#: view:mrp.property:0
+#: view:mrp.property.group:0
+#: field:mrp.routing,note:0
+#: view:mrp.routing.workcenter:0
+#: field:mrp.routing.workcenter,note:0
+#: view:mrp.workcenter:0
+#: field:mrp.workcenter,note:0
+msgid "Description"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "May"
+msgstr "Maj"
+
+#. module: mrp
+#: view:board.board:0
+msgid "Manufacturing board"
+msgstr ""
+
+#. module: mrp
+#: field:mrp.production,date_planned_end:0
+msgid "Scheduled End Date"
+msgstr ""
+
+#. module: mrp
+#: model:ir.actions.act_window,help:mrp.action_report_workcenter_load_tree
+msgid ""
+"Work Center Loads gives you a projection of work center loads over a "
+"specified period. It is expressed in number of hours and machine related "
+"cycles."
+msgstr ""
+
+#. module: mrp
+#: model:process.node,note:mrp.process_node_procureproducts0
+msgid "The way to procurement depends on the product type."
+msgstr ""
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.menu_mrp_manufacturing
+msgid "Manufacturing"
+msgstr ""
+
+#. module: mrp
+#: view:board.board:0
+msgid "Next Production Orders"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "February"
+msgstr "Februar"
+
+#. module: mrp
+#: model:ir.actions.act_window,name:mrp.mrp_property_group_action
+#: model:ir.ui.menu,name:mrp.menu_mrp_property_group_action
+msgid "Property Groups"
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.production.order,month:0
+msgid "April"
+msgstr "April"
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_procurestockableproduct0
+msgid ""
+"Depending on the chosen method to supply the stockable products, the "
+"procurement order creates a RFQ, a production order, ... "
+msgstr ""
+
+#. module: mrp
+#: help:mrp.workcenter,time_stop:0
+msgid "Time in hours for the cleaning."
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,name:mrp.process_transition_purchaseprocure0
+msgid "Automatic RFQ"
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_servicemto0
+msgid ""
+"If the service has a 'Produce' supply method, this creates a task in the "
+"project management module of OpenERP."
+msgstr ""
+
+#. module: mrp
+#: model:process.transition,note:mrp.process_transition_productionprocureproducts0
+msgid ""
+"In order to supply raw material (to be purchased or produced), the "
+"production order creates as much procurement orders as components listed in "
+"the BOM, through a run of the schedulers (MRP)."
+msgstr ""
+
+#. module: mrp
+#: help:mrp.product_price,number:0
+msgid ""
+"Specify quantity of products to produce or buy. Report of Cost structure "
+"will be displayed base on this quantity."
+msgstr ""
+
+#. module: mrp
+#: selection:mrp.bom,method:0
+msgid "On Stock"
+msgstr "På lager"
+
+#. module: mrp
+#: field:mrp.bom,sequence:0
+#: report:mrp.production.order:0
+#: field:mrp.production.workcenter.line,sequence:0
+#: field:mrp.routing.workcenter,sequence:0
+msgid "Sequence"
+msgstr "Rækkefølge"
+
+#. module: mrp
+#: model:ir.ui.menu,name:mrp.menu_view_resource_calendar_leaves_search_mrp
+msgid "Resource Leaves"
+msgstr ""
+
+#. module: mrp
+#: help:mrp.bom,sequence:0
+msgid "Gives the sequence order when displaying a list of bills of material."
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production:0
+#: field:mrp.production,move_lines:0
+#: report:mrp.production.order:0
+#: field:mrp.production.order,products_to_consume:0
+msgid "Products to Consume"
+msgstr ""
+
+#. module: mrp
+#: view:mrp.production.order:0
+#: field:mrp.production.order,year:0
+msgid "Year"
+msgstr "År"
diff --git a/addons/mrp/i18n/fr.po b/addons/mrp/i18n/fr.po
index a1ad6c25fa4..6582e283c5d 100644
--- a/addons/mrp/i18n/fr.po
+++ b/addons/mrp/i18n/fr.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-05-24 16:08+0000\n"
+"PO-Revision-Date: 2011-09-26 12:16+0000\n"
"Last-Translator: lholivier \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: 2011-09-05 04:59+0000\n"
-"X-Generator: Launchpad (build 13830)\n"
+"X-Launchpad-Export-Date: 2011-09-27 04:47+0000\n"
+"X-Generator: Launchpad (build 14028)\n"
#. module: mrp
#: field:mrp.bom,product_uos:0
@@ -91,8 +91,8 @@ msgid ""
"The 'Minimum stock rule' allows the system to create procurement orders "
"automatically as soon as the minimum stock is reached."
msgstr ""
-"La \"règle de stock minimum\" permet au système d'enregistrer "
-"automatiquement les besoins dès que le stock minimum est atteint."
+"La \"règle de stock minimum\" permet au système de créer automatiquement les "
+"approvisionnements dès que le stock minimum est atteint."
#. module: mrp
#: field:mrp.production,picking_id:0
@@ -232,8 +232,8 @@ msgid ""
"In case the Supply method of the product is Produce, the system creates a "
"production order."
msgstr ""
-"Dans le cas où la méthode d'approvisionnement de ce produit est Produire, le "
-"système crée un ordre de fabrication"
+"Dans le cas où la méthode de fourniture de ce produit est \"Produire\", le "
+"système crée un ordre de fabrication."
#. module: mrp
#: view:mrp.production:0
@@ -293,7 +293,7 @@ msgstr "["
#. module: mrp
#: model:process.transition,name:mrp.process_transition_procureserviceproduct0
msgid "Procurement of services"
-msgstr "Besoin de services"
+msgstr "Approvisionnement de services"
#. module: mrp
#: view:mrp.workcenter:0
@@ -322,8 +322,8 @@ msgid ""
"products are typically procured manually or through a minimum stock rule."
msgstr ""
"Le système attend que les produits soient disponibles en stock. Typiquement, "
-"les besoins en ces produits sont traités manuellement ou avec une règle de "
-"stock minimum."
+"les approvisionnements de ces produits sont traités manuellement ou avec une "
+"règle de stock minimum."
#. module: mrp
#: report:mrp.production.order:0
@@ -389,7 +389,7 @@ msgstr "Coût des composants de "
#. module: mrp
#: model:process.transition,name:mrp.process_transition_procurestockableproduct0
msgid "Procurement of stockable Product"
-msgstr "Besoin de produit stocké"
+msgstr "Approvisionnement de produit stocké"
#. module: mrp
#: view:mrp.bom:0
@@ -621,7 +621,7 @@ msgstr "Fabriquer"
#. module: mrp
#: help:mrp.workcenter,costs_cycle:0
msgid "Specify Cost of Work Center per cycle."
-msgstr ""
+msgstr "Précisez le coût du poste de charge par cycle"
#. module: mrp
#: selection:mrp.production,state:0
@@ -852,9 +852,9 @@ msgid ""
"order creates a RFQ for a subcontracting purchase order or waits until the "
"service is done (= the delivery of the products)."
msgstr ""
-"En fonction de la méthode choisie pour \"l'approvisionnement\" du service, "
-"le besoin va générer un appel d'offres pour une commande de sous-traitance, "
-"ou va attendre jusqu'à ce que le service soit effectué (= la livraison des "
+"En fonction de la méthode de fourniture du service, l'approvisionnement va "
+"générer un appel d'offres pour une commande de sous-traitance, ou va "
+"attendre jusqu'à ce que le service soit effectué (= la livraison des "
"produits)."
#. module: mrp
@@ -866,7 +866,7 @@ msgstr "Urgent"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_routing_workcenter
msgid "Work Center Usage"
-msgstr ""
+msgstr "Utilisation du poste de charge"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_production
@@ -876,7 +876,7 @@ msgstr "Ordre de fabrication"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_productionprocureproducts0
msgid "Procurement of raw material"
-msgstr "Besoin de matière première"
+msgstr "Approvisionnement de matière première"
#. module: mrp
#: help:mrp.routing.workcenter,hour_nbr:0
@@ -1043,6 +1043,9 @@ msgid ""
"Number of operations this Work Center can do in parallel. If this Work "
"Center represents a team of 5 workers, the capacity per cycle is 5."
msgstr ""
+"Nombre d'opérations simultanées que ce poste de charge peut réaliser. Si ce "
+"poste de charge représente une équipe de 5 personnes, la capacité par cycle "
+"est de 5."
#. module: mrp
#: model:process.transition,note:mrp.process_transition_servicerfq0
@@ -1050,8 +1053,8 @@ msgid ""
"If the service has a 'Buy' supply method, this creates a RFQ, a "
"subcontracting demand for instance."
msgstr ""
-"Si la méthode d'approvisionnement du service est \"Acheter\", ceci va créer "
-"un appel d'offres, par exemple une demande de sous-traitance."
+"Si la méthode de fourniture du service est \"Acheter\", ceci va créer un "
+"appel d'offres, par exemple une demande de sous-traitance."
#. module: mrp
#: field:mrp.production,move_prod_id:0
@@ -1066,7 +1069,7 @@ msgstr "En retard"
#. module: mrp
#: model:process.node,name:mrp.process_node_servicemts0
msgid "Make to stock"
-msgstr "Sur stock"
+msgstr "Production sur stock"
#. module: mrp
#: help:mrp.routing.workcenter,sequence:0
@@ -1139,7 +1142,7 @@ msgid ""
"avoids having to wait for the procurement scheduler to run or having to run "
"the procurement scheduler manually."
msgstr ""
-"Permet le calcul en Juste-à-temps des besoins.\n"
+"Permet le calcul en Juste-à-temps des approvisionnements.\n"
"\n"
"Bien que cela soit plus gourmand en ressources que le fonctionnement "
"standard, le calcul en Juste-à-Temps permet d'éviter d'attendre l'activation "
@@ -1225,6 +1228,41 @@ msgid ""
" * List of procurement in exception\n"
" "
msgstr ""
+"\n"
+" Ceci est la module de base de la gestion de fabrication d'OpenERP.\n"
+"\n"
+" Fonctionnalités :\n"
+" * Fabrication pour stockage / Fabrication pour commande (par ligne)\n"
+" * Nomenclatures multi-niveaux (sans limitations)\n"
+" * Gammes multi-niveaux (sans limitations)\n"
+" * Gamme et poste de charge intégrés avec la comptabilité analytique\n"
+" * Re-planification périodique / module juste à temps\n"
+" * Multi-points de vente, multi-stocks\n"
+" * Différentes Stratégies d'ordonnancement\n"
+" * Méthode des coûts par produit : prix standard , prix moyen\n"
+" * Analyse facilitée des besoins et des incidents\n"
+" * Grande flexibilité\n"
+" * Permet de parcourir la totalité des nomenclatures\n"
+" y compris les nomenclatures filles et les nomenclatures fantômes\n"
+" Il intègre complètement la planification des marchandises stockables,\n"
+" et des services consommables. Les services sont integratés avec le "
+"reste\n"
+" du logiciel. Par exemple, on peut placer un service dans une "
+"nomenclature\n"
+" afin de déclencher automatiquement un achat lors d'un ordre de "
+"fabrication.\n"
+"\n"
+" Rapports fournis par ce module :\n"
+" * Structure et composants de nomenclature\n"
+" * Pévision de la charge pour les postes de charge\n"
+" * Impression des ordres de fabrication\n"
+" * Prévision des stocks\n"
+" Tableau de bord de ce module :\n"
+" * Liste des prochains ordres de production\n"
+" * Liste des livraisons (en sortie de colisage)\n"
+" * Graphique de charge des postes de charge\n"
+" * Liste des approvisionnements en défaut\n"
+" "
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_production_action4
@@ -1359,9 +1397,10 @@ msgid ""
"maxi quantity. It's available in the Inventory management menu and "
"configured by product."
msgstr ""
-"La règle du stock minimum est une règle de gestion automatique des besoins, "
-"basée sur des quantités minimum et maximum. Cette règle est disponible dans "
-"le menu de gestion des stocks, et paramétrable pour chaque produit."
+"La règle du stock minimum est une règle de gestion automatique des "
+"approvisionnements, basée sur des quantités minimum et maximum. Cette règle "
+"est disponible dans le menu de gestion des stocks, et paramétrable pour "
+"chaque produit."
#. module: mrp
#: selection:mrp.workcenter.load,time_unit:0
@@ -1455,13 +1494,13 @@ msgid ""
"In case the Supply method of the product is Buy, the system creates a "
"purchase order."
msgstr ""
-"Dans le cas où la méthode d'approvisionnement est \"Acheter\", le système va "
-"créer un Ordre d'Achat"
+"Dans le cas où la méthode de fourniture est \"Acheter\", le système va créer "
+"un ordre d'achat."
#. module: mrp
#: model:ir.model,name:mrp.model_procurement_order
msgid "Procurement"
-msgstr "Besoin"
+msgstr "Approvisionnement"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.action_view_mrp_product_price_wizard
@@ -1542,7 +1581,7 @@ msgstr "Actif"
#. module: mrp
#: model:process.node,name:mrp.process_node_procureproducts0
msgid "Procure Products"
-msgstr "Satisfaire le besoin de produit"
+msgstr "Approvisionner les produits"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.action_report_workcenter_load_tree
@@ -1592,7 +1631,7 @@ msgstr "Modifier les quantités de produit"
#. module: mrp
#: model:process.node,note:mrp.process_node_productionorder0
msgid "Drives the procurement orders for raw material."
-msgstr "Pilote la gestion des besoins de matières premières"
+msgstr "Pilote la gestion des approvisionnement en matières premières"
#. module: mrp
#: view:mrp.production.order:0
@@ -1719,7 +1758,7 @@ msgstr "Produits consommés"
#: model:process.transition,name:mrp.process_transition_servicemto0
#: model:process.transition,name:mrp.process_transition_stockproduct0
msgid "Make to Order"
-msgstr "Fabrication à la commande"
+msgstr "Production à la demande"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.action_report_mrp_production_order
@@ -1914,7 +1953,7 @@ msgstr "Ordre de Production"
#. module: mrp
#: model:process.node,note:mrp.process_node_productminimumstockrule0
msgid "Automatic procurement rule"
-msgstr "Règle de gestion automatique des besoins"
+msgstr "Règle de gestion automatique des approvisionnements"
#. module: mrp
#: view:mrp.production:0
@@ -2110,7 +2149,7 @@ msgstr "Information de coût"
#. module: mrp
#: model:process.node,name:mrp.process_node_purchaseprocure0
msgid "Procurement Orders"
-msgstr "Besoins"
+msgstr "Ordre d'approvisionnement"
#. module: mrp
#: help:mrp.bom,product_rounding:0
@@ -2315,6 +2354,8 @@ msgid ""
"Description of the Work Center. Explain here what's a cycle according to "
"this Work Center."
msgstr ""
+"Description du poste de charge. Expliquer ici ce qu'est un cycle pour un tel "
+"poste de charge."
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_routing
@@ -2368,7 +2409,7 @@ msgstr "Production"
#. module: mrp
#: view:board.board:0
msgid "Procurements in Exception"
-msgstr "Besoins en exception"
+msgstr "Approvisionnements en exception"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_minimumstockprocure0
@@ -2443,7 +2484,7 @@ msgstr ""
#. module: mrp
#: model:process.node,note:mrp.process_node_procureproducts0
msgid "The way to procurement depends on the product type."
-msgstr "Le moyen de satisfaire le besoin dépend du type de produit"
+msgstr "Le moyen d’approvisionnement dépend du type de produit"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_mrp_manufacturing
@@ -2477,8 +2518,8 @@ msgid ""
"Depending on the chosen method to supply the stockable products, the "
"procurement order creates a RFQ, a production order, ... "
msgstr ""
-"Selon la méthode d'approvisionnement choisie pour les produits suivis en "
-"stock, le besoin générera un appel d'offres, un ordre de fabrication, ... "
+"Selon la méthode de fourniture choisie pour les produits suivis en stock, "
+"l'approvisionnement générera un appel d'offres, un ordre de fabrication, ... "
#. module: mrp
#: help:mrp.workcenter,time_stop:0
@@ -2496,8 +2537,8 @@ msgid ""
"If the service has a 'Produce' supply method, this creates a task in the "
"project management module of OpenERP."
msgstr ""
-"Si la méthode d'approvisionnement du service est \"Produire\", ceci va créer "
-"une tâche dans le module de gestion de projets."
+"Si la méthode de fourniture du service est \"Produire\", ceci va créer une "
+"tâche dans le module de gestion de projets."
#. module: mrp
#: model:process.transition,note:mrp.process_transition_productionprocureproducts0
@@ -2506,9 +2547,9 @@ msgid ""
"production order creates as much procurement orders as components listed in "
"the BOM, through a run of the schedulers (MRP)."
msgstr ""
-"Afin de s'approvisionner en matières premières (à acheter ou à fabriquer), "
-"l'ordre de fabrication crée autant de besoins que de composants présents "
-"dans la nomenclature, par le biais des planificateurs (MRP)."
+"Afin de fournir les matières premières (à acheter ou à fabriquer), l'ordre "
+"de fabrication crée autant d'ordres d'approvisionnement que de composants "
+"présents dans la nomenclature, par le biais des planificateurs (MRP)."
#. module: mrp
#: help:mrp.product_price,number:0
@@ -3323,6 +3364,15 @@ msgstr "Année"
#~ msgid "Specify Cost of Work center per cycle."
#~ msgstr "Spécifie le coût par cycle d'un poste de charges."
+#~ msgid ""
+#~ "Routing indicates all the workcenters used, for how long and/or cycles.If "
+#~ "Routing is indicated then,the third tab of a production order (workcenters) "
+#~ "will be automatically pre-completed."
+#~ msgstr ""
+#~ "La gamme indique tous les postes de charge utilisés, la durée et/ou le "
+#~ "nombre de cycles. Quand \"Gamme\" est indiqué, le troisième onglet des "
+#~ "ordres de fabrication (postes de charge) est automatiquement pré-rempli."
+
#~ msgid ""
#~ "\n"
#~ " This is the base module to manage the manufacturing process in OpenERP.\n"
@@ -3364,7 +3414,7 @@ msgstr "Année"
#~ "fabrication.\n"
#~ "\n"
#~ " Fonctionnalités:\n"
-#~ " * Fabrication pour stock/ Fabrication à la commande (par ligne)\n"
+#~ " * Production sur stock / à la demande (par ligne)\n"
#~ " * Nomenclatures multi-niveaux, sans limitation\n"
#~ " * Gammes multi-niveaux, sans limitation\n"
#~ " * Gammes et postes de charge intégrés dans la comptabilité analytique\n"
@@ -3396,12 +3446,3 @@ msgstr "Année"
#~ " * Graphique de la charge des postes\n"
#~ " * Liste des approvisionnements ayant subit un incident\n"
#~ " "
-
-#~ msgid ""
-#~ "Routing indicates all the workcenters used, for how long and/or cycles.If "
-#~ "Routing is indicated then,the third tab of a production order (workcenters) "
-#~ "will be automatically pre-completed."
-#~ msgstr ""
-#~ "La gamme indique tous les postes de charge utilisés, la durée et/ou le "
-#~ "nombre de cycles. Quand \"Gamme\" est indiqué, le troisième onglet des "
-#~ "ordres de fabrication (postes de charge) est automatiquement pré-rempli."
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 7b9d403a95d..422700710d8 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -477,7 +477,7 @@ class mrp_production(osv.osv):
'move_created_ids2': fields.one2many('stock.move', 'production_id', 'Produced Products', domain=[('state','in', ('done', 'cancel'))]),
'product_lines': fields.one2many('mrp.production.product.line', 'production_id', 'Scheduled goods'),
'workcenter_lines': fields.one2many('mrp.production.workcenter.line', 'production_id', 'Work Centers Utilisation'),
- 'state': fields.selection([('draft','Draft'),('picking_except', 'Picking Exception'),('confirmed','Waiting Goods'),('ready','Ready to Produce'),('in_production','In Production'),('cancel','Cancelled'),('done','Done')],'State', readonly=True,
+ 'state': fields.selection([('draft','New'),('picking_except', 'Picking Exception'),('confirmed','Waiting Goods'),('ready','Ready to Produce'),('in_production','Production Started'),('cancel','Cancelled'),('done','Done')],'State', readonly=True,
help='When the production order is created the state is set to \'Draft\'.\n If the order is confirmed the state is set to \'Waiting Goods\'.\n If any exceptions are there, the state is set to \'Picking Exception\'.\
\nIf the stock is available then the state is set to \'Ready to Produce\'.\n When the production gets started then the state is set to \'In Production\'.\n When the production is over, the state is set to \'Done\'.'),
'hour_total': fields.function(_production_calc, type='float', string='Total Hours', multi='workorder', store=True),
diff --git a/addons/mrp/mrp_installer.xml b/addons/mrp/mrp_installer.xml
index 7eabd5a45b1..af2a35b3ce7 100644
--- a/addons/mrp/mrp_installer.xml
+++ b/addons/mrp/mrp_installer.xml
@@ -19,5 +19,54 @@
-
+
+
+
+ MRP Management
+ 6
+
+
+
+ Configure your work centers
+ ir.actions.act_window
+ mrp.workcenter
+ form,tree
+ form
+
+
+
+
+
+
+
+
+
+ Create Bill of Materials
+ ir.actions.act_window
+ mrp.bom
+ form,tree
+ form
+
+
+
+
+
+
+
+
+ Create or Import Products
+ ir.actions.act_window
+ product.product
+ form
+ tree,form
+
+ Create a product form for everything you buy or sell. Specify a supplier if the product can be purchased.
+
+
+
+
+
+ 20
+
+
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index 19e25438cad..cec6fd42687 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -700,7 +700,7 @@
-
+
@@ -808,7 +808,7 @@
help="Manufacturing Orders which are currently in production."/>
diff --git a/addons/mrp/report/mrp_production_order.py b/addons/mrp/report/mrp_production_order.py
index 3ad4184c413..4bb525db1ff 100644
--- a/addons/mrp/report/mrp_production_order.py
+++ b/addons/mrp/report/mrp_production_order.py
@@ -19,118 +19,4 @@
#
##############################################################################
-from osv import fields,osv
-import tools
-
-
-class mrp_production_order(osv.osv):
- _name = "mrp.production.order"
- _description = "Production Order Report"
- _auto = False
- _columns = {
- 'year': fields.char('Year',size=64,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=64,readonly=True),
- 'origin': fields.char('Source Document', size=64),
- 'nbr': fields.integer('# of Lines', readonly=True),
- 'products_to_consume': fields.integer('Products to Consume', readonly=True),
- 'consumed_products': fields.integer('Consumed Products', readonly=True),
- 'date': fields.date('Date', readonly=True),
- 'product_id': fields.many2one('product.product', 'Product', readonly=True),
- 'product_id2': fields.many2one('product.product', 'Product Consumed', readonly=True),
- 'product_qty': fields.float('Product Qty', readonly=True),
- 'state': fields.selection([('draft','Draft'),
- ('picking_except', 'Picking Exception'),
- ('confirmed','Waiting Goods'),
- ('ready','Ready to Produce'),
- ('in_production','In Production'),
- ('cancel','Cancelled'),
- ('done','Done')],
- 'State', readonly=True),
- 'date_planned':fields.date('Scheduled Date'),
- 'location_src_id': fields.many2one('stock.location', 'Raw Materials Location', readonly=True),
- 'date_start': fields.datetime('Start Date',readonly=True),
- 'date_finished': fields.datetime('End Date',readonly=True),
- 'location_dest_id': fields.many2one('stock.location', 'Finished Products Location', readonly=True),
- 'company_id': fields.many2one('res.company','Company',readonly=True),
- 'bom_id': fields.many2one('mrp.bom', 'Bill of Material',readonly=True),
- 'routing_id': fields.many2one('mrp.routing', string='Routing',readonly=True),
- 'picking_id': fields.many2one('stock.picking', 'Picking list', readonly=True),
- 'product_uom': fields.many2one('product.uom', 'Product UOM', readonly=True),
- 'priority': fields.selection([('0','Not urgent'),
- ('1','Normal'),
- ('2','Urgent'),
- ('3','Very Urgent')],
- 'Priority',readonly=True),
-
-
- }
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'mrp_production_order')
- cr.execute("""
- create or replace view mrp_production_order as (
- select
- min(l.id) as id,
- to_date(to_char(s.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY') as date,
- to_char(s.create_date, 'YYYY') as year,
- to_char(s.create_date, 'MM') as month,
- to_char(s.create_date, 'YYYY-MM-DD') as day,
- s.product_id as product_id,
- l.product_id as product_id2,
- l.product_uom,
- sum(l.product_qty * u.factor) as product_qty,
- s.company_id as company_id,
- (select 1) as nbr,
- (select sum(sm.product_qty) from stock_move as sm
- left join mrp_production_move_ids as mv on (sm.id=mv.move_id)
- left join mrp_production_product_line as ll on (ll.production_id=mv.production_id)
- where sm.product_id=ll.product_id and ll.id=l.id
- and sm.state not in ('done','cancel')
- group by sm.product_id) as products_to_consume,
- (select sum(sm.product_qty)/2 from stock_move as sm
- left join mrp_production_move_ids as mv on (sm.id=mv.move_id)
- left join mrp_production_product_line as ll on (ll.production_id=mv.production_id)
- where sm.product_id=ll.product_id and ll.id=l.id
- and sm.state in ('done','cancel')
- group by sm.product_id) as consumed_products,
- s.location_src_id,
- s.location_dest_id,
- s.bom_id,
- s.routing_id,
- s.picking_id,
- s.date_start,
- s.date_finished,
- to_date(to_char(s.date_planned, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_planned,
- s.origin,
- s.priority,
- s.state
- from mrp_production_product_line l
- left join mrp_production s on (s.id=l.production_id)
- left join product_uom u on (u.id=l.product_uom)
- group by
- to_char(s.create_date, 'YYYY'),
- to_char(s.create_date, 'MM'),
- to_char(s.create_date, 'YYYY-MM-DD'),
- to_date(to_char(s.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY'),
- l.product_id,
- s.product_id,
- l.product_uom,
- s.id,
- l.id,
- s.bom_id,
- s.routing_id,
- s.picking_id,
- s.priority,
- s.location_src_id,
- s.location_dest_id,
- s.state,
- to_date(to_char(s.date_planned, 'dd-MM-YYYY'),'dd-MM-YYYY'),
- s.origin,
- s.date_start,
- s.date_finished,
- s.company_id
- )""")
-mrp_production_order()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mrp/report/mrp_production_order_view.xml b/addons/mrp/report/mrp_production_order_view.xml
index dfcf41d9333..140170e4906 100644
--- a/addons/mrp/report/mrp_production_order_view.xml
+++ b/addons/mrp/report/mrp_production_order_view.xml
@@ -1,133 +1,6 @@
-
-
-
- mrp.production.order.tree
- mrp.production.order
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- mrp.production.order.graph
- mrp.production.order
- graph
-
-
-
-
-
-
-
-
-
- mrp.production.order.select
- mrp.production.order
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Production Analysis
- mrp.production.order
- form
- tree,graph
-
-
- {'search_default_Product': 1,'search_default_month':1,'group_by_no_leaf':1,'group_by':[]}
- This reporting allows you to analyse your manufacturing activities and performance.
-
-
-
-
- tree
-
-
-
-
-
-
- graph
-
-
-
-
-
diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv
index 4af31e9c902..1d93fb460b5 100644
--- a/addons/mrp/security/ir.model.access.csv
+++ b/addons/mrp/security/ir.model.access.csv
@@ -29,7 +29,6 @@
"access_procurement_stock_worker","procurement.order stock_worker","model_procurement_order","stock.group_stock_user",1,1,1,1
"access_procurement_user","procurement.order.user","model_procurement_order","base.group_user",1,1,1,1
"access_mrp_production_stock_worker","mrp.production stock_worker","model_mrp_production","stock.group_stock_user",1,0,0,0
-"access_mrp_production_order","mrp.production.order","model_mrp_production_order","mrp.group_mrp_manager",1,1,1,1
"access_report_workcenter_load","report.workcenter.load","model_report_workcenter_load","mrp.group_mrp_manager",1,1,1,1
"access_report_mrp_inout","report.mrp.inout","model_report_mrp_inout","mrp.group_mrp_manager",1,1,1,1
"access_product_product_manager","product.product manager","product.model_product_product","mrp.group_mrp_manager",1,0,0,0
diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py
index 6e66fb57f25..a486e0b332a 100644
--- a/addons/mrp/stock.py
+++ b/addons/mrp/stock.py
@@ -46,6 +46,7 @@ class StockMove(osv.osv):
procurement_obj = self.pool.get('procurement.order')
product_obj = self.pool.get('product.product')
wf_service = netsvc.LocalService("workflow")
+ processed_ids = [move.id]
if move.product_id.supply_method == 'produce' and move.product_id.procure_method == 'make_to_order':
bis = bom_obj.search(cr, uid, [
('product_id','=',move.product_id.id),
@@ -55,11 +56,10 @@ class StockMove(osv.osv):
factor = move.product_qty
bom_point = bom_obj.browse(cr, uid, bis[0], context=context)
res = bom_obj._bom_explode(cr, uid, bom_point, factor, [])
- dest = move.product_id.product_tmpl_id.property_stock_production.id
state = 'confirmed'
if move.state == 'assigned':
state = 'assigned'
- for line in res[0]:
+ for line in res[0]:
valdef = {
'picking_id': move.picking_id.id,
'product_id': line['product_id'],
@@ -70,12 +70,12 @@ class StockMove(osv.osv):
'move_dest_id': move.id,
'state': state,
'name': line['name'],
- 'location_dest_id': dest,
'move_history_ids': [(6,0,[move.id])],
'move_history_ids2': [(6,0,[])],
'procurements': [],
}
mid = move_obj.copy(cr, uid, move.id, default=valdef)
+ processed_ids.append(mid)
prodobj = product_obj.browse(cr, uid, line['product_id'], context=context)
proc_id = procurement_obj.create(cr, uid, {
'name': (move.picking_id.origin or ''),
@@ -92,7 +92,7 @@ class StockMove(osv.osv):
})
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
move_obj.write(cr, uid, [move.id], {
- 'location_id': move.location_dest_id.id,
+ 'location_dest_id': move.location_id.id, # dummy move for the kit
'auto_validate': True,
'picking_id': False,
'state': 'confirmed'
@@ -100,7 +100,7 @@ class StockMove(osv.osv):
for m in procurement_obj.search(cr, uid, [('move_id','=',move.id)], context):
wf_service.trg_validate(uid, 'procurement.order', m, 'button_confirm', cr)
wf_service.trg_validate(uid, 'procurement.order', m, 'button_wait_done', cr)
- return True
+ return processed_ids
def action_consume(self, cr, uid, ids, product_qty, location_id=False, context=None):
""" Consumed product with specific quatity from specific source location.
@@ -138,14 +138,15 @@ class StockMove(osv.osv):
wf_service = netsvc.LocalService("workflow")
for move in self.browse(cr, uid, ids, context=context):
new_moves = super(StockMove, self).action_scrap(cr, uid, [move.id], product_qty, location_id, context=context)
- self.write(cr, uid, [move.id], {'prodlot_id': False, 'tracking_id': False})
+ #If we are not scrapping our whole move, tracking and lot references must not be removed
+ #self.write(cr, uid, [move.id], {'prodlot_id': False, 'tracking_id': False})
production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])])
for prod_id in production_ids:
wf_service.trg_validate(uid, 'mrp.production', prod_id, 'button_produce', cr)
for new_move in new_moves:
production_obj.write(cr, uid, production_ids, {'move_lines': [(4, new_move)]})
res.append(new_move)
- return {}
+ return res
StockMove()
@@ -156,16 +157,13 @@ class StockPicking(osv.osv):
#
# Explode picking by replacing phantom BoMs
#
- def action_explode(self, cr, uid, picks, *args):
- """ Explodes picking by replacing phantom BoMs
- @param picks: Picking ids.
- @param *args: Arguments
- @return: Picking ids.
- """
+ def action_explode(self, cr, uid, move_ids, *args):
+ """Explodes moves by expanding kit components"""
move_obj = self.pool.get('stock.move')
- for move in move_obj.browse(cr, uid, picks):
- move_obj._action_explode(cr, uid, move)
- return picks
+ todo = move_ids[:]
+ for move in move_obj.browse(cr, uid, move_ids):
+ todo.extend(move_obj._action_explode(cr, uid, move))
+ return list(set(todo))
StockPicking()
diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml
index a80a1a41a9c..2484345de9a 100644
--- a/addons/mrp_operations/mrp_operations_view.xml
+++ b/addons/mrp_operations/mrp_operations_view.xml
@@ -140,7 +140,7 @@
domain="[('state','=','pause')]"/>
diff --git a/addons/multi_company/multi_company_demo.xml b/addons/multi_company/multi_company_demo.xml
index d3b46e6d112..5248a26f4f9 100644
--- a/addons/multi_company/multi_company_demo.xml
+++ b/addons/multi_company/multi_company_demo.xml
@@ -267,7 +267,7 @@
-
+
Expenses Credit Notes Journal - (OpenERP IN)ECNJ-OpenERP IN
diff --git a/addons/outlook/outlook_installer.xml b/addons/outlook/outlook_installer.xml
index 7eb6e2b0d68..a85a16c245b 100644
--- a/addons/outlook/outlook_installer.xml
+++ b/addons/outlook/outlook_installer.xml
@@ -75,5 +75,8 @@
+
+
+
diff --git a/addons/point_of_sale/__openerp__.py b/addons/point_of_sale/__openerp__.py
index 3bd0f188581..125449cfc6f 100644
--- a/addons/point_of_sale/__openerp__.py
+++ b/addons/point_of_sale/__openerp__.py
@@ -39,17 +39,15 @@ Main features :
""",
'author': 'OpenERP SA',
'images': ['images/cash_registers.jpeg', 'images/pos_analysis.jpeg','images/register_analysis.jpeg','images/sale_order_pos.jpeg','images/product_pos.jpeg'],
- 'depends': ['sale', 'delivery'],
+ 'depends': ['sale'],
'init_xml': [],
'update_xml': [
'security/point_of_sale_security.xml',
'security/ir.model.access.csv',
'wizard/pos_details.xml',
- 'wizard/pos_add_product.xml',
'wizard/pos_confirm.xml',
'wizard/pos_discount.xml',
- 'wizard/pos_get_sale.xml',
'wizard/pos_open_statement.xml',
'wizard/pos_close_statement.xml',
'wizard/pos_box_entries.xml',
@@ -57,15 +55,10 @@ Main features :
'wizard/pos_payment_report_date_view.xml',
'wizard/pos_box_out.xml',
'wizard/pos_sales_user.xml',
- 'wizard/all_closed_cashbox_of_the_day.xml',
- 'wizard/pos_sales_user_current_user.xml',
- 'wizard/pos_sale_user_today.xml',
'wizard/pos_receipt_view.xml',
'wizard/pos_payment_report_user.xml',
'wizard/pos_payment_report.xml',
'wizard/pos_payment.xml',
- 'wizard/pos_scan_product_view.xml',
- 'wizard/pos_return_view.xml',
'point_of_sale_report.xml',
'point_of_sale_view.xml',
'report/pos_order_report_view.xml',
@@ -75,9 +68,15 @@ Main features :
'account_statement_view.xml',
'account_statement_report.xml',
],
- 'demo_xml': ['point_of_sale_demo.xml','account_statement_demo.xml'],
- 'test': ['test/point_of_sale_test.yml',
- 'test/point_of_sale_report.yml',
+ 'demo_xml': [
+ 'point_of_sale_demo.xml',
+ 'account_statement_demo.xml',
+ 'test/00_register_open.yml'
+ ],
+ 'test': [
+ 'test/01_order_to_payment.yml',
+ 'test/02_order_to_invoice.yml',
+ 'test/point_of_sale_report.yml'
],
'installable': True,
'certificate' : '001156338024966477869',
diff --git a/addons/point_of_sale/account_bank_statement.py b/addons/point_of_sale/account_bank_statement.py
index 706cd50a84b..9cc39ced45c 100644
--- a/addons/point_of_sale/account_bank_statement.py
+++ b/addons/point_of_sale/account_bank_statement.py
@@ -25,10 +25,9 @@ from osv import fields, osv
class account_journal(osv.osv):
_inherit = 'account.journal'
_columns = {
- 'auto_cash': fields.boolean('Automatic Opening', help="This field authorize the automatic creation of the cashbox"),
- 'special_journal': fields.boolean('Special Journal', help="Will put all the orders in waiting status till being accepted"),
- 'check_dtls': fields.boolean('Check Details', help="This field authorize Validation of Cashbox without checking ending details"),
- 'journal_users': fields.many2many('res.users', 'pos_journal_users', 'journal_id', 'user_id', 'Users'),
+ 'auto_cash': fields.boolean('Automatic Opening', help="This field authorize the automatic creation of the cashbox, without control of the initial balance."),
+ 'check_dtls': fields.boolean('Control Balance Before Closing', help="This field authorize Validation of Cashbox without controlling the closing balance."),
+ 'journal_user': fields.boolean('PoS Payment Method', help="Check this box if this journal define a payment method that can be used in point of sales."),
}
_defaults = {
'check_dtls': False,
@@ -49,14 +48,6 @@ class account_cash_statement(osv.osv):
else:
return True
- def _user_allow(self, cr, uid, statement_id, context=None):
- statement = self.browse(cr, uid, statement_id, context=context)
- if (not statement.journal_id.journal_users) and uid == 1: return True
- for user in statement.journal_id.journal_users:
- if uid == user.id:
- return True
- return False
-
def _get_cash_open_box_lines(self, cr, uid, context=None):
res = super(account_cash_statement,self)._get_cash_open_box_lines(cr, uid, context)
curr = [0.01, 0.02, 0.05, 0.10, 0.20, 0.50]
diff --git a/addons/point_of_sale/account_statement_demo.xml b/addons/point_of_sale/account_statement_demo.xml
index 7cdbbf99596..e8ee0a7c349 100644
--- a/addons/point_of_sale/account_statement_demo.xml
+++ b/addons/point_of_sale/account_statement_demo.xml
@@ -1,75 +1,17 @@
-
- Visa Journal
- VIJ
- cash
-
-
-
-
-
-
-
-
-
-
-
-
- Bancontact Journal
- BACJ
- cash
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
-
+
diff --git a/addons/point_of_sale/account_statement_view.xml b/addons/point_of_sale/account_statement_view.xml
index d6bfa4eda66..16cc953d9ef 100644
--- a/addons/point_of_sale/account_statement_view.xml
+++ b/addons/point_of_sale/account_statement_view.xml
@@ -11,28 +11,15 @@
-
+
-
+
-
-
-
-
-
-
account.bank.statement.inheritaccount.bank.statement
@@ -66,7 +53,7 @@
-
+
@@ -141,14 +128,6 @@
-
-
+
+
+
+
+
+
diff --git a/addons/point_of_sale/account_statement_wizard.xml b/addons/point_of_sale/account_statement_wizard.xml
deleted file mode 100644
index 25f099810b4..00000000000
--- a/addons/point_of_sale/account_statement_wizard.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index 04610463203..19f18d92dd6 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -42,125 +42,23 @@ class pos_config_journal(osv.osv):
pos_config_journal()
-
-class pos_company_discount(osv.osv):
- """ Company Discount and Cashboxes """
- _inherit = 'res.company'
-
- _columns = {
- 'company_discount': fields.float('Max Discount(%)', digits_compute=dp.get_precision('Point Of Sale')),
- 'max_diff': fields.float('Max Difference for Cashboxes', digits_compute=dp.get_precision('Point Of Sale Discount')),
- }
-
-pos_company_discount()
-
class pos_order(osv.osv):
- """ Point of sale gives business owners a convenient way of checking out customers
- and of recording sales """
-
_name = "pos.order"
_description = "Point of Sale"
- _order = "date_order, create_date desc"
+ _order = "id desc"
def unlink(self, cr, uid, ids, context=None):
for rec in self.browse(cr, uid, ids, context=context):
- for rec_statement in rec.statement_ids:
- if (rec_statement.statement_id and rec_statement.statement_id.state == 'confirm') or rec.state == 'done':
- raise osv.except_osv(_('Invalid action !'), _('Cannot delete a point of sale which is closed or contains confirmed cashboxes!'))
+ if rec.state not in ('draft','cancel'):
+ raise osv.except_osv(_('Unable to Delete !'), _('In order to delete a sale, it must be new or cancelled.'))
return super(pos_order, self).unlink(cr, uid, ids, context=context)
- def onchange_partner_pricelist(self, cr, uid, ids, part=False, context=None):
-
- """ Changed price list on_change of partner_id"""
+ def onchange_partner_id(self, cr, uid, ids, part=False, context=None):
if not part:
return {'value': {}}
pricelist = self.pool.get('res.partner').browse(cr, uid, part, context=context).property_product_pricelist.id
return {'value': {'pricelist_id': pricelist}}
- def _amount_total(self, cr, uid, ids, field_name, arg, context=None):
- """ Calculates amount_tax of order line
- @param field_names: Names of fields.
- @return: Dictionary of values """
- cr.execute("""
- SELECT
- p.id,
- COALESCE(SUM(
- l.price_unit*l.qty*(1-(l.discount/100.0)))::decimal(16,2), 0
- ) AS amount
- FROM pos_order p
- LEFT OUTER JOIN pos_order_line l ON (p.id = l.order_id)
- WHERE p.id IN %s GROUP BY p.id """,(tuple(ids),))
- res = dict(cr.fetchall())
- for rec in self.browse(cr, uid, ids, context=context):
- if rec.partner_id \
- and rec.partner_id.property_account_position \
- and rec.partner_id.property_account_position.tax_ids:
- res[rec.id] = res[rec.id] - rec.amount_tax
- else :
- res[rec.id] = res[rec.id] + rec.amount_tax
- return res
-
- def _get_date_payment2(self, cr, uid, ids, context=None, *a):
- # Todo need to check this function
- """ Find payment Date
- @param field_names: Names of fields.
- @return: Dictionary of values """
- res = {}
- val = None
- for order in self.browse(cr, uid, ids, context=context):
- cr.execute("SELECT date_payment FROM pos_order WHERE id = %s", (order.id,))
- date_p = cr.fetchone()
- date_p = date_p and date_p[0] or None
- if date_p:
- res[order.id] = date_p
- return res
- if order.invoice_id:
- cr.execute(" SELECT MAX(l.date) "
- " FROM account_move_line l, account_move m, account_invoice i, account_move_reconcile r, pos_order o "
- " WHERE i.move_id = m.id AND l.move_id = m.id AND l.reconcile_id = r.id AND o.id = %s AND o.invoice_id = i.id",
- (order.id,))
- else:
- cr.execute("SELECT MAX(l.date) from account_move_line l "
- "left join account_bank_statement abs on (l.statement_id=abs.id)"
- "left join account_bank_statement_line absl on (absl.statement_id=abs.id) "
- "left join pos_order p on (p.id=absl.pos_statement_id) "
- "left join account_account a on (a.id=absl.account_id) "
- "where p.id=%s and l.reconcile_id is not NULL and a.reconcile=True", (order.id,))
- val = cr.fetchone()
- val = val and val[0] or None
- if val:
- res[order.id] = val
- return res
-
- def _get_date_payment(self, cr, uid, ids, context, *a):
- """ Find Validation Date
- @return: Dictionary of values """
- res = {}
- val = None
- for order in self.browse(cr, uid, ids):
- cr.execute("SELECT date_validation FROM pos_order WHERE id = %s", (order.id,))
- date_p = cr.fetchone()
- date_p = date_p and date_p[0] or None
- if date_p:
- res[order.id] = date_p
- return res
- discount_allowed = order.company_id.company_discount
- for line in order.lines:
- if line.discount > discount_allowed:
- return {order.id: None }
- if order.amount_paid == order.amount_total and not date_p:
- cr.execute("SELECT MAX(date) FROM account_bank_statement_line WHERE pos_statement_id = %s", (order.id,))
- val = cr.fetchone()
- val = val and val[0] or None
- if order.invoice_id and order.invoice_id.move_id and not date_p and not val:
- for o in order.invoice_id.move_id.line_id:
- if o.balance == 0:
- if val < o.date_created:
- val = o.date_created
- if val:
- res[order.id] = val
- return res
-
def _amount_all(self, cr, uid, ids, name, args, context=None):
tax_obj = self.pool.get('account.tax')
cur_obj = self.pool.get('res.currency')
@@ -171,325 +69,147 @@ class pos_order(osv.osv):
'amount_return':0.0,
'amount_tax':0.0,
}
- val = val1 = 0.0
+ val1 = val2 = 0.0
cur = order.pricelist_id.currency_id
for payment in order.statement_ids:
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:
val1 += line.price_subtotal_incl
- if order.price_type != 'tax_excluded':
- res[order.id]['amount_tax'] = reduce(lambda x, y: x+round(y['amount'], 2),
- tax_obj.compute_inv(cr, uid, line.product_id.taxes_id,
- line.price_unit * \
- (1-(line.discount or 0.0)/100.0), line.qty),
- res[order.id]['amount_tax'])
- 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.get('amount', 0.0)
- res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val)
- res[order.id]['amount_total'] = res[order.id]['amount_tax'] + cur_obj.round(cr, uid, cur, val1)
+ val2 += line.price_subtotal
+ res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val1-val2)
+ res[order.id]['amount_total'] = cur_obj.round(cr, uid, cur, val1)
return res
- def _sale_journal_get(self, cr, uid, context=None):
- """ To get sale journal for this order
- @return: journal """
- journal_obj = self.pool.get('account.journal')
- res = journal_obj.search(cr, uid, [('type', '=', 'sale')], limit=1)
+ def _default_sale_journal(self, cr, uid, context=None):
+ res = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'sale')], limit=1)
return res and res[0] or False
- def _shop_get(self, cr, uid, context=None):
- """ To get Shop for this order
- @return: Shop id """
+ def _default_shop(self, cr, uid, context=None):
res = self.pool.get('sale.shop').search(cr, uid, [])
return res and res[0] or False
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
- default.update({
+ d = {
'state': 'draft',
- 'partner_id': False,
'invoice_id': False,
'account_move': False,
'picking_id': False,
'statement_ids': [],
'nb_print': 0,
- 'pickings': [],
'name': self.pool.get('ir.sequence').get(cr, uid, 'pos.order'),
- })
- return super(pos_order, self).copy(cr, uid, id, default, context=context)
-
- def _get_v( self, cr, uid, ids, *args):
- """ Changed the Validation state of order
- @return: State """
- res_obj = self.pool.get('res.users')
- company_disc = self.browse(cr, uid, ids)
- list_jrnl = []
- r = {}
- if not company_disc:
- comp = res_obj.browse(cr, uid, uid).company_id.company_discount or 0.0
- else:
- comp = company_disc[0] and company_disc[0].company_id and company_disc[0].company_id.company_discount or 0.0
- cr.execute("SELECT discount FROM pos_order_line WHERE order_id = %s AND discount <= %s", (ids[0], comp))
- res = cr.fetchone()
- cr.execute("SELECT discount FROM pos_order_line WHERE order_id = %s AND discount > %s", (ids[0], comp))
- res2 = cr.fetchone()
- cr.execute("SELECT journal_id FROM account_bank_statement_line WHERE pos_statement_id = %s ", (ids[0], ))
- res3 = cr.fetchall()
- for r in res3:
- cr.execute("SELECT id FROM account_journal WHERE name = '%s' AND special_journal = 't'", (r[0], ))
- res3 = cr.fetchone()
- is_special = res3 and res3[0] or None
- if is_special:
- list_jrnl.append(is_special)
- for order in self.browse(cr, uid, ids):
- if order.state in ('paid', 'done', 'invoiced') and res and not res2 and not len(list_jrnl):
- r[order.id] = 'accepted'
- return r
+ }
+ d.update(default)
+ return super(pos_order, self).copy(cr, uid, id, d, context=context)
_columns = {
- 'name': fields.char('Order Description', size=64, required=True,
+ 'name': fields.char('Order Ref', size=64, required=True,
states={'draft': [('readonly', False)]}, readonly=True),
'company_id':fields.many2one('res.company', 'Company', required=True, readonly=True),
- 'num_sale': fields.char('Internal Note', size=64),
'shop_id': fields.many2one('sale.shop', 'Shop', required=True,
states={'draft': [('readonly', False)]}, readonly=True),
'date_order': fields.datetime('Date Ordered', readonly=True, select=True),
- 'date_validation': fields.function(_get_date_payment,
- string='Validation Date',
- type='date', select=True, store=True),
- 'date_payment': fields.function(_get_date_payment2,
- string='Payment Date',
- type='date', select=True, store=True),
- 'date_validity': fields.date('Validity Date', required=True),
'user_id': fields.many2one('res.users', 'Connected Salesman', help="Person who uses the the cash register. It could be a reliever, a student or an interim employee."),
- 'user_salesman_id': fields.many2one('res.users', 'Cashier', required=True, help="User who is logged into the system."),
- 'sale_manager': fields.many2one('res.users', 'Salesman Manager'),
'amount_tax': fields.function(_amount_all, string='Taxes', digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
'amount_total': fields.function(_amount_all, string='Total', multi='all'),
'amount_paid': fields.function(_amount_all, string='Paid', states={'draft': [('readonly', False)]}, readonly=True, digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
'amount_return': fields.function(_amount_all, 'Returned', digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
'lines': fields.one2many('pos.order.line', 'order_id', 'Order Lines', states={'draft': [('readonly', False)]}, readonly=True),
- 'price_type': fields.selection([
- ('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),
'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'),
- ('advance','Advance'),
- ('paid', 'Paid'),
- ('done', 'Done'),
+
+ 'state': fields.selection([('draft', 'New'),
+ ('paid', 'Done'),
+ ('done', 'Posted'),
('invoiced', 'Invoiced'),
- ('cancel', 'Cancel')],
+ ('cancel', 'Cancelled')],
'State', readonly=True),
+
'invoice_id': fields.many2one('account.invoice', 'Invoice'),
- 'account_move': fields.many2one('account.move', 'Account Entry', readonly=True),
- 'pickings': fields.one2many('stock.picking', 'pos_order', 'Picking', readonly=True),
- 'picking_id': fields.many2one('stock.picking', 'Last Output Picking', readonly=True),
- 'first_name': fields.char('First Name', size=64),
+ 'account_move': fields.many2one('account.move', 'Journal Entry', readonly=True),
+ 'picking_id': fields.many2one('stock.picking', 'Picking', readonly=True),
'note': fields.text('Internal Notes'),
'nb_print': fields.integer('Number of Print', readonly=True),
'sale_journal': fields.many2one('account.journal', 'Journal', required=True, states={'draft': [('readonly', False)]}, readonly=True),
- 'invoice_wanted': fields.boolean('Create Invoice'),
- 'note_2': fields.char('Customer Note', size=64),
- 'type_rec': fields.char('Type of Receipt', size=64),
- 'remboursed': fields.boolean('Remboursed'),
- 'contract_number': fields.char('Contract Number', size=512, select=1),
- 'journal_entry': fields.boolean('Journal Entry'),
}
- def _select_pricelist(self, cr, uid, context=None):
- """ To get default pricelist for the order
- @param name: Names of fields.
- @return: pricelist ID
- """
+ def _default_pricelist(self, cr, uid, context=None):
res = self.pool.get('sale.shop').search(cr, uid, [], context=context)
if res:
shop = self.pool.get('sale.shop').browse(cr, uid, res[0], context=context)
return shop.pricelist_id and shop.pricelist_id.id or False
return False
- def _journal_default(self, cr, uid, context=None):
- """ To get default pricelist for the order
- @param name: Names of fields.
- @return: journal ID
- """
- journal_list = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash')])
- return journal_list and journal_list[0] or False
-
_defaults = {
- 'user_salesman_id':lambda self, cr, uid, context: uid,
'user_id': lambda self, cr, uid, context: uid,
- 'sale_manager': lambda self, cr, uid, context: uid,
'state': 'draft',
- 'price_type': 'tax_excluded',
'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'pos.order'),
'date_order': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
- 'date_validity': lambda *a: (datetime.today() + relativedelta(months=+6)).strftime('%Y-%m-%d'),
'nb_print': 0,
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
- 'sale_journal': _sale_journal_get,
- 'invoice_wanted': False,
- 'shop_id': _shop_get,
- 'pricelist_id': _select_pricelist,
+ 'sale_journal': _default_sale_journal,
+ 'shop_id': _default_shop,
+ 'pricelist_id': _default_pricelist,
}
-
- def test_order_lines(self, cr, uid, order, context=None):
- """ Test order line is created or not for the order
- @param name: Names of fields.
- @return: True
- """
- if not order.lines:
- raise osv.except_osv(_('Error'), _('No order lines defined for this sale.'))
-
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'pos.order', order.id, 'paid', cr)
- return True
-
- def dummy_button(self, cr, uid, order, context=None):
- return True
-
def test_paid(self, cr, uid, ids, context=None):
- """ Test all amount is paid for this order
+ """A Point of Sale is paid when the sum
@return: True
"""
for order in self.browse(cr, uid, ids, context=context):
if order.lines and not order.amount_total:
return True
if (not order.lines) or (not order.statement_ids) or \
- Decimal(str(order.amount_total)) != Decimal(str(order.amount_paid)):
+ (abs(order.amount_total-order.amount_paid) > 0.00001):
return False
return True
- def _get_qty_differences(self, orders, old_picking):
- """check if the customer changed the product quantity """
- order_dict = {}
- for order in orders:
- for line in order.lines:
- order_dict[line.product_id.id] = line
-
- # check the quantity differences:
- diff_dict = {}
- for line in old_picking.move_lines:
- order_line = order_dict.get(line.product_id.id)
- if not order_line:
- deleted = True
- qty_to_delete_from_original_picking = line.product_qty
- diff_dict[line.product_id.id] = (deleted, qty_to_delete_from_original_picking)
- elif line.product_qty != order_line.qty:
- deleted = False
- qty_to_delete_from_original_picking = line.product_qty - order_line.qty
- diff_dict[line.product_id.id] = (deleted, qty_to_delete_from_original_picking)
-
- return diff_dict
-
- def _split_picking(self, cr, uid, ids, context, old_picking, diff_dict):
- """if the customer changes the product quantity, split the picking in two"""
- # create a copy of the original picking and adjust the product qty:
- picking_model = self.pool.get('stock.picking')
- defaults = {
- 'note': "Partial picking from customer", # add a note to tell why we create a new picking
- 'name': self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.out'), # increment the sequence
- }
-
- new_picking_id = picking_model.copy(cr, uid, old_picking.id, defaults) # state = 'draft'
- new_picking = picking_model.browse(cr, uid, new_picking_id, context=context)
-
- for line in new_picking.move_lines:
- p_id = line.product_id.id
- if p_id in diff_dict:
- diff = diff_dict[p_id]
- deleted = diff[0]
- qty_to_del = diff[1]
- if deleted: # product has been deleted (customer didn't took it):
- # delete this product from old picking:
- for old_line in old_picking.move_lines:
- if old_line.product_id.id == p_id:
- old_line.write({'state': 'draft'}, context=context) # cannot delete if not draft
- old_line.unlink(context=context)
- elif qty_to_del > 0: # product qty has been modified (customer took less than the ordered quantity):
- # subtract qty from old picking:
- for old_line in old_picking.move_lines:
- if old_line.product_id.id == p_id:
- old_line.write({'product_qty': old_line.product_qty - qty_to_del}, context=context)
- # add qty to new picking:
- line.write({'product_qty': qty_to_del}, context=context)
- else: # product hasn't changed (customer took it without any change):
- # delete this product from new picking:
- line.unlink(context=context)
- else:
- # delete it in the new picking:
- line.unlink(context=context)
-
def create_picking(self, cr, uid, ids, context=None):
"""Create a picking for each order and validate it."""
picking_obj = self.pool.get('stock.picking')
- property_obj = self.pool.get("ir.property")
- move_obj = self.pool.get('stock.move')
- pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.out')
- orders = self.browse(cr, uid, ids, context=context)
partner_obj = self.pool.get('res.partner')
- for order in orders:
+ move_obj = self.pool.get('stock.move')
+
+ for order in self.browse(cr, uid, ids, context=context):
addr = order.partner_id and partner_obj.address_get(cr, uid, [order.partner_id.id], ['delivery']) or {}
- if not order.picking_id:
- new = True
- picking_id = picking_obj.create(cr, uid, {
- 'name': pick_name,
- 'origin': order.name,
- 'address_id': addr.get('delivery',False),
- 'type': 'out',
+ picking_id = picking_obj.create(cr, uid, {
+ 'origin': order.name,
+ 'address_id': addr.get('delivery',False),
+ 'type': 'out',
+ 'company_id': order.company_id.id,
+ 'move_type': 'direct',
+ 'note': order.note or "",
+ 'invoice_state': 'none',
+ 'auto_picking': True,
+ }, context=context)
+ self.write(cr, uid, [order.id], {'picking_id': picking_id}, context=context)
+ location_id = order.shop_id.warehouse_id.lot_stock_id.id
+ output_id = order.shop_id.warehouse_id.lot_output_id.id
+
+ for line in order.lines:
+ if line.product_id and line.product_id.type == 'service':
+ continue
+ if line.qty < 0:
+ location_id, output_id = output_id, location_id
+
+ move_obj.create(cr, uid, {
+ 'name': line.name,
+ 'product_uom': line.product_id.uom_id.id,
+ 'product_uos': line.product_id.uom_id.id,
+ 'picking_id': picking_id,
+ 'product_id': line.product_id.id,
+ 'product_uos_qty': abs(line.qty),
+ 'product_qty': abs(line.qty),
+ 'tracking_id': False,
'state': 'draft',
- 'move_type': 'direct',
- 'note': 'POS notes ' + (order.note or ""),
- 'invoice_state': 'none',
- 'auto_picking': True,
- 'pos_order': order.id,
+ 'location_id': location_id,
+ 'location_dest_id': output_id,
}, context=context)
- self.write(cr, uid, [order.id], {'picking_id': picking_id}, context=context)
- else:
- picking_id = order.picking_id.id
- picking_obj.write(cr, uid, [picking_id], {'auto_picking': True}, context=context)
- picking = picking_obj.browse(cr, uid, [picking_id], context=context)[0]
- new = False
-
- # split the picking (if product quantity has changed):
- diff_dict = self._get_qty_differences(orders, picking)
- if diff_dict:
- self._split_picking(cr, uid, ids, context, picking, diff_dict)
-
- if new:
- for line in order.lines:
- if line.product_id and line.product_id.type == 'service':
- continue
- prop_ids = property_obj.search(cr, uid, [('name', '=', 'property_stock_customer')], context=context)
- val = property_obj.browse(cr, uid, prop_ids[0], context=context).value_reference
- cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w WHERE w.lot_stock_id = s.id AND w.id = %s", (order.shop_id.warehouse_id.id, ))
- res = cr.fetchone()
- location_id = res and res[0] or None
- stock_dest_id = val.id
- if line.qty < 0:
- location_id, stock_dest_id = stock_dest_id, location_id
- move_obj.create(cr, uid, {
- 'name': '(POS %d)' % (order.id, ),
- 'product_uom': line.product_id.uom_id.id,
- 'product_uos': line.product_id.uom_id.id,
- 'picking_id': picking_id,
- 'product_id': line.product_id.id,
- 'product_uos_qty': abs(line.qty),
- 'product_qty': abs(line.qty),
- 'tracking_id': False,
- 'pos_line_id': line.id,
- 'state': 'waiting',
- 'location_id': location_id,
- 'location_dest_id': stock_dest_id,
- 'prodlot_id': line.prodlot_id and line.prodlot_id.id or False
- }, context=context)
+ if line.qty < 0:
+ location_id, output_id = output_id, location_id
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
@@ -497,36 +217,27 @@ class pos_order(osv.osv):
return True
def set_to_draft(self, cr, uid, ids, *args):
- """ Changes order state to draft
- @return: True
- """
if not len(ids):
return False
+ for order in self.browse(cr, uid, ids, context=context):
+ if order.state<>'cancel':
+ raise osv.except_osv(_('Error!'), _('In order to set to draft a sale, it must be cancelled.'))
self.write(cr, uid, ids, {'state': 'draft'})
wf_service = netsvc.LocalService("workflow")
for i in ids:
wf_service.trg_create(uid, 'pos.order', i, cr)
return True
- def button_invalidate(self, cr, uid, ids, *args):
- """ Check the access for the sale order
- @return: True
- """
- res_obj = self.pool.get('res.company')
- try:
- part_company = res_obj.browse(cr, uid, uid) and res_obj.browse(cr, uid, uid).parent_id and res_obj.browse(cr, uid, uid).parent_id.id or None
- except Exception:
- raise osv.except_osv(_('Error'), _('You don\'t have enough access to validate this sale!'))
- if part_company:
- raise osv.except_osv(_('Error'), _('You don\'t have enough access to validate this sale!'))
- return True
-
def cancel_order(self, cr, uid, ids, context=None):
""" Changes order state to cancel
@return: True
"""
+ stock_picking_obj = self.pool.get('stock.picking')
+ for order in self.browse(cr, uid, ids, context=context):
+ wf_service.trg_validate(uid, 'stock.picking', order.picking_id.id, 'button_cancel', cr)
+ if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel':
+ raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.'))
self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
- self.cancel_picking(cr, uid, ids, context=context)
return True
def add_payment(self, cr, uid, order_id, data, context=None):
@@ -538,28 +249,19 @@ class pos_order(osv.osv):
curr_c = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
curr_company = curr_c.id
order = self.browse(cr, uid, order_id, context=context)
- if not order.num_sale and data['num_sale']:
- self.write(cr, uid, order_id, {'num_sale': data['num_sale']}, context=context)
ids_new = []
args = {
'amount': data['amount'],
}
if 'payment_date' in data.keys():
args['date'] = data['payment_date']
- if 'payment_name' in data.keys():
- args['name'] = data['payment_name'] + ' ' + order.name
+ args['name'] = order.name
+ if data.get('payment_name', False):
+ args['name'] = args['name'] + ': ' + data['payment_name']
account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context)
args['account_id'] = order.partner_id and order.partner_id.property_account_receivable \
and order.partner_id.property_account_receivable.id or account_def.id or curr_c.account_receivable.id
- if data.get('is_acc', False):
- args['is_acc'] = data['is_acc']
- args['account_id'] = prod_obj.browse(cr, uid, data['product_id'], context=context).property_account_income \
- and prod_obj.browse(cr, uid, data['product_id'], context=context).property_account_income.id
- if not args['account_id']:
- raise osv.except_osv(_('Error'), _('Please provide an account for the product: %s')% \
- (prod_obj.browse(cr, uid, data['product_id'], context=context).name))
args['partner_id'] = order.partner_id and order.partner_id.id or None
- args['ref'] = order.contract_number or None
statement_id = statement_obj.search(cr,uid, [
('journal_id', '=', data['journal']),
@@ -584,58 +286,39 @@ class pos_order(osv.osv):
return statement_id
- def add_product(self, cr, uid, order_id, product_id, qty, context=None):
-
- """Create a new order line the order"""
-
- line_obj = self.pool.get('pos.order.line')
- values = self.read(cr, uid, order_id, ['partner_id', 'pricelist_id'])
-
- pricelist = values['pricelist_id'] and values['pricelist_id'][0]
- product = values['partner_id'] and values['partner_id'][0]
-
- price = line_obj.price_by_product(cr, uid, [],
- pricelist, product_id, qty, product)
-
- order_line_id = line_obj.create(cr, uid, {
- 'order_id': order_id,
- 'product_id': product_id,
- 'qty': qty,
- 'price_unit': price,
- }, context=context)
- return order_line_id, price
-
def refund(self, cr, uid, ids, context=None):
-
"""Create a copy of order for refund order"""
-
clone_list = []
line_obj = self.pool.get('pos.order.line')
-
for order in self.browse(cr, uid, ids, context=context):
clone_id = self.copy(cr, uid, order.id, {
'name': order.name + ' REFUND',
- 'date_order': time.strftime('%Y-%m-%d'),
- 'state': 'draft',
- 'note': 'REFUND\n'+ (order.note or ''),
- 'invoice_id': False,
- 'nb_print': 0,
- 'statement_ids': False,
- }, context=context)
+ }, context=context)
clone_list.append(clone_id)
-
for clone in self.browse(cr, uid, clone_list, context=context):
for order_line in clone.lines:
line_obj.write(cr, uid, [order_line.id], {
'qty': -order_line.qty
- }, context=context)
- return clone_list
+ }, context=context)
+
+ new_order = ','.join(map(str,clone_list))
+ abs = {
+ #'domain': "[('id', 'in', ["+new_order+"])]",
+ 'name': _('Return Products'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'pos.order',
+ 'res_id':clone_list[0],
+ 'view_id': False,
+ 'context':context,
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ }
+ return abs
def action_invoice(self, cr, uid, ids, context=None):
-
- """Create a invoice of order """
-
inv_ref = self.pool.get('account.invoice')
inv_line_ref = self.pool.get('account.invoice.line')
product_obj = self.pool.get('product.product')
@@ -675,35 +358,51 @@ class pos_order(osv.osv):
'quantity': line.qty,
}
inv_name = product_obj.name_get(cr, uid, [line.product_id.id], context=context)[0][1]
-
inv_line.update(inv_line_ref.product_id_change(cr, uid, [],
line.product_id.id,
line.product_id.uom_id.id,
line.qty, partner_id = order.partner_id.id,
fposition_id=order.partner_id.property_account_position.id)['value'])
+ if line.product_id.description_sale:
+ inv_line['note'] = line.product_id.description_sale
inv_line['price_unit'] = line.price_unit
inv_line['discount'] = line.discount
inv_line['name'] = inv_name
inv_line['invoice_line_tax_id'] = ('invoice_line_tax_id' in inv_line)\
and [(6, 0, inv_line['invoice_line_tax_id'])] or []
inv_line_ref.create(cr, uid, inv_line, context=context)
+ inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context)
- for i in inv_ids:
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.invoice', i, 'invoice_open', cr)
- return inv_ids
+ if not inv_ids: return {}
+ mod_obj = self.pool.get('ir.model.data')
+ res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form')
+ res_id = res and res[1] or False
+ return {
+ 'name': _('PoS Invoices'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'view_id': res_id,
+ 'res_model': 'account.invoice',
+ 'context': "{'type':'out_invoice'}",
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ 'res_id': inv_ids and inv_ids[0] or False,
+ }
def create_account_move(self, cr, uid, ids, context=None):
- """Create a account move line of order """
+ """Create a account move line of order grouped by products or not."""
account_move_obj = self.pool.get('account.move')
account_move_line_obj = self.pool.get('account.move.line')
account_period_obj = self.pool.get('account.period')
+ period = account_period_obj.find(cr, uid, context=context)[0]
account_tax_obj = self.pool.get('account.tax')
res_obj=self.pool.get('res.users')
property_obj=self.pool.get('ir.property')
- period = account_period_obj.find(cr, uid, context=context)[0]
for order in self.browse(cr, uid, ids, context=context):
+ if order.state<>'paid': continue
+
curr_c = res_obj.browse(cr, uid, uid).company_id
comp_id = res_obj.browse(cr, order.user_id.id, order.user_id.id).company_id
comp_id = comp_id and comp_id.id or False
@@ -716,19 +415,14 @@ class pos_order(osv.osv):
# Create an entry for the sale
move_id = account_move_obj.create(cr, uid, {
'journal_id': order.sale_journal.id,
- 'period_id': period,
- }, context=context)
+ }, context=context)
# Create an move for each order line
for line in order.lines:
tax_amount = 0
taxes = [t for t in line.product_id.taxes_id]
- if order.price_type == 'tax_excluded':
- computed_taxes = account_tax_obj.compute_all(
- cr, uid, taxes, line.price_unit, line.qty)['taxes']
- else:
- computed_taxes = account_tax_obj.compute_inv(
- cr, uid, taxes, line.price_unit, line.qty)
+ computed = account_tax_obj.compute_all(cr, uid, taxes, line.price_unit * (100.0-line.discount) / 100.0, line.qty)
+ computed_taxes = computed['taxes']
for tax in computed_taxes:
tax_amount += round(tax['amount'], 2)
@@ -740,10 +434,7 @@ class pos_order(osv.osv):
group_tax[group_key] += round(tax['amount'], 2)
else:
group_tax[group_key] = round(tax['amount'], 2)
- if order.price_type != 'tax_excluded':
- amount = line.price_subtotal - tax_amount
- else:
- amount = line.price_subtotal
+ amount = line.price_subtotal
# Search for the income account
if line.product_id.property_account_income.id:
@@ -773,11 +464,12 @@ class pos_order(osv.osv):
if tax_code_id:
break
+
# Create a move for the line
account_move_line_obj.create(cr, uid, {
- 'name': "aa"+order.name,
+ 'name': line.name,
'date': order.date_order[:10],
- 'ref': order.contract_number or order.name,
+ 'ref': order.name,
'quantity': line.qty,
'product_id': line.product_id.id,
'move_id': move_id,
@@ -804,9 +496,9 @@ class pos_order(osv.osv):
continue
account_move_line_obj.create(cr, uid, {
- 'name': "bb" + order.name,
+ 'name': "Tax" + line.name,
'date': order.date_order[:10],
- 'ref': order.contract_number or order.name,
+ 'ref': order.name,
'product_id':line.product_id.id,
'quantity': line.qty,
'move_id': move_id,
@@ -825,9 +517,9 @@ class pos_order(osv.osv):
(tax_code_pos, base_code_pos, account_pos)= (0, 1, 2)
for key, amount in group_tax.items():
account_move_line_obj.create(cr, uid, {
- 'name': "cc" + order.name,
+ 'name': 'Tax',
'date': order.date_order[:10],
- 'ref': order.contract_number or order.name,
+ 'ref': order.name,
'move_id': move_id,
'company_id': comp_id,
'quantity': line.qty,
@@ -843,9 +535,9 @@ class pos_order(osv.osv):
# counterpart
to_reconcile.append(account_move_line_obj.create(cr, uid, {
- 'name': "dd" + order.name,
+ 'name': order.name,
'date': order.date_order[:10],
- 'ref': order.contract_number or order.name,
+ 'ref': order.name,
'move_id': move_id,
'company_id': comp_id,
'account_id': order_account,
@@ -857,71 +549,16 @@ class pos_order(osv.osv):
'period_id': period,
'partner_id': order.partner_id and order.partner_id.id or False
}, context=context))
-
-
- # search the account receivable for the payments:
- account_receivable = order.sale_journal.default_credit_account_id.id
- if not account_receivable:
- raise osv.except_osv(_('Error !'),
- _('There is no receivable account defined for this journal:'\
- ' "%s" (id:%d)') % (order.sale_journal.name, order.sale_journal.id, ))
- for payment in order.statement_ids:
- # Create one entry for the payment
- if payment.is_acc:
- continue
- account_move_obj.create(cr, uid, {
- 'journal_id': payment.statement_id.journal_id.id,
- 'period_id': period,
- }, context=context)
-
- for stat_l in order.statement_ids:
- if stat_l.is_acc and len(stat_l.move_ids):
- for st in stat_l.move_ids:
- for s in st.line_id:
- if s.credit:
- account_move_line_obj.copy(cr, uid, s.id, {
- 'debit': s.credit,
- 'statement_id': False,
- 'credit': s.debit
- })
- account_move_line_obj.copy(cr, uid, s.id, {
- 'statement_id': False,
- 'account_id': order_account
- })
-
- self.write(cr, uid, order.id, {'state':'done'}, context=context)
+ self.write(cr, uid, order.id, {'state':'done', 'account_move': move_id}, context=context)
return True
- def cancel_picking(self, cr, uid, ids, context=None):
- stock_picking_obj = self.pool.get('stock.picking')
- for order in self.browse(cr, uid, ids, context=context):
- for picking in order.pickings:
- stock_picking_obj.unlink(cr, uid, [picking.id], context=context)
- return True
-
-
def action_payment(self, cr, uid, ids, context=None):
- vals = {'state': 'payment'}
- sequence_obj = self.pool.get('ir.sequence')
- for pos in self.browse(cr, uid, ids, context=context):
- create_contract_nb = False
- for line in pos.lines:
- if line.product_id.product_type == 'MD':
- create_contract_nb = True
- break
- if create_contract_nb:
- seq = sequence_obj.get(cr, uid, 'pos.user_%s' % pos.user_salesman_id.login)
- vals['contract_number'] = '%s-%s' % (pos.user_salesman_id.login, seq)
- self.write(cr, uid, ids, vals, context=context)
+ return self.write(cr, uid, ids, {'state': 'payment'}, context=context)
def action_paid(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
- if context.get('flag', False):
- self.create_picking(cr, uid, ids, context=None)
- self.write(cr, uid, ids, {'state': 'paid'}, context=context)
- else:
- context['flag'] = True
+ context = context or {}
+ self.create_picking(cr, uid, ids, context=None)
+ self.write(cr, uid, ids, {'state': 'paid'}, context=context)
return True
def action_cancel(self, cr, uid, ids, context=None):
@@ -929,43 +566,25 @@ class pos_order(osv.osv):
return True
def action_done(self, cr, uid, ids, context=None):
- for order in self.browse(cr, uid, ids, context=context):
- if not order.journal_entry:
- self.create_account_move(cr, uid, ids, context=None)
+ self.create_account_move(cr, uid, ids, context=context)
return True
- def compute_state(self, cr, uid, id):
- cr.execute("SELECT act.id, act.name FROM wkf_activity act "
- "INNER JOIN wkf_workitem item ON act.id = item.act_id "
- "INNER JOIN wkf_instance inst ON item.inst_id = inst.id "
- "INNER JOIN wkf ON inst.wkf_id = wkf.id "
- "WHERE wkf.osv = 'pos.order' AND inst.res_id = %s "
- "ORDER BY act.name", (id, ))
- return [name for id, name in cr.fetchall()]
-
pos_order()
class account_bank_statement(osv.osv):
_inherit = 'account.bank.statement'
_columns= {
- 'user_id': fields.many2one('res.users', ondelete='cascade', string='User', readonly=True),
+ 'user_id': fields.many2one('res.users', 'User', readonly=True),
}
_defaults = {
- 'user_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).id
+ 'user_id': lambda self,cr,uid,c={}: uid
}
account_bank_statement()
class account_bank_statement_line(osv.osv):
_inherit = 'account.bank.statement.line'
- def _get_statement_journal(self, cr, uid, ids, context, *a):
- res = {}
- for line in self.browse(cr, uid, ids):
- res[line.id] = line.statement_id and line.statement_id.journal_id and line.statement_id.journal_id.name or None
- return res
_columns= {
- 'journal_id': fields.function(_get_statement_journal,store=True, string='Journal', type='char', size=64),
- 'am_out': fields.boolean("To count"),
- 'is_acc': fields.boolean("Is accompte"),
+ 'journal_id': fields.related('statement_id','journal_id','name', store=True, string='Journal', type='char', size=64),
'pos_statement_id': fields.many2one('pos.order', ondelete='cascade'),
}
account_bank_statement_line()
@@ -973,275 +592,84 @@ account_bank_statement_line()
class pos_order_line(osv.osv):
_name = "pos.order.line"
_description = "Lines of Point of Sale"
-
- def _get_amount(self, cr, uid, ids, field_name, arg, context=None):
- res = {}
- for line in self.browse(cr, uid, ids, context=context):
- price = self.price_by_product(cr, uid, ids, line.order_id.pricelist_id.id, line.product_id.id, line.qty, line.order_id.partner_id.id)
- res[line.id] = price
- return res
-
- def _amount_line_ttc(self, cr, uid, ids, field_name, arg, context=None):
- res = dict.fromkeys(ids, 0.0)
- account_tax_obj = self.pool.get('account.tax')
- self.price_by_product_multi(cr, uid, ids)
- for line in self.browse(cr, uid, ids, context=context):
- tax_amount = 0.0
- taxes = [t for t in line.product_id.taxes_id]
- if line.qty == 0.0:
- continue
- computed_taxes = account_tax_obj.compute_all(cr, uid, taxes, line.price_unit, line.qty)['taxes']
- for tax in computed_taxes:
- tax_amount += tax['amount']
- if line.discount != 0.0:
- res[line.id] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
- else:
- res[line.id] = line.price_unit*line.qty
- res[line.id] = res[line.id] + tax_amount
- return res
-
- def _amount_line(self, cr, uid, ids, field_name, arg, context=None):
- res = {}
- self.price_by_product_multi(cr, uid, ids)
- for line in self.browse(cr, uid, ids, context=context):
- if line.discount!=0.0:
- res[line.id] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
- else:
- res[line.id] = line.price_unit * line.qty
- return res
+ _rec_name = "product_id"
def _amount_line_all(self, cr, uid, ids, field_names, arg, context=None):
res = dict([(i, {}) for i in ids])
account_tax_obj = self.pool.get('account.tax')
-
- self.price_by_product_multi(cr, uid, ids)
+ cur_obj = self.pool.get('res.currency')
for line in self.browse(cr, uid, ids, context=context):
- for f in field_names:
- if f == 'price_subtotal':
- if line.discount != 0.0:
- res[line.id][f] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
- else:
- res[line.id][f] = line.price_unit * line.qty
- elif f == 'price_subtotal_incl':
- taxes = [t for t in line.product_id.taxes_id]
- if line.qty == 0.0:
- res[line.id][f] = 0.0
- continue
- price = line.price_unit * (1 - (line.discount or 0.0) / 100.0)
- computed_taxes = account_tax_obj.compute_all(cr, uid, taxes, price, line.qty)
- cur = line.order_id.pricelist_id.currency_id
- res[line.id][f] = self.pool.get('res.currency').round(cr, uid, cur, computed_taxes['total'])
+ taxes = line.product_id.taxes_id
+ price = line.price_unit * (1 - (line.discount or 0.0) / 100.0)
+ taxes = account_tax_obj.compute_all(cr, uid, line.product_id.taxes_id, price, line.qty, product=line.product_id, partner=line.order_id.partner_id or False)
+
+ cur = line.order_id.pricelist_id.currency_id
+ res[line.id]['price_subtotal'] = cur_obj.round(cr, uid, cur, taxes['total'])
+ res[line.id]['price_subtotal_incl'] = cur_obj.round(cr, uid, cur, taxes['total_included'])
return res
- def price_by_product_multi(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
- res = {}.fromkeys(ids, 0.0)
- lines = self.browse(cr, uid, ids, context=context)
+ def onchange_product_id(self, cr, uid, ids, pricelist, product_id, qty=0, partner_id=False, context=None):
+ context = context or {}
+ if not product_id:
+ return {}
+ if not pricelist:
+ raise osv.except_osv(_('No Pricelist !'),
+ _('You have to select a pricelist in the sale form !\n' \
+ 'Please set one before choosing a product.'))
- pricelist_ids = [line.order_id.pricelist_id.id for line in lines]
- products_by_qty_by_partner = [(line.product_id.id, line.qty, line.order_id.partner_id.id) for line in lines]
+ price = self.pool.get('product.pricelist').price_get(cr, uid, [pricelist],
+ product_id, qty or 1.0, partner_id)[pricelist]
- price_get_multi_res = self.pool.get('product.pricelist').price_get_multi(cr, uid, pricelist_ids, products_by_qty_by_partner, context=context)
+ result = self.onchange_qty(cr, uid, ids, product_id, 0.0, qty, price, context=context)
+ result['value']['price_unit'] = price
+ return result
- for line in lines:
- pricelist = line.order_id.pricelist_id.id
- product_id = line.product_id
+ def onchange_qty(self, cr, uid, ids, product, discount, qty, price_unit, context=None):
+ result = {}
+ if not product:
+ return result
+ account_tax_obj = self.pool.get('account.tax')
+ cur_obj = self.pool.get('res.currency')
- if not product_id:
- res[line.id] = 0.0
- continue
- if not pricelist:
- raise osv.except_osv(_('No Pricelist !'),
- _('You have to select a pricelist in the sale form !\n' \
- 'Please set one before choosing a product.'))
+ prod = self.pool.get('product.product').browse(cr, uid, product, context=context)
- #old_price = self.pool.get('product.pricelist').price_get(cr, uid, [pricelist], product_id.id, qty or 1.0, partner_id, {'uom': uom_id})[pricelist]
- #print "prod_id: %s, pricelist: %s, price: %s" % (product_id.id, pricelist, price)
- price = price_get_multi_res[line.product_id.id][pricelist]
- #print "prod_id: %s, pricelist: %s, price2: %s" % (product_id.id, pricelist, price2)
+ taxes = prod.taxes_id
+ price = price_unit * (1 - (discount or 0.0) / 100.0)
+ taxes = account_tax_obj.compute_all(cr, uid, prod.taxes_id, price, qty, product=prod, partner=False)
- #if old_price != price:
- # raise Exception('old_price != price')
-
- unit_price = price or product_id.list_price
- res[line.id] = unit_price
- if unit_price is False:
- raise osv.except_osv(_('No valid pricelist line found !'),
- _("Couldn't find a pricelist line matching this product" \
- " and quantity.\nYou have to change either the product," \
- " the quantity or the pricelist."))
- return res
-
- def price_by_product(self, cr, uid, ids, pricelist, product_id, qty=0, partner_id=False):
- if not product_id:
- return 0.0
- if not pricelist:
- raise osv.except_osv(_('No Pricelist !'),
- _('You have to select a pricelist in the sale form !\n' \
- 'Please set one before choosing a product.'))
- p_obj = self.pool.get('product.product').browse(cr, uid, [product_id])[0]
- uom_id = p_obj.uom_po_id.id
- price = self.pool.get('product.pricelist').price_get(cr, uid,
- [pricelist], product_id, qty or 1.0, partner_id, {'uom': uom_id})[pricelist]
- unit_price=price or p_obj.list_price
- if unit_price is False:
- raise osv.except_osv(_('No valid pricelist line found !'),
- _("Couldn't find a pricelist line matching this product" \
- " and quantity.\nYou have to change either the product," \
- " the quantity or the pricelist."))
- return unit_price
-
- def onchange_product_id(self, cr, uid, ids, pricelist, product_id, qty=0, partner_id=False):
- price = self.price_by_product(cr, uid, ids, pricelist, product_id, qty, partner_id)
- self.write(cr, uid, ids, {'price_unit':price})
- pos_stot = (price * qty)
- return {'value': {'price_unit': price, 'price_subtotal_incl': pos_stot}}
-
- def onchange_subtotal(self, cr, uid, ids, discount, price, pricelist, qty,partner_id, product_id, *a):
- prod_obj = self.pool.get('product.product')
- price_f = self.price_by_product(cr, uid, ids, pricelist, product_id, qty, partner_id)
- prod_id = ''
- if product_id:
- prod_id = prod_obj.browse(cr, uid, product_id).disc_controle
- disc = 0.0
- if (disc != 0.0 or prod_id) and price_f > 0:
- disc = 100 - (price/price_f*100)
- return {'value': {'discount': disc, 'price_unit': price_f}}
- return {}
-
- def onchange_ded(self, cr, uid, ids, val_ded, price_u, *a):
- res_obj = self.pool.get('res.users')
- comp = res_obj.browse(cr, uid, uid).company_id.company_discount or 0.0
- val = 0.0
- if val_ded and price_u:
- val=100.0 * val_ded / price_u
- if val > comp:
- return {'value': {'discount': val, 'notice': '' }}
- return {'value': {'discount': val}}
-
- def onchange_discount(self, cr, uid, ids, discount, price, *a):
- pos_order = self.pool.get('pos.order.line')
- res_obj = self.pool.get('res.users')
- company_disc = pos_order.browse(cr,uid,ids)
- if discount:
- if not company_disc:
- comp=res_obj.browse(cr,uid,uid).company_id.company_discount or 0.0
- else:
- comp= company_disc[0] and company_disc[0].order_id.company_id and company_disc[0].order_id.company_id.company_discount or 0.0
-
- if discount > comp :
- return {'value': {'notice': '', 'price_ded': price * discount * 0.01 or 0.0 }}
- else:
- return {'value': {'notice': 'Minimum Discount', 'price_ded': price * discount * 0.01 or 0.0 }}
- else :
- return {'value': {'notice': 'No Discount', 'price_ded': price * discount * 0.01 or 0.0}}
-
- def onchange_qty(self, cr, uid, ids, discount, qty, price, context=None):
- subtotal = qty * price
- if discount:
- subtotal = subtotal - (subtotal * discount / 100)
- return {'value': {'price_subtotal_incl': subtotal}}
+ result['price_subtotal'] = taxes['total']
+ result['price_subtotal_incl'] = taxes['total_included']
+ return {'value': result}
_columns = {
- 'name': fields.char('Line Description', size=512),
'company_id': fields.many2one('res.company', 'Company', required=True),
- 'notice': fields.char('Discount Notice', size=128, required=True),
- 'serial_number': fields.char('Serial Number', size=128),
+ 'name': fields.char('Line No', size=32, required=True),
+ 'notice': fields.char('Discount Notice', size=128),
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], required=True, change_default=True),
- 'price_unit': fields.function(_get_amount, string='Unit Price', store=True),
- 'price_ded': fields.float('Discount(Amount)', digits_compute=dp.get_precision('Point Of Sale')),
- 'qty': fields.float('Quantity'),
- 'qty_rfd': fields.float('Refunded Quantity'),
- 'price_subtotal': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal w/o Tax'),
- 'price_subtotal_incl': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal'),
+ 'price_unit': fields.float(string='Unit Price', digits=(16, 2)),
+ 'qty': fields.float('Quantity', digits=(16, 2)),
+ 'price_subtotal': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal w/o Tax', store=True),
+ 'price_subtotal_incl': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal', store=True),
'discount': fields.float('Discount (%)', digits=(16, 2)),
'order_id': fields.many2one('pos.order', 'Order Ref', ondelete='cascade'),
'create_date': fields.datetime('Creation Date', readonly=True),
- 'prodlot_id': fields.many2one('stock.production.lot', 'Production Lot', help="You can specify Production lot for stock move created when you validate the pos order"),
}
_defaults = {
'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'pos.order.line'),
'qty': lambda *a: 1,
'discount': lambda *a: 0.0,
- 'price_ded': lambda *a: 0.0,
- 'notice': lambda *a: 'No Discount',
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
- }
+ }
- def create(self, cr, user, vals, context=None):
- if vals.get('product_id'):
- return super(pos_order_line, self).create(cr, user, vals, context=context)
- return False
-
- def write(self, cr, user, ids, values, context=None):
- if 'product_id' in values and not values['product_id']:
- return False
- return super(pos_order_line, self).write(cr, user, ids, values, context=context)
-
def copy_data(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
default.update({
- 'prodlot_id': False,
'name': self.pool.get('ir.sequence').get(cr, uid, 'pos.order.line')
})
return super(pos_order_line, self).copy_data(cr, uid, id, default, context=context)
- def _scan_product(self, cr, uid, ean, qty, order):
- # search pricelist_id
- product_obj = self.pool.get('product.product')
- pricelist_id = self.pool.get('pos.order').read(cr, uid, [order], ['pricelist_id'] )
- if not pricelist_id:
- return False
-
- new_line = True
-
- product_id = product_obj.search(cr, uid, [('ean13','=', ean)])
- if not product_id:
- return False
-
- # search price product
- product = product_obj.read(cr, uid, product_id)
- product_name = product[0]['name']
- price = self.price_by_product(cr, uid, 0, pricelist_id[0]['pricelist_id'][0], product_id[0], 1)
-
- order_line_ids = self.search(cr, uid, [('name', '=', product_name), ('order_id', '=' ,order)])
- if order_line_ids:
- new_line = False
- order_line_id = order_line_ids[0]
- qty += self.read(cr, uid, order_line_ids[0], ['qty'])['qty']
-
- if new_line:
- vals = {'product_id': product_id[0],
- 'price_unit': price,
- 'qty': qty,
- 'name': product_name,
- 'order_id': order,
- }
- line_id = self.create(cr, uid, vals)
- if not line_id:
- raise osv.except_osv(_('Error'), _('Create line failed !'))
- else:
- vals = {
- 'qty': qty,
- 'price_unit': price
- }
- line_id = self.write(cr, uid, order_line_id, vals)
- if not line_id:
- raise osv.except_osv(_('Error'), _('Modify line failed !'))
- line_id = order_line_id
-
- price_line = float(qty) * float(price)
- return {
- 'name': product_name,
- 'product_id': product_id[0],
- 'price': price,
- 'price_line': price_line ,
- 'qty': qty
- }
-
pos_order_line()
class product_product(osv.osv):
@@ -1249,20 +677,6 @@ class product_product(osv.osv):
_columns = {
'income_pdt': fields.boolean('Product for Input'),
'expense_pdt': fields.boolean('Product for Output'),
- 'am_out': fields.boolean('Control for Output Operations'),
- 'disc_controle': fields.boolean('Discount Control'),
- }
- _defaults = {
- 'disc_controle': True,
}
product_product()
-class stock_picking(osv.osv):
- _inherit = 'stock.picking'
- _columns = {
- 'pos_order': fields.many2one('pos.order', 'Pos order'),
- }
-
-stock_picking()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/point_of_sale_demo.xml b/addons/point_of_sale/point_of_sale_demo.xml
index e95ce05256f..fe38cb98cb1 100644
--- a/addons/point_of_sale/point_of_sale_demo.xml
+++ b/addons/point_of_sale/point_of_sale_demo.xml
@@ -4,185 +4,175 @@
-
-
+
+
- buy
-
- Cash In
-
- Cash In
-
-
-
-
- buy
-
- Cash Out
-
- Cash Out
-
-
+ buy
+
+ Cash In
+
+ Cash In
+
+
+
+
+ buy
+
+ Cash Out
+
+ Cash Out
+
+
-
- POS/019
- POS/019
- SAJ/2010/010
-
-
-
-
-
- none
-
- open
- out_invoice
- SAJ/2010/010
-
-
-
- /
-
-
-
-
-
-
- Invoice from POS: POS/019
-
-
-
-
- [PC1] Basic PC
-
-
-
-
-
-
-
-
-
-
-
-
- 2011-04-07
-
-
-
-
-
-
-
-
- paid
-
-
-
- POS/019
- tax_excluded
-
-
-
-
-
-
- 10
- open
-
-
-
-
-
-
-
-
- general
-
-
-
- Cash Journal - (test)
-
-
-
-
-
- Payment POS/019
-
-
-
-
- POS/019
-
-
-
- direct
-
- POS notes
- done
- out
-
-
- OUT/00019
- none
-
-
-
- POS/019
-
-
-
-
-
- 1
-
-
- done
-
-
-
- Stock move (POS 12)
-
-
-
-
-
-
-
- No Discount
-
-
-
-
-
- Order Line/07
-
-
+
+ POS/019
+ POS/019
+ SAJ/2010/010
+
+
+
+
+
+ none
+
+ open
+ out_invoice
+ SAJ/2010/010
+
+
+
+ /
+
+
+
+
+
+
+ Invoice from POS: POS/019
+
+
+
+
+ [PC1] Basic PC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ paid
+
+ POS/019
+ tax_excluded
+
+
+
+
+
+ 10
+ open
+
+
+
+
+
+
+
+
+ general
+
+
+
+ Cash Journal - (test)
+
+
+
+ Payment POS/019
+
+
+
+
+ POS/019
+
+
+
+ direct
+
+ POS notes
+ done
+ out
+
+
+ OUT/00019
+ none
+
+
+
+ POS/019
+
+
+
+
+
+ 1
+
+
+ done
+
+
+
+ Stock move (POS 12)
+
+
+
+
+
+
+
+ No Discount
+
+
+
+
+
+ Order Line/07
+
+
-
+
- tax_excluded
-
-
-
+
+
+
- tax_excluded
-
-
-
-
-
+
+
+
+
+ [PC3] Medium PC
@@ -218,6 +208,6 @@
0.10Discount Applied
-
+
diff --git a/addons/point_of_sale/point_of_sale_report.xml b/addons/point_of_sale/point_of_sale_report.xml
index 3e6a265b34e..b8d5456f1cd 100644
--- a/addons/point_of_sale/point_of_sale_report.xml
+++ b/addons/point_of_sale/point_of_sale_report.xml
@@ -96,17 +96,6 @@
menu="False"
rml="point_of_sale/report/pos_payment_report_user.rml"
/>
-
-
diff --git a/addons/point_of_sale/point_of_sale_sequence.xml b/addons/point_of_sale/point_of_sale_sequence.xml
index 399dccc634f..bf83fe17942 100644
--- a/addons/point_of_sale/point_of_sale_sequence.xml
+++ b/addons/point_of_sale/point_of_sale_sequence.xml
@@ -13,8 +13,8 @@
POS Orderpos.order
- POS/
- 3
+ POS
+ 4
@@ -24,8 +24,8 @@
POS order linepos.order.line
- Order Line/
- 2
+ POSL
+ 4
diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml
index a8552cddc15..ba2d2c0214f 100644
--- a/addons/point_of_sale/point_of_sale_view.xml
+++ b/addons/point_of_sale/point_of_sale_view.xml
@@ -13,51 +13,47 @@
form
-
+
-
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
@@ -74,22 +70,25 @@
-
-
-
-
+
+
+
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -116,8 +115,6 @@
-
-
@@ -132,13 +129,17 @@
search
-
-
+
+
+
+
+
+
+
+
-
-
@@ -153,65 +154,11 @@
-
+
-
-
- Point of Sale
- ir.actions.act_window
- pos.order
- form
- tree,form
-
- ['|',('state','=','advance')]
- {"search_default_user_id":uid}
-
-
-
-
-
- Accepted Sales
- ir.actions.act_window
- pos.order
- form
- tree,form
- [('state','=', 'paid')]
- {"search_default_user_id":uid}
-
-
-
- Point of Sale
- ir.actions.act_window
- pos.order
- form
- tree,form
- [('date_order','<=', time.strftime('%Y-%m-%d 23:59:59'))]
- {"search_default_user_id":uid}
-
-
-
-
- Point of Sale
- ir.actions.act_window
- pos.order
- form
- tree,form
- {"search_default_user_id":uid}
-
-
-
- Opened Sales
- ir.actions.act_window
- pos.order
- form
- form,tree
- {"search_default_user_id":uid}
-
-
-
Sale linespos.order.line
@@ -632,20 +579,6 @@
tree,calendar,form,graph[('date_order','like',time.strftime('%Y-%m'))]
-
-
- view.company.form.pos
- res.company
- form
-
-
-
-
-
-
-
-
- product.normal.form.inherit
@@ -657,8 +590,6 @@
-
-
@@ -693,7 +624,6 @@
-
@@ -712,7 +642,7 @@
id="menu_point_config_product" sequence="25" groups="group_pos_manager"/>
- Products
+ Products 'Take Money Out'ir.actions.act_windowproduct.productform
@@ -731,14 +661,14 @@
-
+
- Products
+ Products 'Put Money In'ir.actions.act_windowproduct.productform
@@ -757,24 +687,37 @@
-
+
+
+ Payment Methods
+ account.journal
+ form
+ tree,form
+ {'default_journal_user': 1}
+ [('journal_user','=', 1)]
+ Payment methods are defined by accounting journals having the field Payment Method checked.
+
+
+
+
POS Sales Linespos.order.line
@@ -782,7 +725,6 @@
-
@@ -802,6 +744,16 @@
+
+ All Sales Orders
+ ir.actions.act_window
+ pos.order
+ form
+ tree,form
+ []
+
+
+
Invoicesir.actions.act_window
diff --git a/addons/point_of_sale/point_of_sale_workflow.xml b/addons/point_of_sale/point_of_sale_workflow.xml
index c325c4951c9..4058af2696f 100644
--- a/addons/point_of_sale/point_of_sale_workflow.xml
+++ b/addons/point_of_sale/point_of_sale_workflow.xml
@@ -69,7 +69,7 @@
-
+ cancel
diff --git a/addons/point_of_sale/report/__init__.py b/addons/point_of_sale/report/__init__.py
index d7355af0357..171f323e337 100644
--- a/addons/point_of_sale/report/__init__.py
+++ b/addons/point_of_sale/report/__init__.py
@@ -32,11 +32,8 @@ import pos_sales_user
import pos_sales_user_today
import pos_payment_report_date
import pos_payment_report_user
-import pos_sales_user_today_current_user
-import pos_receipt_with_remboursment
-import pos_receipt_without_remboursment
import pos_report
import pos_order_report
import report_cash_register
-# 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/point_of_sale/report/pos_details.py b/addons/point_of_sale/report/pos_details.py
index 84f3de8258f..4c23a005674 100644
--- a/addons/point_of_sale/report/pos_details.py
+++ b/addons/point_of_sale/report/pos_details.py
@@ -97,7 +97,7 @@ class pos_details(report_sxw.rml_parse):
def _get_sum_dis_2(self,form,user):
res4=[]
- self.cr.execute ("select sum(pol.price_ded * pol.qty)" \
+ self.cr.execute ("select sum(pol.qty)" \
"from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt, res_users as ru,res_company as rc " \
"where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state IN ('paid') " \
"and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date >= %s and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date <= %s " \
@@ -215,4 +215,4 @@ class pos_details(report_sxw.rml_parse):
report_sxw.report_sxw('report.pos.details', 'pos.order', 'addons/point_of_sale_singer/report/pos_details.rml', parser=pos_details, header='internal')
-# 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/point_of_sale/report/pos_invoice.py b/addons/point_of_sale/report/pos_invoice.py
index 7a89b101956..0e1cd98fb47 100644
--- a/addons/point_of_sale/report/pos_invoice.py
+++ b/addons/point_of_sale/report/pos_invoice.py
@@ -55,4 +55,4 @@ class pos_invoice(report_sxw.rml_parse):
report_sxw.report_sxw('report.pos.invoice', 'pos.order', 'addons/account/report/account_print_invoice.rml', parser= pos_invoice)
-# 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/point_of_sale/report/pos_order_report.py b/addons/point_of_sale/report/pos_order_report.py
index 00681457495..ceb20a11a36 100644
--- a/addons/point_of_sale/report/pos_order_report.py
+++ b/addons/point_of_sale/report/pos_order_report.py
@@ -35,9 +35,7 @@ class pos_order_report(osv.osv):
'day': fields.char('Day', size=128, readonly=True),
'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
'product_id':fields.many2one('product.product', 'Product', readonly=True),
- 'state': fields.selection([('draft', 'Draft'), ('payment', 'Payment'),
- ('advance','Advance'),
- ('paid', 'Paid'), ('done', 'Done'), ('invoiced', 'Invoiced'), ('cancel', 'Cancel')],
+ 'state': fields.selection([('draft', 'New'), ('paid', 'Closed'), ('done', 'Synchronized'), ('invoiced', 'Invoiced'), ('cancel', 'Cancelled')],
'State'),
'user_id':fields.many2one('res.users', 'Salesman', readonly=True),
'price_total':fields.float('Total Price', readonly=True),
@@ -49,9 +47,6 @@ class pos_order_report(osv.osv):
'product_qty':fields.integer('# of Qty', readonly=True),
'journal_id': fields.many2one('account.journal', 'Journal'),
'delay_validation': fields.integer('Delay Validation'),
- 'delay_payment': fields.integer('Delay Payment'),
- 'date_validation': fields.date('Validation Date', required=True),
- 'date_payment': fields.date('Payment Date', required=True),
}
_order = 'date desc'
@@ -65,10 +60,9 @@ class pos_order_report(osv.osv):
to_date(to_char(s.date_order, 'dd-MM-YYYY'),'dd-MM-YYYY') as date,
sum(l.qty * u.factor) as product_qty,
sum(l.qty * l.price_unit) as price_total,
- sum(l.qty * l.price_ded) as total_discount,
+ sum(l.qty * l.discount) as total_discount,
(sum(l.qty*l.price_unit)/sum(l.qty * u.factor))::decimal(16,2) as average_price,
- sum(cast(to_char(date_trunc('day',s.date_validation) - date_trunc('day',s.date_order),'DD') as int)) as delay_validation,
- sum(cast(to_char(date_trunc('day',s.date_payment) - date_trunc('day',s.date_order),'DD') as int)) as delay_payment,
+ sum(cast(to_char(date_trunc('day',s.date_order) - date_trunc('day',s.create_date),'DD') as int)) as delay_validation,
to_char(s.date_order, 'YYYY') as year,
to_char(s.date_order, 'MM') as month,
to_char(s.date_order, 'YYYY-MM-DD') as day,
@@ -78,9 +72,7 @@ class pos_order_report(osv.osv):
s.shop_id as shop_id,
s.company_id as company_id,
s.sale_journal as journal_id,
- l.product_id as product_id,
- s.date_validation,
- s.date_payment
+ l.product_id as product_id
from pos_order_line as l
left join pos_order s on (s.id=l.order_id)
left join product_template pt on (pt.id=l.product_id)
@@ -88,11 +80,10 @@ class pos_order_report(osv.osv):
group by
to_char(s.date_order, 'dd-MM-YYYY'),to_char(s.date_order, 'YYYY'),to_char(s.date_order, 'MM'),
to_char(s.date_order, 'YYYY-MM-DD'), s.partner_id,s.state,
- s.user_id,s.shop_id,s.company_id,s.sale_journal,l.product_id,s.date_validation,
- s.date_payment
+ s.user_id,s.shop_id,s.company_id,s.sale_journal,l.product_id,s.create_date
having
sum(l.qty * u.factor) != 0)""")
pos_order_report()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/report/pos_order_report_view.xml b/addons/point_of_sale/report/pos_order_report_view.xml
index 8b18bf0b57a..41fe2c3b4d6 100644
--- a/addons/point_of_sale/report/pos_order_report_view.xml
+++ b/addons/point_of_sale/report/pos_order_report_view.xml
@@ -2,65 +2,62 @@
- report.pos.order.tree
- report.pos.order
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
+ report.pos.order.tree
+ report.pos.order
+ tree
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
- report.pos.order.search
- report.pos.order
- search
-
-
-
-
-
-
-
- report.pos.order.search
+ report.pos.order
+ search
+
+
+
+
+
+
+
+
-
+
-
+
@@ -69,36 +66,31 @@
help="My Sales"
domain="[('user_id','=',uid)]"/>
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
- Point of Sale Analysis
- report.pos.order
- form
- tree,graph
-
- {'search_default_today':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
-
+ Point of Sale Analysis
+ report.pos.order
+ form
+ tree,graph
+
+ {'search_default_today':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
+
-
-
+
+
diff --git a/addons/point_of_sale/report/pos_receipt.rml b/addons/point_of_sale/report/pos_receipt.rml
index b9da3f5e9a6..e3b5583a499 100644
--- a/addons/point_of_sale/report/pos_receipt.rml
+++ b/addons/point_of_sale/report/pos_receipt.rml
@@ -77,7 +77,6 @@
Tel : [[ address and address.phone ]]E-mail : [[ address and address.email ]]Shop : [[ o.shop_id.name ]]
- Vendeur : [[ o.user_salesman_id.name ]]Date : [[ o.date_order ]]
@@ -85,12 +84,10 @@
- [[o.type_rec]]N° : [[ o.name ]]
- Contract : [[ o.contract_number ]]
@@ -165,6 +162,5 @@
- [[o.note_2]]
diff --git a/addons/point_of_sale/report/pos_receipt_with_remboursment.py b/addons/point_of_sale/report/pos_receipt_with_remboursment.py
deleted file mode 100644
index c600a9e2754..00000000000
--- a/addons/point_of_sale/report/pos_receipt_with_remboursment.py
+++ /dev/null
@@ -1,83 +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 report import report_sxw
-import pooler
-
-class order(report_sxw.rml_parse):
-
- def __init__(self, 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
-
- self.localcontext.update({
- 'time': time,
- 'disc': self.discount,
- 'net': self.netamount,
- 'get_journal_amt': self._get_journal_amt,
- 'address': partner.address and partner.address[0] or False,
- })
-
- def netamount(self, order_line_id):
- sql = 'select (qty*price_unit) as net_price from pos_order_line where id = %s'
- self.cr.execute(sql, (order_line_id,))
- res = self.cr.fetchone()
- return res[0]
-
- def discount(self, order_id):
- sql = 'select discount, price_unit, qty from pos_order_line where order_id = %s '
- self.cr.execute(sql, (order_id,))
- res = self.cr.fetchall()
- dsum = 0
- for line in res:
- if line[0] != 0:
- dsum = dsum +(line[2] * (line[0]*line[1]/100))
- return dsum
-
- def _get_journal_amt(self, order_id):
- lst=[]
- sql = """ select aj.name from account_bank_statement as abs
- LEFT JOIN account_bank_statement_line as absl ON abs.id = absl.statement_id
- LEFT JOIN account_journal as aj ON aj.id = abs.journal_id
- WHERE absl.pos_statement_id = %d"""%(order_id.id)
- self.cr.execute(sql)
- res = self.cr.fetchone()
- if not res:
- return ['', 0.0]
- lst.append(res[0]) # todo: improve
- sql2 = """ select sum(absl.amount) as amt from account_bank_statement as abs
- LEFT JOIN account_bank_statement_line as absl ON abs.id = absl.statement_id
- LEFT JOIN account_journal as aj ON aj.id = abs.journal_id
- where aj.name = '%s' """%(res[0])
- self.cr.execute(sql2)
- res1 = self.cr.fetchone()
- if res1:
- lst.append(res1[0])
- else:
- lst.append(0.0)
- return lst
-
-report_sxw.report_sxw('report.pos.receipt.with.remboursment', 'pos.order', 'addons/point_of_sale/report/pos_receipt_with_remboursment.rml', parser=order, header=False)
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/point_of_sale/report/pos_receipt_with_remboursment.rml b/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
deleted file mode 100644
index 9c25d5f4a89..00000000000
--- a/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'o') ]]
- [[ repeatIn(objects,'o') ]]
- [[o.user_id.company_id.name]]
- [[ address and address.street ]], [[ address and address.zip ]] [[ address and address.city ]]
- [[ address and address.country_id.name ]]
- Tel : [[ address and address.phone ]]
- E-mail : [[ address and address.email ]]
- Salesman : [[ o.user_id.name ]]
- Sale Date : [[ o.date_order ]]
- Refund Receipt: [[o.name]]
-
-
-
-
-
-
-
- Description
-
-
- Qty
-
-
- Price
-
-
-
-
- [[ repeatIn(o.lines,'line') ]]
-
-
-
-
- [[ line.product_id.name ]]
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]]
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % net(line.id) ]] [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.f' % line.discount ]]%)
-
-
-
-
-
-
-
- Disc :
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % (disc(o.id) or 0.0,) ]]
-
-
-
-
- Total :
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.2f' % o.amount_total ]] [[ o.pricelist_id.currency_id.name ]]
-
-
-
- [[ 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
deleted file mode 100644
index d2fe0f1d542..00000000000
--- a/addons/point_of_sale/report/pos_receipt_without_remboursment.py
+++ /dev/null
@@ -1,83 +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 report import report_sxw
-import pooler
-
-class order(report_sxw.rml_parse):
-
- def __init__(self, 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
-
- self.localcontext.update({
- 'time': time,
- 'disc': self.discount,
- 'net': self.netamount,
- 'get_journal_amt': self._get_journal_amt,
- 'address': partner.address and partner.address[0] or False,
- })
-
- def netamount(self, order_line_id):
- sql = 'select (qty*price_unit) as net_price from pos_order_line where id = %s'
- self.cr.execute(sql, (order_line_id,))
- res = self.cr.fetchone()
- return res[0]
-
- def discount(self, order_id):
- sql = 'select discount, price_unit, qty from pos_order_line where order_id = %s '
- self.cr.execute(sql, (order_id,))
- res = self.cr.fetchall()
- dsum = 0
- for line in res:
- if line[0] != 0:
- dsum = dsum +(line[2] * (line[0]*line[1]/100))
- return dsum
-
- def _get_journal_amt(self, order_id):
- lst=[]
- sql = """ select aj.name from account_bank_statement as abs
- LEFT JOIN account_bank_statement_line as absl ON abs.id = absl.statement_id
- LEFT JOIN account_journal as aj ON aj.id = abs.journal_id
- WHERE absl.pos_statement_id = %d"""%(order_id.id)
- self.cr.execute(sql)
- res = self.cr.fetchone()
- if not res:
- return ['', 0.0]
- lst.append(res[0]) # todo: improve
- sql2 = """ select sum(absl.amount) as amt from account_bank_statement as abs
- LEFT JOIN account_bank_statement_line as absl ON abs.id = absl.statement_id
- LEFT JOIN account_journal as aj ON aj.id = abs.journal_id
- where aj.name = '%s' """%(res[0])
- self.cr.execute(sql2)
- res1 = self.cr.fetchone()
- if res1:
- lst.append(res1[0])
- else:
- lst.append(0.0)
- return lst
-
-report_sxw.report_sxw('report.pos.receipt.without.remboursment', 'pos.order', 'addons/point_of_sale/report/pos_receipt_without_remboursment.rml', parser=order, header=False)
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/point_of_sale/report/pos_receipt_without_remboursment.rml b/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
deleted file mode 100644
index ff6ebc3132c..00000000000
--- a/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'o') ]]
- [[ repeatIn(objects,'o') ]]
- [[o.user_id.company_id.name]]
- [[ address and address.street ]], [[ address and address.zip ]] [[ address and address.city ]]
- [[ address and address.country_id.name ]]
- Tel : [[ address and address.phone ]]
- E-mail : [[ address and address.email ]]
- Salesman : [[ o.user_id.name ]]
- Sale Date : [[ str(o.date_order) ]]
- Purchase Voucher : [[o.name]]
-
-
-
-
-
-
-
- Description
-
-
- Qty
-
-
- Price
-
-
-
-
- [[ repeatIn(o.lines,'line') ]]
-
-
-
-
- [[ line.product_id.name ]]
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]]
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % net(line.id) ]] [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.f' % line.discount ]]%)
-
-
-
-
-
-
-
- Disc :
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % (disc(o.id) or 0.0,) ]]
-
-
-
-
- Total :
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.2f' % o.amount_total ]] [[ o.pricelist_id.currency_id.name ]]
-
-
-
- [[ get_journal_amt(o)[0] ]] : [[ get_journal_amt(o)[1] ]]
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/point_of_sale/report/pos_report.py b/addons/point_of_sale/report/pos_report.py
index cd41eb92944..1ecf80ea519 100644
--- a/addons/point_of_sale/report/pos_report.py
+++ b/addons/point_of_sale/report/pos_report.py
@@ -49,7 +49,7 @@ class report_transaction_pos(osv.osv):
min(absl.id) as id,
count(absl.id) as no_trans,
sum(absl.amount) as amount,
- sum(line.price_ded) as disc,
+ sum((100.0-line.discount) * line.price_unit * line.qty / 100.0) as disc,
to_char(date_trunc('day',absl.create_date),'YYYY-MM-DD')::text as date_create,
po.user_id as user_id,
po.sale_journal as journal_id,
@@ -236,4 +236,4 @@ class report_sales_by_margin_pos_month(osv.osv):
""")
report_sales_by_margin_pos_month()
-# 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/point_of_sale/report/pos_sales_user_today_current_user.py b/addons/point_of_sale/report/pos_sales_user_today_current_user.py
deleted file mode 100644
index 07cbdcbc488..00000000000
--- a/addons/point_of_sale/report/pos_sales_user_today_current_user.py
+++ /dev/null
@@ -1,68 +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 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=context)
- self.total = 0.0
- self.qty = 0.0
- self.localcontext.update({
- 'time': time,
- 'get_user':self._get_user,
- 'get_data_current_user':self._get_data_current_user,
- 'get_data_current_user_tot':self._get_data_current_user_tot,
- 'get_data_current_user_qty':self._get_data_current_user_qty,
- })
-
- def _get_user(self, user):
- pos_user={}
- self.cr.execute("select name from res_users where id = %s",str(self.uid))
- pos_user=self.cr.dictfetchone()
- return pos_user['name']
-
- def _get_data_current_user(self, user):
- data={}
- self.cr.execute("select po.name,po. state,sum(pol.qty)as Qty,sum((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, res_users as ru,res_company as rc " \
- "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
- "and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date = current_date and po.user_id = ru.id and rc.id = %s and ru.id = %s " \
- "group by po.name, po.state " \
- ,(str(user.company_id.id),str(self.uid)))
-
- data = self.cr.dictfetchall()
- for d in data:
- self.total += d['total']
- self.qty += d['qty']
- return data
-
- def _get_data_current_user_tot(self, user):
- return self.total
-
- def _get_data_current_user_qty(self, user):
- return self.qty
-
-report_sxw.report_sxw('report.pos.sales.user.today.current.user', 'pos.order', 'addons/point_of_sale/report/pos_sales_user_today_current_user.rml', parser=pos_sales_user_today_current_user,header='internal')
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
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
deleted file mode 100644
index 7a94f5d6632..00000000000
--- a/addons/point_of_sale/report/pos_sales_user_today_current_user.rml
+++ /dev/null
@@ -1,204 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'order') ]]
-
-
-
-
-
-
- Today's Sales By Current User
-
-
-
-
-
- [[ formatLang((get_data_current_user_tot(user))) or removeParentNode('blockTable')]] [[company.currency_id.symbol]]
-
-
-
-
-
-
-
-
diff --git a/addons/point_of_sale/test/00_register_open.yml b/addons/point_of_sale/test/00_register_open.yml
new file mode 100644
index 00000000000..7d5aabbcdc3
--- /dev/null
+++ b/addons/point_of_sale/test/00_register_open.yml
@@ -0,0 +1,17 @@
+-
+ In order to test the Point of Sale module, I will open all cash registers through the wizard
+-
+ I go to the window to open the cash registers as admin
+-
+ !record {model: pos.open.statement, id: new_statement_open}:
+-
+ I click on the button to open all statements/cash registers
+-
+ !python {model: pos.open.statement}: |
+ self.open_statement(cr, uid, [ref('new_statement_open')], context={})
+-
+ I check that I have some bank statements open for the admin user
+-
+ !python {model: account.bank.statement}: |
+ ids = self.search(cr, uid, [('state', 'in', ('open','new')), ('user_id', '=', 1)])
+ assert (len(ids)>0), 'No statement open for the admin user!'
diff --git a/addons/point_of_sale/test/01_order_to_payment.yml b/addons/point_of_sale/test/01_order_to_payment.yml
new file mode 100644
index 00000000000..fd8ffbaa3e0
--- /dev/null
+++ b/addons/point_of_sale/test/01_order_to_payment.yml
@@ -0,0 +1,124 @@
+- |
+ In order to test the Point of Sale in module, I will do a full flow from the sale to the payment and invoicing.
+ I will use two products, one with price including a 10% tax, the other one with 5% tax excluded from the price.
+- |
+ I create a VAT tax of 10%, included in the public price
+-
+ !record {model: account.tax, id: account_tax_10_incl}:
+ name: VAT 10 perc Incl
+ type: percent
+ amount: 0.10
+ account_paid_id: account.iva
+ account_collected_id: account.iva
+ price_include: 1
+-
+ I assign this 10 percent tax on the PC1 product as a sale tax
+-
+ !record {model: product.product, id: product.product_product_pc1}:
+ taxes_id: [account_tax_10_incl]
+- |
+ I create a VAT tax of 5%, which is added to the public price
+-
+ !record {model: account.tax, id: account_tax_05_incl}:
+ name: VAT 05 perc Excl
+ type: percent
+ amount: 0.05
+ account_paid_id: account.iva
+ account_collected_id: account.iva
+ price_include: 0
+-
+ I assign this 5 percent tax on the PC2 product as a sale tax
+-
+ !record {model: product.product, id: product.product_product_pc2}:
+ taxes_id: [account_tax_05_incl]
+-
+ I create a PoS order with 2 units of PC1 at 450 EUR (Tax Incl) and 3 units of PC2 at 300 EUR. (Tax Excl)
+-
+ !record {model: pos.order, id: pos_order_pos0}:
+ company_id: base.main_company
+ lines:
+ - name: OL/0001
+ product_id: product.product_product_pc1
+ price_unit: 450
+ discount: 0.0
+ qty: 2.0
+ - name: OL/0002
+ product_id: product.product_product_pc2
+ price_unit: 300
+ discount: 0.0
+ qty: 3.0
+-
+ I check that the total of the order is equal to 450*2 + 300*3*1.05 and the tax of the order is equal to 900 -(450 * 2 / 1.1) + 300*0.05*3
+-
+ !python {model: pos.order}: |
+ order = self.browse(cr, uid, ref('pos_order_pos0'))
+ assert(abs(order.amount_total - (450*2 + 300*3*1.05)) < 0.01), "The order has a wrong amount, tax included"
+ assert(abs(order.amount_tax - (900-(450*2/1.1) + 300*0.05*3)) < 0.01), "The order has a wrong tax amount"
+-
+ I want to add a global discount of 5 percent using the wizard
+-
+ !record {model: pos.discount, id: pos_discount_0}:
+ discount: 5.0
+-
+ I click the apply button to set the discount on all lines
+-
+ !python {model: pos.discount}: |
+ self.apply_discount(cr, uid, [ref("pos_discount_0")], {"active_model": "pos.order",
+ "active_ids": [ref("pos_order_pos0")], "active_id": ref("pos_order_pos0"), })
+-
+ I check that the total of the order is now equal to (450*2 + 300*3*1.05)*0.95
+-
+ !python {model: pos.order}: |
+ order = self.browse(cr, uid, ref('pos_order_pos0'))
+ assert(abs(order.amount_total - (450*2 + 300*3*1.05)*0.95) < 0.01), "The order has a wrong total including tax and discounts"
+-
+ I click on the "Make Payment" wizard to pay the PoS order with a partial amount of 100.0 EUR
+-
+ !record {model: pos.make.payment, id: pos_make_payment_0, context: {'active_id': ref('pos_order_pos0'), 'active_ids': [ref('pos_order_pos0')]} }:
+ amount: 100.0
+-
+ I click on the validate button to register the payment.
+-
+ !python {model: pos.make.payment}: |
+ self.check(cr, uid, [ref('pos_make_payment_0')], context={'active_id': ref('pos_order_pos0'), 'lang':'en_US', 'active_model': 'pos.order', 'tz': False, 'active_ids': [ref('pos_order_pos0')]} )
+- |
+ I check that the order is not marked as paid yet
+-
+ !assert {model: pos.order, id: pos_order_pos0}:
+ - state == 'draft'
+- |
+ On the second payment proposition, I check that it proposes me the remaining balance which is 1790.0 EUR
+-
+ !python {model: pos.make.payment}: |
+ defs = self.default_get(cr, uid, ['amount'], {'active_id': ref('pos_order_pos0')})
+ assert abs(defs['amount'] - ((450*2 + 300*3*1.05)*0.95-100.0)) < 0.01, "The remaining balance is incorrect"
+-
+ I pay the remaining balance.
+-
+ !record {model: pos.make.payment, id: pos_make_payment_1, context: {'active_id': [ref('pos_order_pos0')], 'active_ids': [ref('pos_order_pos0')]} }:
+ amount: !eval >
+ (450*2 + 300*3*1.05)*0.95-100.0
+-
+ I click on the validate button to register the payment.
+-
+ !python {model: pos.make.payment}: |
+ self.check(cr, uid, [ref('pos_make_payment_1')], context={'active_id': ref('pos_order_pos0')} )
+- |
+ I check that the order is marked as paid
+-
+ !assert {model: pos.order, id: pos_order_pos0}:
+ - state == 'paid'
+-
+ I generate the journal entries
+-
+ !python {model: pos.order}: |
+ self.create_account_move(cr, uid, [ref('pos_order_pos0')], {})
+-
+ I test that the generated journal entry is attached to the PoS order
+-
+ !assert {model: pos.order, id: pos_order_pos0}:
+ - bool(account_move)
+
+
+
+
diff --git a/addons/point_of_sale/test/02_order_to_invoice.yml b/addons/point_of_sale/test/02_order_to_invoice.yml
new file mode 100644
index 00000000000..3436e176678
--- /dev/null
+++ b/addons/point_of_sale/test/02_order_to_invoice.yml
@@ -0,0 +1,47 @@
+-
+ I create a new PoS order with 2 units of PC1 at 450 EUR (Tax Incl) and 3 units of PC2 at 300 EUR. (Tax Excl)
+-
+ !record {model: pos.order, id: pos_order_pos1}:
+ company_id: base.main_company
+ partner_id: base.res_partner_asus
+ lines:
+ - name: OL/0001
+ product_id: product.product_product_pc1
+ price_unit: 450
+ discount: 5.0
+ qty: 2.0
+ - name: OL/0002
+ product_id: product.product_product_pc2
+ price_unit: 300
+ discount: 5.0
+ qty: 3.0
+-
+ I click on the "Make Payment" wizard to pay the PoS order
+-
+ !record {model: pos.make.payment, id: pos_make_payment_2, context: {'active_id': ref('pos_order_pos1'), 'active_ids': [ref('pos_order_pos1')]} }:
+ amount: !eval >
+ (450*2 + 300*3*1.05)*0.95
+-
+ I click on the validate button to register the payment.
+-
+ !python {model: pos.make.payment}: |
+ self.check(cr, uid, [ref('pos_make_payment_2')], context={'active_id': ref('pos_order_pos1')} )
+- |
+ I check that the order is marked as paid and there is no invoice attached to it
+-
+ !python {model: pos.order}: |
+ order = self.browse(cr,uid,ref('pos_order_pos1'))
+-
+ !assert {model: pos.order, id: pos_order_pos1, string: State not correct}:
+ - state == 'paid'
+ - not invoice_id
+-
+ I generate the invoice by pressing the Invoice button that calls the workflow
+-
+ !workflow {model: pos.order, action: invoice, ref: pos_order_pos1}
+-
+ I test that the total of the attached invoice is correct
+-
+ !assert {model: pos.order, id: pos_order_pos1, string: Invoice not correct}:
+ - bool(invoice_id)
+ - invoice_id.amount_total == (450*2 + 300*3*1.05)*0.95
diff --git a/addons/point_of_sale/test/point_of_sale_report.yml b/addons/point_of_sale/test/point_of_sale_report.yml
index b821dc899df..f31f9ec0f49 100644
--- a/addons/point_of_sale/test/point_of_sale_report.yml
+++ b/addons/point_of_sale/test/point_of_sale_report.yml
@@ -34,24 +34,6 @@
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-receipt report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point of Sale, we will print a POS Receipt With Reimbursement Report
--
- !python {model: pos.order}: |
- import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.pos.receipt.with.remboursment').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-receipt with reimbursement report'+format), 'wb+').write(data)
-
--
- In order to test the PDF reports defined on a point of sale, we will print a POS Receipt Without Reimbursement Report
--
- !python {model: pos.order}: |
- import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.pos.receipt.without.remboursment').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-receipt without reimbursement report'+format), 'wb+').write(data)
-
-
Print the POS Payment Report through the wizard
-
@@ -74,56 +56,6 @@
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_report_pos_details',wiz_data=data_dict, context=ctx, our_module='point_of_sale')
--
- I create a cash journal.
--
- !record {model: account.journal, id: account_journal_cash0}:
- name: 'Cash Journal'
- code: 'CSJ'
- type: 'cash'
- view_id: account.account_journal_bank_view
- sequence_id: account.sequence_journal
--
- I create a record for Bank Statement.
--
- !record {model: account.bank.statement, id: account_bank_statement_st0}:
- name: St.05/19
- balance_end_real: 0.0
- date: !eval time.strftime('%Y-%m-%d')
- journal_id: account_journal_cash0
- line_ids:
- - name: statement
- date: !eval "(datetime.now() + timedelta(5*31)).strftime('%Y-%m-%d')"
- type: customer
- account_id: account_pos_account_sales
- amount: 100
- partner_id: base.res_partner_agrolait
- period_id: account.period_5
- state: 'draft'
--
- In order to test the PDF reports defined on a Point Of Sale, we will print a Account Statement Report
--
- !python {model: account.bank.statement}: |
- import netsvc, tools, os, time
- (data, format) = netsvc.LocalService('report.account.statement').create(cr, uid, [ref('point_of_sale.account_bank_statement_st0')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-account_statement_report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point Of Sale, we will print a POS User Product Report
--
- !python {model: account.bank.statement}: |
- import netsvc, tools, os, time
- (data, format) = netsvc.LocalService('report.pos.user.product').create(cr, uid, [ref('point_of_sale.account_bank_statement_st0')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-user_product_report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point Of Sale, we will print a POS All Close Cashbox Of the Day Report
--
- !python {model: account.bank.statement}: |
- import netsvc, tools, os, time
- (data, format) = netsvc.LocalService('report.all.closed.cashbox.of.the.day').create(cr, uid, [ref('point_of_sale.account_bank_statement_st0')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-all_closed_cash_box_of_the_day_report'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on a Point of Sale, we will print a POS Sales User Report
-
@@ -133,15 +65,6 @@
(data, format) = netsvc.LocalService('report.pos.sales.user').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], data_dict, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-sales_user_report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point of Sale, we will print a POS Sales User Today Report
--
- !python {model: pos.order}: |
- import netsvc, tools, os, time
- data_dict = {'model':'ir.ui.menu', 'form':{'user_id':[ref('base.user_root')] }}
- (data, format) = netsvc.LocalService('report.pos.sales.user.today').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], data_dict, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-sales_user_today_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
-
@@ -159,11 +82,3 @@
(data, format) = netsvc.LocalService('report.pos.payment.report.user').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], data_dict, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-payment_user_report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point of Sale, we will print a POS Today's Sales of Current User Report
--
- !python {model: pos.order}: |
- 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)
diff --git a/addons/point_of_sale/test/point_of_sale_test.yml b/addons/point_of_sale/test/point_of_sale_test.yml
deleted file mode 100644
index 6165e993240..00000000000
--- a/addons/point_of_sale/test/point_of_sale_test.yml
+++ /dev/null
@@ -1,437 +0,0 @@
--
- In order to test the POS in module, To give business owners a convenient way of checking out customers and of recording sales.
-
--
- I configure all details for the Customer, Salesman and Product, Account.
--
- I create View Account Type.
--
- !record {model: account.account.type, id: account_account_type_view0}:
- close_method: none
- code: View
- name: View
- sign: 1
--
- I create Income Account Type.
--
- !record {model: account.account.type, id: account_account_type_income0}:
- close_method: unreconciled
- code: Income
- name: Income
- sign: 1
--
- I create Expense Account Type.
--
- !record {model: account.account.type, id: account_account_type_expense0}:
- close_method: unreconciled
- code: Expense
- name: Expense
- sign: 1
--
- I create Cash Account Type.
--
- !record {model: account.account.type, id: account_account_type_cash0}:
- close_method: balance
- code: Cash
- name: Cash
- sign: 1
--
- I create Minimal Chart Account.
--
- !record {model: account.account, id: account_pos_account_minimalchart}:
- code: 'x_0'
- company_id: base.main_company
- currency_mode: current
- name: Minimal Chart
- parent_left: 1
- parent_right: 12
- type: view
- user_type: account_account_type_view0
--
- I create Payable Account.
--
- !record {model: account.account, id: account_pos_account_payable}:
- code: AP
- company_id: base.main_company
- currency_mode: current
- name: Payable
- parent_id: account_pos_account_minimalchart
- parent_left: 2
- parent_right: 3
- reconcile: true
- type: payable
- user_type: account_account_type_expense0
--
- I create Receivable Account.
--
- !record {model: account.account, id: account_pos_account_receivable}:
- code: AR
- company_id: base.main_company
- currency_mode: current
- name: Receivable
- parent_id: account_pos_account_minimalchart
- parent_left: 4
- parent_right: 5
- reconcile: true
- type: receivable
- user_type: account_account_type_income0
--
- I create Cash Account.
--
- !record {model: account.account, id: account_pos_account_cash}:
- code: C
- company_id: base.main_company
- currency_mode: current
- name: Cash
- parent_id: account_pos_account_minimalchart
- parent_left: 6
- parent_right: 7
- type: other
- user_type: account_account_type_cash0
--
- I create Purchases Account.
--
- !record {model: account.account, id: account_pos_account_purchases}:
- code: P
- company_id: base.main_company
- currency_mode: current
- name: Purchases
- parent_id: account_pos_account_minimalchart
- parent_left: 8
- parent_right: 9
- type: other
- user_type: account_account_type_expense0
--
- I create Sales Account.
--
- !record {model: account.account, id: account_pos_account_sales}:
- code: Sale
- company_id: base.main_company
- currency_mode: current
- name: Sales
- parent_id: account_pos_account_minimalchart
- parent_left: 10
- parent_right: 11
- type: other
- user_type: account_account_type_income0
--
- I create Purchase Journal - (test).
--
- !record {model: account.journal, id: account_pos_account_journal_purchasejournal}:
- code: PUJ
- company_id: base.main_company
- default_credit_account_id: account_pos_account_purchases
- default_debit_account_id: account_pos_account_purchases
- name: Purchase Journal - (test)
- sequence_id: account.sequence_purchase_journal
- type: purchase
- view_id: account.account_journal_view
--
- I create Sale Journal.
--
- !record {model: account.journal, id: account_pos_account_journal_salejournal}:
- code: SJ
- company_id: base.main_company
- default_credit_account_id: account_pos_account_sales
- default_debit_account_id: account_pos_account_sales
- name: Sale Journal
- sequence_id: account.sequence_sale_journal
- type: sale
- view_id: account.account_journal_view
--
- I create Bank Journal.
--
- !record {model: account.journal, id: account_pos_account_journal_bankjournal}:
- code: BNK
- company_id: base.main_company
- default_credit_account_id: account_pos_account_cash
- default_debit_account_id: account_pos_account_cash
- name: Bank Journal
- sequence_id: account.sequence_journal
- type: cash
- view_id: account.account_journal_bank_view
--
- I create property for account payable.
--
- !record {model: ir.property, id: ir_property_propertyaccountexpensecateg0}:
- company_id: base.main_company
- fields_id: account.field_res_partner_property_account_payable
- name: property_account_expense_categ
- value_reference: account.account,5
--
- I create property for account receivable.
--
- !record {model: ir.property, id: ir_property_propertyaccountincomecateg0}:
- company_id: base.main_company
- fields_id: account.field_res_partner_property_account_receivable
- name: property_account_income_categ
- value_reference: account.account,6
--
- I create Partner category Customers.
--
- !record {model: res.partner.category, id: res_partner_category_customers0}:
- name: Customers
--
- I create partner
--
- !record {model: res.partner, id: res_partner_cleartrail0}:
- category_id:
- - res_partner_category_customers0
- name: Cleartrail
--
- I create partner address.
--
- !record {model: res.partner.address, id: res_partner_address_1}:
- partner_id: res_partner_cleartrail0
- street: onam plaza, 14 B palasia A B Road
- type: contact
--
- I create partner invoice address.
--
- !record {model: res.partner.address, id: res_partner_address_2}:
- partner_id: res_partner_cleartrail0
- type: invoice
--
- I create partner delivery address.
--
- !record {model: res.partner.address, id: res_partner_address_3}:
- partner_id: res_partner_cleartrail0
- street: sangam house 15 B palasia, A B Road
- type: delivery
--
- I create product category.
--
- !record {model: product.category, id: product_category_allproductssellable0}:
- name: Mobile Products Sellable
--
- I create partner.
--
- !record {model: res.partner, id: res_partner_microlinktechnologies0}:
- address:
- - street: Kailash Vaibhav, Parksite
- name: Micro Link Technologies
- property_account_payable: account_pos_account_payable
- property_account_receivable: account_pos_account_receivable
- supplier: true
--
- I create partner 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 category .
--
- !record {model: product.category, id: product_category_services0}:
- name: Mobile Services
--
- I create product Samsung Mobile.
--
- !record {model: product.product, id: product_product_samsungmobile0}:
- categ_id: product_category_allproductssellable0
- cost_method: standard
- list_price: 170.0
- mes_type: fixed
- name: Samsung Mobile
- procure_method: make_to_order
- property_account_expense: account_pos_account_payable
- property_account_income: account_pos_account_receivable
- seller_delay: '1'
- standard_price: 160.0
- supply_method: produce
- type: product
- uom_id: product.product_uom_unit
- uom_po_id: product.product_uom_unit
--
- I create product category .
--
- !record {model: product.category, id: product_category_computer0}:
- name: Computer
--
- I create product HP Pavilion Desktop PCs
--
- !record {model: product.product, id: product_product_hppaviliondesktoppcs0}:
- categ_id: product_category_computer0
- cost_method: standard
- mes_type: fixed
- list_price: 1000.0
- name: HP Pavilion Desktop PCs
- procure_method: make_to_stock
- seller_ids:
- - delay: 1
- name: res_partner_microlinktechnologies0
- 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_pos_account_payable
- property_account_income: account_pos_account_receivable
--
- I create New Order by adding the details of Salesman and "Product" as Samsung Mobile Quantity as 10.
--
- !record {model: pos.order, id: pos_order_pos0}:
- company_id: base.main_company
- date_order: !eval time.strftime('%Y-%m-%d %H:%M:%S')
- date_validity: !eval "(datetime.now() + timedelta(6*1)).strftime('%Y-%m-%d')"
- lines:
- - company_id: base.main_company
- name: Order Line/01
- notice: No Discount
- product_id: product_product_samsungmobile0
- qty: 10.0
- qty_rfd: 0.0
- partner_id: base.res_partner_agrolait
- name: POS/001
- price_type: tax_excluded
- pricelist_id: product.list0
- sale_journal: account.sales_journal
- shop_id: sale.shop
- user_salesman_id: base.user_root
--
- I add discount.
--
- !record {model: pos.discount, id: pos_discount_0}:
- discount: 5.0
- discount_notes: More then 5 product
--
- I Apply the discount.
--
- !python {model: pos.discount}: |
- self.apply_discount(cr, uid, [ref("pos_discount_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz": False, "active_id":
- ref("pos_order_pos0"), })
--
- I open the register.
--
- !record {model: pos.open.statement, id: pos_open_statement_0}:
- {}
--
- I open the statement.
--
- !python {model: pos.open.statement}: |
- jou_obj = self.pool.get('account.journal')
- statement_obj = self.pool.get('account.bank.statement')
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
- "WHERE user_id = %s ORDER BY journal_id"% (uid, ))
- jou_ids = map(lambda x1: x1[0], cr.fetchall())
- journal_ids = jou_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', jou_ids)], context=context)
- ids = statement_obj.search(cr, uid, [('state', '=', 'open'), ('user_id', '=', uid), ('journal_id', 'in', journal_ids)], context=context)
- if not ids:
- self.open_statement(cr, uid, [ref("pos_open_statement_0")], {"lang": "en_US", "active_model":
- "ir.ui.menu", "active_ids": [ref("point_of_sale.menu_open_statement")], "tz":
- False, "active_id": ref("point_of_sale.menu_open_statement"), })
--
- I click on the "Make Payment" wizard.
--
- !record {model: pos.make.payment, id: pos_make_payment_0}:
- amount: 1615.0
- journal: 7
- payment_date: !eval time.strftime("%Y-%m-%d")
- payment_name: Payment
- product_id: product_product_hppaviliondesktoppcs0
- pricelist_id: product.list0
- partner_id: base.res_partner_agrolait
--
- I make the payment.
--
- !python {model: pos.make.payment}: |
- self.check(cr, uid, [ref("pos_make_payment_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("point_of_sale.pos_order_pos0")], "tz":
- False, "active_id": ref("point_of_sale.pos_order_pos0"), })
--
- I check the Statement lines are created automatically when payment is done.
--
- !python {model: pos.order}: |
- order=self.browse(cr,uid,ref("pos_order_pos0"))
- assert(order.statement_ids!=[]), "Statement lines not created"
--
- When I click on Return picking button , I get three option.
--
- 1. Cancel 2.Return Goods and Exchange 3.Return without Refund
--
- When I click on Return Goods and Exchange.
--
- Then it allows me to define the quantity of products, which will return to the stock.
--
- I click on Return Picking button.
--
- !record {model: pos.return, id: pos_return_0}:
- pos_moves_ids:
- - product_id: product_product_hppaviliondesktoppcs0
- quantity: 5.0
--
- I Return the product.
--
- !python {model: pos.return}: |
- self.create_returns(cr, uid, [ref("pos_return_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("point_of_sale.pos_order_pos0")], "tz":
- False, "active_id": ref("point_of_sale.pos_order_pos0"), })
--
- Then it allows me to define the quantity of products, which will return to the stock.
--
- I select the HP Pavilion Desktop PCs for exchange.
--
- !record {model: pos.add.product, id: pos_add_product_0}:
- product_id: product_product_hppaviliondesktoppcs0
- quantity: 5.0
--
- I click on close button.
--
- !python {model: pos.add.product}: |
- return_obj = self.pool.get('pos.return')
- context['active_ids'] = [ref("pos_order_pos0")]
- return_obj.view_init(cr, uid, [],context=context)
- self.close_action(cr, uid, [ref("pos_add_product_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz": False, "active_id": ref("pos_order_pos0"),
- })
--
- I create payment.
--
- !record {model: pos.make.payment, id: pos_make_payment_1}:
- amount: 680.0
- journal: 7
- payment_date: !eval time.strftime("%Y-%m-%d")
- payment_name: Payment
- product_id: product_product_hppaviliondesktoppcs0
- pricelist_id: product.list0
- partner_id: base.res_partner_agrolait
--
- For payment, I click on Make Payment.
--
- !python {model: pos.make.payment}: |
- self.check(cr, uid, [ref("pos_make_payment_1")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz":
- False, "active_id": ref("pos_order_pos0"), })
--
- To check the Return without Refund . I click button "Return without Refund ".
--
- !record {model: pos.return, id: pos_return_0}:
- {}
--
- The quantity which is selected in Return lines wizard is refunded.
--
- !python {model: pos.return}: |
- self.create_returns2(cr, uid, [ref("pos_return_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz":
- False, "active_id": ref("pos_order_pos0"), })
--
- To Close order, I use the wizard "Sale Confirm".
--
- !record {model: pos.confirm, id: pos_confirm_0}:
- {}
--
- I close this order.
--
- !python {model: pos.confirm}: |
- self.action_confirm(cr, uid, [ref("pos_confirm_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz": False, "active_id": ref("pos_order_pos0"),
- })
--
- I check order state is done.
--
- !python {model: pos.order}: |
- order=self.browse(cr,uid,ref("pos_order_pos0"))
- assert(order.state=='done'), "Order is not done"
diff --git a/addons/point_of_sale/wizard/__init__.py b/addons/point_of_sale/wizard/__init__.py
index 4a131d5894b..0985ae906be 100644
--- a/addons/point_of_sale/wizard/__init__.py
+++ b/addons/point_of_sale/wizard/__init__.py
@@ -19,10 +19,8 @@
#
##############################################################################
-import pos_add_product
import pos_confirm
import pos_discount
-import pos_get_sale
import pos_open_statement
import pos_close_statement
import pos_box_entries
@@ -30,15 +28,11 @@ import pos_box_out
import pos_details
import pos_sales_user
import pos_sales_user_today
-import pos_sales_user_current_user
-import all_closed_cashbox_of_the_day
import pos_receipt
import pos_payment_report_user
import pos_payment_report_date
import pos_payment_report
import pos_payment
-import pos_scan_product
-import pos_return
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/wizard/all_closed_cashbox_of_the_day.xml b/addons/point_of_sale/wizard/all_closed_cashbox_of_the_day.xml
deleted file mode 100644
index e78ef5c6d6a..00000000000
--- a/addons/point_of_sale/wizard/all_closed_cashbox_of_the_day.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
- all closed cashbox of the day
- all.closed.cashbox.of.the.day
- form
-
-
-
-
-
-
-
-
-
-
-
- All Cashboxes Of the day
- all.closed.cashbox.of.the.day
- form
- form
- new
-
-
-
-
diff --git a/addons/point_of_sale/wizard/pos_add_product.py b/addons/point_of_sale/wizard/pos_add_product.py
deleted file mode 100644
index dfbb96a4514..00000000000
--- a/addons/point_of_sale/wizard/pos_add_product.py
+++ /dev/null
@@ -1,98 +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 osv, fields
-from tools.translate import _
-
-
-class add_product(osv.osv_memory):
- _name = 'pos.add.product'
- _description = 'Add Product'
-
- _columns = {
- 'product_id': fields.many2one('product.product', 'Product', required=True),
- 'quantity': fields.float('Quantity', required=True),
- }
- _defaults = {
- 'quantity': 1,
- }
-
- def select_product(self, cr, uid, ids, context=None):
- """
- To get the product and quantity and add in order .
- @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 : Return the add product form again for adding more product
- """
- if context is None:
- context = {}
- this = self.browse(cr, uid, ids[0], context=context)
- record_id = context and context.get('active_id', False)
- assert record_id, _('Active ID is not found')
- if record_id:
- order_obj = self.pool.get('pos.order')
- order_obj.add_product(cr, uid, record_id, this.product_id.id, this.quantity, context=context)
- return {
- 'name': _('Add Product'),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'pos.add.product',
- 'view_id': False,
- 'target': 'new',
- 'views': False,
- 'type': 'ir.actions.act_window',
- }
-
- def close_action(self, cr, uid, ids, context=None):
- """
- To get the product and Make the payment .
- @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 : Return the Make Payment
- """
- if context is None:
- context = {}
- record_id = context and context.get('active_id', False)
- order_obj= self.pool.get('pos.order')
- this = self.browse(cr, uid, ids[0], context)
- order_obj.add_product(cr, uid, record_id, this.product_id.id, this.quantity, context=context)
-
- order_obj.write(cr, uid, [record_id], {'state': 'done'}, context=context)
- return {
- 'name': _('Make Payment'),
- 'context': context and context.get('active_id', False),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'pos.make.payment',
- 'view_id': False,
- 'target': 'new',
- 'views': False,
- 'type': 'ir.actions.act_window',
- }
-
-add_product()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/point_of_sale/wizard/pos_add_product.xml b/addons/point_of_sale/wizard/pos_add_product.xml
deleted file mode 100644
index ac5fd1c6f65..00000000000
--- a/addons/point_of_sale/wizard/pos_add_product.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
- Add Product
- pos.add.product
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Add Product
- ir.actions.act_window
- pos.add.product
- form
- form
- new
-
-
-
-
diff --git a/addons/point_of_sale/wizard/pos_box_entries.py b/addons/point_of_sale/wizard/pos_box_entries.py
index dcc9779a903..0b417d8b1cf 100644
--- a/addons/point_of_sale/wizard/pos_box_entries.py
+++ b/addons/point_of_sale/wizard/pos_box_entries.py
@@ -37,14 +37,13 @@ def get_journal(self, cr, uid, context=None):
journal_obj = self.pool.get('account.journal')
statement_obj = self.pool.get('account.bank.statement')
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users WHERE user_id = %s ORDER BY journal_id", (uid, ))
- j_ids = map(lambda x1: x1[0], cr.fetchall())
- ids = journal_obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
- obj_ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', ids)], context=context)
- res_obj = journal_obj.read(cr, uid, ids, ['journal_id'], context=context)
- res_obj = [(r1['id']) for r1 in res_obj]
+
+ j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context)
+ obj_ids = statement_obj.search(cr, uid, [('state', '=', 'open'), ('user_id', '=', uid), ('journal_id', 'in', j_ids)], context=context)
res = statement_obj.read(cr, uid, obj_ids, ['journal_id'], context=context)
res = [(r['journal_id']) for r in res]
+ if not len(res):
+ raise osv.except_osv(_('Error !'), _('You do not have any open cash register. You must create a payment method or open a cash register.'))
res.insert(0, ('', ''))
return res
@@ -69,12 +68,11 @@ class pos_box_entries(osv.osv_memory):
return res
-
_columns = {
- 'name': fields.char('Description', size=32, required=True),
+ 'name': fields.char('Reason', size=32, required=True),
'journal_id': fields.selection(get_journal, "Cash Register", required=True),
'product_id': fields.selection(_get_income_product, "Operation", required=True),
- 'amount': fields.float('Amount', digits=(16, 2)),
+ 'amount': fields.float('Amount', digits=(16, 2), required=True),
'ref': fields.char('Ref', size=32),
}
_defaults = {
@@ -122,9 +120,6 @@ class pos_box_entries(osv.osv_memory):
vals['amount'] = data['amount'] or 0.0
vals['ref'] = "%s" % (data['ref'] or '')
vals['name'] = "%s: %s " % (product_obj.browse(cr, uid, data['product_id'], context=context).name, data['name'].decode('utf8'))
- address_u = res_obj.browse(cr, uid, uid, context=context).address_id
- if address_u:
- vals['partner_id'] = address_u.partner_id and address_u.partner_id.id or None
bank_statement.create(cr, uid, vals, context=context)
return {}
diff --git a/addons/point_of_sale/wizard/pos_box_entries.xml b/addons/point_of_sale/wizard/pos_box_entries.xml
index e0af60a1f73..2db10e36aa8 100644
--- a/addons/point_of_sale/wizard/pos_box_entries.xml
+++ b/addons/point_of_sale/wizard/pos_box_entries.xml
@@ -3,31 +3,31 @@
-
+ Box Entriespos.box.entriesform
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
- Box Entries
+ Put Money Inir.actions.act_windowpos.box.entriesform
@@ -35,5 +35,5 @@
new
-
+
diff --git a/addons/point_of_sale/wizard/pos_box_out.py b/addons/point_of_sale/wizard/pos_box_out.py
index 74f1a968bc7..b4298745c35 100644
--- a/addons/point_of_sale/wizard/pos_box_out.py
+++ b/addons/point_of_sale/wizard/pos_box_out.py
@@ -49,11 +49,10 @@ class pos_box_out(osv.osv_memory):
return res
_columns = {
- 'name': fields.char('Description', size=32, required=True),
+ 'name': fields.char('Description / Reason', size=32, required=True),
'journal_id': fields.selection(pos_box_entries.get_journal, "Cash Register", required=True),
'product_id': fields.selection(_get_expense_product, "Operation", required=True),
- 'amount': fields.float('Amount', digits=(16, 2)),
- 'ref': fields.char('Ref', size=32),
+ 'amount': fields.float('Amount', digits=(16, 2), required=True),
}
_defaults = {
'journal_id': 1,
@@ -81,18 +80,8 @@ class pos_box_out(osv.osv_memory):
sunday = (datetime.today() + relativedelta(weekday=6)).strftime('%Y-%m-%d')
done_statmt = statement_obj.search(cr, uid, [('date', '>=', monday+' 00:00:00'), ('date', '<=', sunday+' 23:59:59'), ('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid)], context=context)
stat_done = statement_obj.browse(cr, uid, done_statmt, context=context)
- address_u = res_obj.browse(cr, uid, uid, context=context).address_id
am = 0.0
product = product_obj.browse(cr, uid, data['product_id'], context=context)
- amount_check = product.am_out or False
- for st in stat_done:
- for s in st.line_ids:
- if address_u and s.partner_id == address_u.partner_id and s.am_out:
- am += s.amount
- if (-data['amount'] or 0.0) + am < -(res_obj.browse(cr, uid, uid, context=context).company_id.max_diff or 0.0) and amount_check:
- val = (res_obj.browse(cr, uid, uid).company_id.max_diff or 0.0) + am
- raise osv.except_osv(_('Error !'), _('The maximum value you can still withdraw is exceeded. \n Remaining value is equal to %d ')%(val))
-
acc_id = product.property_account_income
if not acc_id:
raise osv.except_osv(_('Error !'), _('please check that account is set to %s')%(product.name))
@@ -115,13 +104,7 @@ class pos_box_out(osv.osv_memory):
if data['amount'] > 0:
amount = -data['amount']
vals['amount'] = amount
- if product.am_out:
- vals['am_out'] = True
- vals['ref'] = data['ref'] or ''
vals['name'] = "%s: %s " % (product.name, data['name'])
- address_u = res_obj.browse(cr, uid, uid, context=context).address_id
- if address_u:
- vals['partner_id'] = address_u.partner_id and address_u.partner_id.id or None
statement_line_obj.create(cr, uid, vals, context=context)
return {}
diff --git a/addons/point_of_sale/wizard/pos_box_out.xml b/addons/point_of_sale/wizard/pos_box_out.xml
index 4647b1e66a7..4f19a407a38 100644
--- a/addons/point_of_sale/wizard/pos_box_out.xml
+++ b/addons/point_of_sale/wizard/pos_box_out.xml
@@ -3,31 +3,31 @@
-
+ Box Outpos.box.outform
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
- Box Out
+ Take Money Outir.actions.act_windowpos.box.outform
@@ -35,5 +35,5 @@
new
-
+
diff --git a/addons/point_of_sale/wizard/pos_close_statement.py b/addons/point_of_sale/wizard/pos_close_statement.py
index 222338f6e10..92dee2f8e4c 100644
--- a/addons/point_of_sale/wizard/pos_close_statement.py
+++ b/addons/point_of_sale/wizard/pos_close_statement.py
@@ -38,27 +38,27 @@ class pos_close_statement(osv.osv_memory):
mod_obj = self.pool.get('ir.model.data')
statement_obj = self.pool.get('account.bank.statement')
journal_obj = self.pool.get('account.journal')
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
- "WHERE user_id=%s ORDER BY journal_id", (uid, ))
- j_ids = map(lambda x1: x1[0], cr.fetchall())
- journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
- ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', journal_ids)], context=context)
- for journal in journal_obj.browse(cr, uid, journal_ids, context=context):
- if not ids:
- raise osv.except_osv(_('Message'), _('Cash registers are already closed.'))
- else:
- if not journal.check_dtls:
- statement_obj.button_confirm_cash(cr, uid, ids, context=context)
- tree_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_tree')
+ j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context)
+ ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', j_ids)], context=context)
+ if not ids:
+ raise osv.except_osv(_('Message'), _('Cash registers are already closed.'))
+ for statement in statement_obj.browse(cr, uid, ids, context=context):
+ statement_obj.write(cr, uid, [statement.id], {
+ 'balance_end_real': statement.balance_end
+ }, context=context)
+ if not statement.journal_id.check_dtls:
+ statement_obj.button_confirm_cash(cr, uid, [statement.id], context=context)
+
+ tree_res = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_cash_statement_pos_tree')
tree_id = tree_res and tree_res[1] or False
form_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_form2')
form_id = form_res and form_res[1] or False
search_id = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_pos_confirm_cash_statement_filter')
-
+
return {
'domain': "[('id', 'in', " + str(ids) + ")]",
- 'name': 'Close Statements',
+ 'name': _('Close Cash Registers'),
'view_type': 'form',
'view_mode': 'tree, form',
'search_view_id': search_id and search_id[1] or False,
@@ -66,7 +66,6 @@ class pos_close_statement(osv.osv_memory):
'views': [(tree_id, 'tree'), (form_id, 'form')],
'type': 'ir.actions.act_window'
}
-
pos_close_statement()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/wizard/pos_close_statement.xml b/addons/point_of_sale/wizard/pos_close_statement.xml
index 7a9a5a0e23d..61c984c873e 100644
--- a/addons/point_of_sale/wizard/pos_close_statement.xml
+++ b/addons/point_of_sale/wizard/pos_close_statement.xml
@@ -1,15 +1,16 @@
-
+
-
-
+
+ Close Statementspos.close.statementform
-
-
+
+
+
@@ -22,15 +23,14 @@
-
-
-
+
+
Close Cash Registerir.actions.act_window
@@ -38,6 +38,6 @@
formformnew
-
-
-
+
+
+
diff --git a/addons/point_of_sale/wizard/pos_confirm.py b/addons/point_of_sale/wizard/pos_confirm.py
index c55209650ca..c80f3ed1dd6 100644
--- a/addons/point_of_sale/wizard/pos_confirm.py
+++ b/addons/point_of_sale/wizard/pos_confirm.py
@@ -25,36 +25,21 @@ from osv import osv
class pos_confirm(osv.osv_memory):
_name = 'pos.confirm'
- _description = 'Point of Sale Confirm'
+ _description = 'Post POS Journal Entries'
def action_confirm(self, cr, uid, ids, context=None):
- """
- Confirm the order and close the sales.
- @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 :Blank dictionary
- """
- if context is None:
- context = {}
- record_id = context and context.get('active_id', False)
- if record_id:
- if isinstance(record_id, (int, long)):
- record_id = [record_id]
- if record_id:
- order_obj = self.pool.get('pos.order')
-
- for order_id in order_obj.browse(cr, uid, record_id, context=context):
- if order_id.state == 'paid':
- order_obj.write(cr, uid, [order_id.id], {'journal_entry': True}, context=context)
- order_obj.create_account_move(cr, uid, [order_id.id], context=context)
-
- wf_service = netsvc.LocalService("workflow")
- for i in record_id:
- wf_service.trg_validate(uid, 'pos.order', i, 'done', cr)
+ wf_service = netsvc.LocalService("workflow")
+ order_obj = self.pool.get('pos.order')
+ ids = order_obj.search(cr, uid, [('state','=','paid')], context=context)
+ for order in order_obj.browse(cr, uid, ids, context=context):
+ todo = True
+ for line in order.statement_ids:
+ if line.statement_id.state <> 'confirm':
+ todo = False
+ break
+ if todo:
+ wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr)
return {}
-
pos_confirm()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/wizard/pos_confirm.xml b/addons/point_of_sale/wizard/pos_confirm.xml
index 1ea769cae49..85b43bd115d 100644
--- a/addons/point_of_sale/wizard/pos_confirm.xml
+++ b/addons/point_of_sale/wizard/pos_confirm.xml
@@ -1,32 +1,37 @@
-
+
-
-
- Sale Confirm
+
+ Post Journal Entriespos.confirmform
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
- Sale Confirm
+ Post Journal Entriesir.actions.act_windowpos.confirmformformnew
-
-
-
\ No newline at end of file
+
+
+
diff --git a/addons/point_of_sale/wizard/pos_discount.py b/addons/point_of_sale/wizard/pos_discount.py
index 928fe396f0b..aadd85b48eb 100644
--- a/addons/point_of_sale/wizard/pos_discount.py
+++ b/addons/point_of_sale/wizard/pos_discount.py
@@ -23,34 +23,28 @@ from osv import osv, fields
class pos_discount(osv.osv_memory):
_name = 'pos.discount'
- _description = 'Add Discount'
-
+ _description = 'Add a Global Discount'
_columns = {
- 'discount': fields.float('Discount ', required=True),
- 'discount_notes': fields.char('Discount Notes', size= 128, required=True),
+ 'discount': fields.float('Discount (%)', required=True, digits=(16,2)),
}
_defaults = {
'discount': 5,
}
-
- 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 is None:
- context = {}
- super(pos_discount, self).view_init(cr, uid, fields_list, context=context)
- record_id = context and context.get('active_id', False) or False
- order = self.pool.get('pos.order').browse(cr, uid, record_id, context=context)
- if not order.lines:
- raise osv.except_osv(_('Error!'), _('No Order Lines'))
- True
+# 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 is None:
+# context = {}
+# super(pos_discount, self).view_init(cr, uid, fields_list, context=context)
+# record_id = context and context.get('active_id', False) or False
+# True
def apply_discount(self, cr, uid, ids, context=None):
"""
@@ -70,33 +64,8 @@ class pos_discount(osv.osv_memory):
record_id = context and context.get('active_id', False)
if isinstance(record_id, (int, long)):
record_id = [record_id]
-
for order in order_ref.browse(cr, uid, record_id, context=context):
- for line in order.lines:
- company_discount = order.company_id.company_discount
- applied_discount = this.discount
-
- if applied_discount == 0.00:
- notice = 'No Discount'
- elif company_discount >= applied_discount:
- notice = 'Minimum Discount'
- else:
- notice = this.discount_notes
- res_new = {}
- if this.discount <= company_discount:
- res_new = {
- 'discount': this.discount,
- 'notice': notice,
- 'price_ded': line.price_unit * line.qty * (this.discount or 0) * 0.01 or 0.0
- }
- else:
- res_new = {
- 'discount': this.discount,
- 'notice': notice,
- 'price_ded': line.price_unit * line.qty * (this.discount or 0) * 0.01 or 0.0
- }
-
- order_line_ref.write(cr, uid, [line.id], res_new, context=context)
+ order_line_ref.write(cr, uid, [x.id for x in order.lines], {'discount':this.discount}, context=context)
return {}
pos_discount()
diff --git a/addons/point_of_sale/wizard/pos_discount.xml b/addons/point_of_sale/wizard/pos_discount.xml
index a0a7c534a95..bb198e29acf 100644
--- a/addons/point_of_sale/wizard/pos_discount.xml
+++ b/addons/point_of_sale/wizard/pos_discount.xml
@@ -1,22 +1,21 @@
-
+
-
-
+
+ Apply Discountpos.discountform
-
-
-
-
-
-
+
+
+
+
+
@@ -29,6 +28,6 @@
formnew
-
-
-
\ No newline at end of file
+
+
+
diff --git a/addons/point_of_sale/wizard/pos_get_sale.py b/addons/point_of_sale/wizard/pos_get_sale.py
deleted file mode 100644
index 48bd89bce7f..00000000000
--- a/addons/point_of_sale/wizard/pos_get_sale.py
+++ /dev/null
@@ -1,81 +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 osv, fields
-from tools.translate import _
-
-
-class pos_get_sale(osv.osv_memory):
- _name = 'pos.get.sale'
- _description = 'Get From Sale'
-
- _columns = {
- 'picking_id': fields.many2one('stock.picking', 'Sale Order', domain=[('state', 'in', ('assigned', 'confirmed')), ('type', '=', 'out')], context="{'contact_display': 'partner'}", required=True),
- }
-
- def sale_complete(self, cr, uid, ids, context=None):
- """
- Select the picking order and add the in Point of sale order
- @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 : nothing
- """
- proxy_pos = self.pool.get('pos.order')
- proxy_pick = self.pool.get('stock.picking')
- proxy_order_line = self.pool.get('pos.order.line')
- if context is None:
- context = {}
- this = self.browse(cr, uid, ids[0], context=context)
- record_id = context and context.get('active_id', False)
-
- if record_id:
- order = proxy_pos.browse(cr, uid, record_id, context=context)
- if order.state in ('paid', 'invoiced'):
- raise osv.except_osv(_('UserError '), _("You can't modify this order. It has already been paid"))
-
- for pick in proxy_pick.browse(cr, uid, [this.picking_id.id], context=context):
- proxy_pos.write(cr, uid, record_id, {
- 'picking_id': this.picking_id.id,
- 'partner_id': pick.address_id and pick.address_id.partner_id.id
- }, context=context)
-
- order = proxy_pick.write(cr, uid, [this.picking_id.id], {
- 'invoice_state': 'none',
- 'pos_order': record_id
- }, context=context)
-
- for line in pick.move_lines:
- proxy_order_line.create(cr, uid, {
- 'name': line.sale_line_id.name,
- 'order_id': record_id,
- 'qty': line.product_qty,
- 'product_id': line.product_id.id,
- 'price_unit': line.sale_line_id.price_unit,
- 'discount': line.sale_line_id.discount,
- }, context=context)
- return {}
-
-pos_get_sale()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/point_of_sale/wizard/pos_get_sale.xml b/addons/point_of_sale/wizard/pos_get_sale.xml
deleted file mode 100644
index 9a28da548d2..00000000000
--- a/addons/point_of_sale/wizard/pos_get_sale.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
- Open Sale Order
- pos.get.sale
- form
-
-
-
-
-
-
-
-
-
-
-
-
- Select an Open Sale Order
- ir.actions.act_window
- pos.get.sale
- form
- form
- new
-
-
-
-
\ No newline at end of file
diff --git a/addons/point_of_sale/wizard/pos_open_statement.py b/addons/point_of_sale/wizard/pos_open_statement.py
index 241f0a6e1d0..038ca3b6990 100644
--- a/addons/point_of_sale/wizard/pos_open_statement.py
+++ b/addons/point_of_sale/wizard/pos_open_statement.py
@@ -42,46 +42,48 @@ class pos_open_statement(osv.osv_memory):
journal_obj = self.pool.get('account.journal')
if context is None:
context = {}
- company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
- "WHERE user_id = %s ORDER BY journal_id"% (uid, ))
- j_ids = map(lambda x1: x1[0], cr.fetchall())
- journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
- for journal in journal_obj.browse(cr, uid, journal_ids, context=context):
+ st_ids = []
+ j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context)
+
+ for journal in journal_obj.browse(cr, uid, j_ids, context=context):
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)], context=context)
if len(ids):
- raise osv.except_osv(_('Message'), _('You can not open a Cashbox for "%s".\nPlease close its related cash register.') %(journal.name))
+ st_ids += ids
+ continue
- number = ''
if journal.sequence_id:
number = sequence_obj.get_id(cr, uid, journal.sequence_id.id)
else:
number = sequence_obj.get(cr, uid, 'account.cash.statement')
- data.update({'journal_id': journal.id,
- 'company_id': company_id,
- 'user_id': uid,
- 'state': 'draft',
- 'name': number })
+ data.update({
+ 'journal_id': journal.id,
+ 'user_id': uid,
+ 'state': 'draft',
+ 'name': number
+ })
statement_id = statement_obj.create(cr, uid, data, context=context)
- statement_obj.button_open(cr, uid, [statement_id], context)
+ st_ids.append(statement_id)
- tree_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_tree')
+ if journal.auto_cash:
+ statement_obj.button_open(cr, uid, [statement_id], context)
+
+ tree_res = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_cash_statement_pos_tree')
tree_id = tree_res and tree_res[1] or False
form_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_form2')
form_id = form_res and form_res[1] or False
search_id = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_pos_open_cash_statement_filter')
return {
- 'domain': "[('state', '=', 'open'),('user_id', '=', "+ str(uid) +")]",
- 'name': 'Open Statement',
+ 'domain': "[('id', 'in',[ "+','.join(map(str,st_ids))+"])]",
+ 'name': _('Open Cash Registers'),
'view_type': 'form',
'view_mode': 'tree, form',
'search_view_id': search_id and search_id[1] or False ,
'res_model': 'account.bank.statement',
'views': [(tree_id, 'tree'), (form_id, 'form')],
- 'context': {'search_default_open': 1},
+ 'context': {},
'type': 'ir.actions.act_window'
}
pos_open_statement()
diff --git a/addons/point_of_sale/wizard/pos_open_statement.xml b/addons/point_of_sale/wizard/pos_open_statement.xml
index 870d8f71e47..54a66c3c5f7 100644
--- a/addons/point_of_sale/wizard/pos_open_statement.xml
+++ b/addons/point_of_sale/wizard/pos_open_statement.xml
@@ -3,31 +3,31 @@
-
+ Open Statementspos.open.statementform
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+ Open Cash Register
@@ -38,5 +38,5 @@
new
-
-
+
+
diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py
index ea5bd2639d7..adf59e3cbce 100644
--- a/addons/point_of_sale/wizard/pos_payment.py
+++ b/addons/point_of_sale/wizard/pos_payment.py
@@ -29,188 +29,44 @@ import pos_box_entries
class pos_make_payment(osv.osv_memory):
_name = 'pos.make.payment'
_description = 'Point of Sale Payment'
-
- 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.
- """
- if context is None:
- context = {}
- journal_obj = self.pool.get('account.journal')
- order_obj = self.pool.get('pos.order')
- res = super(pos_make_payment, self).default_get(cr, uid, fields, context=context)
- active_id = context and context.get('active_id', False)
- if active_id:
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
- "WHERE user_id = %d ORDER BY journal_id"% (uid, ))
- j_ids = map(lambda x1: x1[0], cr.fetchall())
- journal = journal_obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
- journal = journal and journal[0] or False
- order = order_obj.browse(cr, uid, active_id, context=context)
- #get amount to pay
- amount = order.amount_total - order.amount_paid
- if amount <= 0.0:
- context.update({'flag': True})
- order_obj.action_paid(cr, uid, [active_id], context)
- elif order.amount_paid > 0.0:
- order_obj.write(cr, uid, [active_id], {'state': 'advance'}, context=context)
- invoice_wanted_checked = False
-
- current_date = time.strftime('%Y-%m-%d')
-
- if 'journal' in fields:
- res.update({'journal': journal})
- if 'amount' in fields:
- res.update({'amount': amount})
- if 'invoice_wanted' in fields:
- res.update({'invoice_wanted': invoice_wanted_checked})
- if 'payment_date' in fields:
- res.update({'payment_date': current_date})
- if 'payment_name' in fields:
- res.update({'payment_name': 'Payment'})
- if 'partner_id' in fields:
- res.update({'partner_id': order.partner_id.id or False})
- if 'pricelist_id' in fields:
- res.update({'pricelist_id': order.pricelist_id.id or False})
- return res
-
- def view_init(self, cr, uid, fields_list, context=None):
- if context is None:
- context = {}
- super(pos_make_payment, self).view_init(cr, uid, fields_list, context=context)
- active_id = context and context.get('active_id', False) or False
- if active_id:
- order = self.pool.get('pos.order').browse(cr, uid, active_id, context=context)
- if not order.lines:
- raise osv.except_osv(_('Error!'),_('No order lines defined for this sale '))
- return True
-
- 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.
-
- """
- result = super(pos_make_payment, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
- if context is None:
- context = {}
- active_model = context.get('active_model')
- active_id = context and context.get('active_id', False) or False
- if not active_id or (active_model and active_model != 'pos.order'):
- return result
-
- order = self.pool.get('pos.order').browse(cr, uid, active_id, context=context)
- if order.amount_total == order.amount_paid:
- result['arch'] = """
-
-
-
-
-
-
-
- """
- return result
-
- def onchange_product_id(self, cr, uid, ids, product_id, amount):
- """ Changes amount if product_id changes.
- @param product_id: Changed product_id
- @param amount: Amount to be paid
- @return: Dictionary of changed values
- """
- prod_obj = self.pool.get('product.product')
- if product_id:
- product = prod_obj.browse(cr, uid, product_id)
- amount = product.list_price
- return {'value': {'amount': amount}}
-
def check(self, cr, uid, ids, context=None):
"""Check the order:
if the order is not paid: continue payment,
- if the order is paid print invoice (if wanted) or ticket.
+ if the order is paid print ticket.
"""
+ context = context or {}
order_obj = self.pool.get('pos.order')
obj_partner = self.pool.get('res.partner')
- if context is None:
- context = {}
active_id = context and context.get('active_id', False)
+
order = order_obj.browse(cr, uid, active_id, context=context)
amount = order.amount_total - order.amount_paid
- data = self.read(cr, uid, ids, context=context)[0]
- for m2o_field in ['product_id','pricelist_id','partner_id']:
- data[m2o_field] = data.get(m2o_field, False) and data[m2o_field][0] or False
- if data['is_acc']:
- amount = self.pool.get('product.product').browse(cr, uid, data['product_id'], context=context).list_price
+ data = self.read(cr, uid, ids, context=context)[0]
+ # this is probably a problem of osv_memory as it's not compatible with normal OSV's
+ #data['journal'] = data['journal'][0]
if amount != 0.0:
- order_obj.write(cr, uid, [active_id], {'invoice_wanted': data['invoice_wanted'], 'partner_id': data['partner_id']}, context=context)
order_obj.add_payment(cr, uid, active_id, data, context=context)
if order_obj.test_paid(cr, uid, [active_id]):
- if data['partner_id'] and data['invoice_wanted']:
- partner = obj_partner.browse(cr, uid, data['partner_id'], context=context)
- if not partner.address:
- raise osv.except_osv(_('Error!'),_("Customer doesn't have an address to make the invoice"))
- order_obj.action_invoice(cr, uid, [active_id], context=context)
- order_obj.create_picking(cr, uid, [active_id], context=context)
- if context.get('return', False):
- order_obj.write(cr, uid, [active_id], {'state':'done'}, context=context)
- else:
- order_obj.write(cr, uid, [active_id],{'state':'paid'}, context=context)
- return self.create_invoice(cr, uid, ids, context=context)
- else:
- context.update({'flag': True})
- order_obj.action_paid(cr, uid, [active_id], context=context)
- if context.get('return', False):
- order_obj.write(cr, uid, [active_id], {'state':'done'}, context=context)
- else:
- order_obj.write(cr, uid, [active_id], {'state':'paid'}, context=context)
- return self.print_report(cr, uid, ids, context=context)
+ order_obj.action_paid(cr, uid, [active_id], context=context)
+ return self.print_report(cr, uid, ids, context=context)
- context.update({'flag': True})
- # Todo need to check
- order_obj.action_paid(cr, uid, [active_id], context=context)
- order_obj.write(cr, uid, [active_id], {'state': 'advance'}, context=context)
- return self.print_report(cr, uid, ids, context=context)
+ return self.launch_payment(cr, uid, ids, context=context)
-
- def create_invoice(self, cr, uid, ids, context=None):
- """
- Create a invoice
- """
- if context is None:
- context = {}
- active_ids = [context and context.get('active_id', False)]
- datas = {'ids': active_ids}
+ def launch_payment(self, cr, uid, ids, context=None):
return {
- 'type' : 'ir.actions.report.xml',
- 'report_name':'pos.invoice',
- 'datas' : datas,
+ 'name': _('Paiement'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'pos.make.payment',
+ 'view_id': False,
+ 'target': 'new',
+ 'views': False,
+ 'type': 'ir.actions.act_window',
}
def print_report(self, cr, uid, ids, context=None):
- """
- @summary: To get the date and print the report
- @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 : retrun report
- """
- if context is None:
- context = {}
active_id = context.get('active_id', [])
datas = {'ids' : [active_id]}
return {
@@ -219,19 +75,29 @@ class pos_make_payment(osv.osv_memory):
'datas': datas,
}
+ def _default_journal(self, cr, uid, context=None):
+ res = pos_box_entries.get_journal(self, cr, uid, context=context)
+ return len(res)>1 and res[1][0] or False
+
+ def _default_amount(self, cr, uid, context=None):
+ order_obj = self.pool.get('pos.order')
+ active_id = context and context.get('active_id', False)
+ if active_id:
+ order = order_obj.browse(cr, uid, active_id, context=context)
+ return order.amount_total - order.amount_paid
+ return False
+
_columns = {
- 'journal': fields.selection(pos_box_entries.get_journal, "Cash Register", required=True),
- 'product_id': fields.many2one('product.product', "Advance"),
+ 'journal': fields.selection(pos_box_entries.get_journal, "Payment Mode", required=True),
'amount': fields.float('Amount', digits=(16,2), required= True),
- 'payment_name': fields.char('Payment name', size=32, required=True),
- 'payment_date': fields.date('Payment date', required=True),
- 'is_acc': fields.boolean('Advance'),
- 'invoice_wanted': fields.boolean('Invoice'),
- 'num_sale': fields.char('Num.File', size=32),
- 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist'),
- 'partner_id': fields.many2one('res.partner', 'Customer'),
+ 'payment_name': fields.char('Payment Reference', size=32),
+ 'payment_date': fields.date('Payment Date', required=True),
+ }
+ _defaults = {
+ 'payment_date': time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'amount': _default_amount,
+ 'journal': _default_journal
}
pos_make_payment()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/wizard/pos_payment.xml b/addons/point_of_sale/wizard/pos_payment.xml
index a6757be6b78..212c0d8c412 100644
--- a/addons/point_of_sale/wizard/pos_payment.xml
+++ b/addons/point_of_sale/wizard/pos_payment.xml
@@ -2,57 +2,37 @@
-
-
-
+ Add payment :pos.make.paymentform
-
-
-
-
- Sale by Users
- ir.actions.act_window
- pos.sales.user.today
- form
- form
- new
-
-
-
-
\ No newline at end of file
diff --git a/addons/point_of_sale/wizard/pos_sales_user_current_user.xml b/addons/point_of_sale/wizard/pos_sales_user_current_user.xml
deleted file mode 100644
index e51ecfee760..00000000000
--- a/addons/point_of_sale/wizard/pos_sales_user_current_user.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
- Sales for Current User
- pos.sales.user.today.current_user
- form
-
-
-
-
-
-
-
-
-
-
-
-
- Sales for Current User
- ir.actions.act_window
- pos.sales.user.today.current_user
- form
- form
- new
-
-
-
-
-
\ No newline at end of file
diff --git a/addons/point_of_sale/wizard/pos_scan_product.py b/addons/point_of_sale/wizard/pos_scan_product.py
deleted file mode 100644
index 8e1e4aace86..00000000000
--- a/addons/point_of_sale/wizard/pos_scan_product.py
+++ /dev/null
@@ -1,51 +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 osv,fields
-
-
-class pos_scan_product(osv.osv_memory):
- _name = 'pos.scan.product'
- _description = 'Scan product'
-
- _columns = {
- 'gencod': fields.char('Barcode', size=13, required=True)
- }
-
- def scan(self, cr, uid, ids, context=None):
- """
- To get the gencod and scan product
- @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 : retrun gencod
- """
- if context is None:
- context = {}
- data=self.read(cr, uid, ids)[0]
- record_id = context and context.get('active_id', False)
- self. pool.get('pos.order.line')._scan_product(cr, uid, data['gencod'], 1, record_id)
- return {'gencod': False}
-
-pos_scan_product()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/point_of_sale/wizard/pos_scan_product_view.xml b/addons/point_of_sale/wizard/pos_scan_product_view.xml
deleted file mode 100644
index 3957c6c0415..00000000000
--- a/addons/point_of_sale/wizard/pos_scan_product_view.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
- Scan product
- pos.scan.product
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Scan product
- ir.actions.act_window
- pos.scan.product
- form
- form
- new
-
-
-
-
-
\ No newline at end of file
diff --git a/addons/portal/i18n/fr.po b/addons/portal/i18n/fr.po
index 99499a00149..19e685ebae1 100644
--- a/addons/portal/i18n/fr.po
+++ b/addons/portal/i18n/fr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2011-07-04 14:16+0000\n"
-"PO-Revision-Date: 2011-07-11 09:51+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2011-09-26 12:28+0000\n"
+"Last-Translator: Numérigraphe \n"
"Language-Team: French \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-09-05 05:59+0000\n"
-"X-Generator: Launchpad (build 13830)\n"
+"X-Launchpad-Export-Date: 2011-09-27 04:47+0000\n"
+"X-Generator: Launchpad (build 14028)\n"
#. module: portal
#: code:addons/portal/wizard/share_wizard.py:55
@@ -73,7 +73,7 @@ msgstr ""
#. module: portal
#: constraint:res.users:0
msgid "The chosen company is not in the allowed companies for this user"
-msgstr ""
+msgstr "La société choisie n'est pas autorisée pour cet utilisateur."
#. module: portal
#: view:res.portal:0
@@ -207,12 +207,12 @@ msgstr ""
#: view:share.wizard:0
#: field:share.wizard,user_ids:0
msgid "Existing users"
-msgstr ""
+msgstr "Utilisateurs existants"
#. module: portal
#: field:res.portal.wizard.user,wizard_id:0
msgid "Wizard"
-msgstr ""
+msgstr "Assistant"
#. module: portal
#: help:res.portal.wizard.user,user_email:0
@@ -224,12 +224,12 @@ msgstr ""
#. module: portal
#: field:res.portal.wizard.user,lang:0
msgid "Language"
-msgstr ""
+msgstr "Langue"
#. module: portal
#: field:res.portal,url:0
msgid "URL"
-msgstr ""
+msgstr "URL"
#. module: portal
#: view:res.portal:0
@@ -249,7 +249,7 @@ msgstr "Annuler"
#. module: portal
#: view:res.portal:0
msgid "Website"
-msgstr ""
+msgstr "Site web"
#. module: portal
#: view:res.portal:0
@@ -271,7 +271,7 @@ msgstr ""
#. module: portal
#: model:ir.model,name:portal.model_res_users
msgid "res.users"
-msgstr ""
+msgstr "res.users"
#. module: portal
#: constraint:res.portal.wizard.user:0
@@ -288,7 +288,7 @@ msgstr ""
#. module: portal
#: model:ir.model,name:portal.model_ir_ui_menu
msgid "ir.ui.menu"
-msgstr ""
+msgstr "ir.ui.menu"
#. module: portal
#: help:res.portal,group_id:0
@@ -323,7 +323,7 @@ msgstr ""
#. module: portal
#: field:res.portal.widget,sequence:0
msgid "Sequence"
-msgstr ""
+msgstr "Séquence"
#. module: portal
#: field:res.users,partner_id:0
@@ -386,7 +386,7 @@ msgstr ""
#. module: portal
#: field:res.portal.wizard.user,partner_id:0
msgid "Partner"
-msgstr ""
+msgstr "Partenaire"
#. module: portal
#: model:ir.actions.act_window,help:portal.portal_list_action
diff --git a/addons/process/process.py b/addons/process/process.py
index 72c8bce10b4..524a3236e7b 100644
--- a/addons/process/process.py
+++ b/addons/process/process.py
@@ -84,12 +84,12 @@ class process_process(osv.osv):
process = pool.get('process.process').browse(cr, uid, id, context=context)
name = process.name
- resource = None
+ resource = False
state = 'N/A'
expr_context = {}
states = {}
- perm = None
+ perm = False
if res_model:
states = dict(pool.get(res_model).fields_get(cr, uid, context=context).get('state', {}).get('selection', {}))
@@ -242,7 +242,9 @@ class process_process(osv.osv):
for k, v in nodes.items():
y = v['y']
v['y'] = min(y - miny + 10, y)
-
+
+ nodes = dict([str(n_key), n_val] for n_key, n_val in nodes.iteritems())
+ transitions = dict([str(t_key), t_val] for t_key, t_val in transitions.iteritems())
return dict(name=name, resource=resource, state=state, perm=perm, notes=notes, nodes=nodes, transitions=transitions)
def copy(self, cr, uid, id, default=None, context=None):
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index f05ca64144d..9b298915f12 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -165,6 +165,10 @@ class procurement_order(osv.osv):
"""
return all(procurement.move_id.state == 'cancel' for procurement in self.browse(cr, uid, ids, context=context))
+ #This Function is create to avoid a server side Error Like 'ERROR:tests.mrp:name 'check_move' is not defined'
+ def check_move(self, cr, uid, ids, context=None):
+ pass
+
def check_move_done(self, cr, uid, ids, context=None):
""" Checks if move is done or not.
@return: True or False.
diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml
index b2f5e13b756..400412298cc 100644
--- a/addons/procurement/procurement_view.xml
+++ b/addons/procurement/procurement_view.xml
@@ -1,7 +1,7 @@
-
-
@@ -101,15 +101,14 @@
-
-
-
+
+
@@ -120,7 +119,7 @@
-
+
diff --git a/addons/product/product.py b/addons/product/product.py
index 863081a8155..78fc05fe7e7 100644
--- a/addons/product/product.py
+++ b/addons/product/product.py
@@ -75,7 +75,7 @@ class product_uom(osv.osv):
_description = 'Product Unit of Measure'
def _compute_factor_inv(self, factor):
- return factor and round(1.0 / factor, 6) or 0.0
+ return factor and (1.0 / factor) or 0.0
def _factor_inv(self, cursor, user, ids, name, arg, context=None):
res = {}
@@ -100,7 +100,7 @@ class product_uom(osv.osv):
'factor': fields.float('Ratio', required=True,digits=(12, 12),
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_compute=dp.get_precision('Product UoM'),
+ 'factor_inv': fields.function(_factor_inv, digits=(12,12),
fnct_inv=_factor_inv_write,
string='Ratio',
help='How many times this UoM is bigger than the reference UoM in this category:\n'\
@@ -250,9 +250,9 @@ class product_template(osv.osv):
result[product.id] = {field:False}
result[product.id]['seller_delay'] = 1
if product.seller_ids:
- partner_list = sorted([(partner_id.sequence, partner_id)
+ partner_list = [(partner_id.sequence, partner_id)
for partner_id in product.seller_ids
- if partner_id and isinstance(partner_id.sequence, (int, long))])
+ if partner_id and isinstance(partner_id.sequence, (int, long))]
main_supplier = partner_list and partner_list[0] and partner_list[0][1] or False
result[product.id]['seller_delay'] = main_supplier and main_supplier.delay or 1
result[product.id]['seller_qty'] = main_supplier and main_supplier.qty or 0.0
@@ -713,24 +713,16 @@ class product_supplierinfo(osv.osv):
for supplier_info in self.browse(cr, uid, ids, context=context):
for field in fields:
result[supplier_info.id] = {field:False}
- if supplier_info.product_uom.id:
- qty = product_uom_pool._compute_qty(cr, uid, supplier_info.product_uom.id, supplier_info.min_qty, to_uom_id=supplier_info.product_id.uom_id.id)
- else:
- qty = supplier_info.min_qty
+ qty = supplier_info.min_qty
result[supplier_info.id]['qty'] = qty
return result
- def _get_uom_id(self, cr, uid, context=None):
- if context is None:
- context = {}
- return context.get('uom_id', False)
-
_columns = {
'name' : fields.many2one('res.partner', 'Supplier', required=True,domain = [('supplier','=',True)], ondelete='cascade', help="Supplier of this product"),
'product_name': fields.char('Supplier Product Name', size=128, help="This supplier's product name will be used when printing a request for quotation. Keep empty to use the internal one."),
'product_code': fields.char('Supplier Product Code', size=64, help="This supplier's product code will be used when printing a request for quotation. Keep empty to use the internal one."),
'sequence' : fields.integer('Sequence', help="Assigns the priority to the list of product supplier."),
- 'product_uom': fields.many2one('product.uom', string="Supplier UoM", help="Choose here the Unit of Measure in which the prices and quantities are expressed below."),
+ 'product_uom': fields.related('product_id', 'uom_po_id', type='many2one', relation='product.uom', string="Supplier UoM", readonly="1", help="This comes from the product form."),
'min_qty': fields.float('Minimal Quantity', required=True, help="The minimal quantity to purchase to this supplier, expressed in the supplier Product UoM if not empty, in the default unit of measure of the product otherwise."),
'qty': fields.function(_calc_qty, store=True, type='float', string='Quantity', multi="qty", help="This is a quantity which is converted into Default Uom."),
'product_id' : fields.many2one('product.template', 'Product', required=True, ondelete='cascade', select=True),
@@ -743,17 +735,7 @@ class product_supplierinfo(osv.osv):
'sequence': lambda *a: 1,
'delay': lambda *a: 1,
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'product.supplierinfo', context=c),
- 'product_uom': _get_uom_id,
}
- def _check_uom(self, cr, uid, ids, context=None):
- for supplier_info in self.browse(cr, uid, ids, context=context):
- if supplier_info.product_uom and supplier_info.product_uom.category_id.id <> supplier_info.product_id.uom_id.category_id.id:
- return False
- return True
-
- _constraints = [
- (_check_uom, 'Error: The default UOM and the Supplier Product UOM must be in the same category.', ['product_uom']),
- ]
def price_get(self, cr, uid, supplier_ids, product_id, product_qty=1, context=None):
"""
Calculate price from supplier pricelist.
diff --git a/addons/product/wizard/product_installer.xml b/addons/product/wizard/product_installer.xml
index bdfbc1d32bf..01ddf25c56c 100644
--- a/addons/product/wizard/product_installer.xml
+++ b/addons/product/wizard/product_installer.xml
@@ -2,7 +2,7 @@
- Create some Products
+ Create or Import Productsir.actions.act_windowproduct.productform
diff --git a/addons/product_margin/__openerp__.py b/addons/product_margin/__openerp__.py
index 69553f1aced..9ef858fa9ec 100644
--- a/addons/product_margin/__openerp__.py
+++ b/addons/product_margin/__openerp__.py
@@ -37,6 +37,7 @@ The wizard to launch the report has several options to help you get the data you
'wizard/product_margin_view.xml',
'product_margin_view.xml'
],
+ 'test':['test/product_margin.yml'],
'demo_xml': [],
'installable': True,
'active': False,
diff --git a/addons/product_margin/test/product_margin.yml b/addons/product_margin/test/product_margin.yml
new file mode 100644
index 00000000000..fa8241ab206
--- /dev/null
+++ b/addons/product_margin/test/product_margin.yml
@@ -0,0 +1,25 @@
+-
+ In order to test the product_margin module, I create a product margin record
+-
+ !record {model: product.margin, id: product_margin_wiz0}:
+ from_date: !eval "'%s-01-01' %(datetime.now().year)"
+ to_date: !eval "'%s-12-31' %(datetime.now().year)"
+ invoice_state: open_paid
+-
+ I open margin for PC3
+-
+ !python {model: product.margin}: |
+ self.action_open_window(cr, uid, [ref("product_margin_wiz0")], {"lang": 'en_US',
+ "search_default_filter_to_sell": "1", "tz": False, "active_model": "product.product", "disable_log": True,
+ "active_ids": [ref("product.product_product_pc3")], "active_id": ref("product.product_product_pc3")})
+-
+ I read the fields of the product.
+-
+ !python {model: product.product}: |
+ fields = ['sale_avg_price', 'expected_margin_rate', 'total_margin_rate', 'total_cost', 'sale_num_invoiced',
+ 'total_margin', 'sales_gap', 'purchase_num_invoiced', 'expected_margin', 'turnover']
+ self.read(cr, uid, [ref("product_margin_wiz0")], fields, {"lang": 'en_US',
+ "search_default_filter_to_sell": "1", "tz": False, "active_model": "product.product",
+ "bin_size": True, "active_ids": [ref("product.product_product_pc3")],
+ "active_id": ref("product.product_product_pc3")})
+
diff --git a/addons/project/project.py b/addons/project/project.py
index 96bf2f30fdc..3565a877b61 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -430,7 +430,7 @@ class task(osv.osv):
'priority': fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Important'), ('0','Very important')], '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,
+ 'state': fields.selection([('draft', 'New'),('open', 'In Progress'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
help='If the task is created the state is \'Draft\'.\n If the task is started, the state becomes \'In Progress\'.\n If review is needed the task is in \'Pending\' state.\
\n If the task is over, the states is set to \'Done\'.'),
'create_date': fields.datetime('Create Date', readonly=True,select=True),
diff --git a/addons/project/project_installer.xml b/addons/project/project_installer.xml
index d6538ac1310..3e04b919edd 100644
--- a/addons/project/project_installer.xml
+++ b/addons/project/project_installer.xml
@@ -1,27 +1,74 @@
+
-
+
-
- project.installer.view
- base.setup.installer
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ project.installer.view
+ base.setup.installer
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+ Project Management
+ 7
+
+
+
+ Create your initial projects
+ ir.actions.act_window
+ project.project
+ form
+ form
+
+
+
+
+
+
+
+
+ Configure Default Time Unit for Project
+ ir.actions.act_window
+ res.company
+
+ form
+ form
+ {'res_id' : user.company_id.id}
+
+
+
+
+
+
+
+ Review Task Stages
+ ir.actions.act_window
+ project.task.type
+ form
+ tree,form
+ {}
+ []
+
+
+
+
+
+
+
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 2bca9293e08..b49241de996 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -45,7 +45,7 @@
-
+
@@ -107,7 +107,8 @@
-
+
+
@@ -257,7 +258,7 @@
-
+
@@ -453,7 +454,7 @@
-
+
diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml
index b9be53a2431..601f6e2004f 100644
--- a/addons/project/report/project_report_view.xml
+++ b/addons/project/report/project_report_view.xml
@@ -72,11 +72,11 @@
domain="[('date_start','<=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('date_start','>=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]"
help="Previous Month"/>
-
-
+
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index af756d34c5f..302000950a1 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -196,7 +196,7 @@ class project_issue(crm.crm_case, osv.osv):
domain="[('partner_id','=',partner_id)]"),
'company_id': fields.many2one('res.company', 'Company'),
'description': fields.text('Description'),
- 'state': fields.selection([('draft', 'New'), ('open', 'To Do'), ('cancel', 'Cancelled'), ('done', 'Closed'),('pending', 'Pending'), ], 'State', size=16, readonly=True,
+ 'state': fields.selection([('draft', 'New'), ('open', 'To Solve'), ('cancel', 'Cancelled'), ('done', 'Closed'),('pending', 'Pending'), ], 'State', size=16, readonly=True,
help='The state is set to \'Draft\', when a case is created.\
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
diff --git a/addons/project_issue/project_issue_menu.xml b/addons/project_issue/project_issue_menu.xml
index 18c8779704f..d404ed7f03f 100644
--- a/addons/project_issue/project_issue_menu.xml
+++ b/addons/project_issue/project_issue_menu.xml
@@ -1,8 +1,6 @@
-
- ######################## ISSUE TRACKING (menu) ###########################
@@ -13,7 +11,7 @@
tree,calendar
- {"search_default_user_id": uid, "search_default_current":1, "search_default_project_id":project_id}
+ {"search_default_user_id": uid, "search_default_draft": 1, "search_default_project_id":project_id}Issues such as system bugs, customer complaints, and material breakdowns are collected here. You can define the stages assigned when solving the project issue (analysis, development, done). With the mailgateway module, issues can be integrated through an email address (example: support@mycompany.com)
@@ -40,7 +38,7 @@
-
+
-
+
@@ -124,7 +124,7 @@
icon="terp-mail-replied" type="action"/>
-
+
@@ -208,10 +208,8 @@
-
-
-
-
+
+
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index ef629b5b017..12ae4f7a870 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -53,7 +53,7 @@
-
@@ -63,11 +63,13 @@
-
-
+
+ string="New"
+ domain="[('state','=','draft')]"/>
+
diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py
index 6c5ef7890bf..7cd6697b67a 100644
--- a/addons/project_long_term/project_long_term.py
+++ b/addons/project_long_term/project_long_term.py
@@ -117,7 +117,7 @@ class project_phase(osv.osv):
'task_ids': fields.one2many('project.task', 'phase_id', "Project Tasks", states={'done':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'resource_ids': fields.one2many('project.resource.allocation', 'phase_id', "Project Resources",states={'done':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'responsible_id': fields.many2one('res.users', 'Responsible', states={'done':[('readonly',True)], 'cancelled':[('readonly',True)]}),
- 'state': fields.selection([('draft', 'Draft'), ('open', 'In Progress'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
+ 'state': fields.selection([('draft', 'New'), ('open', 'In Progress'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
help='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\'.'),
'total_hours': fields.function(_compute, string='Total Hours'),
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index c53f4196202..49b306ebfd5 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -140,7 +140,7 @@
-
+
@@ -267,7 +267,7 @@
-
+
diff --git a/addons/project_long_term/wizard/project_compute_phases_view.xml b/addons/project_long_term/wizard/project_compute_phases_view.xml
index 9d5754af09c..69b7d94eabd 100644
--- a/addons/project_long_term/wizard/project_compute_phases_view.xml
+++ b/addons/project_long_term/wizard/project_compute_phases_view.xml
@@ -31,7 +31,6 @@
formform
- {'record_id': active_id}newTo schedule phases of all or a specified project. It then open a gantt view.
diff --git a/addons/project_long_term/wizard/project_compute_tasks_view.xml b/addons/project_long_term/wizard/project_compute_tasks_view.xml
index e6540fafff9..e679110acdc 100644
--- a/addons/project_long_term/wizard/project_compute_tasks_view.xml
+++ b/addons/project_long_term/wizard/project_compute_tasks_view.xml
@@ -30,7 +30,6 @@
formform
- {'record_id' : active_id}new
diff --git a/addons/project_scrum/i18n/fr.po b/addons/project_scrum/i18n/fr.po
index adca710673b..4379520c588 100644
--- a/addons/project_scrum/i18n/fr.po
+++ b/addons/project_scrum/i18n/fr.po
@@ -7,15 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-01-18 16:47+0000\n"
-"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) "
-"\n"
+"PO-Revision-Date: 2011-09-26 12:11+0000\n"
+"Last-Translator: Numérigraphe \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: 2011-09-05 05:03+0000\n"
-"X-Generator: Launchpad (build 13830)\n"
+"X-Launchpad-Export-Date: 2011-09-27 04:47+0000\n"
+"X-Generator: Launchpad (build 14028)\n"
#. module: project_scrum
#: help:project.scrum.email,scrum_master_email:0
@@ -991,6 +990,14 @@ msgid ""
"*Blocks encountered:\n"
"_______________________ %s"
msgstr ""
+"\n"
+"* Tâches depuis hier :\n"
+"_______________________%s\n"
+"* Tâches pour aujourd'hui :\n"
+"_______________________ %s\n"
+"\n"
+"* Blocages rencontrés :\n"
+"_______________________ %s"
#. module: project_scrum
#: help:project.scrum.product.backlog,active:0
diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml
index 53e0d9e442d..4622bd305c7 100644
--- a/addons/project_scrum/project_scrum_view.xml
+++ b/addons/project_scrum/project_scrum_view.xml
@@ -61,8 +61,8 @@
-
@@ -132,12 +132,11 @@
-
-
+ domain="['|','&',('sprint_id.date_start','<=',time.strftime('%%Y-%%m-%%d')), ('sprint_id.date_stop','>=',time.strftime('%%Y-%%m-%%d')), ('state','=','draft')]"
+ help="Draft Backlogs"/>
+
@@ -179,7 +178,7 @@
Product Backlogsproject.scrum.product.backlogform
- {'search_default_current': 1,'search_default_user_id':uid,'search_default_project_id':project_id}
+ {'search_default_current':1, 'search_default_user_id':uid,'search_default_project_id':project_id}The scrum agile methodology is used in software development projects. The Product Backlog is the list of features to be implemented. A product backlog can be planified in a development sprint and may be split into several tasks. The product backlog is managed by the product owner of the project.
@@ -225,7 +224,7 @@
+ string="Burndown Chart" type="action" icon="gtk-print"/>
@@ -274,7 +273,7 @@
-
+
@@ -303,7 +302,7 @@
+ string="Burndown Chart" type="action" icon="gtk-print"/>
@@ -320,9 +319,8 @@
-
-
-
+
+
@@ -351,7 +349,7 @@
formtree,form,calendar
- {"search_default_filter_current": 1}
+ {"search_default_current": 1}The scrum agile methodology is used in software development projects. In this methodology, a sprint is a short period of time (e.g. one month) during which the team implements a list of product backlogs. The sprint review is organized when the team presents its work to the customer and product owner.
@@ -589,7 +587,7 @@
-
+
@@ -597,7 +595,7 @@
-
+
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index d6c1d4c903f..dcf29bfaceb 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -540,7 +540,7 @@ class purchase_order(osv.osv):
if not order_infos:
order_infos.update({
'origin': porder.origin,
- 'date_order': time.strftime('%Y-%m-%d'),
+ 'date_order': porder.date_order,
'partner_id': porder.partner_id.id,
'partner_address_id': porder.partner_address_id.id,
'dest_address_id': porder.dest_address_id.id,
@@ -553,6 +553,8 @@ class purchase_order(osv.osv):
'fiscal_position': porder.fiscal_position and porder.fiscal_position.id or False,
})
else:
+ if porder.date_order < order_infos['date_order']:
+ order_infos['date_order'] = porder.date_order
if porder.notes:
order_infos['notes'] = (order_infos['notes'] or '') + ('\n%s' % (porder.notes,))
if porder.origin:
@@ -665,7 +667,7 @@ class purchase_order_line(osv.osv):
def product_id_change(self, cr, uid, ids, pricelist, product, qty, uom,
partner_id, date_order=False, fiscal_position=False, date_planned=False,
- name=False, price_unit=False, notes=False):
+ name=False, price_unit=False, notes=False, context={}):
if not pricelist:
raise osv.except_osv(_('No Pricelist !'), _('You have to select a pricelist or a supplier in the purchase form !\nPlease set one before choosing a product.'))
if not partner_id:
@@ -738,10 +740,10 @@ class purchase_order_line(osv.osv):
def product_uom_change(self, cr, uid, ids, pricelist, product, qty, uom,
partner_id, date_order=False, fiscal_position=False, date_planned=False,
- name=False, price_unit=False, notes=False):
+ name=False, price_unit=False, notes=False, context={}):
res = self.product_id_change(cr, uid, ids, pricelist, product, qty, uom,
partner_id, date_order=date_order, fiscal_position=fiscal_position, date_planned=date_planned,
- name=name, price_unit=price_unit, notes=notes)
+ name=name, price_unit=price_unit, notes=notes, context=context)
if 'product_uom' in res['value']:
if uom and (uom != res['value']['product_uom']) and res['value']['product_uom']:
seller_uom_name = self.pool.get('product.uom').read(cr, uid, [res['value']['product_uom']], ['name'])[0]['name']
@@ -818,8 +820,9 @@ class procurement_order(osv.osv):
price = pricelist_obj.price_get(cr, uid, [pricelist_id], procurement.product_id.id, qty, partner_id, {'uom': uom_id})[pricelist_id]
- newdate = datetime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S')
- newdate = (newdate - relativedelta(days=company.po_lead)) - relativedelta(days=seller_delay)
+ order_date = datetime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S')
+ schedule_date = (order_date - relativedelta(days=company.po_lead))
+ order_dates = schedule_date - relativedelta(days=seller_delay)
#Passing partner_id to context for purchase order line integrity of Line name
context.update({'lang': partner.lang, 'partner_id': partner_id})
@@ -833,8 +836,8 @@ class procurement_order(osv.osv):
'product_qty': qty,
'product_id': procurement.product_id.id,
'product_uom': uom_id,
- 'price_unit': price,
- 'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
+ 'price_unit': price or 0.0,
+ 'date_planned': schedule_date.strftime('%Y-%m-%d %H:%M:%S'),
'move_dest_id': res_id,
'notes': product.description_purchase,
'taxes_id': [(6,0,taxes)],
@@ -846,6 +849,7 @@ class procurement_order(osv.osv):
'partner_address_id': address_id,
'location_id': procurement.location_id.id,
'pricelist_id': pricelist_id,
+ 'date_order': order_dates.strftime('%Y-%m-%d %H:%M:%S'),
'company_id': procurement.company_id.id,
'fiscal_position': partner.property_account_position and partner.property_account_position.id or False
}
diff --git a/addons/purchase/purchase_sequence.xml b/addons/purchase/purchase_sequence.xml
index 7f426b53be6..d5b4fc4bd3b 100644
--- a/addons/purchase/purchase_sequence.xml
+++ b/addons/purchase/purchase_sequence.xml
@@ -11,6 +11,7 @@
purchase.orderPO5
+
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 035dbbc23b9..cb7224faaf0 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -194,7 +194,7 @@
-
+
@@ -234,20 +234,19 @@
-
- purchase.order.list.select
+
+ request.quotation.selectpurchase.ordersearch
-
-
+
@@ -268,6 +267,42 @@
+
+
+ purchase.order.list.select
+ purchase.order
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
purchase.order.treepurchase.order
@@ -294,10 +329,9 @@
Requests for Quotationir.actions.act_windowpurchase.order
- form{'search_default_draft': 1}tree,form,graph,calendar
-
+ You can create a request for quotation when you want to buy products to a supplier but the purchase is not confirmed yet. Use also this menu to review requests for quotation created automatically based on your logistic rules (minimum stock, MTO, etc). You can convert the request for quotation into a purchase order once the order is confirmed. If you use the extended interface (from user's preferences), you can select the way to control your supplier invoices: based on the order, based on the receptions or manual encoding.
diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py
index 6b68cecf1a5..4c59f9ea002 100644
--- a/addons/purchase/report/purchase_report.py
+++ b/addons/purchase/report/purchase_report.py
@@ -92,26 +92,23 @@ class purchase_report(osv.osv):
s.company_id as company_id,
l.product_id,
t.categ_id as category_id,
- (case when u.uom_type not in ('reference') then
- (select id from product_uom where uom_type='reference' and category_id = 1)
- else
- u.id
- end) as product_uom,
+ t.uom_id as product_uom,
s.location_id as location_id,
- sum(l.product_qty/u.factor) as quantity,
+ sum(l.product_qty/u.factor*u2.factor) as quantity,
extract(epoch from age(s.date_approve,s.date_order))/(24*60*60)::decimal(16,2) as delay,
extract(epoch from age(l.date_planned,s.date_order))/(24*60*60)::decimal(16,2) as delay_pass,
count(*) as nbr,
- (l.price_unit*l.product_qty*u.factor)::decimal(16,2) as price_total,
- avg(100.0 * (l.price_unit*l.product_qty*u.factor) / NULLIF(t.standard_price*l.product_qty*u.factor, 0.0))::decimal(16,2) as negociation,
+ (l.price_unit*l.product_qty)::decimal(16,2) as price_total,
+ avg(100.0 * (l.price_unit*l.product_qty) / NULLIF(t.standard_price*l.product_qty/u.factor*u2.factor, 0.0))::decimal(16,2) as negociation,
- sum(t.standard_price*l.product_qty*u.factor)::decimal(16,2) as price_standard,
- (sum(l.product_qty*l.price_unit)/NULLIF(sum(l.product_qty*u.factor),0.0))::decimal(16,2) as price_average
+ sum(t.standard_price*l.product_qty/u.factor*u2.factor)::decimal(16,2) as price_standard,
+ (sum(l.product_qty*l.price_unit)/NULLIF(sum(l.product_qty/u.factor*u2.factor),0.0))::decimal(16,2) as price_average
from purchase_order s
left join purchase_order_line l on (s.id=l.order_id)
left join product_product p on (l.product_id=p.id)
left join product_template t on (p.product_tmpl_id=t.id)
left join product_uom u on (u.id=l.product_uom)
+ left join product_uom u2 on (u2.id=t.uom_id)
where l.product_id is not null
group by
s.company_id,
@@ -139,7 +136,9 @@ class purchase_report(osv.osv):
s.warehouse_id,
u.uom_type,
u.category_id,
- u.id
+ t.uom_id,
+ u.id,
+ u2.factor
)
""")
purchase_report()
diff --git a/addons/purchase/stock_view.xml b/addons/purchase/stock_view.xml
index 538d0b81ab7..5b9901a9a49 100644
--- a/addons/purchase/stock_view.xml
+++ b/addons/purchase/stock_view.xml
@@ -73,7 +73,8 @@
-
+
@@ -109,7 +110,7 @@
formtree,form,calendar[('type','=','in')]
- {'contact_display': 'partner_address',"search_default_available":1}
+ {'contact_display': 'partner_address',"search_default_done":1, "search_default_to_invoice":1}Create invoice from reception of products. If you selected this invoice control method in the purchase order, all receptions done are available here to be invoiced.
diff --git a/addons/purchase/wizard/purchase_installer.py b/addons/purchase/wizard/purchase_installer.py
index be99a41a3cc..c6d70947893 100644
--- a/addons/purchase/wizard/purchase_installer.py
+++ b/addons/purchase/wizard/purchase_installer.py
@@ -29,4 +29,28 @@ class purchase_installer(osv.osv_memory):
}
purchase_installer()
+class purchase_config_wizard(osv.osv_memory):
+ _name = 'purchase.config.wizard'
+
+ _columns = {
+ 'default_method' : fields.selection(
+ [('manual', 'Based on Purchase Orders'),
+ ('picking', 'Based on Receptions'),
+ ('order', 'Pre-Generate Draft Invoices on Purchase Orders'),
+ ],
+ 'Default Invoicing Control Method',
+ required=True,
+ ),
+ }
+
+ def validate_cb(self, cr, uid, ids, context=None):
+ wizard = self.browse(cr, uid, ids, context=context)[0]
+
+ proxy = self.pool.get('ir.values')
+ proxy.set(cr, uid, 'default', False, 'invoice_method', ['purchase.order'], wizard.default_method),
+
+ return {'type' : 'ir.actions.act_window_close'}
+
+purchase_config_wizard()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase/wizard/purchase_installer.xml b/addons/purchase/wizard/purchase_installer.xml
index e296b14ca91..cf9b6a985db 100644
--- a/addons/purchase/wizard/purchase_installer.xml
+++ b/addons/purchase/wizard/purchase_installer.xml
@@ -17,5 +17,55 @@
+
+
+ Create or Import Suppliers
+ ir.actions.act_window
+ res.partner
+ form
+ tree,form
+ {'search_default_supplier': 1, 'default_supplier' : True, 'default_customer' : False}
+
+ Create or Import Suppliers and their contacts manually from this form or you can import your existing partners by CSV spreadsheet from "Import Data" wizard
+
+
+
+ Purchase Management
+ 5
+
+
+
+
+
+
+
+
+ purchase.view_purchase_config
+ form
+ purchase.config.wizard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set the Default Invoicing Control Method
+ purchase.config.wizard
+ form
+ form
+ new
+
+
+
+
+
diff --git a/addons/purchase_double_validation/purchase_double_validation_installer.xml b/addons/purchase_double_validation/purchase_double_validation_installer.xml
index bc39c837b6b..9a06f66164a 100644
--- a/addons/purchase_double_validation/purchase_double_validation_installer.xml
+++ b/addons/purchase_double_validation/purchase_double_validation_installer.xml
@@ -40,15 +40,10 @@
new
-
- Purchase Management
- 5
-
-
-
+
diff --git a/addons/purchase_requisition/i18n/fr.po b/addons/purchase_requisition/i18n/fr.po
index 58b7e9b9d25..41b8bde6141 100644
--- a/addons/purchase_requisition/i18n/fr.po
+++ b/addons/purchase_requisition/i18n/fr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-01-18 16:46+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2011-09-26 12:22+0000\n"
+"Last-Translator: lholivier \n"
"Language-Team: French \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-09-05 05:57+0000\n"
-"X-Generator: Launchpad (build 13830)\n"
+"X-Launchpad-Export-Date: 2011-09-27 04:47+0000\n"
+"X-Generator: Launchpad (build 14028)\n"
#. module: purchase_requisition
#: view:purchase.requisition:0
@@ -193,11 +193,11 @@ msgid ""
"negotiation, once you have reviewed all the supplier's offers, you can "
"validate some and cancel others."
msgstr ""
-"Une demande d'achat est une étape avant la demande de devis. Dans une "
-"demande d'achat (ou appel d'offre), vous pouvez enregistrer les produits que "
-"vous avez besoin d'acheter et automatiser la création des demandes de devis "
-"à vos fournisseurs. Après la négociation, quand vous avez toutes les offres "
-"de vos fournisseurs, vous pouvez en valider certaines et en annuler d'autres."
+"La demande d'achat précède la demande de devis. La demande d'achat "
+"répertorie les produits dont on a besoin et on peut y déclencher des "
+"demandes de devis auprès des fournisseurs. Aprés la négociation, lorsque "
+"toutes les offres des fournisseurs ont été examinées, vous pouvez valider "
+"certaines offres et éliminer les autres."
#. module: purchase_requisition
#: field:purchase.requisition.line,product_qty:0
@@ -344,7 +344,7 @@ msgstr "Référence"
#. module: purchase_requisition
#: model:ir.model,name:purchase_requisition.model_procurement_order
msgid "Procurement"
-msgstr "Besoin"
+msgstr "Approvisionnement"
#. module: purchase_requisition
#: field:purchase.requisition,warehouse_id:0
@@ -434,3 +434,5 @@ msgid ""
"You have already one %s purchase order for this partner, you must cancel "
"this purchase order to create a new quotation."
msgstr ""
+"Il existe déjà une commande %s pour ce partenaire, vous devez annuler cette "
+"commande avant de faire un nouveau devis."
diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py
index cb31709b20e..00c449dfd7d 100644
--- a/addons/purchase_requisition/purchase_requisition.py
+++ b/addons/purchase_requisition/purchase_requisition.py
@@ -41,7 +41,7 @@ class purchase_requisition(osv.osv):
'purchase_ids' : fields.one2many('purchase.order','requisition_id','Purchase Orders',states={'done': [('readonly', True)]}),
'line_ids' : fields.one2many('purchase.requisition.line','requisition_id','Products to Purchase',states={'done': [('readonly', True)]}),
'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse'),
- 'state': fields.selection([('draft','Draft'),('in_progress','In Progress'),('cancel','Cancelled'),('done','Done')], 'State', required=True)
+ 'state': fields.selection([('draft','New'),('in_progress','In Progress'),('cancel','Cancelled'),('done','Done')], 'State', required=True)
}
_defaults = {
'date_start': time.strftime('%Y-%m-%d %H:%M:%S'),
diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml
index 27dcedf9bd9..06ee94c3941 100644
--- a/addons/purchase_requisition/purchase_requisition_view.xml
+++ b/addons/purchase_requisition/purchase_requisition_view.xml
@@ -21,11 +21,26 @@
purchase.order
-
+
+
+
+
+ request.for.quotation.select.inherit
+ form
+ purchase.order
+
+
+
+
+
+
+
+
+
purchase.requisition.formform
@@ -60,9 +75,9 @@
-
+
-
+
@@ -78,8 +93,8 @@
-
-
+
+
@@ -120,19 +135,20 @@
-
+
+
-
-
+
+
@@ -187,12 +203,12 @@
-
-
+
diff --git a/addons/sale/i18n/da.po b/addons/sale/i18n/da.po
new file mode 100644
index 00000000000..94b0fb5d26b
--- /dev/null
+++ b/addons/sale/i18n/da.po
@@ -0,0 +1,2059 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:16+0000\n"
+"PO-Revision-Date: 2011-09-22 19:39+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-23 04:38+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: sale
+#: view:board.board:0
+#: model:ir.actions.act_window,name:sale.action_sales_by_salesman
+msgid "Sales by Salesman in last 90 days"
+msgstr "Salg pr. sælger de sidste 90 dage"
+
+#. module: sale
+#: help:sale.installer,delivery:0
+msgid "Allows you to compute delivery costs on your quotations."
+msgstr ""
+
+#. module: sale
+#: help:sale.order,picking_policy:0
+msgid ""
+"If you don't have enough stock available to deliver all at once, do you "
+"accept partial shipments or not?"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,partner_shipping_id:0
+msgid "Shipping address for current sales order."
+msgstr ""
+
+#. module: sale
+#: field:sale.advance.payment.inv,qtty:0
+#: report:sale.order:0
+msgid "Quantity"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,day:0
+msgid "Day"
+msgstr "Dag"
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_cancelorder0
+#: view:sale.order:0
+msgid "Cancel Order"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.picking_policy:0
+msgid "Configure Sales Order Logistics"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:603
+#, python-format
+msgid "The quotation '%s' has been converted to a sales order."
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,order_policy:0
+msgid "Payment Before Delivery"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice.py:42
+#, python-format
+msgid "Warning !"
+msgstr "Advarsel!"
+
+#. module: sale
+#: report:sale.order:0
+msgid "VAT"
+msgstr "Moms"
+
+#. module: sale
+#: model:process.node,note:sale.process_node_saleorderprocurement0
+msgid "Drives procurement orders for every sales order line."
+msgstr ""
+
+#. module: sale
+#: selection:sale.config.picking_policy,picking_policy:0
+msgid "All at Once"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,project_id:0
+#: view:sale.report:0
+#: field:sale.report,analytic_account_id:0
+#: field:sale.shop,project_id:0
+msgid "Analytic Account"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.action_order_line_tree2
+msgid ""
+"Here is a list of each sales order line to be invoiced. You can invoice "
+"sales orders partially, by lines of sales order. You do not need this list "
+"if you invoice from the delivery orders or if you invoice sales totally."
+msgstr ""
+
+#. module: sale
+#: model:process.node,name:sale.process_node_saleprocurement0
+msgid "Procurement Order"
+msgstr "Indkøbsordre"
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,partner_id:0
+msgid "Partner"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Order Line"
+msgstr "Ordre linie"
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.action_order_form
+msgid ""
+"Sales Orders help you manage quotations and orders from your customers. "
+"OpenERP suggests that you start by creating a quotation. Once it is "
+"confirmed, the quotation will be converted into a Sales Order. OpenERP can "
+"handle several types of products so that a sales order may trigger tasks, "
+"delivery orders, manufacturing orders, purchases and so on. Based on the "
+"configuration of the sales order, a draft invoice will be generated so that "
+"you just have to confirm it when you want to bill your customer."
+msgstr ""
+
+#. module: sale
+#: help:sale.order,invoice_quantity:0
+msgid ""
+"The sale order will automatically create the invoice proposition (draft "
+"invoice). Ordered and delivered quantities may not be the same. You have to "
+"choose if you want your invoice based on ordered or shipped quantities. If "
+"the product is a service, shipped quantities means hours spent on the "
+"associated tasks."
+msgstr ""
+
+#. module: sale
+#: field:sale.shop,payment_default_id:0
+msgid "Default Payment Term"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_config_picking_policy
+msgid "Configure Picking Policy for Sales Order"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+#: field:sale.order.line,state:0
+#: view:sale.report:0
+msgid "State"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Disc.(%)"
+msgstr ""
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_forceassignation0
+msgid "Force Assignation"
+msgstr ""
+
+#. module: sale
+#: help:sale.make.invoice,grouped:0
+msgid "Check the box to group the invoices for the same customers"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,invoice_quantity:0
+msgid "Ordered Quantities"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Sales by Salesman"
+msgstr "Salg pr. sælger"
+
+#. module: sale
+#: field:sale.order.line,move_ids:0
+msgid "Inventory Moves"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,name:0
+#: field:sale.order.line,order_id:0
+msgid "Order Reference"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Other Information"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Dates"
+msgstr "Datoer"
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_invoiceafterdelivery0
+msgid ""
+"The invoice is created automatically if the shipping policy is 'Invoice from "
+"pick' or 'Invoice on order after delivery'."
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_make_invoice
+msgid "Sales Make Invoice"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Recreate Packing"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,discount:0
+msgid "Discount (%)"
+msgstr "Rabat (%)"
+
+#. module: sale
+#: help:res.company,security_lead:0
+msgid ""
+"This is the days added to what you promise to customers for security purpose"
+msgstr ""
+
+#. module: sale
+#: view:board.board:0
+#: model:ir.actions.act_window,name:sale.open_board_sales_manager
+#: model:ir.ui.menu,name:sale.menu_board_sales_manager
+msgid "Sales Manager Dashboard"
+msgstr "Salgschefs oversigt"
+
+#. module: sale
+#: field:sale.order.line,product_packaging:0
+msgid "Packaging"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_saleinvoice0
+msgid "From a sales order"
+msgstr ""
+
+#. module: sale
+#: field:sale.shop,name:0
+msgid "Shop Name"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:1014
+#, python-format
+msgid "No Customer Defined !"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_tree2
+msgid "Sales in Exception"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Set to Draft"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Conditions"
+msgstr "Betingelser"
+
+#. module: sale
+#: help:sale.order,order_policy:0
+msgid ""
+"The Shipping Policy is used to synchronise invoice and delivery operations.\n"
+" - The 'Pay Before delivery' choice will first generate the invoice and "
+"then generate the picking order after the payment of this invoice.\n"
+" - The 'Shipping & Manual Invoice' will create the picking order directly "
+"and wait for the user to manually click on the 'Invoice' button to generate "
+"the draft invoice.\n"
+" - The 'Invoice On Order After Delivery' choice will generate the draft "
+"invoice based on sales order after all picking lists have been finished.\n"
+" - The 'Invoice From The Picking' choice is used to create an invoice "
+"during the picking process."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:939
+#, python-format
+msgid ""
+"There is no income category account defined in default Properties for "
+"Product Category or Fiscal Position is not defined !"
+msgstr ""
+
+#. module: sale
+#: view:sale.installer:0
+msgid "Configure"
+msgstr ""
+
+#. module: sale
+#: constraint:stock.move:0
+msgid "You try to assign a lot which is not from the same product"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:620
+#, python-format
+msgid "invalid mode for test_state"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "June"
+msgstr "Juni"
+
+#. module: sale
+#: code:addons/sale/sale.py:584
+#, python-format
+msgid "Could not cancel this sales order !"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_report
+msgid "Sales Orders Statistics"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,project_id:0
+msgid "The analytic account related to a sales order."
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "October"
+msgstr "Oktober"
+
+#. module: sale
+#: view:board.board:0
+#: model:ir.actions.act_window,name:sale.action_quotation_for_sale
+#: view:sale.order:0
+#: view:sale.report:0
+msgid "Quotations"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,pricelist_id:0
+msgid "Pricelist for current sales order."
+msgstr ""
+
+#. module: sale
+#: selection:sale.config.picking_policy,step:0
+msgid "Delivery Order Only"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "TVA :"
+msgstr ""
+
+#. module: sale
+#: help:sale.order.line,delay:0
+msgid ""
+"Number of days between the order confirmation the shipping of the products "
+"to the customer"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Quotation Date"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,fiscal_position:0
+msgid "Fiscal Position"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+msgid "UoM"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,number_packages:0
+msgid "Number Packages"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.report,state:0
+msgid "In Progress"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_confirmquotation0
+msgid ""
+"The salesman confirms the quotation. The state of the sales order becomes "
+"'In progress' or 'Manual in progress'."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:971
+#, python-format
+msgid "You must first cancel stock moves attached to this sales order line."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:1042
+#, python-format
+msgid "(n/a)"
+msgstr ""
+
+#. module: sale
+#: help:sale.advance.payment.inv,product_id:0
+msgid ""
+"Select a product of type service which is called 'Advance Product'. You may "
+"have to create it and set it as a default value on this field."
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Tel. :"
+msgstr "Tel:"
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:64
+#, python-format
+msgid ""
+"You cannot make an advance on a sales order "
+"that is defined as 'Automatic Invoice after delivery'."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: field:sale.order,note:0
+#: view:sale.order.line:0
+#: field:sale.order.line,notes:0
+msgid "Notes"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,partner_invoice_id:0
+msgid "Invoice address for current sales order."
+msgstr ""
+
+#. module: sale
+#: view:sale.installer:0
+msgid "Enhance your core Sales Application with additional functionalities."
+msgstr ""
+
+#. module: sale
+#: field:sale.order,invoiced_rate:0
+#: field:sale.order.line,invoiced:0
+msgid "Invoiced"
+msgstr "Faktureret"
+
+#. module: sale
+#: model:process.node,name:sale.process_node_deliveryorder0
+msgid "Delivery Order"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,date_confirm:0
+msgid "Confirmation Date"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,address_allotment_id:0
+msgid "Allotment Partner"
+msgstr ""
+
+#. module: sale
+#: sql_constraint:sale.order:0
+msgid "Order Reference must be unique !"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "March"
+msgstr "Marts"
+
+#. module: sale
+#: help:sale.order,amount_total:0
+msgid "The total amount."
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,price_subtotal:0
+msgid "Subtotal"
+msgstr "Subtotal"
+
+#. module: sale
+#: report:sale.order:0
+msgid "Invoice address :"
+msgstr "Faktura adresse:"
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_saleorderprocurement0
+msgid ""
+"For every sales order line, a procurement order is created to supply the "
+"sold product."
+msgstr ""
+
+#. module: sale
+#: help:sale.order,incoterm:0
+msgid ""
+"Incoterm which stands for 'International Commercial terms' implies its a "
+"series of sales terms which are used in the commercial transaction."
+msgstr ""
+
+#. module: sale
+#: field:sale.order,partner_invoice_id:0
+msgid "Invoice Address"
+msgstr "Faktura adresse"
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Search Uninvoiced Lines"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.report.xml,name:sale.report_sale_order
+msgid "Quotation / Order"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,nbr:0
+msgid "# of Lines"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_open_invoice
+msgid "Sales Open Invoice"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_order_line
+#: field:stock.move,sale_line_id:0
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.picking_policy:0
+msgid "Setup your sales workflow and default values."
+msgstr ""
+
+#. module: sale
+#: field:sale.shop,warehouse_id:0
+msgid "Warehouse"
+msgstr "Lagersted"
+
+#. module: sale
+#: report:sale.order:0
+msgid "Order N°"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,order_line:0
+msgid "Order Lines"
+msgstr "Ordre linier"
+
+#. module: sale
+#: view:sale.order:0
+msgid "Untaxed amount"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_line_tree2
+#: model:ir.ui.menu,name:sale.menu_invoicing_sales_order_lines
+msgid "Lines to Invoice"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,product_uom_qty:0
+msgid "Quantity (UoM)"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,create_date:0
+msgid "Creation Date"
+msgstr "Oprettelses dato"
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_line_tree3
+msgid "Uninvoiced and Delivered Lines"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Total :"
+msgstr "Total:"
+
+#. module: sale
+#: view:sale.report:0
+msgid "My Sales"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:290
+#: code:addons/sale/sale.py:966
+#: code:addons/sale/sale.py:1165
+#, python-format
+msgid "Invalid action !"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,pricelist_id:0
+#: field:sale.report,pricelist_id:0
+#: field:sale.shop,pricelist_id:0
+msgid "Pricelist"
+msgstr "Prisliste"
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,product_uom_qty:0
+msgid "# of Qty"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Order Date"
+msgstr "Ordredato"
+
+#. module: sale
+#: view:sale.order.line:0
+#: field:sale.report,shipped:0
+msgid "Shipped"
+msgstr "Afsendt"
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_tree5
+msgid "All Quotations"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,order_policy:0
+msgid "Invoice On Order After Delivery"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "September"
+msgstr "September"
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,categ_id:0
+msgid "Category of Product"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Taxes :"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Stock Moves"
+msgstr "Lagerflytning"
+
+#. module: sale
+#: view:sale.report:0
+msgid " Year "
+msgstr " År "
+
+#. module: sale
+#: field:sale.order,state:0
+#: field:sale.report,state:0
+msgid "Order State"
+msgstr ""
+
+#. module: sale
+#: view:sale.make.invoice:0
+#: view:sale.order.line.make.invoice:0
+msgid "Do you really want to create the invoice(s) ?"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Sales By Month"
+msgstr "Salg pr. måned"
+
+#. module: sale
+#: code:addons/sale/sale.py:970
+#, python-format
+msgid "Could not cancel sales order line!"
+msgstr ""
+
+#. module: sale
+#: field:res.company,security_lead:0
+msgid "Security Days"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_saleorderprocurement0
+msgid "Procurement of sold material"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Create Final Invoice"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,partner_shipping_id:0
+msgid "Shipping Address"
+msgstr "Leveringsadresse"
+
+#. module: sale
+#: help:sale.order,shipped:0
+msgid ""
+"It indicates that the sales order has been delivered. This field is updated "
+"only after the scheduler(s) have been launched."
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Extended Filters..."
+msgstr ""
+
+#. module: sale
+#: model:ir.module.module,description:sale.module_meta_information
+msgid ""
+"\n"
+" The base module to manage quotations and sales orders.\n"
+"\n"
+" * Workflow with validation steps:\n"
+" - Quotation -> Sales order -> Invoice\n"
+" * Invoicing methods:\n"
+" - Invoice on order (before or after shipping)\n"
+" - Invoice on delivery\n"
+" - Invoice on timesheets\n"
+" - Advance invoice\n"
+" * Partners preferences (shipping, invoicing, incoterm, ...)\n"
+" * Products stocks and prices\n"
+" * Delivery methods:\n"
+" - all at once, multi-parcel\n"
+" - delivery costs\n"
+" * Dashboard for salesman that includes:\n"
+" * Your open quotations\n"
+" * Top 10 sales of the month\n"
+" * Cases statistics\n"
+" * Graph of sales by product\n"
+" * Graph of cases of the month\n"
+" "
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_shop
+#: view:sale.shop:0
+msgid "Sales Shop"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_res_company
+msgid "Companies"
+msgstr "Virksomheder"
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "November"
+msgstr "November"
+
+#. module: sale
+#: view:sale.order:0
+msgid "History"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.picking_policy,picking_policy:0
+msgid "Picking Default Policy"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,invoice_ids:0
+msgid ""
+"This is the list of invoices that have been generated for this sales order. "
+"The same sales order may have been invoiced in several times (by line for "
+"example)."
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Your Reference"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,partner_order_id:0
+msgid ""
+"The name and address of the contact who requested the order or quotation."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:966
+#, python-format
+msgid "You cannot cancel a sales order line that has already been invoiced !"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+msgid "Qty"
+msgstr "Antal"
+
+#. module: sale
+#: view:sale.order:0
+msgid "References"
+msgstr ""
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_cancel0
+#: model:process.transition.action,name:sale.process_transition_action_cancel1
+#: model:process.transition.action,name:sale.process_transition_action_cancel2
+#: view:sale.advance.payment.inv:0
+#: view:sale.make.invoice:0
+#: view:sale.order.line:0
+#: view:sale.order.line.make.invoice:0
+msgid "Cancel"
+msgstr ""
+
+#. module: sale
+#: field:sale.installer,sale_order_dates:0
+msgid "Sales Order Dates"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order.line,state:0
+msgid "Exception"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_invoice0
+#: model:process.transition,name:sale.process_transition_invoiceafterdelivery0
+#: model:process.transition.action,name:sale.process_transition_action_createinvoice0
+#: view:sale.advance.payment.inv:0
+#: view:sale.order.line:0
+msgid "Create Invoice"
+msgstr ""
+
+#. module: sale
+#: field:sale.installer,sale_margin:0
+msgid "Margins in Sales Orders"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Total Tax Excluded"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Compute"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Sales by Partner"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,partner_order_id:0
+msgid "Ordering Contact"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_view_sale_open_invoice
+#: view:sale.open.invoice:0
+msgid "Open Invoice"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+#: view:sale.order.line:0
+msgid "Price"
+msgstr "Pris"
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_sale_installer
+#: view:sale.config.picking_policy:0
+#: view:sale.installer:0
+msgid "Sales Application Configuration"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,price_total:0
+msgid "Total Price"
+msgstr "Total pris"
+
+#. module: sale
+#: selection:sale.order.line,type:0
+msgid "on order"
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_invoiceafterdelivery0
+msgid "Based on the shipped or on the ordered quantities."
+msgstr ""
+
+#. module: sale
+#: field:sale.order,picking_ids:0
+msgid "Related Picking"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.picking_policy,name:0
+msgid "Name"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Shipping address :"
+msgstr ""
+
+#. module: sale
+#: view:board.board:0
+#: model:ir.actions.act_window,name:sale.action_sales_by_partner
+msgid "Sales per Customer in last 90 days"
+msgstr "Salg pr. kunde de sidste 90 dage"
+
+#. module: sale
+#: model:process.node,note:sale.process_node_quotation0
+msgid "Draft state of sales order"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_deliver0
+msgid "Create Delivery Order"
+msgstr ""
+
+#. module: sale
+#: field:sale.installer,delivery:0
+msgid "Delivery Costs"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Total Tax Included"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_packing0
+msgid "Create Pick List"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Sales by Product Category"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,picking_policy:0
+msgid "Partial Delivery"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_confirmquotation0
+msgid "Confirm Quotation"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,origin:0
+msgid "Reference of the document that generated this sales order request."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+#: view:sale.report:0
+msgid "Group By..."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Recreate Invoice"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.outgoing_picking_list_to_invoice
+#: model:ir.ui.menu,name:sale.menu_action_picking_list_to_invoice
+msgid "Deliveries to Invoice"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.report,state:0
+msgid "Waiting Schedule"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,type:0
+msgid "Procurement Method"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.picking_policy:0
+#: view:sale.installer:0
+msgid "title"
+msgstr ""
+
+#. module: sale
+#: model:process.node,name:sale.process_node_packinglist0
+msgid "Pick List"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Order date"
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_packinglist0
+msgid "Document of the move to the output or to the customer."
+msgstr ""
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_validate0
+msgid "Validate"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Confirm Order"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_saleprocurement0
+msgid "Create Procurement Order"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: field:sale.order,amount_tax:0
+#: field:sale.order.line,tax_id:0
+msgid "Taxes"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,order_policy:0
+msgid "Shipping Policy"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,create_date:0
+msgid "Date on which sales order is created."
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_stock_move
+msgid "Stock Move"
+msgstr "Lager flytning"
+
+#. module: sale
+#: view:sale.make.invoice:0
+#: view:sale.order.line.make.invoice:0
+msgid "Create Invoices"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Extra Info"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Fax :"
+msgstr ""
+
+#. module: sale
+#: field:sale.advance.payment.inv,amount:0
+msgid "Advance Amount"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,invoice_quantity:0
+msgid "Shipped Quantities"
+msgstr ""
+
+#. module: sale
+#: selection:sale.config.picking_policy,order_policy:0
+msgid "Invoice Based on Sales Orders"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_stock_picking
+msgid "Picking List"
+msgstr "Plukkeliste"
+
+#. module: sale
+#: code:addons/sale/sale.py:387
+#: code:addons/sale/sale.py:920
+#: code:addons/sale/sale.py:938
+#, python-format
+msgid "Error !"
+msgstr "Fejl!"
+
+#. module: sale
+#: code:addons/sale/sale.py:570
+#, python-format
+msgid "Could not cancel sales order !"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "July"
+msgstr "Juli"
+
+#. module: sale
+#: field:sale.order.line,procurement_id:0
+msgid "Procurement"
+msgstr "Indkøb"
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.report,state:0
+msgid "Shipping Exception"
+msgstr ""
+
+#. module: sale
+#: field:sale.make.invoice,grouped:0
+msgid "Group the invoices"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,order_policy:0
+msgid "Shipping & Manual Invoice"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:1051
+#, python-format
+msgid "Picking Information !"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,month:0
+msgid "Month"
+msgstr "Måned"
+
+#. module: sale
+#: model:ir.module.module,shortdesc:sale.module_meta_information
+msgid "Sales Management"
+msgstr "Salgs administration"
+
+#. module: sale
+#: selection:sale.order,order_policy:0
+msgid "Invoice From The Picking"
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_invoice0
+msgid "To be reviewed by the accountant."
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,uom_name:0
+msgid "Reference UoM"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_order_line_make_invoice
+msgid "Sale OrderLine Make_invoice"
+msgstr ""
+
+#. module: sale
+#: help:sale.config.picking_policy,step:0
+msgid ""
+"By default, OpenERP is able to manage complex routing and paths of products "
+"in your warehouse and partner locations. This will configure the most common "
+"and simple methods to deliver products to the customer in one or two "
+"operations by the worker."
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_tree
+msgid "Old Quotations"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,invoiced:0
+msgid "Paid"
+msgstr "Betalt"
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_report_all
+#: model:ir.ui.menu,name:sale.menu_report_product_all
+#: view:sale.report:0
+msgid "Sales Analysis"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,property_ids:0
+msgid "Properties"
+msgstr ""
+
+#. module: sale
+#: model:process.node,name:sale.process_node_quotation0
+#: selection:sale.order,state:0
+#: selection:sale.report,state:0
+msgid "Quotation"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_invoice0
+msgid ""
+"The Salesman creates an invoice manually, if the sales order shipping policy "
+"is 'Shipping and Manual in Progress'. The invoice is created automatically "
+"if the shipping policy is 'Payment before Delivery'."
+msgstr ""
+
+#. module: sale
+#: help:sale.config.picking_policy,order_policy:0
+msgid ""
+"You can generate invoices based on sales orders or based on shippings."
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.act_res_partner_2_sale_order
+#: model:process.process,name:sale.process_process_salesprocess0
+#: view:sale.order:0
+#: view:sale.report:0
+msgid "Sales"
+msgstr "Salg"
+
+#. module: sale
+#: report:sale.order:0
+#: field:sale.order.line,price_unit:0
+msgid "Unit Price"
+msgstr "Enhedspris"
+
+#. module: sale
+#: selection:sale.order,state:0
+#: view:sale.order.line:0
+#: selection:sale.order.line,state:0
+#: selection:sale.report,state:0
+msgid "Done"
+msgstr "Udført!"
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_installer
+msgid "sale.installer"
+msgstr ""
+
+#. module: sale
+#: model:process.node,name:sale.process_node_invoice0
+#: model:process.node,name:sale.process_node_invoiceafterdelivery0
+msgid "Invoice"
+msgstr "Faktura"
+
+#. module: sale
+#: code:addons/sale/sale.py:1014
+#, python-format
+msgid ""
+"You have to select a customer in the sales form !\n"
+"Please set one customer before choosing a product."
+msgstr ""
+
+#. module: sale
+#: selection:sale.config.picking_policy,step:0
+msgid "Picking List & Delivery Order"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,origin:0
+msgid "Source Document"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "To Do"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,picking_policy:0
+msgid "Picking Policy"
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_deliveryorder0
+msgid "Document of the move to the customer."
+msgstr ""
+
+#. module: sale
+#: help:sale.order,amount_untaxed:0
+msgid "The amount without tax."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:571
+#, python-format
+msgid "You must first cancel all picking attached to this sales order."
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_advance_payment_inv
+msgid "Sales Advance Payment Invoice"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,incoterm:0
+msgid "Incoterm"
+msgstr "Incoterm"
+
+#. module: sale
+#: view:sale.order.line:0
+#: field:sale.order.line,product_id:0
+#: view:sale.report:0
+#: field:sale.report,product_id:0
+msgid "Product"
+msgstr "Vare"
+
+#. module: sale
+#: model:ir.ui.menu,name:sale.menu_invoiced
+msgid "Invoicing"
+msgstr "Fakturering"
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_cancelassignation0
+msgid "Cancel Assignation"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_config_picking_policy
+msgid "sale.config.picking_policy"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,state:0
+msgid ""
+"Gives the state of the quotation or sales order. \n"
+"The exception state is automatically set when a cancel operation occurs in "
+"the invoice validation (Invoice Exception) or in the picking list process "
+"(Shipping Exception). \n"
+"The 'Waiting Schedule' state is set when the invoice is confirmed but "
+"waiting for the scheduler to run on the date 'Ordered Date'."
+msgstr ""
+
+#. module: sale
+#: field:sale.order,invoice_quantity:0
+msgid "Invoice on"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Date Ordered"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,product_uos:0
+msgid "Product UoS"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.report,state:0
+msgid "Manual In Progress"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,product_uom:0
+msgid "Product UoM"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Logistic"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Order"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:921
+#, python-format
+msgid "There is no income account defined for this product: \"%s\" (id:%d)"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Ignore Exception"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_saleinvoice0
+msgid ""
+"Depending on the Invoicing control of the sales order, the invoice can be "
+"based on delivered or on ordered quantities. Thus, a sales order can "
+"generates an invoice or a delivery order as soon as it is confirmed by the "
+"salesman."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:1116
+#, python-format
+msgid ""
+"You plan to sell %.2f %s but you only have %.2f %s available !\n"
+"The real stock is %.2f %s. (without reservations)"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "States"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.picking_policy:0
+msgid "res_config_contents"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,client_order_ref:0
+msgid "Customer Reference"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,amount_total:0
+#: view:sale.order.line:0
+msgid "Total"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:388
+#, python-format
+msgid "There is no sales journal defined for this company: \"%s\" (id:%d)"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_deliver0
+msgid ""
+"Depending on the configuration of the location Output, the move between the "
+"output area and the customer is done through the Delivery Order manually or "
+"automatically."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:1165
+#, python-format
+msgid "Cannot delete a sales order line which is %s !"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_sale_order_make_invoice
+#: model:ir.actions.act_window,name:sale.action_view_sale_order_line_make_invoice
+#: view:sale.order:0
+msgid "Make Invoices"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+msgid "To Invoice"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,date_confirm:0
+msgid "Date on which sales order is confirmed."
+msgstr ""
+
+#. module: sale
+#: field:sale.order,company_id:0
+#: field:sale.order.line,company_id:0
+#: view:sale.report:0
+#: field:sale.report,company_id:0
+#: field:sale.shop,company_id:0
+msgid "Company"
+msgstr "Virksomhed"
+
+#. module: sale
+#: field:sale.make.invoice,invoice_date:0
+msgid "Invoice Date"
+msgstr "Faktura dato"
+
+#. module: sale
+#: help:sale.advance.payment.inv,amount:0
+msgid "The amount to be invoiced in advance."
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.report,state:0
+msgid "Invoice Exception"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,picking_ids:0
+msgid ""
+"This is a list of picking that has been generated for this sales order."
+msgstr ""
+
+#. module: sale
+#: help:sale.installer,sale_margin:0
+msgid ""
+"Gives the margin of profitability by calculating the difference between Unit "
+"Price and Cost Price."
+msgstr ""
+
+#. module: sale
+#: view:sale.make.invoice:0
+#: view:sale.order.line.make.invoice:0
+msgid "Create invoices"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Net Total :"
+msgstr "Netto total:"
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.order.line,state:0
+#: selection:sale.report,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_shop_form
+#: model:ir.ui.menu,name:sale.menu_action_shop_form
+#: field:sale.order,shop_id:0
+#: view:sale.report:0
+#: field:sale.report,shop_id:0
+msgid "Shop"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid " Month "
+msgstr " Måned "
+
+#. module: sale
+#: field:sale.report,date_confirm:0
+msgid "Date Confirm"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_line_invoice.py:111
+#, python-format
+msgid "Warning"
+msgstr ""
+
+#. module: sale
+#: view:board.board:0
+#: model:ir.actions.act_window,name:sale.action_view_sales_by_month
+msgid "Sales by Month"
+msgstr "Salg pr. måned"
+
+#. module: sale
+#: code:addons/sale/sale.py:1045
+#, python-format
+msgid ""
+"You selected a quantity of %d Units.\n"
+"But it's not compatible with the selected packaging.\n"
+"Here is a proposition of quantities according to the packaging:\n"
+"\n"
+"EAN: %s Quantity: %s Type of ul: %s"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_order
+#: model:process.node,name:sale.process_node_order0
+#: model:process.node,name:sale.process_node_saleorder0
+#: model:res.request.link,name:sale.req_link_sale_order
+#: view:sale.order:0
+#: field:stock.picking,sale_id:0
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,product_uos_qty:0
+msgid "Quantity (UoS)"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_packing0
+msgid ""
+"The Pick List form is created as soon as the sales order is confirmed, in "
+"the same time as the procurement order. It represents the assignment of "
+"parts to the sales order. There is 1 pick list by sales order line which "
+"evolves with the availability of parts."
+msgstr ""
+
+#. module: sale
+#: selection:sale.order.line,state:0
+msgid "Confirmed"
+msgstr ""
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_confirm0
+msgid "Confirm"
+msgstr ""
+
+#. module: sale
+#: constraint:res.company:0
+msgid "Error! You can not create recursive companies."
+msgstr ""
+
+#. module: sale
+#: view:board.board:0
+#: model:ir.actions.act_window,name:sale.action_sales_product_total_price
+msgid "Sales by Product's Category in last 90 days"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: field:sale.order.line,invoice_lines:0
+msgid "Invoice Lines"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+msgid "Sales Order Lines"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,delay:0
+msgid "Delivery Lead Time"
+msgstr ""
+
+#. module: sale
+#: view:res.company:0
+msgid "Configuration"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,picking_policy:0
+msgid "Complete Delivery"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid " Month-1 "
+msgstr ""
+
+#. module: sale
+#: help:sale.config.picking_policy,picking_policy:0
+msgid ""
+"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.."
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "August"
+msgstr "August"
+
+#. module: sale
+#: code:addons/sale/wizard/sale_line_invoice.py:111
+#, python-format
+msgid ""
+"Invoice cannot be created for this Sales Order Line due to one of the "
+"following reasons:\n"
+"1.The state of this sales order line is either \"draft\" or \"cancel\"!\n"
+"2.The Sales Order Line is Invoiced!"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,th_weight:0
+msgid "Weight"
+msgstr ""
+
+#. module: sale
+#: view:sale.open.invoice:0
+#: view:sale.order:0
+#: field:sale.order,invoice_ids:0
+msgid "Invoices"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "December"
+msgstr "December"
+
+#. module: sale
+#: field:sale.config.picking_policy,config_logo:0
+#: field:sale.installer,config_logo:0
+msgid "Image"
+msgstr "Billede"
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_saleprocurement0
+msgid ""
+"A procurement order is automatically created as soon as a sales order is "
+"confirmed or as the invoice is paid. It drives the purchasing and the "
+"production of products regarding to the rules and to the sales order's "
+"parameters. "
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Uninvoiced"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+#: view:sale.order:0
+#: field:sale.order,user_id:0
+#: view:sale.order.line:0
+#: field:sale.order.line,salesman_id:0
+#: view:sale.report:0
+#: field:sale.report,user_id:0
+msgid "Salesman"
+msgstr "Sælger"
+
+#. module: sale
+#: model:process.node,note:sale.process_node_saleorder0
+msgid "Drives procurement and invoicing"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,amount_untaxed:0
+msgid "Untaxed Amount"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:163
+#: model:ir.actions.act_window,name:sale.action_view_sale_advance_payment_inv
+#: view:sale.advance.payment.inv:0
+#: view:sale.order:0
+#, python-format
+msgid "Advance Invoice"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:591
+#, python-format
+msgid "The sales order '%s' has been cancelled."
+msgstr ""
+
+#. module: sale
+#: selection:sale.order.line,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: sale
+#: help:sale.order.line,state:0
+msgid ""
+"* The 'Draft' state is set when the related sales order in draft state. "
+" \n"
+"* The 'Confirmed' state is set when the related sales order is confirmed. "
+" \n"
+"* The 'Exception' state is set when the related sales order is set as "
+"exception. \n"
+"* The 'Done' state is set when the sales order line has been picked. "
+" \n"
+"* The 'Cancelled' state is set when a user cancel the sales order related."
+msgstr ""
+
+#. module: sale
+#: help:sale.order,amount_tax:0
+msgid "The tax amount."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Packings"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.picking_policy,progress:0
+#: field:sale.installer,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_line_product_tree
+msgid "Product sales"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,date_order:0
+msgid "Ordered Date"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_form
+#: model:ir.ui.menu,name:sale.menu_sale_order
+#: view:sale.order:0
+msgid "Sales Orders"
+msgstr "Salgsordrer"
+
+#. module: sale
+#: selection:sale.config.picking_policy,picking_policy:0
+msgid "Direct Delivery"
+msgstr ""
+
+#. module: sale
+#: field:sale.installer,sale_journal:0
+msgid "Invoicing journals"
+msgstr ""
+
+#. module: sale
+#: field:sale.advance.payment.inv,product_id:0
+msgid "Advance Product"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,shipped_qty_1:0
+msgid "Shipped Qty"
+msgstr ""
+
+#. module: sale
+#: view:sale.open.invoice:0
+msgid "You invoice has been successfully created!"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:585
+#, python-format
+msgid "You must first cancel all invoices attached to this sales order."
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "January"
+msgstr "Januar"
+
+#. module: sale
+#: view:sale.installer:0
+msgid "Configure Your Sales Management Application"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_tree4
+msgid "Sales Order in Progress"
+msgstr ""
+
+#. module: sale
+#: field:sale.installer,sale_layout:0
+msgid "Sales Order Layout Improvement"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:63
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,delay:0
+msgid "Commitment Delay"
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_saleprocurement0
+msgid ""
+"One Procurement order for each sales order line and for each of the "
+"components."
+msgstr ""
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_assign0
+msgid "Assign"
+msgstr ""
+
+#. module: sale
+#: field:sale.report,date:0
+msgid "Date Order"
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_order0
+msgid "Confirmed sales order to invoice."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:290
+#, python-format
+msgid "Cannot delete Sales Order(s) which are already confirmed !"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:316
+#, python-format
+msgid "The sales order '%s' has been set in draft state."
+msgstr ""
+
+#. module: sale
+#: selection:sale.order.line,type:0
+msgid "from stock"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.picking_policy,order_policy:0
+msgid "Shipping Default Policy"
+msgstr ""
+
+#. module: sale
+#: view:sale.open.invoice:0
+msgid "Close"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,shipped:0
+msgid "Delivered"
+msgstr "Leveret"
+
+#. module: sale
+#: code:addons/sale/sale.py:1115
+#, python-format
+msgid "Not enough stock !"
+msgstr ""
+
+#. module: sale
+#: constraint:stock.move:0
+msgid "You must assign a production lot for this product"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,sequence:0
+msgid "Layout Sequence"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.action_shop_form
+msgid ""
+"If you have more than one shop reselling your company products, you can "
+"create and manage that from here. Whenever you will record a new quotation "
+"or sales order, it has to be linked to a shop. The shop also defines the "
+"warehouse from which the products will be delivered for each particular "
+"sales."
+msgstr ""
+
+#. module: sale
+#: help:sale.order,invoiced:0
+msgid "It indicates that an invoice has been paid."
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+#: field:sale.order.line,name:0
+msgid "Description"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "May"
+msgstr "Maj"
+
+#. module: sale
+#: help:sale.installer,sale_order_dates:0
+msgid "Adds commitment, requested and effective dates on Sales Orders."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: field:sale.order,partner_id:0
+#: field:sale.order.line,order_partner_id:0
+msgid "Customer"
+msgstr "Kunde"
+
+#. module: sale
+#: model:product.template,name:sale.advance_product_0_product_template
+msgid "Advance"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "February"
+msgstr "Februar"
+
+#. module: sale
+#: help:sale.installer,sale_journal:0
+msgid ""
+"Allows you to group and invoice your delivery orders according to different "
+"invoicing types: daily, weekly, etc."
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "April"
+msgstr "April"
+
+#. module: sale
+#: view:sale.shop:0
+msgid "Accounting"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.picking_policy,step:0
+msgid "Steps To Deliver a Sales Order"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+msgid "Search Sales Order"
+msgstr ""
+
+#. module: sale
+#: model:process.node,name:sale.process_node_saleorderprocurement0
+msgid "Sales Order Requisition"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+#: field:sale.order,payment_term:0
+msgid "Payment Term"
+msgstr ""
+
+#. module: sale
+#: help:sale.installer,sale_layout:0
+msgid ""
+"Provides some features to improve the layout of the Sales Order reports."
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.action_order_report_all
+msgid ""
+"This report performs analysis on your quotations and sales orders. Analysis "
+"check your sales revenues and sort it by different group criteria (salesman, "
+"partner, product, etc.) Use this report to perform analysis on sales not "
+"having invoiced yet. If you want to analyse your turnover, you should use "
+"the Invoice Analysis report in the Accounting application."
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Quotation N°"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,picked_rate:0
+#: view:sale.report:0
+msgid "Picked"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,year:0
+msgid "Year"
+msgstr "År"
+
+#. module: sale
+#: selection:sale.config.picking_policy,order_policy:0
+msgid "Invoice Based on Deliveries"
+msgstr ""
diff --git a/addons/sale/report/sale_order.rml b/addons/sale/report/sale_order.rml
index 00ebb50472e..a6902f79047 100644
--- a/addons/sale/report/sale_order.rml
+++ b/addons/sale/report/sale_order.rml
@@ -283,7 +283,7 @@
[[ formatLang(line.discount) ]]