diff options
| author | ron@tinyerp.com <> | 2011-11-28 12:38:30 +0530 |
|---|---|---|
| committer | ron@tinyerp.com <> | 2011-11-28 12:38:30 +0530 |
| commit | 1343bde5aef2fa9cd21355d23221b98dcaedd709 (patch) | |
| tree | b3299dd61b782e5ecd0cb0ef74f9dfc4729e8749 | |
| parent | 5d8c487a362534f1d08634e8b0fdf40e588dfd85 (diff) | |
| parent | 847bddb3e5b0dda0d7496fccba50c5386eb6072b (diff) | |
[MERGE] Merged with lp:addons
bzr revid: ron@tinyerp.com-20111128070830-gjqqiuhhrpwcqc38
617 files changed, 16404 insertions, 5987 deletions
diff --git a/addons/account/__init__.py b/addons/account/__init__.py index 36cc1c85b5a..a243b94c2da 100644 --- a/addons/account/__init__.py +++ b/addons/account/__init__.py @@ -35,5 +35,5 @@ import product import ir_sequence import company import res_currency - +import edi # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py index 9445688ec6d..ec61248e147 100644 --- a/addons/account/__openerp__.py +++ b/addons/account/__openerp__.py @@ -53,7 +53,7 @@ module named account_voucher. 'website': 'http://www.openerp.com', 'images' : ['images/accounts.jpeg','images/bank_statement.jpeg','images/cash_register.jpeg','images/chart_of_accounts.jpeg','images/customer_invoice.jpeg','images/journal_entries.jpeg'], 'init_xml': [], - "depends" : ["base_setup", "product", "analytic", "process","board"], + "depends" : ["base_setup", "product", "analytic", "process", "board", "edi"], 'update_xml': [ 'security/account_security.xml', 'security/ir.model.access.csv', @@ -123,7 +123,9 @@ module named account_voucher. 'board_account_view.xml', "wizard/account_report_profit_loss_view.xml", "wizard/account_report_balance_sheet_view.xml", - "account_bank_view.xml" + "edi/invoice_action_data.xml", + "account_bank_view.xml", + "account_pre_install.yml" ], 'demo_xml': [ 'demo/account_demo.xml', @@ -145,10 +147,9 @@ module named account_voucher. 'test/account_fiscalyear_close.yml', 'test/account_bank_statement.yml', 'test/account_cash_statement.yml', + 'test/test_edi_invoice.yml', 'test/account_report.yml', - - - ], + ], 'installable': True, 'active': False, 'certificate': '0080331923549', diff --git a/addons/account/account.py b/addons/account/account.py index fed71f5aca4..e41a5f2f280 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -404,7 +404,7 @@ class account_account(osv.osv): return True _columns = { - 'name': fields.char('Name', size=128, required=True, select=True), + 'name': fields.char('Name', size=256, required=True, select=True), 'currency_id': fields.many2one('res.currency', 'Secondary Currency', help="Forces all moves for this account to have this secondary currency."), 'code': fields.char('Code', size=64, required=True, select=1), 'type': fields.selection([ @@ -431,9 +431,9 @@ class account_account(osv.osv): 'debit': fields.function(__compute, fnct_inv=_set_credit_debit, digits_compute=dp.get_precision('Account'), string='Debit', multi='balance'), 'foreign_balance': fields.function(__compute, digits_compute=dp.get_precision('Account'), string='Foreign Balance', multi='balance', help="Total amount (in Secondary currency) for transactions held in secondary currency for this account."), - 'adjusted_balance': fields.function(__compute, digits_compute=dp.get_precision('Account'), string='Adjusted Balance', multi='balance', + 'adjusted_balance': fields.function(__compute, digits_compute=dp.get_precision('Account'), string='Adjusted Balance', multi='balance', help="Total amount (in Company currency) for transactions held in secondary currency for this account."), - 'unrealized_gain_loss': fields.function(__compute, digits_compute=dp.get_precision('Account'), string='Unrealized Gain or Loss', multi='balance', + 'unrealized_gain_loss': fields.function(__compute, digits_compute=dp.get_precision('Account'), string='Unrealized Gain or Loss', multi='balance', help="Value of Loss or Gain due to changes in exchange rate when doing multi-currency transactions."), 'reconcile': fields.boolean('Allow Reconciliation', help="Check this box if this account allows reconciliation of journal items."), 'exchange_rate': fields.related('currency_id', 'rate', type='float', string='Exchange Rate', digits=(12,6)), @@ -461,7 +461,7 @@ class account_account(osv.osv): } _defaults = { - 'type': 'view', + 'type': 'other', 'reconcile': False, 'active': True, 'currency_mode': 'current', @@ -716,6 +716,19 @@ class account_journal(osv.osv): _order = 'code' + def _check_currency(self, cr, uid, ids, context=None): + for journal in self.browse(cr, uid, ids, context=context): + if journal.currency: + if journal.default_credit_account_id and not journal.default_credit_account_id.currency_id.id == journal.currency.id: + return False + if journal.default_debit_account_id and not journal.default_debit_account_id.currency_id.id == journal.currency.id: + return False + return True + + _constraints = [ + (_check_currency, 'Configuration error! The currency chosen should be shared by the default accounts too.', ['currency','default_debit_account_id','default_credit_account_id']), + ] + def copy(self, cr, uid, id, default={}, context=None, done_list=[], local=False): journal = self.browse(cr, uid, id, context=context) if not default: @@ -846,21 +859,8 @@ class account_fiscalyear(osv.osv): 'state': 'draft', 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id, } - _order = "date_start" - - def _check_fiscal_year(self, cr, uid, ids, context=None): - current_fiscal_yr = self.browse(cr, uid, ids, context=context)[0] - obj_fiscal_ids = self.search(cr, uid, [('company_id', '=', current_fiscal_yr.company_id.id)], context=context) - obj_fiscal_ids.remove(ids[0]) - data_fiscal_yr = self.browse(cr, uid, obj_fiscal_ids, context=context) - - for old_fy in data_fiscal_yr: - if old_fy.company_id.id == current_fiscal_yr['company_id'].id: - # Condition to check if the current fiscal year falls in between any previously defined fiscal year - if old_fy.date_start <= current_fiscal_yr['date_start'] <= old_fy.date_stop or \ - old_fy.date_start <= current_fiscal_yr['date_stop'] <= old_fy.date_stop: - return False - return True + _order = "date_start, id" + def _check_duration(self, cr, uid, ids, context=None): obj_fy = self.browse(cr, uid, ids[0], context=context) @@ -869,8 +869,7 @@ class account_fiscalyear(osv.osv): return True _constraints = [ - (_check_duration, 'Error! The start date of the fiscal year must be before his end date.', ['date_start','date_stop']), - (_check_fiscal_year, 'Error! You can not define overlapping fiscal years for the same company.',['date_start', 'date_stop']) + (_check_duration, 'Error! The start date of the fiscal year must be before his end date.', ['date_start','date_stop']) ] def create_period3(self, cr, uid, ids, context=None): @@ -905,6 +904,10 @@ class account_fiscalyear(osv.osv): return True def find(self, cr, uid, dt=None, exception=True, context=None): + res = self.finds(cr, uid, dt, exception, context=context) + return res and res[0] or False + + def finds(self, cr, uid, dt=None, exception=True, context=None): if context is None: context = {} if not dt: dt = time.strftime('%Y-%m-%d') @@ -919,8 +922,8 @@ class account_fiscalyear(osv.osv): if exception: raise osv.except_osv(_('Error !'), _('No fiscal year defined for this date !\nPlease create one.')) else: - return False - return ids[0] + return [] + return ids def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=80): if args is None: @@ -1683,13 +1686,15 @@ class account_tax_code(osv.osv): if context.get('state', 'all') == 'all': move_state = ('draft', 'posted', ) if context.get('fiscalyear_id', False): - fiscalyear_id = context['fiscalyear_id'] + fiscalyear_id = [context['fiscalyear_id']] else: - fiscalyear_id = self.pool.get('account.fiscalyear').find(cr, uid, exception=False) + fiscalyear_id = self.pool.get('account.fiscalyear').finds(cr, uid, exception=False) where = '' where_params = () if fiscalyear_id: - pids = map(lambda x: str(x.id), self.pool.get('account.fiscalyear').browse(cr, uid, fiscalyear_id).period_ids) + pids = [] + for fy in fiscalyear_id: + pids += map(lambda x: str(x.id), self.pool.get('account.fiscalyear').browse(cr, uid, fy).period_ids) if pids: where = ' AND line.period_id IN %s AND move.state IN %s ' where_params = (tuple(pids), move_state) @@ -2003,7 +2008,7 @@ class account_tax(osv.osv): def compute_all(self, cr, uid, taxes, price_unit, quantity, address_id=None, product=None, partner=None, force_excluded=False): """ - :param force_excluded: boolean used to say that we don't want to consider the value of field price_include of + :param force_excluded: boolean used to say that we don't want to consider the value of field price_include of tax. It's used in encoding by line where you don't matter if you encoded a tax with that boolean to True or False RETURN: { @@ -2186,6 +2191,7 @@ class account_model(osv.osv): account_move_obj = self.pool.get('account.move') account_move_line_obj = self.pool.get('account.move.line') pt_obj = self.pool.get('account.payment.term') + period_obj = self.pool.get('account.period') if context is None: context = {} @@ -2193,14 +2199,14 @@ class account_model(osv.osv): if datas.get('date', False): context.update({'date': datas['date']}) - period_id = self.pool.get('account.period').find(cr, uid, dt=context.get('date', False)) - if not period_id: - raise osv.except_osv(_('No period found !'), _('Unable to find a valid period !')) - period_id = period_id[0] - move_date = context.get('date', time.strftime('%Y-%m-%d')) move_date = datetime.strptime(move_date,"%Y-%m-%d") for model in self.browse(cr, uid, ids, context=context): + ctx = context.copy() + ctx.update({'company_id': model.company_id.id}) + period_ids = period_obj.find(cr, uid, dt=context.get('date', False), context=ctx) + period_id = period_ids and period_ids[0] or False + ctx.update({'journal_id': model.journal_id.id,'period_id': period_id}) try: entry['name'] = model.name%{'year': move_date.strftime('%Y'), 'month': move_date.strftime('%m'), 'date': move_date.strftime('%Y-%m')} except: @@ -2249,9 +2255,7 @@ class account_model(osv.osv): 'date': context.get('date',time.strftime('%Y-%m-%d')), 'date_maturity': date_maturity }) - c = context.copy() - c.update({'journal_id': model.journal_id.id,'period_id': period_id}) - account_move_line_obj.create(cr, uid, val, context=c) + account_move_line_obj.create(cr, uid, val, context=ctx) return move_ids @@ -2398,7 +2402,7 @@ class account_account_template(osv.osv): _description ='Templates for Accounts' _columns = { - 'name': fields.char('Name', size=128, required=True, select=True), + 'name': fields.char('Name', size=256, required=True, select=True), 'currency_id': fields.many2one('res.currency', 'Secondary Currency', help="Forces all moves for this account to have this secondary currency."), 'code': fields.char('Code', size=64, select=1), 'type': fields.selection([ diff --git a/addons/account/account_bank.py b/addons/account/account_bank.py index 2a9e432894f..01eab2fbb01 100644 --- a/addons/account/account_bank.py +++ b/addons/account/account_bank.py @@ -42,8 +42,12 @@ class bank(osv.osv): return (bank.bank_name or '') + ' ' + bank.acc_number def post_write(self, cr, uid, ids, context={}): + if isinstance(ids, (int, long)): + ids = [ids] + obj_acc = self.pool.get('account.account') obj_data = self.pool.get('ir.model.data') + for bank in self.browse(cr, uid, ids, context): if bank.company_id and not bank.journal_id: # Find the code and parent of the bank account to create @@ -104,3 +108,5 @@ class bank(osv.osv): self.write(cr, uid, [bank.id], {'journal_id': journal_id}, context=context) return True + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/account_installer.xml b/addons/account/account_installer.xml index 230078c4e33..e249f8fa872 100644 --- a/addons/account/account_installer.xml +++ b/addons/account/account_installer.xml @@ -57,7 +57,7 @@ <record id="category_accounting_configuration" model="ir.actions.todo.category"> <field name="name">Accounting</field> <field name="sequence">5</field> - </record> + </record> <record id="account_configuration_installer_todo" model="ir.actions.todo"> <field name="action_id" ref="action_account_configuration_installer"/> diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 4da3a447e38..27881bf1280 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -251,7 +251,7 @@ class account_invoice(osv.osv): 'currency_id': fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}), 'journal_id': fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}), 'company_id': fields.many2one('res.company', 'Company', required=True, change_default=True, readonly=True, states={'draft':[('readonly',False)]}), - 'check_total': fields.float('Total', digits_compute=dp.get_precision('Account'), states={'open':[('readonly',True)],'close':[('readonly',True)]}), + 'check_total': fields.float('Verification Total', digits_compute=dp.get_precision('Account'), states={'open':[('readonly',True)],'close':[('readonly',True)]}), 'reconciled': fields.function(_reconciled, string='Paid/Reconciled', type='boolean', store={ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids, None, 50), # Check if we can remove ? @@ -286,6 +286,9 @@ class account_invoice(osv.osv): 'internal_number': False, 'user_id': lambda s, cr, u, c: u, } + _sql_constraints = [ + ('number_uniq', 'unique(number, company_id)', 'Invoice Number must be unique per Company!'), + ] def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False): journal_obj = self.pool.get('account.journal') @@ -795,6 +798,7 @@ class account_invoice(osv.osv): """Creates invoice related analytics and financial move lines""" ait_obj = self.pool.get('account.invoice.tax') cur_obj = self.pool.get('res.currency') + period_obj = self.pool.get('account.period') context = {} for inv in self.browse(cr, uid, ids): if not inv.journal_id.sequence_id: @@ -923,10 +927,10 @@ class account_invoice(osv.osv): 'narration':inv.comment } period_id = inv.period_id and inv.period_id.id or False + ctx.update({'company_id': inv.company_id.id}) if not period_id: - period_ids = self.pool.get('account.period').search(cr, uid, [('date_start','<=',inv.date_invoice or time.strftime('%Y-%m-%d')),('date_stop','>=',inv.date_invoice or time.strftime('%Y-%m-%d')), ('company_id', '=', inv.company_id.id)]) - if period_ids: - period_id = period_ids[0] + period_ids = period_obj.find(cr, uid, inv.date_invoice, context=ctx) + period_id = period_ids and period_ids[0] or False if period_id: move['period_id'] = period_id for i in line: diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index efc7a24031c..4cc1a63db61 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -153,7 +153,7 @@ <button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change" attrs="{'invisible':[('state','!=','draft')]}" groups="account.group_account_user"/> <newline/> <field string="Supplier" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}"/> - <field domain="[('partner_id','=',partner_id)]" name="address_invoice_id"/> + <field domain="[('partner_id','=',partner_id)]" name="address_invoice_id" context="{'default_partner_id': partner_id}"/> <field name="fiscal_position" groups="base.group_extended" widget="selection"/> <newline/> <field name="date_invoice"/> @@ -264,7 +264,7 @@ <button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change" attrs="{'invisible':[('state','!=','draft')]}" groups="account.group_account_user"/> <newline/> <field string="Customer" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" groups="base.group_user" context="{'search_default_customer': 1}"/> - <field domain="[('partner_id','=',partner_id)]" name="address_invoice_id"/> + <field domain="[('partner_id','=',partner_id)]" name="address_invoice_id" context="{'default_partner_id': partner_id}"/> <field name="fiscal_position" groups="base.group_extended" widget="selection"/> <newline/> <field name="date_invoice"/> @@ -432,7 +432,7 @@ <field name="view_mode">tree,form,calendar,graph</field> <field eval="False" name="view_id"/> <field name="domain">[('type','=','out_invoice')]</field> - <field name="context">{'type':'out_invoice', 'journal_type': 'sale'}</field> + <field name="context">{'default_type':'out_invoice', 'type':'out_invoice', 'journal_type': 'sale'}</field> <field name="search_view_id" ref="view_account_invoice_filter"/> <field name="help">With Customer Invoices you can create and manage sales invoices issued to your customers. OpenERP can also generate draft invoices automatically from sales orders or deliveries. You should only confirm them before sending them to your customers.</field> </record> @@ -460,7 +460,7 @@ <field name="view_mode">tree,form,calendar,graph</field> <field eval="False" name="view_id"/> <field name="domain">[('type','=','in_invoice')]</field> - <field name="context">{'type':'in_invoice', 'journal_type': 'purchase'}</field> + <field name="context">{'default_type': 'in_invoice', 'type': 'in_invoice', 'journal_type': 'purchase'}</field> <field name="search_view_id" ref="view_account_invoice_filter"/> <field name="help">With Supplier Invoices you can enter and manage invoices issued by your suppliers. OpenERP can also generate draft invoices automatically from purchase orders or receipts. This way, you can control the invoice from your supplier according to what you purchased or received.</field> </record> @@ -473,7 +473,7 @@ <field name="view_mode">tree,form,calendar,graph</field> <field eval="False" name="view_id"/> <field name="domain">[('type','=','out_refund')]</field> - <field name="context">{'type':'out_refund', 'journal_type': 'sale_refund'}</field> + <field name="context">{'default_type':'out_refund', 'type':'out_refund', 'journal_type': 'sale_refund'}</field> <field name="search_view_id" ref="view_account_invoice_filter"/> <field name="help">With Customer Refunds you can manage the credit notes for your customers. A refund is a document that credits an invoice completely or partially. You can easily generate refunds and reconcile them directly from the invoice form.</field> </record> @@ -499,7 +499,7 @@ <field name="view_mode">tree,form,calendar,graph</field> <field eval="False" name="view_id"/> <field name="domain">[('type','=','in_refund')]</field> - <field name="context">{'type':'in_refund', 'journal_type': 'purchase_refund'}</field> + <field name="context">{'default_type': 'in_refund', 'type': 'in_refund', 'journal_type': 'purchase_refund'}</field> <field name="search_view_id" ref="view_account_invoice_filter"/> <field name="help">With Supplier Refunds you can manage the credit notes you receive from your suppliers. A refund is a document that credits an invoice completely or partially. You can easily generate refunds and reconcile them directly from the invoice form.</field> </record> diff --git a/addons/account/account_pre_install.yml b/addons/account/account_pre_install.yml new file mode 100644 index 00000000000..13adbe8108f --- /dev/null +++ b/addons/account/account_pre_install.yml @@ -0,0 +1,22 @@ +- + I configure automatically if the country is set on the company, mainly for online offers. +- + !python {model: account.installer}: | + modules = self.pool.get('ir.module.module') + wizards = self.pool.get('ir.actions.todo') + wiz = wizards.browse(cr, uid, ref('account.account_configuration_installer_todo')) + part = self.pool.get('res.partner').browse(cr, uid, ref('base.main_partner')) + # if we know the country and the wizard has not yet been executed, we do it + if (part.country.id) and (wiz.state=='open'): + mod = 'l10n_'+part.country.code.lower() + ids = modules.search(cr, uid, [ ('name','=',mod) ], context=context) + if ids: + wizards.write(cr, uid, [ref('account.account_configuration_installer_todo')], { + 'state': 'done' + }) + wiz_id = self.create(cr, uid, { + 'charts': mod + }) + self.execute_simple(cr, uid, [wiz_id]) + modules.state_update(cr, uid, ids, + 'to install', ['uninstalled'], context=context) diff --git a/addons/account/account_report.xml b/addons/account/account_report.xml index 32d10ba0153..9bb40a7a503 100644 --- a/addons/account/account_report.xml +++ b/addons/account/account_report.xml @@ -19,6 +19,7 @@ rml="account/report/account_print_invoice.rml" string="Invoices" attachment="(object.state in ('open','paid')) and ('INV'+(object.number or '').replace('/',''))" + usage="default" multi="True"/> <report id="account_transfers" model="account.transfer" name="account.transfer" string="Transfers" xml="account/report/transfer.xml" xsl="account/report/transfer.xsl"/> <report auto="False" id="account_intracom" menu="False" model="account.move.line" name="account.intracom" string="IntraCom"/> diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index fdd69bcde6a..16cd957a61e 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -1306,7 +1306,6 @@ <field name="model">account.account</field> <field name="name">Open Journal Items</field> <field eval="'ir.actions.act_window,%d'%action_move_line_select" name="value"/> - <field eval="True" name="object"/> </record> <!-- Account.Entry Edition @@ -1584,7 +1583,12 @@ context="{'search_default_account_id':[active_id], 'search_default_unreconciled':1, 'default_account_id': active_id}" src_model="account.account"/> - <act_window domain="[('reconcile_id', '=', active_id)]" id="act_account_acount_move_line_reconcile_open" name="Reconciled entries" res_model="account.move.line" src_model="account.move.reconcile"/> + <act_window + domain="[('reconcile_id', '=', active_id)]" + id="act_account_acount_move_line_reconcile_open" + name="Reconciled entries" + res_model="account.move.line" + src_model="account.move.reconcile"/> <!-- @@ -1626,7 +1630,7 @@ <tree string="Journal Entry Model Line" editable="bottom"> <field name="sequence"/> <field name="name"/> - <field name="account_id"/> + <field name="account_id" domain="[('type','<>','view'),('type','<>','consolidation'), ('company_id', '=', parent.company_id)]"/> <field name="analytic_account_id" groups="analytic.group_analytic_accounting"/> <field name="partner_id"/> <field name="debit"/> @@ -1645,12 +1649,12 @@ <form string="Journal Entry Model Line"> <field colspan="4" name="name" select="1"/> <field name="sequence"/> - <field name="account_id" domain="[('type','<>','view'),('type','<>','consolidation')]"/> + <field name="account_id" domain="[('type','<>','view'), ('type','<>','consolidation'), ('company_id', '=', parent.company_id)]"/> <field name="analytic_account_id" groups="analytic.group_analytic_accounting"/> <field name="partner_id"/> <field name="debit" select="1"/> <field name="credit" select="1"/> - <field name="quantity"/> + <field name="quantity"/> <field name="date_maturity"/> </form> </field> @@ -2017,7 +2021,6 @@ <field name="model">account.tax.code</field> <field name="name">Tax Details</field> <field eval="'ir.actions.act_window,%d'%action_tax_code_line_open" name="value"/> - <field eval="True" name="object"/> </record> @@ -2039,7 +2042,14 @@ res_model="account.move.line" src_model="account.journal"/> - <act_window context="{'search_default_reconcile_id':False, 'search_default_partner_id':[active_id], 'default_partner_id': active_id}" domain="[('account_id.reconcile', '=', True),('account_id.type', 'in', ['receivable', 'payable'])]" id="act_account_partner_account_move_all" name="Receivables & Payables" res_model="account.move.line" src_model="res.partner" groups="base.group_extended"/> + <act_window + context="{'search_default_reconcile_id':False, 'search_default_partner_id':[active_id], 'default_partner_id': active_id}" + domain="[('account_id.reconcile', '=', True),('account_id.type', 'in', ['receivable', 'payable'])]" + id="act_account_partner_account_move_all" + name="Receivables & Payables" + res_model="account.move.line" + src_model="res.partner" + groups="base.group_extended"/> <act_window context="{'search_default_partner_id':[active_id], 'default_partner_id': active_id}" id="act_account_partner_account_move" name="Journal Items" res_model="account.move.line" src_model="res.partner" groups="account.group_account_user"/> diff --git a/addons/account/board_account_view.xml b/addons/account/board_account_view.xml index 1ffcdec1d41..5108a62cf3e 100644 --- a/addons/account/board_account_view.xml +++ b/addons/account/board_account_view.xml @@ -30,6 +30,7 @@ <field name="view_type">form</field> <field name="view_mode">graph,tree</field> <field name="domain">[('type','=','liquidity')]</field> + <field name="context">{'default_type': 'liquidity'}</field> <field name="view_id" ref="account.view_treasory_graph"/> </record> <record id="board_account_form" model="ir.ui.view"> @@ -38,17 +39,16 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Account Board"> - <hpaned> - <child1> - <action colspan="4" height="160" width="400" name="%(account.action_invoice_tree1)d" string="Customer Invoices to Approve" domain="[('state','in',('draft','proforma2')), ('type','=','out_invoice')]"/> - <action colspan="4" height="160" width="400" name="%(action_company_analysis_tree)d" string="Company Analysis" groups="account.group_account_manager"/> - </child1> - <child2> - <action colspan="4" height="220" name="%(action_treasory_graph)d" string="Treasury" groups="account.group_account_manager,account.group_account_user"/> - <action colspan="4" height="220" name="%(action_aged_receivable)d" string="Aged Receivables" groups="account.group_account_manager,account.group_account_user"/> - <!-- <action colspan="4" height="220" name="%(action_aged_income)d" string="Aged income"/> --> - </child2> - </hpaned> + <board style="2-1"> + <column> + <action name="%(account.action_invoice_tree1)d" string="Customer Invoices to Approve" domain="[('state','in',('draft','proforma2')), ('type','=','out_invoice')]"/> + <action name="%(action_company_analysis_tree)d" string="Company Analysis"/> + </column> + <column> + <action name="%(action_treasory_graph)d" string="Treasury"/> <!--groups="account.group_account_manager,account.group_account_user"--> + <action name="%(action_aged_receivable)d" string="Aged Receivables"/> <!--groups="account.group_account_manager,account.group_account_user"--> + </column> + </board> </form> </field> </record> diff --git a/addons/account/company.py b/addons/account/company.py index c903b6d4a71..4ad4d1226d7 100644 --- a/addons/account/company.py +++ b/addons/account/company.py @@ -24,6 +24,7 @@ from osv import fields, osv class res_company(osv.osv): _inherit = "res.company" _columns = { + 'paypal_account': fields.char("Paypal Account", size=128, help="Paypal username (usually email) for receiving online payments."), 'overdue_msg': fields.text('Overdue Payments Message', translate=True), 'property_reserve_and_surplus_account': fields.property( 'account.account', diff --git a/addons/account/company_view.xml b/addons/account/company_view.xml index 0664fadd761..0cc67f23cfe 100644 --- a/addons/account/company_view.xml +++ b/addons/account/company_view.xml @@ -24,6 +24,7 @@ <field name="arch" type="xml"> <field name="currency_id" position="after"> <field name="property_reserve_and_surplus_account" colspan="2"/> + <field name="paypal_account" /> </field> </field> </record> diff --git a/addons/account/demo/account_demo.xml b/addons/account/demo/account_demo.xml index 566185c70c3..0bbfa71af62 100644 --- a/addons/account/demo/account_demo.xml +++ b/addons/account/demo/account_demo.xml @@ -7,7 +7,7 @@ --> <record id="data_fiscalyear" model="account.fiscalyear"> - <field eval="'Fiscal Year '+time.strftime('%Y')" name="name"/> + <field eval="'Fiscal Year X '+time.strftime('%Y')" name="name"/> <field eval="'FY'+time.strftime('%Y')" name="code"/> <field eval="time.strftime('%Y')+'-01-01'" name="date_start"/> <field eval="time.strftime('%Y')+'-12-31'" name="date_stop"/> @@ -20,7 +20,7 @@ <record id="period_1" model="account.period"> <field eval="'01/'+time.strftime('%Y')" name="code"/> - <field eval="'01/'+time.strftime('%Y')" name="name"/> + <field eval="'X 01/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-01-01'" name="date_start"/> @@ -29,7 +29,7 @@ </record> <record id="period_2" model="account.period"> <field eval="'02/'+time.strftime('%Y')" name="code"/> - <field eval="'02/'+time.strftime('%Y')" name="name"/> + <field eval="'X 02/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-02-01'" name="date_start"/> @@ -38,7 +38,7 @@ </record> <record id="period_3" model="account.period"> <field eval="'03/'+time.strftime('%Y')" name="code"/> - <field eval="'03/'+time.strftime('%Y')" name="name"/> + <field eval="'X 03/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-03-01'" name="date_start"/> @@ -47,7 +47,7 @@ </record> <record id="period_4" model="account.period"> <field eval="'04/'+time.strftime('%Y')" name="code"/> - <field eval="'04/'+time.strftime('%Y')" name="name"/> + <field eval="'X 04/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-04-01'" name="date_start"/> @@ -56,7 +56,7 @@ </record> <record id="period_5" model="account.period"> <field eval="'05/'+time.strftime('%Y')" name="code"/> - <field eval="'05/'+time.strftime('%Y')" name="name"/> + <field eval="'X 05/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-05-01'" name="date_start"/> @@ -65,7 +65,7 @@ </record> <record id="period_6" model="account.period"> <field eval="'06/'+time.strftime('%Y')" name="code"/> - <field eval="'06/'+time.strftime('%Y')" name="name"/> + <field eval="'X 06/'+time.strftime('%Y')" name="name"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="True" name="special"/> <field eval="time.strftime('%Y')+'-06-01'" name="date_start"/> @@ -74,7 +74,7 @@ </record> <record id="period_7" model="account.period"> <field eval="'07/'+time.strftime('%Y')" name="code"/> - <field eval="'07/'+time.strftime('%Y')" name="name"/> + <field eval="'X 07/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-07-01'" name="date_start"/> @@ -83,7 +83,7 @@ </record> <record id="period_8" model="account.period"> <field eval="'08/'+time.strftime('%Y')" name="code"/> - <field eval="'08/'+time.strftime('%Y')" name="name"/> + <field eval="'X 08/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-08-01'" name="date_start"/> @@ -92,7 +92,7 @@ </record> <record id="period_9" model="account.period"> <field eval="'09/'+time.strftime('%Y')" name="code"/> - <field eval="'09/'+time.strftime('%Y')" name="name"/> + <field eval="'X 09/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-09-01'" name="date_start"/> @@ -101,7 +101,7 @@ </record> <record id="period_10" model="account.period"> <field eval="'10/'+time.strftime('%Y')" name="code"/> - <field eval="'10/'+time.strftime('%Y')" name="name"/> + <field eval="'X 10/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-10-01'" name="date_start"/> @@ -110,7 +110,7 @@ </record> <record id="period_11" model="account.period"> <field eval="'11/'+time.strftime('%Y')" name="code"/> - <field eval="'11/'+time.strftime('%Y')" name="name"/> + <field eval="'X 11/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-11-01'" name="date_start"/> @@ -119,7 +119,7 @@ </record> <record id="period_12" model="account.period"> <field eval="'12/'+time.strftime('%Y')" name="code"/> - <field eval="'12/'+time.strftime('%Y')" name="name"/> + <field eval="'X 12/'+time.strftime('%Y')" name="name"/> <field eval="True" name="special"/> <field name="fiscalyear_id" ref="data_fiscalyear"/> <field eval="time.strftime('%Y')+'-12-01'" name="date_start"/> @@ -129,6 +129,6 @@ <record id="base.user_demo" model="res.users"> <field name="groups_id" eval="[(4,ref('account.group_account_user'))]"/> - </record> + </record> </data> </openerp> diff --git a/addons/account/edi/__init__.py b/addons/account/edi/__init__.py new file mode 100644 index 00000000000..a5bf0bbfa2d --- /dev/null +++ b/addons/account/edi/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +import invoice + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/edi/invoice.py b/addons/account/edi/invoice.py new file mode 100644 index 00000000000..d36e9163ba9 --- /dev/null +++ b/addons/account/edi/invoice.py @@ -0,0 +1,275 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import fields, osv, orm +from edi import EDIMixin + +INVOICE_LINE_EDI_STRUCT = { + 'name': True, + 'origin': True, + 'uos_id': True, + 'product_id': True, + 'price_unit': True, + 'quantity': True, + 'discount': True, + 'note': True, + + # fields used for web preview only - discarded on import + 'price_subtotal': True, +} + +INVOICE_TAX_LINE_EDI_STRUCT = { + 'name': True, + 'base': True, + 'amount': True, + 'manual': True, + 'sequence': True, + 'base_amount': True, + 'tax_amount': True, +} + +INVOICE_EDI_STRUCT = { + 'name': True, + 'origin': True, + 'company_id': True, # -> to be changed into partner + 'type': True, # -> reversed at import + 'internal_number': True, # -> reference at import + 'comment': True, + 'date_invoice': True, + 'date_due': True, + 'partner_id': True, + 'payment_term': True, + #custom: currency_id + 'invoice_line': INVOICE_LINE_EDI_STRUCT, + 'tax_line': INVOICE_TAX_LINE_EDI_STRUCT, + + # fields used for web preview only - discarded on import + #custom: 'partner_ref' + 'amount_total': True, + 'amount_untaxed': True, + 'amount_tax': True, +} + +class account_invoice(osv.osv, EDIMixin): + _inherit = 'account.invoice' + + def edi_export(self, cr, uid, records, edi_struct=None, context=None): + """Exports a supplier or customer invoice""" + edi_struct = dict(edi_struct or INVOICE_EDI_STRUCT) + res_company = self.pool.get('res.company') + res_partner_address = self.pool.get('res.partner.address') + edi_doc_list = [] + for invoice in records: + # generate the main report + self._edi_generate_report_attachment(cr, uid, invoice, context=context) + edi_doc = super(account_invoice,self).edi_export(cr, uid, [invoice], edi_struct, context)[0] + edi_doc.update({ + 'company_address': res_company.edi_export_address(cr, uid, invoice.company_id, context=context), + 'company_paypal_account': invoice.company_id.paypal_account, + 'partner_address': res_partner_address.edi_export(cr, uid, [invoice.address_invoice_id], context=context)[0], + + 'currency': self.pool.get('res.currency').edi_export(cr, uid, [invoice.currency_id], context=context)[0], + 'partner_ref': invoice.reference or False, + }) + edi_doc_list.append(edi_doc) + return edi_doc_list + + def _edi_tax_account(self, cr, uid, invoice_type='out_invoice', context=None): + #TODO/FIXME: should select proper Tax Account + account_pool = self.pool.get('account.account') + account_ids = account_pool.search(cr, uid, [('type','<>','view'),('type','<>','income'), ('type', '<>', 'closed')]) + tax_account = False + if account_ids: + tax_account = account_pool.browse(cr, uid, account_ids[0]) + return tax_account + + def _edi_invoice_account(self, cr, uid, partner_id, invoice_type, context=None): + partner_pool = self.pool.get('res.partner') + partner = partner_pool.browse(cr, uid, partner_id, context=context) + if invoice_type in ('out_invoice', 'out_refund'): + invoice_account = partner.property_account_receivable + else: + invoice_account = partner.property_account_payable + return invoice_account + + def _edi_product_account(self, cr, uid, product_id, invoice_type, context=None): + product_pool = self.pool.get('product.product') + product = product_pool.browse(cr, uid, product_id, context=context) + if invoice_type in ('out_invoice','out_refund'): + account = product.property_account_income or product.categ_id.property_account_income_categ + else: + account = product.property_account_expense or product.categ_id.property_account_expense_categ + return account + + def _edi_import_company(self, cr, uid, edi_document, context=None): + # TODO: for multi-company setups, we currently import the document in the + # user's current company, but we should perhaps foresee a way to select + # the desired company among the user's allowed companies + + self._edi_requires_attributes(('company_id','company_address','type'), edi_document) + res_partner_address = self.pool.get('res.partner.address') + res_partner = self.pool.get('res.partner') + + # imported company = new partner + src_company_id, src_company_name = edi_document.pop('company_id') + partner_id = self.edi_import_relation(cr, uid, 'res.partner', src_company_name, + src_company_id, context=context) + invoice_type = edi_document['type'] + partner_value = {} + if invoice_type in ('out_invoice', 'out_refund'): + partner_value.update({'customer': True}) + if invoice_type in ('in_invoice', 'in_refund'): + partner_value.update({'supplier': True}) + res_partner.write(cr, uid, [partner_id], partner_value, context=context) + + # imported company_address = new partner address + address_info = edi_document.pop('company_address') + address_info['partner_id'] = (src_company_id, src_company_name) + address_info['type'] = 'invoice' + address_id = res_partner_address.edi_import(cr, uid, address_info, context=context) + + # modify edi_document to refer to new partner + partner_address = res_partner_address.browse(cr, uid, address_id, context=context) + edi_document['partner_id'] = (src_company_id, src_company_name) + edi_document.pop('partner_address', False) # ignored + edi_document['address_invoice_id'] = self.edi_m2o(cr, uid, partner_address, context=context) + + return partner_id + + + def edi_import(self, cr, uid, edi_document, context=None): + """ During import, invoices will import the company that is provided in the invoice as + a new partner (e.g. supplier company for a customer invoice will be come a supplier + record for the new invoice. + Summary of tasks that need to be done: + - import company as a new partner, if type==in then supplier=1, else customer=1 + - partner_id field is modified to point to the new partner + - company_address data used to add address to new partner + - change type: out_invoice'<->'in_invoice','out_refund'<->'in_refund' + - reference: should contain the value of the 'internal_number' + - reference_type: 'none' + - internal number: reset to False, auto-generated + - journal_id: should be selected based on type: simply put the 'type' + in the context when calling create(), will be selected correctly + - payment_term: if set, create a default one based on name... + - for invoice lines, the account_id value should be taken from the + product's default, i.e. from the default category, as it will not + be provided. + - for tax lines, we disconnect from the invoice.line, so all tax lines + will be of type 'manual', and default accounts should be picked based + on the tax config of the DB where it is imported. + """ + if context is None: + context = {} + self._edi_requires_attributes(('company_id','company_address','type','invoice_line','currency'), edi_document) + + # extract currency info + res_currency = self.pool.get('res.currency') + currency_info = edi_document.pop('currency') + currency_id = res_currency.edi_import(cr, uid, currency_info, context=context) + currency = res_currency.browse(cr, uid, currency_id) + edi_document['currency_id'] = self.edi_m2o(cr, uid, currency, context=context) + + # change type: out_invoice'<->'in_invoice','out_refund'<->'in_refund' + invoice_type = edi_document['type'] + invoice_type = invoice_type.startswith('in_') and invoice_type.replace('in_','out_') or invoice_type.replace('out_','in_') + edi_document['type'] = invoice_type + + #import company as a new partner + partner_id = self._edi_import_company(cr, uid, edi_document, context=context) + + # Set Account + invoice_account = self._edi_invoice_account(cr, uid, partner_id, invoice_type, context=context) + edi_document['account_id'] = invoice_account and self.edi_m2o(cr, uid, invoice_account, context=context) or False + + # reference: should contain the value of the 'internal_number' + edi_document['reference'] = edi_document.get('internal_number', False) + # reference_type: 'none' + edi_document['reference_type'] = 'none' + + # internal number: reset to False, auto-generated + edi_document['internal_number'] = False + + # discard web preview fields, if present + edi_document.pop('partner_ref', None) + + # journal_id: should be selected based on type: simply put the 'type' in the context when calling create(), will be selected correctly + context.update(type=invoice_type) + + # for invoice lines, the account_id value should be taken from the product's default, i.e. from the default category, as it will not be provided. + for edi_invoice_line in edi_document['invoice_line']: + product_info = edi_invoice_line['product_id'] + product_id = self.edi_import_relation(cr, uid, 'product.product', product_info[1], + product_info[0], context=context) + account = self._edi_product_account(cr, uid, product_id, invoice_type, context=context) + # TODO: could be improved with fiscal positions perhaps + # account = fpos_obj.map_account(cr, uid, fiscal_position_id, account.id) + edi_invoice_line['account_id'] = self.edi_m2o(cr, uid, account, context=context) if account else False + + # discard web preview fields, if present + edi_invoice_line.pop('price_subtotal', None) + + # for tax lines, we disconnect from the invoice.line, so all tax lines will be of type 'manual', and default accounts should be picked based + # on the tax config of the DB where it is imported. + tax_account = self._edi_tax_account(cr, uid, context=context) + tax_account_info = self.edi_m2o(cr, uid, tax_account, context=context) + for edi_tax_line in edi_document.get('tax_line', []): + edi_tax_line['account_id'] = tax_account_info + edi_tax_line['manual'] = True + + return super(account_invoice,self).edi_import(cr, uid, edi_document, context=context) + + + def _edi_record_display_action(self, cr, uid, id, context=None): + """Returns an appropriate action definition dict for displaying + the record with ID ``rec_id``. + + :param int id: database ID of record to display + :return: action definition dict + """ + action = super(account_invoice,self)._edi_record_display_action(cr, uid, id, context=context) + try: + invoice = self.browse(cr, uid, id, context=context) + if 'out_' in invoice.type: + view_ext_id = 'invoice_form' + journal_type = 'sale' + else: + view_ext_id = 'invoice_supplier_form' + journal_type = 'purchase' + ctx = "{'type': '%s', 'journal_type': '%s'}" % (invoice.type, journal_type) + action.update(context=ctx) + view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account', view_ext_id)[1] + action.update(views=[(view_id,'form'), (False, 'tree')]) + except ValueError: + # ignore if views are missing + pass + return action + + +class account_invoice_line(osv.osv, EDIMixin): + _inherit='account.invoice.line' + +class account_invoice_tax(osv.osv, EDIMixin): + _inherit = "account.invoice.tax" + + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/edi/invoice_action_data.xml b/addons/account/edi/invoice_action_data.xml new file mode 100644 index 00000000000..0904ec6fd54 --- /dev/null +++ b/addons/account/edi/invoice_action_data.xml @@ -0,0 +1,186 @@ +<?xml version="1.0" ?> +<openerp> + <data> + <!-- EDI Export + Send email Action --> + <record id="ir_actions_server_edi_invoice" model="ir.actions.server"> + <field name="code">if (object.type in ('out_invoice', 'out_refund')) and not object.partner_id.opt_out: object.edi_export_and_email(template_ext_id='account.email_template_edi_invoice', context=context)</field> + <field eval="6" name="sequence"/> + <field name="state">code</field> + <field name="type">ir.actions.server</field> + <field name="model_id" ref="account.model_account_invoice"/> + <field name="condition">True</field> + <field name="name">Auto-email confirmed invoices</field> + </record> + + <!-- EDI related Email Templates menu --> + <record model="ir.actions.act_window" id="action_email_templates"> + <field name="name">Email Templates</field> + <field name="res_model">email.template</field> + <field name="view_type">form</field> + <field name="view_mode">form,tree</field> + <field name="view_id" ref="email_template.email_template_tree" /> + <field name="search_view_id" ref="email_template.view_email_template_search"/> + <field name="context">{'search_default_model_id':'account.invoice'}</field> + <field name="context" eval="{'search_default_model_id': ref('account.model_account_invoice')}"/> + </record> + <menuitem id="menu_email_templates" parent="menu_configuration_misc" action="action_email_templates" sequence="30"/> + + </data> + + <!-- Mail template and workflow bindings are done in a NOUPDATE block + so users can freely customize/delete them --> + <data noupdate="1"> + <!-- bind the mailing server action to invoice open activity --> + <record id="account.act_open" model="workflow.activity"> + <field name="action_id" ref="ir_actions_server_edi_invoice"/> + </record> + + <!--Email template --> + <record id="email_template_edi_invoice" model="email.template"> + <field name="name">Automated Invoice Notification Mail</field> + <field name="email_from">${object.user_id.user_email or object.company_id.email or 'noreply@localhost'}</field> + <field name="subject">${object.company_id.name} Invoice (Ref ${object.number or 'n/a' })</field> + <field name="email_to">${object.address_invoice_id.email or ''}</field> + <field name="model_id" ref="account.model_account_invoice"/> + <field name="auto_delete" eval="True"/> + <field name="body_html"><![CDATA[ +<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); "> + + <p>Hello${object.address_invoice_id.name and ' ' or ''}${object.address_invoice_id.name or ''},</p> + + <p>A new invoice is available for ${object.partner_id.name}: </p> + + <p style="border-left: 1px solid #8e0000; margin-left: 30px;"> + <strong>REFERENCES</strong><br /> + Invoice number: <strong>${object.number}</strong><br /> + Invoice total: <strong>${object.amount_total} ${object.currency_id.name}</strong><br /> + Invoice date: ${object.date_invoice}<br /> + % if object.origin: + Order reference: ${object.origin}<br /> + % endif + Your contact: <a href="mailto:${object.user_id.user_email or ''}?subject=Invoice%20${object.number}">${object.user_id.name}</a> + </p> + + <p> + You can view the invoice document, download it and pay online using the following link: + </p> + <a style="display:block; width: 150px; height:20px; margin-left: 120px; color: #FFF; font-family: 'Lucida Grande', Helvetica, Arial, sans-serif; font-size: 13px; font-weight: bold; text-align: center; text-decoration: none !important; line-height: 1; padding: 5px 0px 0px 0px; background-color: #8E0000; border-radius: 5px 5px; background-repeat: repeat no-repeat;" + href="${ctx.get('edi_web_url_view') or ''}">View Invoice</a> + + % if object.company_id.paypal_account and object.type in ('out_invoice', 'in_refund'): + <% + comp_name = quote(object.company_id.name) + inv_number = quote(object.number) + paypal_account = quote(object.company_id.paypal_account) + inv_amount = quote(str(object.amount_total)) + cur_name = quote(object.currency_id.name) + paypal_url = "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=%s&item_name=%s%%20Invoice%%20%s&" \ + "invoice=%s&amount=%s&currency_code=%s&button_subtype=services&no_note=1&bn=OpenERP_Invoice_PayNow_%s" % \ + (paypal_account,comp_name,inv_number,inv_number,inv_amount,cur_name,cur_name) + %> + <br/> + <p>It is also possible to directly pay with Paypal:</p> + <a style="margin-left: 120px;" href="${paypal_url}"> + <img class="oe_edi_paypal_button" src="https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif"/> + </a> + % endif + + <br/> + <p>If you have any question, do not hesitate to contact us.</p> + <p>Thank you for choosing ${object.company_id.name or 'us'}!</p> + <br/> + <br/> + <div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;"> + <h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #FFF;"> + <strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3> + </div> + <div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;"> + <span style="color: #222; margin-bottom: 5px; display: block; "> + % if object.company_id.street: + ${object.company_id.street}<br/> + % endif + % if object.company_id.street2: + ${object.company_id.street2}<br/> + % endif + % if object.company_id.city or object.company_id.zip: + ${object.company_id.zip} ${object.company_id.city}<br/> + % endif + % if object.company_id.country_id: + ${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}<br/> + % endif + </span> + % if object.company_id.phone: + <div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> + Phone: ${object.company_id.phone} + </div> + % endif + % if object.company_id.website: + <div> + Web : <a href="${object.company_id.website}">${object.company_id.website}</a> + </div> + %endif + <p></p> + </div> +</div> + ]]></field> + <field name="body_text"><![CDATA[ +Hello${object.address_invoice_id.name and ' ' or ''}${object.address_invoice_id.name or ''}, + +A new invoice is available for ${object.partner_id.name}: + | Invoice number: *${object.number}* + | Invoice total: *${object.amount_total} ${object.currency_id.name}* + | Invoice date: ${object.date_invoice} + % if object.origin: + | Order reference: ${object.origin} + % endif + | Your contact: ${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''} + +You can view the invoice document, download it and pay online using the following link: + ${ctx.get('edi_web_url_view') or 'n/a'} + +% if object.company_id.paypal_account and object.type in ('out_invoice', 'in_refund'): +<% +comp_name = quote(object.company_id.name) +inv_number = quote(object.number) +paypal_account = quote(object.company_id.paypal_account) +inv_amount = quote(str(object.amount_total)) +cur_name = quote(object.currency_id.name) +paypal_url = "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=%s&item_name=%s%%20Invoice%%20%s"\ + "&invoice=%s&amount=%s¤cy_code=%s&button_subtype=services&no_note=1&bn=OpenERP_Invoice_PayNow_%s" % \ + (paypal_account,comp_name,inv_number,inv_number,inv_amount,cur_name,cur_name) +%> +It is also possible to directly pay with Paypal: + ${paypal_url} +% endif + +If you have any question, do not hesitate to contact us. + + +Thank you for choosing ${object.company_id.name}! + + +-- +${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''} +${object.company_id.name} +% if object.company_id.street: +${object.company_id.street or ''} +% endif +% if object.company_id.street2: +${object.company_id.street2} +% endif +% if object.company_id.city or object.company_id.zip: +${object.company_id.zip or ''} ${object.company_id.city or ''} +% endif +% if object.company_id.country_id: +${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''} +% endif +% if object.company_id.phone: +Phone: ${object.company_id.phone} +% endif +% if object.company_id.website: +${object.company_id.website or ''} +% endif + ]]></field> + </record> + </data> +</openerp> diff --git a/addons/account/i18n/ar.po b/addons/account/i18n/ar.po index 1cedf5ca383..3b5edf1e87d 100644 --- a/addons/account/i18n/ar.po +++ b/addons/account/i18n/ar.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-15 05:06+0000\n" +"X-Launchpad-Export-Date: 2011-11-16 05:21+0000\n" "X-Generator: Launchpad (build 14291)\n" #. module: account @@ -1891,7 +1891,7 @@ msgstr "" #. module: account #: model:ir.actions.act_window,name:account.action_account_pl_report msgid "Account Profit And Loss" -msgstr "" +msgstr "حساب الإربح و الخسائر" #. module: account #: field:account.installer,config_logo:0 @@ -1917,6 +1917,7 @@ msgid "" "If the active field is set to False, it will allow you to hide the tax " "without removing it." msgstr "" +"إذا كان الحقل النشط به لا أو (False) سيسمح لك بإخفاء الضريبة دون إزالتها" #. module: account #: help:account.bank.statement,name:0 @@ -2001,7 +2002,7 @@ msgstr "" #: selection:account.invoice.report,state:0 #: selection:report.invoice.created,state:0 msgid "Pro-forma" -msgstr "" +msgstr "كمسألة شكلية" #. module: account #: code:addons/account/installer.py:348 @@ -2087,7 +2088,7 @@ msgstr "حساب الدخل" #: code:addons/account/invoice.py:352 #, python-format msgid "There is no Accounting Journal of type Sale/Purchase defined!" -msgstr "" +msgstr "لا يوجد دفتر يومية للمبيعات أو المشتريات معرف!" #. module: account #: view:product.category:0 @@ -2159,7 +2160,7 @@ msgstr "سنة مالية" #: help:account.report.general.ledger,fiscalyear_id:0 #: help:account.vat.declaration,fiscalyear_id:0 msgid "Keep empty for all open fiscal year" -msgstr "" +msgstr "اتركه فارغ لجميع السنوات المالية المفتوحة" #. module: account #: model:ir.model,name:account.model_account_move @@ -2169,7 +2170,7 @@ msgstr "قيد الحساب" #. module: account #: field:account.sequence.fiscalyear,sequence_main_id:0 msgid "Main Sequence" -msgstr "" +msgstr "المسلسل الرئيسي" #. module: account #: field:account.invoice,payment_term:0 @@ -2256,7 +2257,7 @@ msgstr "رمز الأساس" #. module: account #: help:account.invoice.tax,sequence:0 msgid "Gives the sequence order when displaying a list of invoice tax." -msgstr "" +msgstr "تعطيك ترتيب المسلسل حين عرض القائمة للفاتورة الضريبية." #. module: account #: field:account.tax,base_sign:0 @@ -2342,14 +2343,14 @@ msgstr "كشوف حسابات" #. module: account #: report:account.analytic.account.journal:0 msgid "Move Name" -msgstr "" +msgstr "اسم الحركة" #. module: account #: help:res.partner,property_account_position:0 msgid "" "The fiscal position will determine taxes and the accounts used for the " "partner." -msgstr "" +msgstr "المركز المالي لتحديد الضرائب و حسابات التي تستخدم للشريك." #. module: account #: view:account.print.journal:0 @@ -2542,7 +2543,7 @@ msgstr "" #: model:ir.actions.server,name:account.ir_actions_server_action_wizard_multi_chart #: model:ir.ui.menu,name:account.menu_act_ir_actions_bleble msgid "New Company Financial Setting" -msgstr "" +msgstr "الإعدادات المالية للشركة الجديدة" #. module: account #: model:ir.actions.act_window,name:account.action_report_account_sales_tree_all @@ -2734,6 +2735,8 @@ msgid "" "No fiscal year defined for this date !\n" "Please create one." msgstr "" +"لا يوجد سنة مالية معرفة لهذا التاريخ !\n" +"قم بإنشائها." #. module: account #: selection:account.invoice,type:0 @@ -2783,7 +2786,7 @@ msgstr "حساب المصرفي" #. module: account #: field:account.chart.template,tax_template_ids:0 msgid "Tax Template List" -msgstr "" +msgstr "قائمة قالب الضريبة" #. module: account #: help:account.account,currency_mode:0 @@ -2902,7 +2905,7 @@ msgstr "" #: help:account.account.template,currency_id:0 #: help:account.bank.accounts.wizard,currency_id:0 msgid "Forces all moves for this account to have this secondary currency." -msgstr "" +msgstr "إجبار جميع الحركات لهذا الحساب أن تكون لها هذه العملة الثانية." #. module: account #: model:ir.actions.act_window,help:account.action_validate_account_move_line @@ -3088,13 +3091,13 @@ msgstr "إعدادات شجرة الحسابات" #: field:account.tax.code,notprintable:0 #: field:account.tax.code.template,notprintable:0 msgid "Not Printable in Invoice" -msgstr "" +msgstr "لا يمكن طباعتها في الفاتورة" #. module: account #: report:account.vat.declaration:0 #: field:account.vat.declaration,chart_tax_id:0 msgid "Chart of Tax" -msgstr "" +msgstr "خريطة الضريبة" #. module: account #: view:account.journal:0 @@ -3122,6 +3125,8 @@ msgid "" "All selected journal entries will be validated and posted. It means you " "won't be able to modify their accounting fields anymore." msgstr "" +"كل قيود اليومية المختارة سيتم التحقق منها و ترحيلها. و هو ما يعني لأنك لن " +"تستطيع تعديل أي منها." #. module: account #: code:addons/account/invoice.py:370 @@ -3190,13 +3195,13 @@ msgstr "" msgid "" "You cannot change the type of account from '%s' to '%s' type as it contains " "account entries!" -msgstr "" +msgstr "لا يمكنك تغيير نوع الحساب من '%s' إلي '%s' ما دام يشمل علي قيود!" #. module: account #: report:account.general.ledger:0 #: report:account.general.ledger_landscape:0 msgid "Counterpart" -msgstr "" +msgstr "نظير" #. module: account #: view:account.journal:0 @@ -3220,7 +3225,7 @@ msgstr "فئة المنتج" #: view:account.move.line:0 #: field:account.move.line,narration:0 msgid "Narration" -msgstr "" +msgstr "سرد" #. module: account #: view:account.addtmpl.wizard:0 @@ -3264,7 +3269,7 @@ msgstr "" #: report:pl.account:0 #: report:pl.account.horizontal:0 msgid "Chart of Accounts" -msgstr "" +msgstr "شجرة الحسابات" #. module: account #: view:account.tax.chart:0 @@ -3274,7 +3279,7 @@ msgstr "" #. module: account #: field:account.journal,centralisation:0 msgid "Centralised counterpart" -msgstr "" +msgstr "النظير المركزي" #. module: account #: model:ir.model,name:account.model_account_partner_reconcile_process @@ -3554,12 +3559,12 @@ msgstr "" #: code:addons/account/wizard/account_move_bank_reconcile.py:53 #, python-format msgid "Standard Encoding" -msgstr "" +msgstr "الترميز المعياري" #. module: account #: help:account.journal,analytic_journal_id:0 msgid "Journal for analytic entries" -msgstr "" +msgstr "دفتر اليومية للقيود التحليلية" #. module: account #: model:ir.ui.menu,name:account.menu_finance @@ -3754,12 +3759,12 @@ msgstr "نوع الحساب" #: model:ir.actions.report.xml,name:account.account_account_balance #: model:ir.ui.menu,name:account.menu_general_Balance_report msgid "Trial Balance" -msgstr "" +msgstr "ميزان المراجعة" #. module: account #: model:ir.model,name:account.model_account_invoice_cancel msgid "Cancel the Selected Invoices" -msgstr "" +msgstr "إلغاء الفواتير المختارة" #. module: account #: help:product.category,property_account_income_categ:0 @@ -6396,7 +6401,7 @@ msgstr "" #: model:ir.actions.act_window,name:account.action_invoice_tree1 #: model:ir.ui.menu,name:account.menu_action_invoice_tree1 msgid "Customer Invoices" -msgstr "" +msgstr "فواتير العميل" #. module: account #: field:account.move.line.reconcile,writeoff:0 @@ -7743,7 +7748,7 @@ msgstr "" #: model:ir.ui.menu,name:account.menu_account_supplier #: model:ir.ui.menu,name:account.menu_finance_payables msgid "Suppliers" -msgstr "" +msgstr "المورّدون" #. module: account #: constraint:account.move:0 @@ -8928,7 +8933,7 @@ msgstr "" #: model:ir.actions.act_window,name:account.action_invoice_tree2 #: model:ir.ui.menu,name:account.menu_action_invoice_tree2 msgid "Supplier Invoices" -msgstr "" +msgstr "فواتير الموردون" #. module: account #: view:account.analytic.line:0 diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po index 18f558872bb..62cbf363e3a 100644 --- a/addons/account/i18n/fr.po +++ b/addons/account/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:14+0000\n" -"PO-Revision-Date: 2011-11-07 12:53+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" +"PO-Revision-Date: 2011-11-25 15:24+0000\n" +"Last-Translator: Numérigraphe <Unknown>\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-11-08 05:42+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:50+0000\n" +"X-Generator: Launchpad (build 14381)\n" #. module: account #: code:addons/account/account.py:1291 @@ -584,8 +584,6 @@ msgstr "" #: field:account.move.bank.reconcile,journal_id:0 #: view:account.move.line:0 #: field:account.move.line,journal_id:0 -#: report:account.third_party_ledger:0 -#: report:account.third_party_ledger_other:0 #: code:addons/account/account_move_line.py:983 #: view:analytic.entries.report:0 #: field:analytic.entries.report,journal_id:0 @@ -968,7 +966,6 @@ msgstr "Créer des périodes trimestrielles" #. module: account #: report:account.overdue:0 -#: report:account.aged_trial_balance:0 msgid "Due" msgstr "Due" @@ -1063,10 +1060,6 @@ msgstr "Modèle d'écritures" #: field:account.journal,code:0 #: report:account.partner.balance:0 #: field:account.period,code:0 -#: report:account.balancesheet.horizontal:0 -#: report:account.balancesheet:0 -#: report:pl.account.horizontal:0 -#: report:pl.account:0 msgid "Code" msgstr "Code" @@ -1396,7 +1389,6 @@ msgstr "Analyse des écritures comptables" #. module: account #: model:ir.actions.act_window,name:account.action_partner_all #: model:ir.ui.menu,name:account.next_id_22 -#: report:account.aged_trial_balance:0 msgid "Partners" msgstr "Partenaires" @@ -2196,7 +2188,7 @@ msgstr "" #. module: account #: view:account.chart.template:0 -msgid "Search Chart of Accounts Templates" +msgid "Search Chart of Account Templates" msgstr "Chercher un modèle de plan comptable" #. module: account @@ -2305,11 +2297,6 @@ msgstr "Modèle de produit" #: report:account.third_party_ledger_other:0 #: report:account.vat.declaration:0 #: model:ir.model,name:account.model_account_fiscalyear -#: report:account.balancesheet.horizontal:0 -#: report:account.balancesheet:0 -#: report:pl.account.horizontal:0 -#: report:pl.account:0 -#: report:account.aged_trial_balance:0 msgid "Fiscal Year" msgstr "Exercice comptable" @@ -3187,9 +3174,7 @@ msgstr "Laisser vide pour utiliser le compte de dépense" #: field:account.common.report,journal_ids:0 #: report:account.general.journal:0 #: field:account.general.journal,journal_ids:0 -#: report:account.general.ledger_landscape:0 #: view:account.journal.period:0 -#: report:account.partner.balance:0 #: field:account.partner.balance,journal_ids:0 #: field:account.partner.ledger,journal_ids:0 #: field:account.pl.report,journal_ids:0 @@ -3550,7 +3535,6 @@ msgstr "" #: field:account.entries.report,date:0 #: selection:account.general.journal,filter:0 #: report:account.general.ledger:0 -#: report:account.general.ledger_landscape:0 #: field:account.invoice.report,date:0 #: report:account.journal.period.print:0 #: view:account.move:0 @@ -4852,7 +4836,6 @@ msgstr "Balance Analytique -" #: report:account.general.ledger_landscape:0 #: report:pl.account:0 #: report:pl.account.horizontal:0 -#: report:account.aged_trial_balance:0 msgid "Target Moves" msgstr "Mouvements Cibles" @@ -5521,7 +5504,7 @@ msgstr "Ajustement" #. module: account #: field:res.partner,debit:0 msgid "Total Payable" -msgstr "Montant à payer" +msgstr "Total à payer" #. module: account #: model:ir.actions.act_window,name:account.action_account_analytic_account_line_extended_form @@ -5687,16 +5670,6 @@ msgstr "La nouvelle devise n'est pas correctement paramétrée !" #: field:account.print.journal,filter:0 #: field:account.report.general.ledger,filter:0 #: field:account.vat.declaration,filter:0 -#: field:account.account.balance,filter:0 -#: field:account.central.journal,filter:0 -#: field:account.general.journal,filter:0 -#: field:account.partner.balance,filter:0 -#: field:account.balancesheet,filter:0 -#: field:account.balancesheet.horizontal,filter:0 -#: field:account.general.ledger,filter:0 -#: field:account.general.ledger_landscape,filter:0 -#: field:pl.account,filter:0 -#: field:pl.account.horizontal,filter:0 msgid "Filter by" msgstr "Filtrer par" @@ -6569,7 +6542,6 @@ msgstr " valorisation : pourcentage" #: code:addons/account/invoice.py:1008 #: code:addons/account/wizard/account_invoice_refund.py:100 #: code:addons/account/wizard/account_invoice_refund.py:102 -#: code:addons/account/wizard/account_open_closed_fiscalyear.py:40 #: code:addons/account/wizard/account_use_model.py:44 #, python-format msgid "Error !" @@ -6712,7 +6684,6 @@ msgstr "Position fiscale des taxes" #: view:account.report.general.ledger:0 #: model:ir.actions.act_window,name:account.action_account_general_ledger_menu #: model:ir.actions.report.xml,name:account.account_general_ledger -#: model:ir.actions.report.xml,name:account.account_general_ledger_landscape #: model:ir.ui.menu,name:account.menu_general_ledger msgid "General Ledger" msgstr "Grand livre" @@ -6748,8 +6719,8 @@ msgid "" "Account Voucher module includes all the basic requirements of Voucher " "Entries for Bank, Cash, Sales, Purchase, Expenses, Contra, etc... " msgstr "" -"Le module Chèques comprend toutes les fonctionnalités de base pour la " -"Banque, la trésorerie, les ventes, les achats, les frais, etc. " +"Le module \"Justificatifs\" comprend toutes les fonctionnalités de base pour " +"la Banque, la trésorerie, les ventes, les achats, les frais, etc. " #. module: account #: view:account.chart.template:0 @@ -6768,8 +6739,6 @@ msgstr "Plan de taxes comptables" #: report:account.general.journal:0 #: report:account.invoice:0 #: report:account.partner.balance:0 -#: report:pl.account.horizontal:0 -#: report:pl.account:0 msgid "Total:" msgstr "Total :" @@ -6979,7 +6948,7 @@ msgstr "Lignes analytiques" #: model:ir.actions.act_window,help:account.action_account_analytic_account_tree2 msgid "" "The normal chart of accounts has a structure defined by the legal " -"requirement of the country. The analytic chart of accounts structure should " +"requirement of the country. The analytic chart of account structure should " "reflect your own business needs in term of costs/revenues reporting. They " "are usually structured by contracts, projects, products or departements. " "Most of the OpenERP operations (invoices, timesheets, expenses, etc) " @@ -7384,7 +7353,6 @@ msgstr "Information optionnelle" #. module: account #: view:account.analytic.line:0 -#: field:account.bank.statement,user_id:0 #: view:account.journal:0 #: field:account.journal,user_id:0 #: view:analytic.entries.report:0 @@ -7981,7 +7949,6 @@ msgstr "Gestion de la comptabilité et des finances" #: view:account.entries.report:0 #: field:account.entries.report,period_id:0 #: view:account.fiscalyear:0 -#: report:account.general.ledger_landscape:0 #: view:account.invoice:0 #: view:account.invoice.report:0 #: field:account.journal.period,period_id:0 @@ -8103,21 +8070,6 @@ msgid "Company Currency" msgstr "Devise société" #. module: account -#: report:account.account.balance:0 -#: report:account.partner.balance:0 -#: report:account.third_party_ledger:0 -#: report:account.third_party_ledger_other:0 -#: report:account.balancesheet:0 -#: report:account.balancesheet.horizontal:0 -#: report:account.general.ledger:0 -#: report:account.general.ledger_landscape:0 -#: report:pl.account:0 -#: report:pl.account.horizontal:0 -#: report:account.aged_trial_balance:0 -msgid "Chart of Accounts" -msgstr "Plan comptable" - -#. module: account #: model:process.node,name:account.process_node_paymententries0 #: model:process.transition,name:account.process_transition_reconcilepaid0 msgid "Payment" @@ -8233,7 +8185,6 @@ msgstr "Journal d'avoirs" #: report:account.account.balance:0 #: report:account.central.journal:0 #: report:account.general.journal:0 -#: report:account.general.ledger_landscape:0 #: report:account.partner.balance:0 #: report:account.balancesheet:0 #: report:account.balancesheet.horizontal:0 @@ -8298,7 +8249,7 @@ msgstr "" #. module: account #: field:account.invoice.line,price_subtotal:0 msgid "Subtotal" -msgstr "Sous total" +msgstr "Sous-total" #. module: account #: view:account.vat.declaration:0 @@ -8320,12 +8271,6 @@ msgid "Due Date" msgstr "Date d'échéance" #. module: account -#: view:account.print.invoice:0 -#: field:account.print.invoice,date_due:0 -msgid "Due Date" -msgstr "Echéance" - -#. module: account #: model:ir.ui.menu,name:account.menu_account_supplier #: model:ir.ui.menu,name:account.menu_finance_payables msgid "Suppliers" @@ -8461,8 +8406,6 @@ msgid "" "The amount of the voucher must be the same amount as the one on the " "statement line" msgstr "" -"Le montant du justificatif doit être identique à celui de la ligne le " -"concernant" #. module: account #: code:addons/account/account_move_line.py:1131 @@ -8838,7 +8781,6 @@ msgstr "Impossible de trouver le code parent pour le compte modèle !" #. module: account #: field:account.aged.trial.balance,direction_selection:0 -#: report:account.aged_trial_balance:0 msgid "Analysis Direction" msgstr "Direction d'Analyse" @@ -8969,10 +8911,6 @@ msgstr "Laisser vide pour utiliser le compte de revenu" #: report:account.third_party_ledger_other:0 #: field:report.account.receivable,balance:0 #: field:report.aged.receivable,balance:0 -#: report:account.balancesheet.horizontal:0 -#: report:account.balancesheet:0 -#: report:pl.account.horizontal:0 -#: report:pl.account:0 msgid "Balance" msgstr "Balance" @@ -9024,7 +8962,7 @@ msgstr "" #: selection:account.account.template,type:0 #: selection:account.entries.report,type:0 msgid "Payable" -msgstr "Débiteurs" +msgstr "Payable" #. module: account #: view:report.account.sales:0 @@ -9123,7 +9061,6 @@ msgstr "Saisie manuelle" #. module: account #: report:account.general.ledger:0 -#: report:account.general.ledger_landscape:0 #: report:account.journal.period.print:0 #: field:account.move.line,move_id:0 #: field:analytic.entries.report,move_id:0 @@ -9203,7 +9140,7 @@ msgstr "Juillet" #. module: account #: view:account.account:0 -msgid "Chart of Accounts" +msgid "Chart of accounts" msgstr "Plan comptable" #. module: account @@ -9250,7 +9187,7 @@ msgstr "Période de fin" #: field:account.print.journal,chart_account_id:0 #: field:account.report.general.ledger,chart_account_id:0 #: field:account.vat.declaration,chart_account_id:0 -msgid "Chart of Accounts" +msgid "Chart of account" msgstr "Plan comptable" #. module: account @@ -9298,7 +9235,6 @@ msgstr "Écriture d'abonnement" #: report:account.general.journal:0 #: field:account.general.journal,date_from:0 #: report:account.general.ledger:0 -#: report:account.general.ledger_landscape:0 #: field:account.installer,date_start:0 #: report:account.journal.period.print:0 #: report:account.partner.balance:0 @@ -9311,7 +9247,6 @@ msgstr "Écriture d'abonnement" #: report:account.third_party_ledger:0 #: report:account.third_party_ledger_other:0 #: field:account.vat.declaration,date_from:0 -#: report:account.aged_trial_balance:0 msgid "Start Date" msgstr "Date de début" @@ -9508,7 +9443,7 @@ msgstr "" #: field:account.invoice,number:0 #: field:account.move,name:0 msgid "Number" -msgstr "Nombre" +msgstr "Numéro" #. module: account #: report:account.analytic.account.journal:0 @@ -9736,7 +9671,6 @@ msgstr "Validé" #: report:account.general.journal:0 #: field:account.general.journal,date_to:0 #: report:account.general.ledger:0 -#: report:account.general.ledger_landscape:0 #: field:account.installer,date_stop:0 #: report:account.journal.period.print:0 #: report:account.partner.balance:0 @@ -9824,7 +9758,6 @@ msgstr "États" #: field:report.account.sales,amount_total:0 #: field:report.account_type.sales,amount_total:0 #: field:report.invoice.created,amount_total:0 -#: report:account.aged_trial_balance:0 msgid "Total" msgstr "Total" @@ -10259,7 +10192,7 @@ msgstr "La date de la pièce comptable n'est pas dans la période définie." #. module: account #: field:account.subscription,period_total:0 msgid "Number of Periods" -msgstr "Nombre de Périodes" +msgstr "Nombre de périodes" #. module: account #: report:account.general.journal:0 @@ -10355,7 +10288,6 @@ msgstr "account.addtmpl.wizard" #: field:account.partner.ledger,result_selection:0 #: report:account.third_party_ledger:0 #: report:account.third_party_ledger_other:0 -#: report:account.aged_trial_balance:0 msgid "Partner's" msgstr "Du partenaire" @@ -10507,18 +10439,6 @@ msgstr "Actif" msgid "Liabilities" msgstr "Passif" -#. module: account -#: report:pl.account:0 -#: report:pl.account.horizontal:0 -msgid "Expenses" -msgstr "Charges" - -#. module: account -#: report:pl.account:0 -#: report:pl.account.horizontal:0 -msgid "Income" -msgstr "Produits" - #~ msgid "Aged Trial Balance" #~ msgstr "Balance Agée" @@ -10757,6 +10677,9 @@ msgstr "Produits" #~ msgid "Close states" #~ msgstr "Clôturer l'état" +#~ msgid "Income" +#~ msgstr "Produits" + #~ msgid "Print General Journal" #~ msgstr "Imprimer le journal général" @@ -11822,7 +11745,7 @@ msgstr "Produits" #~ msgid "Balance Sheet (Assets Accounts)" #~ msgstr "Bilan (comptes d'actif)" -#~ msgid "Chart of Accounts" +#~ msgid "Chart of Account" #~ msgstr "Plan comptable" #~ msgid "Balance:" diff --git a/addons/account/installer.py b/addons/account/installer.py index fcd29e9e323..a0157e51c8e 100644 --- a/addons/account/installer.py +++ b/addons/account/installer.py @@ -111,6 +111,10 @@ class account_installer(osv.osv_memory): return {} def execute(self, cr, uid, ids, context=None): + self.execute_simple(cr, uid, ids, context) + super(account_installer, self).execute(cr, uid, ids, context=context) + + def execute_simple(self, cr, uid, ids, context=None): if context is None: context = {} fy_obj = self.pool.get('account.fiscalyear') @@ -219,7 +223,6 @@ class account_installer(osv.osv_memory): fy_obj.create_period(cr, uid, [fiscal_id]) elif res['period'] == '3months': fy_obj.create_period3(cr, uid, [fiscal_id]) - super(account_installer, self).execute(cr, uid, ids, context=context) def modules_to_install(self, cr, uid, ids, context=None): modules = super(account_installer, self).modules_to_install( diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml index 3d0365d6307..cc05092688b 100644 --- a/addons/account/project/project_view.xml +++ b/addons/account/project/project_view.xml @@ -91,15 +91,18 @@ </group> <notebook colspan="4"> <page string="Account Data"> - <field name="partner_id"/> - <field name="contact_id"/> - <field name="currency_id"/> - <newline/> - <field name="date_start"/> - <field name="date"/> - <newline/> - <field name="quantity_max"/> - <field name="user_id"/> + <group colspan="2" col="2"> + <separator colspan="2" string="Contacts"/> + <field name="partner_id" on_change="on_change_partner_id(partner_id)"/> + <field name="contact_id"/> + <field name="user_id"/> + </group> + <group colspan="2" col="2" name="contract"> + <separator colspan="2" string="Contract Data"/> + <field name="date_start"/> + <field name="date"/> + <field name="quantity_max"/> + </group> </page> <page string="Description"> <field colspan="4" name="description" nolabel="1"/> @@ -255,7 +258,6 @@ <field eval="'account.analytic.account'" name="model"/> <field name="name">Open Account Tree</field> <field eval="'ir.actions.act_window,%d'%action_account_tree1" name="value"/> - <field eval="True" name="object"/> </record> <record id="account_analytic_line_extended_form" model="ir.ui.view"> diff --git a/addons/account/project/wizard/account_analytic_balance_report_view.xml b/addons/account/project/wizard/account_analytic_balance_report_view.xml index 5144ba8647a..7cfe43cd0f9 100644 --- a/addons/account/project/wizard/account_analytic_balance_report_view.xml +++ b/addons/account/project/wizard/account_analytic_balance_report_view.xml @@ -35,7 +35,6 @@ <record model="ir.values" id="account_analytic_balance_values"> <field name="model_id" ref="analytic.model_account_analytic_account" /> - <field name="object" eval="1" /> <field name="name">Account Analytic Balance</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_analytic_balance'))" /> diff --git a/addons/account/project/wizard/account_analytic_cost_ledger_for_journal_report_view.xml b/addons/account/project/wizard/account_analytic_cost_ledger_for_journal_report_view.xml index 3bf5d54e8a6..128ea963982 100644 --- a/addons/account/project/wizard/account_analytic_cost_ledger_for_journal_report_view.xml +++ b/addons/account/project/wizard/account_analytic_cost_ledger_for_journal_report_view.xml @@ -34,7 +34,6 @@ <record model="ir.values" id="account_analytic_cost_ledger_journal_values"> <field name="model_id" ref="analytic.model_account_analytic_account" /> - <field name="object" eval="1" /> <field name="name">Account Analytic Cost Ledger Journal</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_analytic_cost_ledger_journal'))" /> @@ -43,4 +42,4 @@ </record> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/account/project/wizard/account_analytic_cost_ledger_view.xml b/addons/account/project/wizard/account_analytic_cost_ledger_view.xml index a45eda32275..7695ccd3696 100644 --- a/addons/account/project/wizard/account_analytic_cost_ledger_view.xml +++ b/addons/account/project/wizard/account_analytic_cost_ledger_view.xml @@ -33,7 +33,6 @@ <record model="ir.values" id="account_analytic_cost_values"> <field name="model_id" ref="analytic.model_account_analytic_account" /> - <field name="object" eval="1" /> <field name="name">Account Analytic Cost</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_analytic_cost'))" /> @@ -42,4 +41,4 @@ </record> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/account/project/wizard/account_analytic_inverted_balance_report.xml b/addons/account/project/wizard/account_analytic_inverted_balance_report.xml index 114c75f40af..c8e4762a132 100644 --- a/addons/account/project/wizard/account_analytic_inverted_balance_report.xml +++ b/addons/account/project/wizard/account_analytic_inverted_balance_report.xml @@ -33,7 +33,6 @@ <record model="ir.values" id="account_analytic_invert_balance_values"> <field name="model_id" ref="analytic.model_account_analytic_account" /> - <field name="object" eval="1" /> <field name="name">Account Analytic Inverted Balance</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_analytic_invert_balance'))" /> diff --git a/addons/account/project/wizard/account_analytic_journal_report_view.xml b/addons/account/project/wizard/account_analytic_journal_report_view.xml index 20777401da0..d924ceb2a7b 100644 --- a/addons/account/project/wizard/account_analytic_journal_report_view.xml +++ b/addons/account/project/wizard/account_analytic_journal_report_view.xml @@ -33,7 +33,6 @@ <record model="ir.values" id="account_analytic_journal_values"> <field name="model_id" ref="account.model_account_analytic_journal" /> - <field name="object" eval="1" /> <field name="name">Account Analytic Journal</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_analytic_journal'))" /> diff --git a/addons/account/report/account_analytic_entries_report.py b/addons/account/report/account_analytic_entries_report.py index a53e19721dd..1b7e7f9a84b 100644 --- a/addons/account/report/account_analytic_entries_report.py +++ b/addons/account/report/account_analytic_entries_report.py @@ -55,10 +55,10 @@ class analytic_entries_report(osv.osv): select min(a.id) as id, count(distinct a.id) as nbr, - a.create_date as date, - to_char(a.create_date, 'YYYY') as year, - to_char(a.create_date, 'MM') as month, - to_char(a.create_date, 'YYYY-MM-DD') as day, + a.date as date, + to_char(a.date, 'YYYY') as year, + to_char(a.date, 'MM') as month, + to_char(a.date, 'YYYY-MM-DD') as day, a.user_id as user_id, a.name as name, analytic.partner_id as partner_id, @@ -76,9 +76,11 @@ class analytic_entries_report(osv.osv): account_analytic_line a, account_analytic_account analytic where analytic.id = a.account_id group by - a.create_date, a.user_id,a.name,analytic.partner_id,a.company_id,a.currency_id, + a.date, a.user_id,a.name,analytic.partner_id,a.company_id,a.currency_id, a.account_id,a.general_account_id,a.journal_id, a.move_id,a.product_id,a.product_uom_id ) """) analytic_entries_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_entries_report.py b/addons/account/report/account_entries_report.py index 266b4a056d7..29e40c7d5ad 100644 --- a/addons/account/report/account_entries_report.py +++ b/addons/account/report/account_entries_report.py @@ -153,3 +153,5 @@ class account_entries_report(osv.osv): ) """) account_entries_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_financial_report.py b/addons/account/report/account_financial_report.py index 6b42bb1875d..e9da0a1cd7b 100644 --- a/addons/account/report/account_financial_report.py +++ b/addons/account/report/account_financial_report.py @@ -92,3 +92,5 @@ class report_account_common(report_sxw.rml_parse, common_report_header): report_sxw.report_sxw('report.account.financial.report', 'account.financial.report', 'addons/account/report/account_financial_report.rml', parser=report_account_common, header='internal') + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_treasury_report.py b/addons/account/report/account_treasury_report.py index fce3661b4c4..40d9364981f 100644 --- a/addons/account/report/account_treasury_report.py +++ b/addons/account/report/account_treasury_report.py @@ -79,3 +79,5 @@ class account_treasury_report(osv.osv): ) """) account_treasury_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/common_report_header.py b/addons/account/report/common_report_header.py index 5769248405f..c0365875bdc 100644 --- a/addons/account/report/common_report_header.py +++ b/addons/account/report/common_report_header.py @@ -141,3 +141,5 @@ class common_report_header(object): return '' #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/test/account_supplier_invoice.yml b/addons/account/test/account_supplier_invoice.yml index c67979226cc..3683a3e44c9 100644 --- a/addons/account/test/account_supplier_invoice.yml +++ b/addons/account/test/account_supplier_invoice.yml @@ -82,10 +82,10 @@ 'active_model': 'ir.ui.menu', 'journal_type': 'purchase', 'active_ids': [ref('menu_action_invoice_tree2')], 'type': 'in_invoice', 'active_id': ref('menu_action_invoice_tree2')}) except Exception, e: - assert e, _('Warning message has not been raised') + assert e, 'Warning message has not been raised' - - I verify that 'Period Sum' and 'Year sum' of account tax codes gets bind with the values + I verify that 'Period Sum' and 'Year sum' of the tax code are the expected values - !python {model: account.tax.code}: | tax_code = self.browse(cr, uid, ref('tax_case')) - assert(tax_code.sum_period == 100.0 and tax_code.sum == 100.0), _("'Period Sum' and 'Year sum' has not been binded with the correct values") + assert(tax_code.sum_period == 100.0 and tax_code.sum == 100.0), "Incorrect 'Period Sum' / 'Year sum' expected twice 100.0, got period=%r and year=%r)" % (tax_code.sum_period,tax_code.sum) diff --git a/addons/account/test/test_edi_invoice.yml b/addons/account/test/test_edi_invoice.yml new file mode 100644 index 00000000000..b1e73140581 --- /dev/null +++ b/addons/account/test/test_edi_invoice.yml @@ -0,0 +1,152 @@ +- + In order to test the EDI export features of Invoices +- + First I create a draft customer invoice +- + !record {model: account.invoice, id: invoice_edi_1}: + journal_id: 1 + partner_id: base.res_partner_agrolait + currency_id: base.EUR + address_invoice_id: base.res_partner_address_8invoice + company_id: 1 + account_id: account.a_pay + date_invoice: '2011-06-22' + name: selling product + type: 'out_invoice' + invoice_line: + - product_id: product.product_product_pc1 + uos_id: 1 + quantity: 1.0 + price_unit: 10.0 + name: 'basic pc' + account_id: account.a_pay + invoice_line: + - product_id: product.product_product_pc3 + uos_id: 1 + quantity: 5.0 + price_unit: 100.0 + name: 'Medium PC' + account_id: account.a_pay + tax_line: + - name: sale tax + account_id: account.a_pay + manual: True + amount: 1000.00 +- + I confirm and open the invoice +- + !workflow {model: account.invoice, ref: invoice_edi_1, action: invoice_open} +- + Then I export the customer invoice +- + !python {model: edi.document}: | + invoice_pool = self.pool.get('account.invoice') + invoice = invoice_pool.browse(cr, uid, ref("invoice_edi_1")) + token = self.export_edi(cr, uid, [invoice]) + assert token, 'Invalid EDI Token' +- + Then I import a sample EDI document of another customer invoice +- + !python {model: account.invoice}: | + edi_document = { + "__id": "account:b22acf7a-ddcd-11e0-a4db-701a04e25543.random_invoice_763jsms", + "__module": "account", + "__model": "account.invoice", + "__version": [6,1,0], + "internal_number": "SAJ/2011/002", + "company_address": { + "__id": "base:b22acf7a-ddcd-11e0-a4db-701a04e25543.main_address", + "__module": "base", + "__model": "res.partner.address", + "city": "Gerompont", + "zip": "1367", + "country_id": ["base:b22acf7a-ddcd-11e0-a4db-701a04e25543.be", "Belgium"], + "phone": "(+32).81.81.37.00", + "street": "Chaussee de Namur 40", + "bank_ids": [ + ["base:b22acf7a-ddcd-11e0-a4db-701a04e25543.res_partner_bank-ZrTWzesfsdDJzGbp","Sample bank: 123465789-156113"] + ], + }, + "company_id": ["account:b22acf7a-ddcd-11e0-a4db-701a04e25543.res_company_test11", "Thomson pvt. ltd."], + "currency": { + "__id": "base:b22acf7a-ddcd-11e0-a4db-701a04e25543.EUR", + "__module": "base", + "__model": "res.currency", + "code": "EUR", + "symbol": "€", + }, + "partner_id": ["account:b22acf7a-ddcd-11e0-a4db-701a04e25543.res_partner_test20", "Junjun wala"], + "partner_address": { + "__id": "base:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_address_7wdsjasdjh", + "__module": "base", + "__model": "res.partner.address", + "phone": "(+32).81.81.37.00", + "street": "Chaussee de Namur 40", + "city": "Gerompont", + "zip": "1367", + "country_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.be", "Belgium"], + }, + "date_invoice": "2011-06-22", + "name": "sample invoice", + "tax_line": [{ + "__id": "account:b22acf7a-ddcd-11e0-a4db-701a04e25543.account_invoice_tax-4g4EutbiEMVl", + "__module": "account", + "__model": "account.invoice.tax", + "amount": 1000.0, + "manual": True, + "name": "sale tax", + }], + "type": "out_invoice", + "invoice_line": [{ + "__module": "account", + "__model": "account.invoice.line", + "__id": "account:b22acf7a-ddcd-11e0-a4db-701a04e25543.account_invoice_line-1RP3so", + "uos_id": ["product:b22acf7a-ddcd-11e0-a4db-701a04e25543.product_uom_unit", "PCE"], + "name": "Basic PC", + "price_unit": 10.0, + "product_id": ["product:b22acf7a-ddcd-11e0-a4db-701a04e25543.product_product_pc1", "[PC1] Basic PC"], + "quantity": 1.0 + }, + { + "__module": "account", + "__model": "account.invoice.line", + "__id": "account:b22acf7a-ddcd-11e0-a4db-701a04e25543.account_invoice_line-u2XV5", + "uos_id": ["product:b22acf7a-ddcd-11e0-a4db-701a04e25543.product_uom_unit", "PCE"], + "name": "Medium PC", + "price_unit": 100.0, + "product_id": ["product:b22acf7a-ddcd-11e0-a4db-701a04e25543.product_product_pc3", "[PC3] Medium PC"], + "quantity": 5.0 + }] + } + invoice_id = self.edi_import(cr, uid, edi_document, context=context) + assert invoice_id, 'EDI import failed' + invoice_new = self.browse(cr, uid, invoice_id) + + # check bank info on partner + assert len(invoice_new.partner_id.bank_ids) == 1, "Expected 1 bank entry related to partner" + bank_info = invoice_new.partner_id.bank_ids[0] + assert bank_info.acc_number == "Sample bank: 123465789-156113", 'Expected "Sample bank: 123465789-156113", got %s' % bank_info.acc_number + + assert invoice_new.partner_id.supplier, 'Imported Partner is not marked as supplier' + assert invoice_new.reference == "SAJ/2011/002", "internal number is not stored in reference" + assert invoice_new.reference_type == 'none', "reference type is not set to 'none'" + assert invoice_new.internal_number == False, "internal number is not reset" + assert invoice_new.journal_id.id, "journal id is not selected" + assert invoice_new.type == 'in_invoice', "Invoice type was not set properly" + assert len(invoice_new.invoice_line) == 2, "invoice lines are not same" + for inv_line in invoice_new.invoice_line: + if inv_line.name == 'Basic PC': + assert inv_line.uos_id.name == "PCE" , "uom is not same" + assert inv_line.price_unit == 10 , "price unit is not same" + assert inv_line.quantity == 1 , "product qty is not same" + assert inv_line.price_subtotal == 10, "price sub total is not same" + elif inv_line.name == 'Medium PC': + assert inv_line.uos_id.name == "PCE" , "uom is not same" + assert inv_line.price_unit == 100 , "price unit is not same" + assert inv_line.quantity == 5 , "product qty is not same" + assert inv_line.price_subtotal == 500, "price sub total is not same" + else: + raise AssertionError('unknown invoice line: %s' % inv_line) + for inv_tax in invoice_new.tax_line: + assert inv_tax.manual, "tax line not set to manual" + assert inv_tax.account_id, "missing tax line account" diff --git a/addons/account/test/test_parent_structure.py b/addons/account/test/test_parent_structure.py index 9c3dd2b4c47..99795af311a 100644 --- a/addons/account/test/test_parent_structure.py +++ b/addons/account/test/test_parent_structure.py @@ -47,3 +47,5 @@ for a in account_lists: (a2['parent_right']<a['parent_right'])) if a2['parent_id']==a['id']: assert (a2['parent_left']>a['parent_left']) and (a2['parent_right']<a['parent_right']) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/__init__.py b/addons/account/wizard/__init__.py index d82eff62142..88ae17f3c7b 100644 --- a/addons/account/wizard/__init__.py +++ b/addons/account/wizard/__init__.py @@ -66,6 +66,7 @@ import account_change_currency import account_report_balance_sheet import account_report_profit_loss + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_journal_select_view.xml b/addons/account/wizard/account_journal_select_view.xml index 348218dd04d..abd596c2f24 100644 --- a/addons/account/wizard/account_journal_select_view.xml +++ b/addons/account/wizard/account_journal_select_view.xml @@ -32,7 +32,6 @@ <field name="model">account.journal.period</field> <field name="name">Open Journal</field> <field eval="'ir.actions.act_window,%d'%action_open_journal_button" name="value"/> - <field eval="True" name="object"/> </record> </data> </openerp> diff --git a/addons/account/wizard/account_period_close_view.xml b/addons/account/wizard/account_period_close_view.xml index 5d3351246a3..a353cf883ba 100644 --- a/addons/account/wizard/account_period_close_view.xml +++ b/addons/account/wizard/account_period_close_view.xml @@ -33,7 +33,6 @@ <record id="action_idea_post_vote_values" model="ir.values"> <field name="model_id" ref="model_account_period" /> - <field name="object" eval="1" /> <field name="name">Close a Period</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_period_close'))"/> diff --git a/addons/account/wizard/account_reconcile_partner_process_view.xml b/addons/account/wizard/account_reconcile_partner_process_view.xml index d7ac5e85d07..6360100a309 100644 --- a/addons/account/wizard/account_reconcile_partner_process_view.xml +++ b/addons/account/wizard/account_reconcile_partner_process_view.xml @@ -33,7 +33,6 @@ </record> <record model="ir.values" id="action_partner_reconcile_actino"> <field name="model_id" ref="account.model_account_move_line" /> - <field name="object" eval="1" /> <field name="name">Partner reconciliation</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_partner_reconcile'))" /> diff --git a/addons/account/wizard/account_reconcile_view.xml b/addons/account/wizard/account_reconcile_view.xml index 7c7ed520b48..8f001f40694 100644 --- a/addons/account/wizard/account_reconcile_view.xml +++ b/addons/account/wizard/account_reconcile_view.xml @@ -37,7 +37,6 @@ <record model="ir.values" id="action_account_move_line_reconcile_prompt_values"> <field name="model_id" ref="account.model_account_move_line" /> - <field name="object" eval="1" /> <field name="name">Reconcile Entries</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' +str(ref('action_view_account_move_line_reconcile'))" /> diff --git a/addons/account/wizard/account_report_account_balance_view.xml b/addons/account/wizard/account_report_account_balance_view.xml index 38f456f7d15..b700ab8a736 100644 --- a/addons/account/wizard/account_report_account_balance_view.xml +++ b/addons/account/wizard/account_report_account_balance_view.xml @@ -45,7 +45,6 @@ <record model="ir.values" id="action_account_balance_report_values1"> <field name="model_id" ref="account.model_account_account" /> - <field name="object" eval="1" /> <field name="name">Trial Balance</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' +str(ref('action_account_balance_menu'))" /> diff --git a/addons/account/wizard/account_report_central_journal.py b/addons/account/wizard/account_report_central_journal.py index eed21f976a5..046aec4690d 100644 --- a/addons/account/wizard/account_report_central_journal.py +++ b/addons/account/wizard/account_report_central_journal.py @@ -41,3 +41,5 @@ class account_central_journal(osv.osv_memory): account_central_journal() #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_common_account.py b/addons/account/wizard/account_report_common_account.py index 4e0fe2d6c66..a27241a37ff 100644 --- a/addons/account/wizard/account_report_common_account.py +++ b/addons/account/wizard/account_report_common_account.py @@ -44,3 +44,5 @@ class account_common_account_report(osv.osv_memory): account_common_account_report() #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_common_journal.py b/addons/account/wizard/account_report_common_journal.py index 8e9db058d31..e71d380e837 100644 --- a/addons/account/wizard/account_report_common_journal.py +++ b/addons/account/wizard/account_report_common_journal.py @@ -49,4 +49,4 @@ class account_common_journal_report(osv.osv_memory): account_common_journal_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/account/wizard/account_report_common_partner.py b/addons/account/wizard/account_report_common_partner.py index 05003041eeb..a2acdc4b988 100644 --- a/addons/account/wizard/account_report_common_partner.py +++ b/addons/account/wizard/account_report_common_partner.py @@ -44,4 +44,5 @@ class account_common_partner_report(osv.osv_memory): account_common_partner_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: +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_general_journal.py b/addons/account/wizard/account_report_general_journal.py index 521c4667a80..631de5f1260 100644 --- a/addons/account/wizard/account_report_general_journal.py +++ b/addons/account/wizard/account_report_general_journal.py @@ -37,3 +37,5 @@ class account_general_journal(osv.osv_memory): account_general_journal() #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_general_ledger_view.xml b/addons/account/wizard/account_report_general_ledger_view.xml index b4203134fd6..20b6ab0f042 100644 --- a/addons/account/wizard/account_report_general_ledger_view.xml +++ b/addons/account/wizard/account_report_general_ledger_view.xml @@ -51,7 +51,6 @@ <record model="ir.values" id="action_account_general_ledger_values"> <field name="model_id" ref="account.model_account_account" /> - <field name="object" eval="1" /> <field name="name">General Ledger</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' +str(ref('action_account_general_ledger_menu'))" /> diff --git a/addons/account/wizard/account_report_print_journal.py b/addons/account/wizard/account_report_print_journal.py index d7e8f11a7f8..1fe350349b6 100644 --- a/addons/account/wizard/account_report_print_journal.py +++ b/addons/account/wizard/account_report_print_journal.py @@ -46,3 +46,5 @@ class account_print_journal(osv.osv_memory): account_print_journal() #vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_unreconcile_view.xml b/addons/account/wizard/account_unreconcile_view.xml index 2efe457b1e2..5cdbbb6775f 100644 --- a/addons/account/wizard/account_unreconcile_view.xml +++ b/addons/account/wizard/account_unreconcile_view.xml @@ -31,7 +31,6 @@ <record model="ir.values" id="account_unreconcile_values"> <field name="model_id" ref="account.model_account_move_line" /> - <field name="object" eval="1" /> <field name="name">Unreconcile Entries</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_unreconcile'))" /> @@ -70,7 +69,6 @@ <record model="ir.values" id="account_unreconcile_reconcile_values"> <field name="model_id" ref="account.model_account_move_reconcile" /> - <field name="object" eval="1" /> <field name="name">Unreconcile Entries</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_unreconcile_reconcile'))" /> diff --git a/addons/account/wizard/account_use_model.py b/addons/account/wizard/account_use_model.py index 6e444b8b4e6..4fb77cb3397 100644 --- a/addons/account/wizard/account_use_model.py +++ b/addons/account/wizard/account_use_model.py @@ -47,67 +47,16 @@ class account_use_model(osv.osv_memory): def create_entries(self, cr, uid, ids, context=None): account_model_obj = self.pool.get('account.model') - account_period_obj = self.pool.get('account.period') - account_move_obj = self.pool.get('account.move') - account_move_line_obj = self.pool.get('account.move.line') - pt_obj = self.pool.get('account.payment.term') mod_obj = self.pool.get('ir.model.data') if context is None: context = {} - move_ids = [] - entry = {} data = self.read(cr, uid, ids, context=context)[0] record_id = context and context.get('model_line', False) or False if record_id: - data_model = account_model_obj.browse(cr, uid, data['model'], context=context) + model_ids = data['model'] else: - data_model = account_model_obj.browse(cr, uid, context['active_ids'], context=context) - for model in data_model: - entry['name'] = model.name%{'year':time.strftime('%Y'), 'month':time.strftime('%m'), 'date':time.strftime('%d')} - period_id = account_period_obj.find(cr, uid, context=context) - if not period_id: - raise osv.except_osv(_('No period found !'), _('Unable to find a valid period !')) - period_id = period_id[0] - move_id = account_move_obj.create(cr, uid, { - 'ref': entry['name'], - 'period_id': period_id, - 'journal_id': model.journal_id.id, - }) - move_ids.append(move_id) - for line in model.lines_id: - analytic_account_id = False - if line.analytic_account_id: - if not model.journal_id.analytic_journal_id: - raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (model.journal_id.name,)) - analytic_account_id = line.analytic_account_id.id - val = { - 'move_id': move_id, - 'journal_id': model.journal_id.id, - 'period_id': period_id, - 'analytic_account_id': analytic_account_id - } - date_maturity = time.strftime('%Y-%m-%d') - if line.date_maturity == 'partner' and line.partner_id and line.partner_id.property_payment_term: - payment_term_id = line.partner_id.property_payment_term.id - pterm_list = pt_obj.compute(cr, uid, payment_term_id, value=1, date_ref=date_maturity) - if pterm_list: - pterm_list = [l[0] for l in pterm_list] - pterm_list.sort() - date_maturity = pterm_list[-1] - val.update({ - 'name': line.name, - 'quantity': line.quantity, - 'debit': line.debit, - 'credit': line.credit, - 'account_id': line.account_id.id, - 'move_id': move_id, - 'partner_id': line.partner_id.id, - 'date': time.strftime('%Y-%m-%d'), - 'date_maturity': date_maturity - }) - c = context.copy() - c.update({'journal_id': model.journal_id.id,'period_id': period_id}) - account_move_line_obj.create(cr, uid, val, context=c) + model_ids = context['active_ids'] + move_ids = account_model_obj.generate(cr, uid, model_ids, context=context) context.update({'move_ids':move_ids}) model_data_ids = mod_obj.search(cr, uid,[('model','=','ir.ui.view'),('name','=','view_move_form')], context=context) diff --git a/addons/account/wizard/account_validate_move_view.xml b/addons/account/wizard/account_validate_move_view.xml index d12ae8d847f..31984596000 100644 --- a/addons/account/wizard/account_validate_move_view.xml +++ b/addons/account/wizard/account_validate_move_view.xml @@ -73,7 +73,6 @@ <record model="ir.values" id="validate_account_move_line_values"> <field name="model_id" ref="account.model_account_move_line" /> - <field name="object" eval="1" /> <field name="name">Post Journal Entries</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_validate_account_move_line'))" /> diff --git a/addons/account/wizard/account_vat.py b/addons/account/wizard/account_vat.py index 186f79cad6d..cbdf18d314a 100644 --- a/addons/account/wizard/account_vat.py +++ b/addons/account/wizard/account_vat.py @@ -59,4 +59,4 @@ class account_vat_declaration(osv.osv_memory): account_vat_declaration() -#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_accountant/i18n/bn.po b/addons/account_accountant/i18n/bn.po new file mode 100644 index 00000000000..9b62c14de4e --- /dev/null +++ b/addons/account_accountant/i18n/bn.po @@ -0,0 +1,36 @@ +# Bengali 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-21 12:33+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Bengali <bn@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-22 05:00+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_accountant +#: model:ir.module.module,description:account_accountant.module_meta_information +msgid "" +"\n" +"This module gives the admin user the access to all the accounting features " +"like the journal\n" +"items and the chart of accounts.\n" +" " +msgstr "" +"\n" +"এই মডিউল admin ব্যবহারকারীকে সকল হিসাবরক্ষন এর সুবিধা দিবে\n" +" " + +#. module: account_accountant +#: model:ir.module.module,shortdesc:account_accountant.module_meta_information +msgid "Accountant" +msgstr "হিসাবরক্ষনকারী" diff --git a/addons/account_accountant/i18n/he.po b/addons/account_accountant/i18n/he.po new file mode 100644 index 00000000000..de5181d6440 --- /dev/null +++ b/addons/account_accountant/i18n/he.po @@ -0,0 +1,33 @@ +# Hebrew 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-18 17:39+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Hebrew <he@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-19 05:13+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_accountant +#: model:ir.module.module,description:account_accountant.module_meta_information +msgid "" +"\n" +"This module gives the admin user the access to all the accounting features " +"like the journal\n" +"items and the chart of accounts.\n" +" " +msgstr "" + +#. module: account_accountant +#: model:ir.module.module,shortdesc:account_accountant.module_meta_information +msgid "Accountant" +msgstr "" diff --git a/addons/account_accountant/i18n/oc.po b/addons/account_accountant/i18n/oc.po new file mode 100644 index 00000000000..d88b40aa957 --- /dev/null +++ b/addons/account_accountant/i18n/oc.po @@ -0,0 +1,38 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-20 09:14+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_accountant +#: model:ir.module.module,description:account_accountant.module_meta_information +msgid "" +"\n" +"This module gives the admin user the access to all the accounting features " +"like the journal\n" +"items and the chart of accounts.\n" +" " +msgstr "" +"\n" +"Aqueste modul balha a l'administrator los accèsses a totas las " +"foncionalitats comptablas talas coma las linhas\n" +"d'escritura e lo plan comptable.\n" +" " + +#. module: account_accountant +#: model:ir.module.module,shortdesc:account_accountant.module_meta_information +msgid "Accountant" +msgstr "Comptable" diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index 8ebb75244a1..36d62e32e63 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -61,7 +61,7 @@ class account_analytic_account(osv.osv): res[id][f] = [int(id * 1000000 + int(x[0])) for x in result] elif f == 'last_worked_invoiced_date': for id in ids: - res[id][f] = 0.0 + res[id][f] = False if parent_ids: cr.execute("SELECT account_analytic_line.account_id, MAX(date) \ FROM account_analytic_line \ @@ -74,8 +74,8 @@ class account_analytic_account(osv.osv): res[account_id][f] = sum for account in accounts: for child in account.child_ids: - if res[account.id].get(f, '') < res.get(child.id, {}).get(f, ''): - res[account.id][f] = res.get(child.id, {}).get(f, '') + if res[account.id][f] < res.get(child.id, {}).get(f): + res[account.id][f] = res.get(child.id, {}).get(f, False) elif f == 'ca_to_invoice': for id in ids: res[id][f] = 0.0 @@ -123,7 +123,7 @@ class account_analytic_account(osv.osv): res[id][f] = round(res.get(id, {}).get(f, 0.0), dp) + round(res2.get(id, 0.0), 2) elif f == 'last_invoice_date': for id in ids: - res[id][f] = '' + res[id][f] = False if parent_ids: cr.execute ("SELECT account_analytic_line.account_id, \ DATE(MAX(account_invoice.date_invoice)) \ @@ -137,11 +137,11 @@ class account_analytic_account(osv.osv): res[account_id][f] = lid for account in accounts: for child in account.child_ids: - if res[account.id][f] < res.get(child.id, {}).get(f, ''): - res[account.id][f] = res.get(child.id, {}).get(f, '') + if res[account.id][f] < res.get(child.id, {}).get(f): + res[account.id][f] = res.get(child.id, {}).get(f, False) elif f == 'last_worked_date': for id in ids: - res[id][f] = '' + res[id][f] = False if parent_ids: cr.execute("SELECT account_analytic_line.account_id, MAX(date) \ FROM account_analytic_line \ @@ -154,8 +154,8 @@ class account_analytic_account(osv.osv): res[account_id][f] = lwd for account in accounts: for child in account.child_ids: - if res[account.id][f] < res.get(child.id, {}).get(f, ''): - res[account.id][f] = res.get(child.id, {}).get(f, '') + if res[account.id][f] < res.get(child.id, {}).get(f): + res[account.id][f] = res.get(child.id, {}).get(f, False) elif f == 'hours_qtt_non_invoiced': for id in ids: res[id][f] = 0.0 @@ -376,13 +376,11 @@ class account_analytic_account(osv.osv): def _is_overdue_quantity(self, cr, uid, ids, fieldnames, args, context=None): result = dict.fromkeys(ids, 0) - for record in self.browse(cr, uid, ids, context=context): - if record.quantity == 0.0 and record.quantity_max == 0.0: - result[record.id] = 0 - else: + if record.quantity_max > 0.0: result[record.id] = int(record.quantity >= record.quantity_max) - + else: + result[record.id] = 0 return result def _get_analytic_account(self, cr, uid, ids, context=None): diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml index 34840814154..19271cb4af2 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml @@ -1,7 +1,6 @@ <openerp> <data> - <menuitem icon="terp-project" id="base.menu_main_pm" name="Project" sequence="10"/> - <menuitem id="menu_invoicing" name="Billing" parent="base.menu_main_pm" sequence="4" groups="base.group_extended"/> + <menuitem id="base.menu_invoiced" name="Invoicing" parent="base.menu_base_partner" sequence="5"/> <record id="action_hr_tree_invoiced_all" model="ir.actions.act_window"> <field name="name">All Uninvoiced Entries</field> @@ -11,16 +10,7 @@ <field name="domain">[('invoice_id','=',False)]</field> <field name="search_view_id" ref="account.view_account_analytic_line_filter"/> </record> - <menuitem action="action_hr_tree_invoiced_all" id="menu_action_hr_tree_invoiced_all" parent="menu_invoicing" groups="analytic.group_analytic_accounting"/> - - <record id="action_account_analytic_managed_overpassed" model="ir.actions.act_window"> - <field name="name">Overpassed Accounts</field> - <field name="res_model">account.analytic.account</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form,graph</field> - <field name="domain">[('date','<=',time.strftime('%Y-%m-%d')),('state','=','open')]</field> - </record> - <menuitem action="action_account_analytic_managed_overpassed" id="menu_action_account_analytic_managed_overpassed" sequence="50" parent="menu_invoicing" groups="base.group_extended"/> + <menuitem action="action_hr_tree_invoiced_all" id="menu_action_hr_tree_invoiced_all" parent="base.menu_invoiced"/> <record id="view_account_analytic_account_overdue_search" model="ir.ui.view"> <field name="name">account.analytic.account.search</field> @@ -29,11 +19,10 @@ <field name="arch" type="xml"> <search string="Analytic Account"> <group col="8" colspan="4"> - <filter icon="terp-check" name="draft" string="Draft" domain="[('state','=','draft')]" help="Contracts not signed yet"/> - <filter icon="terp-camera_test" name="open" string="Open" domain="[('state','=','open')]" help="Contracts in progress"/> + <filter icon="terp-camera_test" name="open" string="Open" domain="[('state','in',('open','draft'))]" help="Contracts in progress"/> <filter icon="terp-gtk-media-pause" name="pending" string="Pending" domain="[('state','=','pending')]" help="Pending contracts to renew with your customer"/> <separator orientation="vertical"/> - <filter icon="terp-go-today" string="To Renew" domain="['|', '&', ('date', '!=', False), ('date', '<', time.strftime('%%Y-%%m-%%d')), ('is_overdue_quantity', '=', True)]" + <filter icon="terp-go-today" string="To Renew" domain="['|', '&', ('date', '!=', False), ('date', '<=', time.strftime('%%Y-%%m-%%d')), ('is_overdue_quantity', '=', True)]" name="renew" help="The contracts to be renewed because the deadline is passed or the working hours are higher than the allocated hours" /> <filter icon="terp-go-month" @@ -45,8 +34,7 @@ <field name="name" select="1"/> <field name="code" select="1"/> <field name="partner_id" select="1"> - <filter string="Has Partner" name="has_partner" domain="[('partner_id', '!=', False)]" icon="terp-partner" /> - <filter string="Has No Partner" name="has_no_partner" domain="[('partner_id', '=', False)]" icon="terp-partner" /> + <filter string="A contract in OpenERP is an analytic account having a partner set on it." name="has_partner" domain="[('partner_id', '!=', False)]" icon="terp-partner" /> </field> <field name="user_id"> <filter string="My Accounts" domain="[('user_id','=',uid)]" icon="terp-personal" name="my_accounts" /> @@ -71,7 +59,7 @@ <record id="action_account_analytic_overdue" model="ir.actions.act_window"> - <field name="name">Overdue Accounts</field> + <field name="name">Contracts to Renew</field> <field name="res_model">account.analytic.account</field> <field name="view_type">form</field> <field name="view_mode">tree,form,graph</field> @@ -80,7 +68,34 @@ <field name="search_view_id" ref="view_account_analytic_account_overdue_search"/> <field name="help">You will find here the contracts to be renewed because the deadline is passed or the working hours are higher than the allocated hours. OpenERP automatically sets these analytic accounts to the pending state, in order to raise a warning during the timesheets recording. Salesmen should review all pending accounts and reopen or close the according to the negotiation with the customer.</field> </record> - <menuitem action="action_account_analytic_overdue" id="menu_action_account_analytic_overdue" sequence="50" parent="sale.menu_invoiced" groups="base.group_extended"/> + <menuitem action="action_account_analytic_overdue" id="menu_action_account_analytic_overdue" sequence="50" parent="base.menu_invoiced"/> + + <record id="action_account_analytic_overdue" model="ir.actions.act_window"> + <field name="name">Contracts to Renew</field> + <field name="res_model">account.analytic.account</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form,graph</field> + <field name="context">{'search_default_has_partner':1, 'search_default_my_accounts':1, 'search_default_draft':1, 'search_default_pending':1, 'search_default_open':1, 'search_default_renew':1}</field> + <field name="domain">[('type','=','normal')]</field> + <field name="search_view_id" ref="view_account_analytic_account_overdue_search"/> + <field name="help">You will find here the contracts to be renewed because the deadline is passed or the working hours are higher than the allocated hours. OpenERP automatically sets these analytic accounts to the pending state, in order to raise a warning during the timesheets recording. Salesmen should review all pending accounts and reopen or close the according to the negotiation with the customer.</field> + </record> + <menuitem action="action_account_analytic_overdue" id="menu_action_account_analytic_overdue" sequence="50" parent="base.menu_invoiced"/> + + <record id="action_account_analytic_overdue_all" model="ir.actions.act_window"> + <field name="name">Contracts</field> + <field name="res_model">account.analytic.account</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form,graph</field> + <field name="context">{'search_default_has_partner':1, 'search_default_my_accounts':1, 'search_default_draft':1, 'search_default_pending':1, 'search_default_open':1}</field> + <field name="domain">[('type','=','normal')]</field> + <field name="search_view_id" ref="view_account_analytic_account_overdue_search"/> + </record> + <menuitem id="base.menu_sales" name="Sales" + parent="base.menu_base_partner" + sequence="1"/> + <menuitem action="action_account_analytic_overdue_all" id="menu_action_account_analytic_overdue_all" sequence="50" parent="base.menu_sales"/> + </data> </openerp> diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml index a82f3b1b5c9..c59717e8ad4 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml @@ -8,6 +8,27 @@ Remove information on Account data => because they move on analysis sheet create a page with invoicing informations --> + <record id="account_analytic_account_invoice_stat_form" model="ir.ui.view"> + <field name="name">account.analytic.account.invoice.stat.form.inherit</field> + <field name="model">account.analytic.account</field> + <field name="type">form</field> + <field name="inherit_id" ref="hr_timesheet_invoice.account_analytic_account_form_form"/> + <field eval="18" name="priority"/> + <field name="arch" type="xml"> + <group name="invoice_stats" position="inside"> + <field name="hours_qtt_non_invoiced"/> + <field name="ca_to_invoice"/> + <label string="" colspan="1"/> + <button + name="%(hr_timesheet_invoice.action_hr_timesheet_invoice_create_final)d" + string="Create Invoice" + type="action" + attrs="{'readonly':[('ca_to_invoice','=',0.0)]}" + icon="gtk-go-forward"/> + </group> + </field> + </record> + <record id="hr_timesheet.account_analytic_account_form_form" model="ir.ui.view"> <field name="name">account.analytic.account.invoice.form.inherit</field> <field name="model">account.analytic.account</field> @@ -16,7 +37,7 @@ <field eval="18" name="priority"/> <field name="arch" type="xml"> <notebook position="inside"> - <page string="Analysis summary"> + <page string="Invoice Analysis"> <separator colspan="4" string="Work done stats"/> <field name="total_cost"/> @@ -39,10 +60,6 @@ <field name="last_invoice_date"/> <field name="last_worked_invoiced_date"/> <field name="last_worked_date"/> - <separator colspan="4" string="To be invoiced"/> - - <field name="hours_qtt_non_invoiced"/> - <field name="ca_to_invoice"/> </page> <page string="Stats by month"> <field colspan="4" name="month_ids" nolabel="1"> diff --git a/addons/account_analytic_analysis/cron_account_analytic_account.py b/addons/account_analytic_analysis/cron_account_analytic_account.py index 581bbfe92e1..df022cbd6bd 100644 --- a/addons/account_analytic_analysis/cron_account_analytic_account.py +++ b/addons/account_analytic_analysis/cron_account_analytic_account.py @@ -77,3 +77,5 @@ class analytic_account(osv.osv): return True analytic_account() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_analytic_plans/wizard/account_crossovered_analytic_view.xml b/addons/account_analytic_plans/wizard/account_crossovered_analytic_view.xml index 81e5d33fbda..60c1bf67463 100644 --- a/addons/account_analytic_plans/wizard/account_crossovered_analytic_view.xml +++ b/addons/account_analytic_plans/wizard/account_crossovered_analytic_view.xml @@ -36,7 +36,6 @@ <record model="ir.values" id="account_crossovered_analytic_values"> <field name="model_id" ref="analytic.model_account_analytic_account" /> - <field name="object" eval="1" /> <field name="name">Crossovered Analytic</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_crossovered_analytic'))" /> @@ -45,4 +44,4 @@ </record> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/account_anglo_saxon/purchase.py b/addons/account_anglo_saxon/purchase.py index f9ab18ee818..30d196a84ec 100644 --- a/addons/account_anglo_saxon/purchase.py +++ b/addons/account_anglo_saxon/purchase.py @@ -26,15 +26,17 @@ class purchase_order(osv.osv): _inherit = "purchase.order" _description = "Purchase Order" - def inv_line_create(self, cr, uid, a, ol): - line = super(purchase_order, self).inv_line_create(cr, uid, a, ol) - if ol.product_id and not ol.product_id.type == 'service': - oa = ol.product_id.property_stock_account_input and ol.product_id.property_stock_account_input.id - if not oa: - oa = ol.product_id.categ_id.property_stock_account_input_categ and ol.product_id.categ_id.property_stock_account_input_categ.id - if oa: - fpos = ol.order_id.fiscal_position or False - a = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, oa) - line[2].update({'account_id': a}) + def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None): + line = super(purchase_order, self)._prepare_inv_line(cr, uid, account_id, order_line, context=context) + if order_line.product_id and not order_line.product_id.type == 'service': + acc_id = order_line.product_id.property_stock_account_input and order_line.product_id.property_stock_account_input.id + if not acc_id: + acc_id = order_line.product_id.categ_id.property_stock_account_input_categ and order_line.product_id.categ_id.property_stock_account_input_categ.id + if acc_id: + fpos = order_line.order_id.fiscal_position or False + new_account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id) + line.update({'account_id': new_account_id}) return line purchase_order() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_asset/report/account_asset_report_view.xml b/addons/account_asset/report/account_asset_report_view.xml index b7127e3f8f8..1e794eceead 100644 --- a/addons/account_asset/report/account_asset_report_view.xml +++ b/addons/account_asset/report/account_asset_report_view.xml @@ -47,11 +47,11 @@ <filter string="Year" icon="terp-go-year" name="year" domain="[('purchase_date','<=', time.strftime('%%Y-%%m-%%d')),('purchase_date','>=',time.strftime('%%Y-01-01'))]" help="Assets purchased in current year"/> - <separator orientation="vertical"/> - <filter string="This Month" icon="terp-go-month" name="this_month" + <separator orientation="vertical"/> + <filter string="Month" icon="terp-go-month" name="this_month" domain="[('purchase_date','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('purchase_date','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]" help="Assets purchased in current month"/> - <filter icon="terp-go-month" string="Previous Month" separator="1" + <filter icon="terp-go-month" string="Month-1" separator="1" domain="[('purchase_date','<=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('purchase_date','>=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]" help="Assets purchased in last month"/> <separator orientation="vertical"/> diff --git a/addons/account_budget/wizard/account_budget_analytic_view.xml b/addons/account_budget/wizard/account_budget_analytic_view.xml index 95f3fe4a6bb..4081026b911 100644 --- a/addons/account_budget/wizard/account_budget_analytic_view.xml +++ b/addons/account_budget/wizard/account_budget_analytic_view.xml @@ -32,7 +32,6 @@ <record model="ir.values" id="account_budget_analytic_values"> <field name="model_id" ref="analytic.model_account_analytic_account" /> - <field name="object" eval="1" /> <field name="name">Print Budgets</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_budget_analytic'))" /> diff --git a/addons/account_budget/wizard/account_budget_crossovered_report_view.xml b/addons/account_budget/wizard/account_budget_crossovered_report_view.xml index feaf208a351..35cf353ccde 100644 --- a/addons/account_budget/wizard/account_budget_crossovered_report_view.xml +++ b/addons/account_budget/wizard/account_budget_crossovered_report_view.xml @@ -31,7 +31,6 @@ </record> <record model="ir.values" id="account_budget_crossvered_report_values"> <field name="model_id" ref="account_budget.model_crossovered_budget" /> - <field name="object" eval="1" /> <field name="name">Print Budgets</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_budget_crossvered_report'))" /> diff --git a/addons/account_budget/wizard/account_budget_crossovered_summary_report_view.xml b/addons/account_budget/wizard/account_budget_crossovered_summary_report_view.xml index 8ddcc16b01c..70f5eef38f7 100644 --- a/addons/account_budget/wizard/account_budget_crossovered_summary_report_view.xml +++ b/addons/account_budget/wizard/account_budget_crossovered_summary_report_view.xml @@ -32,7 +32,6 @@ <record model="ir.values" id="account_budget_crossvered_summary_report_values"> <field name="model_id" ref="account_budget.model_crossovered_budget" /> - <field name="object" eval="1" /> <field name="name">Print Summary</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_budget_crossvered_summary_report'))" /> diff --git a/addons/account_budget/wizard/account_budget_report_view.xml b/addons/account_budget/wizard/account_budget_report_view.xml index 3821bfb74b2..bfa61240b3b 100644 --- a/addons/account_budget/wizard/account_budget_report_view.xml +++ b/addons/account_budget/wizard/account_budget_report_view.xml @@ -32,7 +32,6 @@ <record model="ir.values" id="account_budget_report_values"> <field name="model_id" ref="account_budget.model_account_budget_post" /> - <field name="object" eval="1" /> <field name="name">Budgets</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_budget_report'))" /> diff --git a/addons/account_cancel/i18n/bn.po b/addons/account_cancel/i18n/bn.po new file mode 100644 index 00000000000..3ba41e3969f --- /dev/null +++ b/addons/account_cancel/i18n/bn.po @@ -0,0 +1,36 @@ +# Bengali 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-21 12:37+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Bengali <bn@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-22 05:00+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_cancel +#: model:ir.module.module,description:account_cancel.module_meta_information +msgid "" +"\n" +" Module adds 'Allow cancelling entries' field on form view of account " +"journal. If set to true it allows user to cancel entries & invoices.\n" +" " +msgstr "" +"\n" +" মডিউলটি 'Allow cancelling entries' ফিল্ড যুক্ত করবে যা দিয়ে জাবেদা " +"অন্তর্ভুক্তি বাতিল করা যাবে।\n" +" " + +#. module: account_cancel +#: model:ir.module.module,shortdesc:account_cancel.module_meta_information +msgid "Account Cancel" +msgstr "হিসাব বাতিল" diff --git a/addons/account_cancel/i18n/oc.po b/addons/account_cancel/i18n/oc.po new file mode 100644 index 00000000000..b1f4beeb05a --- /dev/null +++ b/addons/account_cancel/i18n/oc.po @@ -0,0 +1,37 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-20 09:15+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: account_cancel +#: model:ir.module.module,description:account_cancel.module_meta_information +msgid "" +"\n" +" Module adds 'Allow cancelling entries' field on form view of account " +"journal. If set to true it allows user to cancel entries & invoices.\n" +" " +msgstr "" +"\n" +" Lo modul apond lo camp 'Permetre l'anullacion de las entradas' dins la " +"vista formulari del jornal. S'es egal a Verai, aquò permet a l'utilizaire " +"d'anullar l'entrada e la factura.\n" +" " + +#. module: account_cancel +#: model:ir.module.module,shortdesc:account_cancel.module_meta_information +msgid "Account Cancel" +msgstr "Anullacion comptabla" diff --git a/addons/account_followup/account_followup.py b/addons/account_followup/account_followup.py index 8bc364ad306..a81535ad70c 100644 --- a/addons/account_followup/account_followup.py +++ b/addons/account_followup/account_followup.py @@ -28,7 +28,7 @@ class followup(osv.osv): 'name': fields.char('Name', size=64, required=True), 'description': fields.text('Description'), 'followup_line': fields.one2many('account_followup.followup.line', 'followup_id', 'Follow-Up'), - 'company_id': fields.many2one('res.company', 'Company'), + 'company_id': fields.many2one('res.company', 'Company', required=True), } _defaults = { 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'account_followup.followup', context=c), diff --git a/addons/account_followup/i18n/fr.po b/addons/account_followup/i18n/fr.po index 8fd9e42dc5c..06fb9e56e6b 100644 --- a/addons/account_followup/i18n/fr.po +++ b/addons/account_followup/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:14+0000\n" -"PO-Revision-Date: 2011-11-11 15:22+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2011-11-25 14:47+0000\n" +"Last-Translator: Numérigraphe <Unknown>\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-11-12 04:52+0000\n" -"X-Generator: Launchpad (build 14277)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:49+0000\n" +"X-Generator: Launchpad (build 14381)\n" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:295 @@ -89,6 +89,11 @@ msgid "" "\n" "%s" msgstr "" +"\n" +"\n" +"Courriel envoyé vers les Partenaires suivants :\n" +"\n" +"%s" #. module: account_followup #: view:account_followup.followup:0 @@ -538,6 +543,9 @@ msgid "" "\n" "%s" msgstr "" +"Tous les courriels ont été envoyés correctement vers les Partenaires :\n" +"\n" +"%s" #. module: account_followup #: constraint:res.company:0 @@ -728,6 +736,9 @@ msgid "" "\n" "%s" msgstr "" +"Courriel non envoyé vers les Partenaires suivants (courriel indisponible) !\n" +"\n" +"%s" #. module: account_followup #: view:account.followup.print:0 diff --git a/addons/account_followup/i18n/sr@latin.po b/addons/account_followup/i18n/sr@latin.po index 92024896307..a02336e9bc9 100644 --- a/addons/account_followup/i18n/sr@latin.po +++ b/addons/account_followup/i18n/sr@latin.po @@ -8,25 +8,25 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2011-11-11 15:21+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2011-11-22 19:07+0000\n" +"Last-Translator: Milan Milosevic <Unknown>\n" "Language-Team: Serbian latin <sr@latin@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-12 04:52+0000\n" -"X-Generator: Launchpad (build 14277)\n" +"X-Launchpad-Export-Date: 2011-11-23 05:20+0000\n" +"X-Generator: Launchpad (build 14336)\n" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:295 #, python-format msgid "Followup Summary" -msgstr "Sumarno Pracenje" +msgstr "Sumarno praćenje" #. module: account_followup #: view:account_followup.followup:0 msgid "Search Followup" -msgstr "Pretrazi Pracenja" +msgstr "Pretraži praćenja" #. module: account_followup #: model:ir.module.module,description:account_followup.module_meta_information @@ -52,11 +52,31 @@ msgid "" "Sent\n" "\n" msgstr "" +"\n" +" Moduli za automatizovana pisma za neplaćenbe fakture, sa podsećanjem na " +"više nivoa.\n" +"\n" +" Možete definisati višestruke nivoe podsećanja kroz meni:\n" +" Accounting/Configuration/Miscellaneous/Follow-Ups\n" +"\n" +" Jednom kad budu definisani, možete štampati podsećanja svakodnevno\n" +" prostim klikom na meni:\n" +" Accounting/Periodical Processing/Billing/Send followups\n" +"\n" +" Generisaće se PDF datoteka sa svim pismima shodno\n" +" različitim nivoima podsećanja. Možete definisati različite načine\n" +" za različita preduzeća. Možete takođe poslati el.poštu stranci.\n" +"\n" +" Zapazite da ako želite da izmenite nivo praćenja za datog " +"partnera/stavku naloga, možete to uraditi iz menija:\n" +" Accounting/Reporting/Generic Reporting/Partner Accounts/Follow-ups " +"Sent\n" +"\n" #. module: account_followup #: view:account_followup.stat:0 msgid "Group By..." -msgstr "Grupirano po" +msgstr "Grupiši po..." #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:290 @@ -68,12 +88,17 @@ msgid "" "\n" "%s" msgstr "" +"\n" +"\n" +"El.pošta uspešno poslata sledećim partnerim. !\n" +"\n" +"%s" #. module: account_followup #: view:account_followup.followup:0 #: field:account_followup.followup,followup_line:0 msgid "Follow-Up" -msgstr "Следи" +msgstr "Sledi" #. module: account_followup #: field:account_followup.followup,company_id:0 @@ -86,7 +111,7 @@ msgstr "Preduzeće" #. module: account_followup #: report:account_followup.followup.print:0 msgid "Invoice Date" -msgstr "Datum računa" +msgstr "Datum fakture" #. module: account_followup #: field:account.followup.print.all,email_subject:0 @@ -108,27 +133,27 @@ msgstr "Legenda" #. module: account_followup #: view:account.followup.print.all:0 msgid "Ok" -msgstr "U redu" +msgstr "OK" #. module: account_followup #: view:account.followup.print.all:0 msgid "Select Partners to Remind" -msgstr "" +msgstr "Izaberite partnere koje biste hteli podsetiti" #. module: account_followup #: constraint:account.move.line:0 msgid "You can not create move line on closed account." -msgstr "" +msgstr "Ne možete da napravite poteznu liniju na zatvorenim računima." #. module: account_followup #: field:account.followup.print,date:0 msgid "Follow-up Sending Date" -msgstr "Datum Slanja Pracenja" +msgstr "Datum slanja praćenja" #. module: account_followup #: sql_constraint:account.move.line:0 msgid "Wrong credit or debit value in accounting entry !" -msgstr "" +msgstr "Pogrešna vrednost kredita ili debita u ulazu računa !" #. module: account_followup #: selection:account_followup.followup.line,start:0 @@ -139,12 +164,12 @@ msgstr "Neto dana" #: model:ir.actions.act_window,name:account_followup.action_account_followup_definition_form #: model:ir.ui.menu,name:account_followup.account_followup_menu msgid "Follow-Ups" -msgstr "Pracenja" +msgstr "Praćenja" #. module: account_followup #: view:account_followup.stat.by.partner:0 msgid "Balance > 0" -msgstr "" +msgstr "Balans > 0" #. module: account_followup #: view:account.move.line:0 @@ -154,18 +179,18 @@ msgstr "Ukupno duguje" #. module: account_followup #: view:account.followup.print.all:0 msgid "%(heading)s: Move line header" -msgstr "%(heading): Zaglavlje reda prijenosa" +msgstr "%(heading): Zaglavlje reda prenosa" #. module: account_followup #: view:res.company:0 #: field:res.company,follow_up_msg:0 msgid "Follow-up Message" -msgstr "Poruka Pracenja" +msgstr "Poruka praćenja" #. module: account_followup #: field:account.followup.print,followup_id:0 msgid "Follow-up" -msgstr "Pracenje" +msgstr "Praćenje" #. module: account_followup #: report:account_followup.followup.print:0 @@ -198,17 +223,17 @@ msgstr "" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_followup msgid "Account Follow Up" -msgstr "Nalog Pracenja" +msgstr "Nalog praćenja" #. module: account_followup #: selection:account_followup.followup.line,start:0 msgid "End of Month" -msgstr "Kraj Meseca" +msgstr "Kraj meseca" #. module: account_followup #: view:account_followup.stat:0 msgid "Not Litigation" -msgstr "Nije Sporno" +msgstr "Nije sporno" #. module: account_followup #: view:account.followup.print.all:0 @@ -227,22 +252,26 @@ msgid "" "You can send them the default message for unpaid invoices or manually enter " "a message should you need to remind them of a specific information." msgstr "" +"Ova funkcija omogućava Vam slanje podsetnika partnerima sa fakturama na " +"čekanju. Možete im poslati podrazumevanu poruku za neplaćene fakture ili " +"ručno uneti poruku, u slučaju da Vam treba da ih podsetite na neku " +"specifičnu informaciju." #. module: account_followup #: report:account_followup.followup.print:0 msgid "Ref" -msgstr "Referenca" +msgstr "Ref" #. module: account_followup #: help:account_followup.followup.line,sequence:0 msgid "Gives the sequence order when displaying a list of follow-up lines." -msgstr "Daje redosled sekvenci pri prikazivanju linija pracenja" +msgstr "Daje redosled sekvenci pri prikazivanju linija praćenja" #. module: account_followup #: view:account.followup.print.all:0 #: field:account.followup.print.all,email_body:0 msgid "Email body" -msgstr "Sadrzaj Email-a" +msgstr "Sadržaj E-mail-a" #. module: account_followup #: field:account.move.line,followup_line_id:0 @@ -279,44 +308,46 @@ msgid "" "Best Regards,\n" msgstr "" "\n" -"Postovani %(partner_name)\n" -"Razocarani smo sto vam se moramo obracati ovako, saljuci vam opomenu, ali " -"vas nalog je u ozbiljnom prekoracenju.\n" +"Poštovani %(partner_name)\n" +"Razočarani smo što je Vaš nalog u ozbiljnom prekoracenju, uprkos poslatom " +"podsetniku.\n" "\n" -"Vrlo je vazno da ispunite vase obaveze ka nama, inace ce mo biti prisiljeni " -"da obustavimo vas nalog, sto u stvari znaci da necemo vise biti\n" -"u mogucnosti da vase preduzece nadalje snabdevamo ( robom / servisiranjem).\n" -"Molimo vas da preduzmete mere kako bi regulisali vasa dugovanja u sledecih 8 " -"dana.\n" +" Vrlo je važno da ispunite svoje obaveze ka nama, inače ćemo biti prisiljeni " +"da obustavimo Vaš nalog, što u stvari znači da nećemo više biti\n" +" u mogućnosti da Vaše preduzeće nadalje snabdevamo ( robom / " +"servisiranjem).\n" +" Molimo vas da preduzmete mere kako biste regulisali svoja dugovanja u " +"sledećih 8 dana.\n" "\n" -"Ukoliko postoji problem, vezan za fakturu, sa kojim nismo upoznati, ne " -"ustrucavajte se da kontaktirate nase racunovodstvo na broj (+32) 20 555 666 " -"kako bi smo razmotrili problem sto je hitnije moguce.\n" +" Ukoliko postoji problem, vezan za fakturu, sa kojim nismo upoznati, ne " +"ustručavajte se da kontaktirate naše računovodstvo na broj (+32) 20 555 666 " +"kako bismo razmotrili problem što je hitnije moguće.\n" "\n" -"Detalji vase fakture su prikazani ispod.\n" +" Detalji Vaše fakture su prikazani ispod.\n" "\n" -"Uz svo postovanje.\n" +" Uz svo poštovanje.\n" #. module: account_followup #: field:account.followup.print.all,partner_lang:0 msgid "Send Email in Partner Language" -msgstr "Posalji Email na jeziku Partnera" +msgstr "Pošalji E-mail na jeziku partnera" #. module: account_followup #: constraint:account.move.line:0 msgid "" "You can not create move line on receivable/payable account without partner" msgstr "" +"Ne možete napraviti poteznu liniju na primaćem/platežnom računu bez partnera" #. module: account_followup #: view:account.followup.print.all:0 msgid "Partner Selection" -msgstr "Selekcija Partnera" +msgstr "Izbor partnera" #. module: account_followup #: field:account_followup.followup.line,description:0 msgid "Printed Message" -msgstr "Ispisana Poruka" +msgstr "Ištampana poruka" #. module: account_followup #: view:account.followup.print:0 @@ -330,7 +361,7 @@ msgstr "Pošalji praćenja" #. module: account_followup #: view:account_followup.stat.by.partner:0 msgid "Partner to Remind" -msgstr "" +msgstr "Partner za podsećanje" #. module: account_followup #: field:account_followup.followup.line,followup_id:0 @@ -355,17 +386,17 @@ msgid "" "Best Regards,\n" msgstr "" "\n" -"postovani %(partner_name)\n" +"Poštovani %(partner_name)\n" "\n" -"Nacinjen je izuzetak ukoliko je ovo nasa greska, ali , cini se da je sledeci " -"iznos ostao neplacen. Molimo vas da preduzmete odgovarajuce mere kako bi se " -"ovo resilo u sledecih 8 dana.\n" +"Načinjen je izuzetak ukoliko je ovo naša greška, ali , čini se da je sledeći " +"iznos ostao neplaćen. Molimo Vas da preduzmete odgovarajuće mere kako bi se " +"ovo rešilo u sledećih 8 dana.\n" "\n" -"Ukoliko ste izvrsili uplatu u medjuvremenu, pre ovog Emaila, molimo " -"smatrajte ga nebitnim. Ne ustrucavajte se da kontaktirate nase racunovodstvo " +" Ukoliko ste izvršili uplatu u međuvremenu, pre ove el.pošte, molimo " +"smatrajte ga nebitnim. Ne ustručavajte se da kontaktirate naše računovodstvo " "na broj (+32) 555 666.\n" "\n" -"Svo Postovanje.\n" +" Svo poštovanje.\n" #. module: account_followup #: model:account_followup.followup.line,description:account_followup.demo_followup_line3 @@ -405,7 +436,7 @@ msgstr "" #. module: account_followup #: view:account.followup.print.all:0 msgid "Send Mails" -msgstr "Slanje Emailova" +msgstr "Pošalji el.poštu" #. module: account_followup #: report:account_followup.followup.print:0 @@ -415,25 +446,24 @@ msgstr "Valuta" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_stat_by_partner msgid "Followup Statistics by Partner" -msgstr "" +msgstr "Statistike praćenja po partneru" #. module: account_followup #: model:ir.module.module,shortdesc:account_followup.module_meta_information msgid "Accounting follow-ups management" -msgstr "Menadzment naloga Praćenja" +msgstr "Uređivanje naloga praćenja" #. module: account_followup #: field:account_followup.stat,blocked:0 msgid "Blocked" -msgstr "Blokiran" +msgstr "Blokirano" #. module: account_followup #: help:account.followup.print,date:0 msgid "" "This field allow you to select a forecast date to plan your follow-ups" msgstr "" -"Ovo polje vam omogucava da selektujete udaljeni datum za planiranje vaseg " -"pracenja" +"Ovo polje Vam omogućava izbor udaljenog datuma za planiranje Vaših praćenja" #. module: account_followup #: report:account_followup.followup.print:0 @@ -444,17 +474,17 @@ msgstr "Dospeće" #: code:addons/account_followup/wizard/account_followup_print.py:56 #, python-format msgid "Select Partners" -msgstr "Selektuj Partnere" +msgstr "Izaberi partnere" #. module: account_followup #: view:account.followup.print.all:0 msgid "Email Settings" -msgstr "Email Postavke" +msgstr "Postavke el.pošte" #. module: account_followup #: view:account.followup.print.all:0 msgid "Print Follow Ups" -msgstr "Stampaj Pracenja" +msgstr "Odštampaj praćenja" #. module: account_followup #: field:account.move.line,followup_date:0 @@ -464,17 +494,17 @@ msgstr "Poslednje praćenje" #. module: account_followup #: report:account_followup.followup.print:0 msgid "Sub-Total:" -msgstr "Subtotal" +msgstr "Pod-total" #. module: account_followup #: report:account_followup.followup.print:0 msgid "Balance:" -msgstr "Saldo" +msgstr "Balans:" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_stat msgid "Followup Statistics" -msgstr "Statistika Pracenja" +msgstr "Statistika praćenja" #. module: account_followup #: report:account_followup.followup.print:0 @@ -484,22 +514,22 @@ msgstr "Plaćeno" #. module: account_followup #: view:account_followup.followup.line:0 msgid "%(user_signature)s: User Name" -msgstr "%(user_signature): Korisnicko Ime" +msgstr "%(user_signature): Korisničko Ime" #. module: account_followup #: model:ir.model,name:account_followup.model_account_move_line msgid "Journal Items" -msgstr "Sadrzaj Dnevnika" +msgstr "Stavke dnevnika" #. module: account_followup #: constraint:account.move.line:0 msgid "Company must be same for its related account and period." -msgstr "" +msgstr "Preduzeće mora biti isto za sve vezane račune i periode." #. module: account_followup #: field:account.followup.print.all,email_conf:0 msgid "Send email confirmation" -msgstr "Pošalji Email potvrdu" +msgstr "Pošalji E-mail potvrdu" #. module: account_followup #: code:addons/account_followup/wizard/account_followup_print.py:287 @@ -509,26 +539,29 @@ msgid "" "\n" "%s" msgstr "" +"Sva el-pošta uspešno poslata partnerima:.\n" +"\n" +" %s" #. module: account_followup #: constraint:res.company:0 msgid "Error! You can not create recursive companies." -msgstr "" +msgstr "Greška! Ne možete da napravite rekurzivna preduzeća." #. module: account_followup #: view:account.followup.print.all:0 msgid "%(company_name)s: User's Company name" -msgstr "%(company_name)s: Ime preduzeca Korisnika" +msgstr "%(company_name)s: Ime preduzeća korisnika" #. module: account_followup #: model:ir.model,name:account_followup.model_res_company msgid "Companies" -msgstr "Kompanije" +msgstr "Preduzeća" #. module: account_followup #: view:account_followup.followup:0 msgid "Followup Lines" -msgstr "Linije Pracenja" +msgstr "Linije praćenja" #. module: account_followup #: field:account_followup.stat,credit:0 @@ -538,7 +571,7 @@ msgstr "Kredit" #. module: account_followup #: report:account_followup.followup.print:0 msgid "Maturity Date" -msgstr "Datum Dospeća" +msgstr "Datum dospeća" #. module: account_followup #: view:account_followup.followup.line:0 @@ -548,30 +581,30 @@ msgstr "%(partner_name): Partnerovo Ime" #. module: account_followup #: view:account_followup.stat:0 msgid "Follow-Up lines" -msgstr "Redovi Praćenja" +msgstr "Linije praćenja" #. module: account_followup #: view:account.followup.print.all:0 msgid "%(company_currency)s: User's Company Currency" -msgstr "%(company_currency)s: Valuta Preduzeca Korisnika" +msgstr "%(company_currency)s: Valuta preduzeća korisnika" #. module: account_followup #: view:account_followup.stat:0 #: field:account_followup.stat,balance:0 #: field:account_followup.stat.by.partner,balance:0 msgid "Balance" -msgstr "Saldo" +msgstr "Balans" #. module: account_followup #: field:account_followup.followup.line,start:0 msgid "Type of Term" -msgstr "Tip Uslova" +msgstr "Tip uslova" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_print #: model:ir.model,name:account_followup.model_account_followup_print_all msgid "Print Followup & Send Mail to Customers" -msgstr "Stampaj Pracenje & Posalji Emailove Strankama" +msgstr "Ištampaj praćenje & pošalji E-mailove strankama" #. module: account_followup #: field:account_followup.stat,date_move_last:0 @@ -582,12 +615,12 @@ msgstr "Poslednji potez" #. module: account_followup #: model:ir.actions.report.xml,name:account_followup.account_followup_followup_report msgid "Followup Report" -msgstr "Izvestaj Pracenja" +msgstr "Izveštaj praćenja" #. module: account_followup #: field:account_followup.stat,period_id:0 msgid "Period" -msgstr "Razdoblje" +msgstr "Period" #. module: account_followup #: view:account.followup.print:0 @@ -598,7 +631,7 @@ msgstr "Otkaži" #. module: account_followup #: view:account_followup.followup.line:0 msgid "Follow-Up Lines" -msgstr "Redovi Praćenja" +msgstr "Linije praćenja" #. module: account_followup #: view:account_followup.stat:0 @@ -608,12 +641,12 @@ msgstr "Sporno" #. module: account_followup #: field:account_followup.stat.by.partner,max_followup_id:0 msgid "Max Follow Up Level" -msgstr "" +msgstr "Maksimalan nivo praćenja" #. module: account_followup #: model:ir.actions.act_window,name:account_followup.act_account_partner_account_move_payable_all msgid "Payable Items" -msgstr "Stavke Placanja" +msgstr "Plative stavke" #. module: account_followup #: view:account.followup.print.all:0 @@ -629,7 +662,7 @@ msgstr "%(datum)i: Trenutni Datum" #. module: account_followup #: view:account_followup.stat:0 msgid "Followup Level" -msgstr "Nivo Pracenja" +msgstr "Nivo praćenja" #. module: account_followup #: view:account_followup.followup:0 @@ -641,12 +674,12 @@ msgstr "Opis" #. module: account_followup #: view:account_followup.stat:0 msgid "This Fiscal year" -msgstr "Fiskalna Godina" +msgstr "Ova fiskalna godina" #. module: account_followup #: view:account.move.line:0 msgid "Partner entries" -msgstr "Stavke Partnera" +msgstr "Stavke partnera" #. module: account_followup #: help:account.followup.print.all,partner_lang:0 @@ -654,26 +687,26 @@ msgid "" "Do not change message text, if you want to send email in partner language, " "or configure from company" msgstr "" -"Ne menjajte ovaj text ukoliko zelite da posaljete Email na jeziku Partnera, " -"ili ga konfigurisete po Preduzecu." +"Ne menjajte ovaj tekst, ukoliko želite da posaljete el-poštu na jeziku " +"partnera, ili ga konfigurišete po preduzecu." #. module: account_followup #: model:ir.actions.act_window,name:account_followup.act_account_partner_account_move_all msgid "Receivable Items" -msgstr "Prijemne Stavke" +msgstr "Prijemljive stavke" #. module: account_followup #: view:account_followup.stat:0 #: model:ir.actions.act_window,name:account_followup.action_followup_stat #: model:ir.ui.menu,name:account_followup.menu_action_followup_stat_follow msgid "Follow-ups Sent" -msgstr "Pracenja Poslata" +msgstr "Praćenja poslata" #. module: account_followup #: field:account_followup.followup,name:0 #: field:account_followup.followup.line,name:0 msgid "Name" -msgstr "Ime" +msgstr "Naziv" #. module: account_followup #: field:account_followup.stat,date_move:0 @@ -699,6 +732,9 @@ msgid "" "\n" "%s" msgstr "" +"El.pošta nije poslata sledećim partnerima, el.pošta nije dostupna !\n" +"\n" +" %s" #. module: account_followup #: view:account.followup.print:0 @@ -713,13 +749,13 @@ msgstr "Dana kašnjenja" #. module: account_followup #: report:account_followup.followup.print:0 msgid "Document : Customer account statement" -msgstr "Dokument:Korisnicka stavka naloga" +msgstr "Dokument: Izjava korisničkog naloga" #. module: account_followup #: view:account.followup.print.all:0 #: field:account.followup.print.all,summary:0 msgid "Summary" -msgstr "Sumarno" +msgstr "Sažetak" #. module: account_followup #: view:account.move.line:0 @@ -729,7 +765,7 @@ msgstr "Ukupno potražuje" #. module: account_followup #: view:account.followup.print.all:0 msgid "%(line)s: Ledger Posting lines" -msgstr "%(line): Ledger Posting lines" +msgstr "%(linija)e: poslate iz glavnine" #. module: account_followup #: field:account_followup.followup.line,sequence:0 @@ -739,7 +775,7 @@ msgstr "Sekvenca" #. module: account_followup #: view:account_followup.followup.line:0 msgid "%(company_name)s: User's Company Name" -msgstr "%(company_name): Strankino Ime Preduzeca" +msgstr "%(company_name): Naziv preduzeća korisnika" #. module: account_followup #: report:account_followup.followup.print:0 @@ -754,17 +790,17 @@ msgstr "%(partner_name)s: Partnerovo Ime" #. module: account_followup #: view:account_followup.stat:0 msgid "Latest Followup Date" -msgstr "Datum poslednjeg Pracenja" +msgstr "Datum poslednjeg praćenja" #. module: account_followup #: model:ir.model,name:account_followup.model_account_followup_followup_line msgid "Follow-Up Criteria" -msgstr "Kriterijum Pracenja" +msgstr "Kriterijum praćenja" #. module: account_followup #: constraint:account.move.line:0 msgid "You can not create move line on view account." -msgstr "" +msgstr "Ne možete napraviti poteznu liniju na računu po viđenju" #, python-format #~ msgid "Follwoup Summary" diff --git a/addons/account_followup/report/account_followup_print.py b/addons/account_followup/report/account_followup_print.py index 1d471d00ec2..f2cf476e674 100644 --- a/addons/account_followup/report/account_followup_print.py +++ b/addons/account_followup/report/account_followup_print.py @@ -35,45 +35,44 @@ class report_rappel(report_sxw.rml_parse): 'get_text': self._get_text }) - def _ids_to_objects(self, partner_ids): + def _ids_to_objects(self, ids): pool = pooler.get_pool(self.cr.dbname) - all_partners = [] - for partner in pool.get('res.partner').browse(self.cr, self.uid, partner_ids): - if partner not in all_partners: - all_partners.append(partner) - return all_partners + all_lines = [] + for line in pool.get('account_followup.stat.by.partner').browse(self.cr, self.uid, ids): + if line not in all_lines: + all_lines.append(line) + return all_lines - def _adr_get(self, partner, type): + def _adr_get(self, stat_line, type): res_partner = pooler.get_pool(self.cr.dbname).get('res.partner') res_partner_address = pooler.get_pool(self.cr.dbname).get('res.partner.address') - adr = res_partner.address_get(self.cr, self.uid, [partner.id], [type])[type] + adr = res_partner.address_get(self.cr, self.uid, [stat_line.partner_id.id], [type])[type] return adr and res_partner_address.read(self.cr, self.uid, [adr]) or [{}] - def _lines_get(self, partner): + def _lines_get(self, stat_by_partner_line): pool = pooler.get_pool(self.cr.dbname) moveline_obj = pool.get('account.move.line') company_obj = pool.get('res.company') obj_currency = pool.get('res.currency') - #FIXME: search on company accounting entries only movelines = moveline_obj.search(self.cr, self.uid, - [('partner_id', '=', partner.id), + [('partner_id', '=', stat_by_partner_line.partner_id.id), ('account_id.type', '=', 'receivable'), - ('reconcile_id', '=', False), ('state', '<>', 'draft')]) + ('reconcile_id', '=', False), ('state', '<>', 'draft'),('company_id','=', stat_by_partner_line.company_id.id)]) movelines = moveline_obj.browse(self.cr, self.uid, movelines) base_currency = movelines[0].company_id.currency_id final_res = [] line_cur = {base_currency.id: {'line': []}} for line in movelines: - if line.currency_id and (not line.currency_id.id in line_cur): - line_cur[line.currency_id.id] = {'line': []} - currency = line.currency_id or line.company_id.currency_id + if line.account_id.currency_id and (not line.account_id.currency_id.id in line_cur): + line_cur[line.account_id.currency_id.id] = {'line': []} + currency = line.account_id.currency_id or line.company_id.currency_id line_data = { 'name': line.move_id.name, 'ref': line.ref, 'date':line.date, 'date_maturity': line.date_maturity, - 'balance': line.currency_id and line.amount_currency or (line.debit - line.credit), + 'balance': currency.id <> line.company_id.currency_id.id and line.amount_currency or (line.debit - line.credit), 'blocked': line.blocked, 'currency_id': currency.symbol or currency.name, } @@ -85,7 +84,7 @@ class report_rappel(report_sxw.rml_parse): return final_res - def _get_text(self, partner, followup_id, context=None): + def _get_text(self, stat_line, followup_id, context=None): if context is None: context = {} fp_obj = pooler.get_pool(self.cr.dbname).get('account_followup.followup') @@ -96,10 +95,10 @@ class report_rappel(report_sxw.rml_parse): li_delay.sort(reverse=True) text = "" a = {} - partner_line = pooler.get_pool(self.cr.dbname).get('account.move.line').search(self.cr, self.uid, [('partner_id','=',partner.id),('reconcile_id','=',False)]) + partner_line_ids = pooler.get_pool(self.cr.dbname).get('account.move.line').search(self.cr, self.uid, [('partner_id','=',stat_line.partner_id.id),('reconcile_id','=',False),('company_id','=',stat_line.company_id.id)]) partner_delay = [] - context.update({'lang': partner.lang}) - for i in pooler.get_pool(self.cr.dbname).get('account.move.line').browse(self.cr, self.uid, partner_line, context): + context.update({'lang': stat_line.partner_id.lang}) + for i in pooler.get_pool(self.cr.dbname).get('account.move.line').browse(self.cr, self.uid, partner_line_ids, context): for delay in li_delay: if i.followup_line_id and str(i.followup_line_id.delay)==str(delay): text = i.followup_line_id.description @@ -108,16 +107,16 @@ class report_rappel(report_sxw.rml_parse): text = partner_delay and a[max(partner_delay)] or '' if text: text = text % { - 'partner_name': partner.name, + 'partner_name': stat_line.partner_id.name, 'date': time.strftime('%Y-%m-%d'), - 'company_name': fp_obj.browse(self.cr, self.uid, followup_id).company_id.name, + 'company_name': stat_line.company_id.name, 'user_signature': pooler.get_pool(self.cr.dbname).get('res.users').browse(self.cr, self.uid, self.uid, context).signature or '', } return text report_sxw.report_sxw('report.account_followup.followup.print', - 'res.partner', 'addons/account_followup/report/account_followup_print.rml', + 'account_followup.stat.by.partner', 'addons/account_followup/report/account_followup_print.rml', parser=report_rappel) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_followup/report/account_followup_print.rml b/addons/account_followup/report/account_followup_print.rml index 812f0aa0e50..92eda92e9ee 100644 --- a/addons/account_followup/report/account_followup_print.rml +++ b/addons/account_followup/report/account_followup_print.rml @@ -124,7 +124,7 @@ </stylesheet> <story> <para style="terp_default_8">[[ repeatIn(ids_to_objects(data['form']['partner_ids']),'o') ]] </para> - <para style="terp_default_8">[[ setLang(o.lang) ]]</para> + <para style="terp_default_8">[[ setLang(o.partner_id.lang) ]]</para> <blockTable colWidths="298.0,234.0" style="Tableau2"> <tr> @@ -132,7 +132,7 @@ <para style="terp_default_9">[[ repeatIn(adr_get(o,'invoice'),'a' )]]</para> </td> <td> - <para style="terp_default_9">[[ o.name or '' ]]</para> + <para style="terp_default_9">[[ o.partner_id.name or '' ]]</para> <para style="terp_default_9">[[ a['street'] or '']]</para> <para style="terp_default_9">[[ a['street2'] or removeParentNode('para') ]]</para> <para style="terp_default_9">[[ a['zip'] or '' ]] [[ a['city'] or '' ]]</para> @@ -141,7 +141,7 @@ <para style="terp_default_9"> <font color="white"> </font> </para> - <para style="terp_default_9">VAT: [[ o.vat or removeParentNode('para') ]]</para> + <para style="terp_default_9">VAT: [[ o.partner_id.vat or removeParentNode('para') ]]</para> </td> </tr> </blockTable> @@ -150,7 +150,7 @@ </para> <para style="terp_default_9">Document : Customer account statement</para> <para style="terp_default_9">Date : [[ formatLang(data['form']['date'],date=True) ]]</para> - <para style="terp_default_9">Customer Ref : [[ o.ref or '' ]]</para> + <para style="terp_default_9">Customer Ref : [[ o.partner_id.ref or '' ]]</para> <para style="terp_default_8"> <font color="white"> </font> </para> diff --git a/addons/account_followup/report/account_followup_report.py b/addons/account_followup/report/account_followup_report.py index 25fc37691f4..c2a842cfd4c 100644 --- a/addons/account_followup/report/account_followup_report.py +++ b/addons/account_followup/report/account_followup_report.py @@ -68,7 +68,7 @@ class account_followup_stat(osv.osv): cr.execute(""" create or replace view account_followup_stat as ( SELECT - l.partner_id as id, + l.id as id, l.partner_id AS partner_id, min(l.date) AS date_move, max(l.date) AS date_move_last, diff --git a/addons/account_followup/test/account_followup.yml b/addons/account_followup/test/account_followup.yml index b43ca32d200..2650a40a7ad 100644 --- a/addons/account_followup/test/account_followup.yml +++ b/addons/account_followup/test/account_followup.yml @@ -105,4 +105,5 @@ self.do_print(cr, uid, [ref("account_followup_print_all_0")], {"lang": 'en_US', "active_model": "ir.ui.menu", "active_ids": [ref("account_followup.account_followup_print_menu")], "tz": False, "date": time.strftime('%Y-%m-%d'), "followup_id": ref("account_followup_followup_testfollowups0"), "active_id": ref("account_followup.account_followup_print_menu"), + "company_id": ref('base.main_company'), }) diff --git a/addons/account_followup/wizard/account_followup_print.py b/addons/account_followup/wizard/account_followup_print.py index 3fe404134ae..ea1083f26ff 100644 --- a/addons/account_followup/wizard/account_followup_print.py +++ b/addons/account_followup/wizard/account_followup_print.py @@ -31,7 +31,7 @@ class account_followup_print(osv.osv_memory): _description = 'Print Followup & Send Mail to Customers' _columns = { 'date': fields.date('Follow-up Sending Date', required=True, help="This field allow you to select a forecast date to plan your follow-ups"), - 'followup_id': fields.many2one('account_followup.followup', 'Follow-up', required=True) + 'followup_id': fields.many2one('account_followup.followup', 'Follow-up', required=True), } def _get_followup(self, cr, uid, context=None): @@ -51,7 +51,7 @@ class account_followup_print(osv.osv_memory): data = self.browse(cr, uid, ids, context=context)[0] model_data_ids = mod_obj.search(cr, uid, [('model','=','ir.ui.view'),('name','=','view_account_followup_print_all')], context=context) resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id'] - context.update({'followup_id': data.followup_id.id, 'date':data.date}) + context.update({'followup_id': data.followup_id.id, 'date': data.date, 'company_id': data.followup_id.company_id.id}) return { 'name': _('Select Partners'), 'view_type': 'form', @@ -87,10 +87,13 @@ class account_followup_stat_by_partner(osv.osv): def init(self, cr): tools.drop_view_if_exists(cr, 'account_followup_stat_by_partner') + # Here we don't have other choice but to create a virtual ID based on the concatenation + # of the partner_id and the company_id. An assumption that the number of companies will + # not reach 10 000 records is made, what should be enough for a time. cr.execute(""" create or replace view account_followup_stat_by_partner as ( SELECT - l.partner_id AS id, + l.partner_id * 10000 + l.company_id as id, l.partner_id AS partner_id, min(l.date) AS date_move, max(l.date) AS date_move_last, @@ -148,6 +151,8 @@ class account_followup_print_all(osv.osv_memory): context = {} if ids: data = self.browse(cr, uid, ids, context=context)[0] + company_id = 'company_id' in context and context['company_id'] or data.company_id.id + cr.execute( "SELECT l.partner_id, l.followup_line_id,l.date_maturity, l.date, l.id "\ "FROM account_move_line AS l "\ @@ -159,7 +164,8 @@ class account_followup_print_all(osv.osv_memory): "AND (l.partner_id is NOT NULL) "\ "AND (a.active) "\ "AND (l.debit > 0) "\ - "ORDER BY l.date") + "AND (l.company_id = %s) "\ + "ORDER BY l.date", (company_id,)) move_lines = cr.fetchall() old = None fups = {} @@ -189,16 +195,16 @@ class account_followup_print_all(osv.osv_memory): continue if followup_line_id not in fups: continue + stat_line_id = partner_id * 10000 + company_id if date_maturity: if date_maturity <= fups[followup_line_id][0].strftime('%Y-%m-%d'): if partner_id not in partner_list: - partner_list.append(partner_id) + partner_list.append(stat_line_id) to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': partner_id} elif date and date <= fups[followup_line_id][0].strftime('%Y-%m-%d'): if partner_id not in partner_list: - partner_list.append(partner_id) - to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': partner_id} - + partner_list.append(stat_line_id) + to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': stat_line_id} return {'partner_ids': partner_list, 'to_update': to_update} def do_mail(self ,cr, uid, ids, context=None): @@ -225,7 +231,7 @@ class account_followup_print_all(osv.osv_memory): partners.append(line.partner_id) dict_lines[line.partner_id.id] =line for partner in partners: - ids_lines = move_obj.search(cr,uid,[('partner_id','=',partner.id),('reconcile_id','=',False),('account_id.type','in',['receivable'])]) + ids_lines = move_obj.search(cr,uid,[('partner_id','=',partner.id),('reconcile_id','=',False),('account_id.type','in',['receivable']),('company_id','=',context.get('company_id', False))]) data_lines = move_obj.browse(cr, uid, ids_lines, context=context) followup_data = dict_lines[partner.id] dest = False diff --git a/addons/account_followup/wizard/account_followup_print_view.xml b/addons/account_followup/wizard/account_followup_print_view.xml index 9d74060b19a..ce178d9fa24 100644 --- a/addons/account_followup/wizard/account_followup_print_view.xml +++ b/addons/account_followup/wizard/account_followup_print_view.xml @@ -13,7 +13,6 @@ <group col="4" colspan="6"> <field name="followup_id"/> <field name="date"/> - <newline/> </group> <separator colspan="4"/> <group col="2" colspan="4"> @@ -81,7 +80,7 @@ <notebook> <page string="Partner Selection"> <separator string="Select Partners to Remind" colspan="4"/> - <field name="partner_ids" colspan="4" nolabel="1" context="{'search_default_balance_positive': 1}"/> + <field name="partner_ids" colspan="4" nolabel="1" context="{'search_default_balance_positive': 1}" domain="[('company_id','=',context.get('company_id',False))]"/> </page> <page string="Email Settings"> <field name="email_conf" colspan="4"/> @@ -137,7 +136,5 @@ <field name="view_mode">form</field> <field name="target">new</field> </record> - - </data> </openerp> diff --git a/addons/account_invoice_layout/i18n/pt.po b/addons/account_invoice_layout/i18n/pt.po index c458afe704a..480140f8fef 100644 --- a/addons/account_invoice_layout/i18n/pt.po +++ b/addons/account_invoice_layout/i18n/pt.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:14+0000\n" -"PO-Revision-Date: 2010-12-09 11:41+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" +"PO-Revision-Date: 2011-11-23 12:19+0000\n" +"Last-Translator: Paulino Ascenção <Unknown>\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-11-05 05:22+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-24 05:00+0000\n" +"X-Generator: Launchpad (build 14336)\n" #. module: account_invoice_layout #: selection:account.invoice.line,state:0 @@ -92,6 +92,20 @@ msgid "" "\n" " " msgstr "" +"\n" +" Este módulo disponibiliza algumas melhorias na apresentação das faturas\n" +"\n" +" Dá a possibilidade de\n" +" * pedir todas as linhas de uma fatura\n" +" * adicionar títulos, linhas de comentário, linhas de sub-total\n" +" * desenhar linhas horizontais e colocar quebras de página\n" +"\n" +" Além do mais, existe uma opção que permite imprimir todas as facturas " +"seleccionadas com uma mensagem especial em baixo. Esta capacidade pode ser " +"muito útil para imprimir facturas com desejos feliz ano novo, condições " +"pontuais especiais, etc...\n" +"\n" +" " #. module: account_invoice_layout #: report:account.invoice.layout:0 diff --git a/addons/account_invoice_layout/i18n/sr@latin.po b/addons/account_invoice_layout/i18n/sr@latin.po index 014ebe5fc60..bc921ebf179 100644 --- a/addons/account_invoice_layout/i18n/sr@latin.po +++ b/addons/account_invoice_layout/i18n/sr@latin.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-12-23 15:39+0000\n" -"Last-Translator: Olivier Dony (OpenERP) <Unknown>\n" +"PO-Revision-Date: 2011-11-24 20:33+0000\n" +"Last-Translator: Milan Milosevic <Unknown>\n" "Language-Team: Serbian latin <sr@latin@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:22+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-25 05:22+0000\n" +"X-Generator: Launchpad (build 14376)\n" #. module: account_invoice_layout #: selection:account.invoice.line,state:0 msgid "Sub Total" -msgstr "Subtotal" +msgstr "Podtotal" #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -32,7 +32,7 @@ msgstr "Napomena:" #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Cancelled Invoice" -msgstr "Otkazane Fakture" +msgstr "Otkazana faktura" #. module: account_invoice_layout #: selection:account.invoice.line,state:0 @@ -44,7 +44,7 @@ msgstr "Naslov" #: model:ir.actions.act_window,name:account_invoice_layout.action_account_invoice_special_msg #: model:ir.actions.report.xml,name:account_invoice_layout.account_invoices_layout_message msgid "Invoices with Layout and Message" -msgstr "Formatirana Faktura sa Porukom" +msgstr "Formatirana faktura sa porukom" #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -60,19 +60,19 @@ msgstr "Napomena" #. module: account_invoice_layout #: model:ir.model,name:account_invoice_layout.model_notify_message msgid "Notify By Messages" -msgstr "Napomena po porukama" +msgstr "Obaveštenje putem poruke" #. module: account_invoice_layout #: help:notify.message,msg:0 msgid "" "This notification will appear at the bottom of the Invoices when printed." -msgstr "Ova napomena ce se pojaviti na dnu fakture pri stampi" +msgstr "Ova napomena će se pojaviti na dnu faktura kad se odštampa" #. module: account_invoice_layout #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Unit Price" -msgstr "Jedinična cijena" +msgstr "Pojedinačna cena" #. module: account_invoice_layout #: model:ir.module.module,description:account_invoice_layout.module_meta_information @@ -93,6 +93,20 @@ msgid "" "\n" " " msgstr "" +"\n" +" Ovaj modul dodaje funkcije za poboljšanje prikaza faktura.\n" +"\n" +" Daje Vam mogućnost da\n" +" *poređate sve linije jedne fakture\n" +" *dodajete naslove, linije komentara, linije podtotala\n" +" *dodajete vodoravne linije i odvajate stranice\n" +"\n" +" Povrh toga, postoji opcija koja Vam omogućava štampu svih faktura sa " +"datom specijalnom porukom\n" +"na dnu. Ova funkcija je veoma korisna za štampu faktura sa čestitkama za " +"Novu godinu, specijalnim uslovima...\n" +"\n" +" " #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -115,7 +129,7 @@ msgstr "Predračun" #. module: account_invoice_layout #: field:account.invoice,abstract_line_ids:0 msgid "Invoice Lines" -msgstr "Stavke računa" +msgstr "Linije računa" #. module: account_invoice_layout #: view:account.invoice.line:0 @@ -125,7 +139,7 @@ msgstr "Sekv." #. module: account_invoice_layout #: model:ir.ui.menu,name:account_invoice_layout.menu_finan_config_notify_message msgid "Notification Message" -msgstr "Poruka Napomene" +msgstr "Poruka obaveštenja" #. module: account_invoice_layout #: selection:account.invoice.line,state:0 @@ -136,12 +150,12 @@ msgstr "Proizvod" #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Description" -msgstr "" +msgstr "Opis" #. module: account_invoice_layout #: help:account.invoice.line,sequence:0 msgid "Gives the sequence order when displaying a list of invoice lines." -msgstr "poredja sekvence pri prikazu liste faktura." +msgstr "Daje redosled sekvenci pri prikazu spiska linija fakture" #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -153,7 +167,7 @@ msgstr "Cena" #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Invoice Date" -msgstr "Datum Fakture" +msgstr "Datum fakture" #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -163,12 +177,12 @@ msgstr "Porezi:" #. module: account_invoice_layout #: field:account.invoice.line,functional_field:0 msgid "Source Account" -msgstr "Изворни налог" +msgstr "Izvorni nalog" #. module: account_invoice_layout #: model:ir.actions.act_window,name:account_invoice_layout.notify_mesage_tree_form msgid "Write Messages" -msgstr "Napisi Poruke" +msgstr "Napiši poruke" #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -179,18 +193,18 @@ msgstr "Osnova" #. module: account_invoice_layout #: selection:account.invoice.line,state:0 msgid "Page Break" -msgstr "Прелом стране" +msgstr "Kraj stranice" #. module: account_invoice_layout #: view:notify.message:0 #: field:notify.message,msg:0 msgid "Special Message" -msgstr "Specijalna Poruka" +msgstr "Specijalna poruka" #. module: account_invoice_layout #: help:account.invoice.special.msg,message:0 msgid "Message to Print at the bottom of report" -msgstr "Poruka koja se stampa pri dnu izvestaja" +msgstr "Poruka za štampu pri dnu izveštaja" #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -202,7 +216,7 @@ msgstr "Količina" #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Refund" -msgstr "Refundiraj" +msgstr "Refundiranje" #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -228,7 +242,7 @@ msgstr "Poruke" #. module: account_invoice_layout #: model:ir.actions.report.xml,name:account_invoice_layout.account_invoices_1 msgid "Invoices with Layout" -msgstr "Formatirana Faktura" +msgstr "Formatirane Fakture" #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -240,33 +254,33 @@ msgstr "Opis / Porezi" #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Amount" -msgstr "Iznos" +msgstr "Količina" #. module: account_invoice_layout #: model:notify.message,msg:account_invoice_layout.demo_message1 msgid "ERP & CRM Solutions..." -msgstr "" +msgstr "ERP & CRM Rešenja..." #. module: account_invoice_layout #: report:notify_account.invoice:0 msgid "Net Total :" -msgstr "" +msgstr "Ukupno neto :" #. module: account_invoice_layout #: report:notify_account.invoice:0 msgid "Total :" -msgstr "" +msgstr "Ukupno :" #. module: account_invoice_layout #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Draft Invoice" -msgstr "Neodobreni računi" +msgstr "Fakture u pripremi" #. module: account_invoice_layout #: field:account.invoice.line,sequence:0 msgid "Sequence Number" -msgstr "Broj Sekvence" +msgstr "Broj sekvence" #. module: account_invoice_layout #: model:ir.model,name:account_invoice_layout.model_account_invoice_special_msg @@ -277,7 +291,7 @@ msgstr "Specijalna poruka naloga fakture" #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Origin" -msgstr "" +msgstr "Poreklo" #. module: account_invoice_layout #: field:account.invoice.line,state:0 @@ -293,18 +307,18 @@ msgstr "Linija za odvajanje" #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Your Reference" -msgstr "" +msgstr "Vaš poziv na broj" #. module: account_invoice_layout #: model:ir.module.module,shortdesc:account_invoice_layout.module_meta_information msgid "Invoices Layout Improvement" -msgstr "Unapredjenje izgleda fakture" +msgstr "Unapređenje izgleda fakture" #. module: account_invoice_layout #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Supplier Invoice" -msgstr "Račun dobavljača" +msgstr "Faktura dobavljača" #. module: account_invoice_layout #: view:account.invoice.special.msg:0 @@ -320,7 +334,7 @@ msgstr "Porez" #. module: account_invoice_layout #: model:ir.model,name:account_invoice_layout.model_account_invoice_line msgid "Invoice Line" -msgstr "Redak računa" +msgstr "Red fakture" #. module: account_invoice_layout #: report:account.invoice.layout:0 @@ -330,14 +344,14 @@ msgstr "Neto Ukupno" #. module: account_invoice_layout #: view:notify.message:0 msgid "Write a notification or a wishful message." -msgstr "Napisi napomenu ili celu poruku" +msgstr "Napiši obaveštenje ili neku lepu želju" #. module: account_invoice_layout #: report:account.invoice.layout:0 #: model:ir.model,name:account_invoice_layout.model_account_invoice #: report:notify_account.invoice:0 msgid "Invoice" -msgstr "Račun" +msgstr "Faktura" #. module: account_invoice_layout #: view:account.invoice.special.msg:0 @@ -348,7 +362,7 @@ msgstr "Otkaži" #: report:account.invoice.layout:0 #: report:notify_account.invoice:0 msgid "Supplier Refund" -msgstr "Povrat Dobavljaču" +msgstr "Povraćaj dobavljača" #. module: account_invoice_layout #: field:account.invoice.special.msg,message:0 @@ -358,12 +372,12 @@ msgstr "Poruka" #. module: account_invoice_layout #: report:notify_account.invoice:0 msgid "Taxes :" -msgstr "" +msgstr "Porezi :" #. module: account_invoice_layout #: model:ir.ui.menu,name:account_invoice_layout.menu_notify_mesage_tree_form msgid "All Notification Messages" -msgstr "Sve Napomene" +msgstr "Sve poruke obaveštenja" #~ msgid "" #~ "The Object name must start with x_ and not contain any special character !" diff --git a/addons/account_invoice_layout/wizard/account_invoice_special_message.xml b/addons/account_invoice_layout/wizard/account_invoice_special_message.xml index d849595bfca..5bf1e480d1e 100644 --- a/addons/account_invoice_layout/wizard/account_invoice_special_message.xml +++ b/addons/account_invoice_layout/wizard/account_invoice_special_message.xml @@ -32,7 +32,6 @@ <record model="ir.values" id="account_invoice_special_msg_values"> <field name="model_id" ref="account.model_account_invoice" /> - <field name="object" eval="1" /> <field name="name">Account Invioce Special Message</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_invoice_special_msg'))" /> diff --git a/addons/account_payment/account_payment_view.xml b/addons/account_payment/account_payment_view.xml index 4881adc4ad1..3fc2d716e66 100644 --- a/addons/account_payment/account_payment_view.xml +++ b/addons/account_payment/account_payment_view.xml @@ -322,7 +322,5 @@ </field> </record> - <act_window domain="[('move_line_id.move_id.id', '=', move_id)]" id="act_account_invoice_2_payment_line" name="Payment Lines" res_model="payment.line" src_model="account.invoice"/> - </data> </openerp> diff --git a/addons/account_sequence/i18n/sr@latin.po b/addons/account_sequence/i18n/sr@latin.po new file mode 100644 index 00000000000..5bd9511ee9f --- /dev/null +++ b/addons/account_sequence/i18n/sr@latin.po @@ -0,0 +1,233 @@ +# Serbian Latin 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-24 21:01+0000\n" +"Last-Translator: Milan Milosevic <Unknown>\n" +"Language-Team: Serbian Latin <sr@latin@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-25 05:22+0000\n" +"X-Generator: Launchpad (build 14376)\n" + +#. module: account_sequence +#: view:account.sequence.installer:0 +#: model:ir.actions.act_window,name:account_sequence.action_account_seq_installer +msgid "Account Sequence Application Configuration" +msgstr "Podešavanje aplikacije nizova naloga" + +#. module: account_sequence +#: constraint:account.move:0 +msgid "" +"You cannot create entries on different periods/journals in the same move" +msgstr "" +"Ne možete napraviti ulaze za različite periode/dnevnike u jednom potezu" + +#. module: account_sequence +#: help:account.move,internal_sequence_number:0 +#: help:account.move.line,internal_sequence_number:0 +msgid "Internal Sequence Number" +msgstr "Broj unutrašnjeg niza" + +#. module: account_sequence +#: help:account.sequence.installer,number_next:0 +msgid "Next number of this sequence" +msgstr "Sledeći broj ovog niza" + +#. module: account_sequence +#: field:account.sequence.installer,number_next:0 +msgid "Next Number" +msgstr "Sledeći broj" + +#. module: account_sequence +#: field:account.sequence.installer,number_increment:0 +msgid "Increment Number" +msgstr "Inkrementalni broj" + +#. module: account_sequence +#: model:ir.module.module,description:account_sequence.module_meta_information +msgid "" +"\n" +" This module maintains internal sequence number for accounting entries.\n" +" " +msgstr "" +"\n" +" Ovaj modul održava unutrašnji niz brojeva za odgovarajuće naloge.\n" +" " + +#. module: account_sequence +#: model:ir.module.module,shortdesc:account_sequence.module_meta_information +msgid "Entries Sequence Numbering" +msgstr "Dodeljivanje brojeva nizovima ulaza" + +#. module: account_sequence +#: help:account.sequence.installer,number_increment:0 +msgid "The next number of the sequence will be incremented by this number" +msgstr "Sledeći broj ovog niza biće povećan ovim brojem" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "Configure Your Account Sequence Application" +msgstr "Podesi svoju aplikaciju za niz brojeva" + +#. module: account_sequence +#: field:account.sequence.installer,progress:0 +msgid "Configuration Progress" +msgstr "Napredak podešavanja" + +#. module: account_sequence +#: help:account.sequence.installer,suffix:0 +msgid "Suffix value of the record for the sequence" +msgstr "Sufiksalna vrednost zapisa za niz" + +#. module: account_sequence +#: field:account.sequence.installer,company_id:0 +msgid "Company" +msgstr "Preduzeće" + +#. module: account_sequence +#: help:account.journal,internal_sequence_id:0 +msgid "" +"This sequence will be used to maintain the internal number for the journal " +"entries related to this journal." +msgstr "" +"Ovaj niz će biti iskorišćen za održavanje unutrašnjeg broja za ulaze " +"dnevnika vezane za dnevnik." + +#. module: account_sequence +#: field:account.sequence.installer,padding:0 +msgid "Number padding" +msgstr "Ispunjavanje brojeva" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_move_line +msgid "Journal Items" +msgstr "Stavke dnevnika" + +#. module: account_sequence +#: field:account.move,internal_sequence_number:0 +#: field:account.move.line,internal_sequence_number:0 +msgid "Internal Number" +msgstr "Unutrašnji broj" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "Company must be same for its related account and period." +msgstr "Preduzeće mora biti isto za sve vezane račune i periode." + +#. module: account_sequence +#: help:account.sequence.installer,padding:0 +msgid "" +"OpenERP will automatically adds some '0' on the left of the 'Next Number' to " +"get the required padding size." +msgstr "" +"OpenERP će automatski dodati nekoliko '0' levo od 'Sledećeg broja' za " +"dobijanje tražene veličine ispunjavanja." + +#. module: account_sequence +#: field:account.sequence.installer,name:0 +msgid "Name" +msgstr "Naziv" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "You can not create move line on closed account." +msgstr "Ne možete da napravite poteznu liniju na zatvorenim računima." + +#. module: account_sequence +#: constraint:account.move:0 +msgid "" +"You cannot create more than one move per period on centralized journal" +msgstr "" +"Ne možete napraviti više od jednog pomeranja po periodu u centralizovanom " +"dnevniku" + +#. module: account_sequence +#: sql_constraint:account.move.line:0 +msgid "Wrong credit or debit value in accounting entry !" +msgstr "Pogrešna vrednost kredita ili debita u ulazu računa !" + +#. module: account_sequence +#: field:account.journal,internal_sequence_id:0 +msgid "Internal Sequence" +msgstr "Unutrašnji niz" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_sequence_installer +msgid "account.sequence.installer" +msgstr "account.sequence.installer" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "Configure" +msgstr "Podešavanje" + +#. module: account_sequence +#: help:account.sequence.installer,prefix:0 +msgid "Prefix value of the record for the sequence" +msgstr "Prefiksalna vrednost zapisa za niz" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_move +msgid "Account Entry" +msgstr "Ulaz naloga" + +#. module: account_sequence +#: field:account.sequence.installer,suffix:0 +msgid "Suffix" +msgstr "Sufiks" + +#. module: account_sequence +#: field:account.sequence.installer,config_logo:0 +msgid "Image" +msgstr "Slika" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "title" +msgstr "naslov" + +#. module: account_sequence +#: sql_constraint:account.journal:0 +msgid "The name of the journal must be unique per company !" +msgstr "Naziv dnevnika mora biti jedinstven po preduzeću" + +#. module: account_sequence +#: field:account.sequence.installer,prefix:0 +msgid "Prefix" +msgstr "Prefiks" + +#. module: account_sequence +#: sql_constraint:account.journal:0 +msgid "The code of the journal must be unique per company !" +msgstr "Kod dnevnika mora biti jedinstven po preduzeću !" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "" +"You can not create move line on receivable/payable account without partner" +msgstr "" +"Ne možete napraviti poteznu liniju na primaćem/platežnom računu bez partnera" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_journal +msgid "Journal" +msgstr "Dnevnik" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "You can enhance the Account Sequence Application by installing ." +msgstr "" +"Ne možete poboljšati Aplikaciju za nizanje naloga instaliranjem iste." + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "You can not create move line on view account." +msgstr "Ne možete napraviti poteznu liniju na računu po viđenju" diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 03b3a75144c..fd6dac9f90d 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -235,7 +235,7 @@ class account_voucher(osv.osv): ('pay_now','Pay Directly'), ('pay_later','Pay Later or Group Funds'), ],'Payment', select=True, readonly=True, states={'draft':[('readonly',False)]}), - 'tax_id':fields.many2one('account.tax', 'Tax', readonly=True, states={'draft':[('readonly',False)]}), + 'tax_id': fields.many2one('account.tax', 'Tax', readonly=True, states={'draft':[('readonly',False)]}, domain=[('price_include','=', False)], help="Only for tax excluded from price"), 'pre_line':fields.boolean('Previous Payments ?', required=False), 'date_due': fields.date('Due Date', readonly=True, select=True, states={'draft':[('readonly',False)]}), 'payment_option':fields.selection([ @@ -518,7 +518,7 @@ class account_voucher(osv.osv): elif currency_id == company_currency: #otherwise treatments is the same but with other field names if line.amount_residual == price: - #if the amount residual is equal the amount voucher, we assign it to that voucher + #if the amount residual is equal the amount voucher, we assign it to that voucher #line, whatever the other voucher lines move_line_found = line.id break @@ -696,8 +696,8 @@ class account_voucher(osv.osv): Select the context to use accordingly if it needs to be multicurrency or not. :param voucher_id: Id of the actual voucher - :return: The returned context will be the same as given in parameter if the voucher currency is the same - than the company currency, otherwise it's a copy of the parameter with an extra key 'date' containing + :return: The returned context will be the same as given in parameter if the voucher currency is the same + than the company currency, otherwise it's a copy of the parameter with an extra key 'date' containing the date of the voucher. :rtype: dict """ @@ -726,7 +726,7 @@ class account_voucher(osv.osv): voucher_brw = self.pool.get('account.voucher').browse(cr,uid,voucher_id,context) debit = credit = 0.0 # TODO: is there any other alternative then the voucher type ?? - # ANSWER: We can have payment and receipt "In Advance". + # ANSWER: We can have payment and receipt "In Advance". # TODO: Make this logic available. # -for sale, purchase we have but for the payment and receipt we do not have as based on the bank/cash journal we can not know its payment or receipt if voucher_brw.type in ('purchase', 'payment'): @@ -769,7 +769,7 @@ class account_voucher(osv.osv): elif voucher_brw.journal_id.sequence_id: name = seq_obj.next_by_id(cr, uid, voucher_brw.journal_id.sequence_id.id) else: - raise osv.except_osv(_('Error !'), + raise osv.except_osv(_('Error !'), _('Please define a sequence on the journal !')) if not voucher_brw.reference: ref = name.replace('/','') @@ -834,7 +834,7 @@ class account_voucher(osv.osv): def voucher_move_line_create(self, cr, uid, voucher_id, line_total, move_id, company_currency, current_currency, context=None): ''' Create one account move line, on the given account move, per voucher line where amount is not 0.0. - It returns Tuple with tot_line what is total of difference between debit and credit and + It returns Tuple with tot_line what is total of difference between debit and credit and a list of lists with ids to be reconciled with this format (total_deb_cred,list_of_lists). :param voucher_id: Voucher id what we are working with @@ -905,7 +905,7 @@ class account_voucher(osv.osv): voucher_line = move_line_obj.create(cr, uid, move_line) rec_ids = [voucher_line, line.move_line_id.id] - if amount_residual: + if amount_residual: # Change difference entry exch_lines = self._get_exchange_lines(cr, uid, line, move_id, amount_residual, company_currency, current_currency, context=context) new_id = move_line_obj.create(cr, uid, exch_lines[0],context) diff --git a/addons/account_voucher/test/account_voucher.yml b/addons/account_voucher/test/account_voucher.yml index ce34733dda7..33ae609e3f3 100644 --- a/addons/account_voucher/test/account_voucher.yml +++ b/addons/account_voucher/test/account_voucher.yml @@ -48,7 +48,7 @@ - Now I create a Vendor Voucher - - !record {model: account.voucher, id: account_voucher_voucheraxelor0}: + !record {model: account.voucher, id: account_voucher_voucheraxelor0, view: False}: account_id: account.cash amount: 1000.0 company_id: base.main_company diff --git a/addons/account_voucher/test/account_voucher_report.yml b/addons/account_voucher/test/account_voucher_report.yml index 39e9c2144a2..b41c33e4470 100644 --- a/addons/account_voucher/test/account_voucher_report.yml +++ b/addons/account_voucher/test/account_voucher_report.yml @@ -4,7 +4,6 @@ !record {model: account.voucher, id: account_voucher_voucheraxelor0}: account_id: account.cash company_id: base.main_company - currency_id: base.EUR journal_id: account.bank_journal name: Voucher Axelor narration: Basic PC diff --git a/addons/account_voucher/test/case1_usd_usd.yml b/addons/account_voucher/test/case1_usd_usd.yml index 6685e64f298..e19e7e3ee46 100644 --- a/addons/account_voucher/test/case1_usd_usd.yml +++ b/addons/account_voucher/test/case1_usd_usd.yml @@ -35,6 +35,16 @@ rate: 1.052632 - + I create a cash account with currency USD +- + !record {model: account.account, id: account_cash_usd_id}: + currency_id: base.USD + name: "cash account in usd" + code: "Xcash usd" + type: 'liquidity' + user_type: "account.account_type_cash_moves" + +- I create a bank journal with USD as currency - !record {model: account.journal, id: bank_journal_USD}: @@ -43,25 +53,13 @@ type: bank analytic_journal_id: account.sit sequence_id: account.sequence_bank_journal - default_debit_account_id: account.cash - default_credit_account_id: account.cash + default_debit_account_id: account_cash_usd_id + default_credit_account_id: account_cash_usd_id currency: base.USD company_id: base.main_company view_id: account.account_journal_bank_view - - I create new partner Mark Strauss. -- - !record {model: res.partner, id: res_partner_strauss0}: - address: - - city: paris - country_id: base.fr - name: Mark Strauss - street: 1 rue Rockfeller - type: invoice - zip: '75016' - name: Mr. Mark Strauss -- I create the first invoice on 1st January for 200 USD - !record {model: account.invoice, id: account_invoice_jan}: @@ -80,7 +78,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_strauss0 + partner_id: base.res_partner_seagate reference_type: none - I Validate invoice by clicking on Validate button @@ -115,7 +113,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_strauss0 + partner_id: base.res_partner_seagate reference_type: none - I Validate invoice by clicking on Validate button @@ -139,21 +137,21 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 240.00, 2, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_USD'), 240.00, 2, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 240.00, 'company_id': ref('base.main_company'), 'currency_id': ref('base.USD'), 'journal_id': ref('bank_journal_USD'), - 'partner_id': ref('res_partner_strauss0'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'receipt', 'date': time.strftime("%Y-%m-%d"), 'payment_option': 'with_writeoff', 'writeoff_acc_id': ref('account.a_expense'), 'comment': 'Write Off', - 'name': 'First payment', + 'name': 'First payment: Case 1 USD/USD', } vals.update(self.onchange_date(cr, uid, [], time.strftime('%Y-03-01'), ref('base.USD'), 240)['value']) if not res['value']['line_cr_ids']: @@ -171,7 +169,7 @@ I check that writeoff amount computed is 10.0 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 1 USD/USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (voucher_id.writeoff_amount == 10.0), "Writeoff amount is not 10.0" - @@ -179,14 +177,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 1 USD/USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that the move of my first voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 1 USD/USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -200,7 +198,7 @@ I check that my write-off is correct. 9 debit and 10 amount_currency - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 1 USD/USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -237,7 +235,7 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 45.00, 2, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_USD'), 45.00, 2, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 45.00, @@ -245,14 +243,14 @@ 'company_id': ref('base.main_company'), 'currency_id': ref('base.USD'), 'journal_id': ref('bank_journal_USD'), - 'partner_id': ref('res_partner_strauss0'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'receipt', 'date': time.strftime("%Y-%m-%d"), 'payment_option': 'with_writeoff', 'writeoff_acc_id': ref('account.a_expense'), 'comment': 'Write Off', - 'name': 'Second payment', + 'name': 'Second payment: Case 1', } vals.update(self.onchange_date(cr, uid, [], time.strftime('%Y-04-01'), ref('base.USD'), 45.0)['value']) if not res['value']['line_cr_ids']: @@ -270,7 +268,7 @@ I check that writeoff amount computed is 5.0 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 1'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (voucher_id.writeoff_amount == 5.0), "Writeoff amount is not 5.0" - @@ -278,14 +276,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 1'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that the move of my second voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 1'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -303,7 +301,7 @@ I check that my writeoff is correct. 4.75 debit and 5 amount_currency - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 1'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) diff --git a/addons/account_voucher/test/case2_suppl_usd_eur.yml b/addons/account_voucher/test/case2_suppl_usd_eur.yml index 424783d8a7b..23f11d28803 100644 --- a/addons/account_voucher/test/case2_suppl_usd_eur.yml +++ b/addons/account_voucher/test/case2_suppl_usd_eur.yml @@ -30,18 +30,6 @@ company_id: base.main_company view_id: account.account_journal_bank_view - - I create a new partner Robert Clements -- - !record {model: res.partner, id: res_partner_clements0}: - address: - - city: marseille - country_id: base.fr - name: Robert - street: 1 rue Rockfeller - type: invoice - zip: '13016' - name: Mr.Robert Clements -- I create the first invoice on 1st January for 200 USD - !record {model: account.invoice, id: account_first_invoice_jan_suppl}: @@ -61,7 +49,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_clements0 + partner_id: base.res_partner_seagate reference_type: none check_total : 200 - @@ -98,7 +86,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_clements0 + partner_id: base.res_partner_seagate reference_type: none check_total : 100.0 - @@ -122,21 +110,21 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_clements0"), ref('bank_journal_EUR'), 240.0, 2, ttype='payment', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_EUR'), 240.0, 2, ttype='payment', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 240.0, 'company_id': ref('base.main_company'), 'currency_id': ref('base.EUR'), 'journal_id': ref('bank_journal_EUR'), - 'partner_id': ref('res_partner_clements0'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'payment', 'date': time.strftime("%Y-03-01"), 'payment_option': 'with_writeoff', 'writeoff_acc_id': ref('account.a_expense'), 'comment': 'Write Off', - 'name': 'First payment', + 'name': 'First payment: Case 2 SUPPL USD/EUR', } if not res['value']['line_dr_ids']: res['value']['line_dr_ids'] = [{'type': 'dr', 'account_id': ref('account.a_pay'),}] @@ -153,14 +141,14 @@ I check that writeoff amount computed is -15.0 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (voucher_id.writeoff_amount == -15.0), "Writeoff amount is not -15.0" - I check that currency rate difference is 34.0 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (voucher_id.currency_rate_difference == 34.0), "Currency rate difference is not 34.0" - @@ -168,14 +156,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that the move of my voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -191,7 +179,7 @@ I check that my writeoff is correct. -15 in credit with no amount_currency - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -229,21 +217,21 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_clements0"), ref('bank_journal_EUR'), 45.0, 2, ttype='payment', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_EUR'), 45.0, 2, ttype='payment', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 45.0, 'company_id': ref('base.main_company'), 'currency_id': ref('base.USD'), 'journal_id': ref('bank_journal_USD'), - 'partner_id': ref('res_partner_clements0'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'payment', 'date': time.strftime("%Y-%m-%d"), 'payment_option': 'with_writeoff', 'writeoff_acc_id': ref('account.a_expense'), 'comment': 'Write Off', - 'name': 'Second payment', + 'name': 'Second payment: Case 2 SUPPL USD/EUR', } vals.update(self.onchange_date(cr, uid, [], time.strftime('%Y-04-01'), ref('base.USD'), 45.0)['value']) if not res['value']['line_dr_ids']: @@ -261,14 +249,14 @@ I check that writeoff amount computed is -5.0 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (voucher_id.writeoff_amount == 5.0), "Writeoff amount is not 5.0" - I check that currency rate difference is 8.50 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (voucher_id.currency_rate_difference == 8.50), "Currency rate difference is not 8.50" - @@ -276,14 +264,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that my voucher state is posted - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert voucher_id.state == 'posted', "Voucher state is not posted" - @@ -296,7 +284,7 @@ I check that my writeoff is correct. 4.75 in credit and 5 in amount_currency - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml index 58cf92ec460..67287591778 100644 --- a/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml +++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml @@ -49,7 +49,6 @@ sequence_id: account.sequence_bank_journal default_debit_account_id: account.cash default_credit_account_id: account.cash - currency: base.EUR company_id: base.main_company view_id: account.account_journal_bank_view - @@ -61,24 +60,12 @@ type: bank analytic_journal_id: account.sit sequence_id: account.sequence_bank_journal - default_debit_account_id: account.cash - default_credit_account_id: account.cash + default_debit_account_id: account_cash_usd_id + default_credit_account_id: account_cash_usd_id currency: base.USD company_id: base.main_company view_id: account.account_journal_bank_view - - I create a new partner Michael Geller -- - !record {model: res.partner, id: res_partner_michael0}: - address: - - city: paris - country_id: base.fr - name: Michael - street: 1 rue Rockfeller - type: invoice - zip: '75016' - name: Mr.Michael Geller -- I create the first invoice on 1st January for 200 USD - !record {model: account.invoice, id: account_first_invoice_jan}: @@ -97,7 +84,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_michael0 + partner_id: base.res_partner_seagate reference_type: none - I Validate invoice by clicking on Validate button @@ -132,7 +119,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_michael0 + partner_id: base.res_partner_seagate reference_type: none - I Validate invoice by clicking on Validate button @@ -155,21 +142,21 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michael0"), ref('bank_journal_EUR'), 240.0, False, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_EUR'), 240.0, False, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 200.0, 'company_id': ref('base.main_company'), 'currency_id': False, 'journal_id': ref('bank_journal_EUR'), - 'partner_id': ref('res_partner_michael0'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'receipt', 'date': time.strftime("%Y-03-01"), 'payment_option': 'with_writeoff', 'writeoff_acc_id': ref('account.a_expense'), 'comment': 'Write Off', - 'name': 'First payment', + 'name': 'First payment: Case 2 USD/EUR DR EUR', } if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] @@ -187,14 +174,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that the move of my voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -206,7 +193,7 @@ I check that the debtor account has 2 new lines with 0 in amount_currency columns and their credit columns are 130 and 70 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -237,14 +224,14 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michael0"), ref('bank_journal_USD'), 80.0, 2, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_USD'), 80.0, 2, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 80.0, 'company_id': ref('base.main_company'), 'currency_id': ref('base.USD'), 'journal_id': ref('bank_journal_USD'), - 'partner_id': ref('res_partner_michael0'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'receipt', 'date': time.strftime("%Y-%m-%d"), @@ -252,7 +239,7 @@ 'writeoff_acc_id': ref('account.a_expense'), 'exchange_acc_id': ref('account.o_expense'), 'comment': 'Write Off', - 'name': 'Second payment', + 'name': 'Second payment: Case 2 SUPPL USD/EUR DR EUR', } vals.update(self.onchange_date(cr, uid, [], time.strftime('%Y-04-01'), ref('base.USD'), 80.0)['value']) if not res['value']['line_cr_ids']: @@ -270,7 +257,7 @@ I check that writeoff amount computed is 2.22 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (round(voucher_id.writeoff_amount, 2) == 2.22), "Writeoff amount is not 2.22$" - @@ -278,14 +265,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that my voucher state is posted - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert voucher_id.state == 'posted', "Voucher state is not posted" - @@ -298,7 +285,7 @@ I check that my writeoff is correct. 2.11 in credit and 2.22 in amount_currency - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml index 355098dc7d6..ec4d653c8ab 100644 --- a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml +++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml @@ -49,7 +49,6 @@ sequence_id: account.sequence_bank_journal default_debit_account_id: account.cash default_credit_account_id: account.cash - currency: base.EUR company_id: base.main_company view_id: account.account_journal_bank_view - @@ -61,24 +60,12 @@ type: bank analytic_journal_id: account.sit sequence_id: account.sequence_bank_journal - default_debit_account_id: account.cash - default_credit_account_id: account.cash + default_debit_account_id: account_cash_usd_id + default_credit_account_id: account_cash_usd_id currency: base.USD company_id: base.main_company view_id: account.account_journal_bank_view - - I create a new partner Michal Gallette -- - !record {model: res.partner, id: res_partner_michal1}: - address: - - city: paris - country_id: base.fr - name: Michal - street: 1 rue Rockfeller - type: invoice - zip: '75016' - name: Mr.Michal Gallette -- I create the first invoice on 1st January for 200 USD - !record {model: account.invoice, id: account_first_invoice_jan_michal}: @@ -97,7 +84,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_michal1 + partner_id: base.res_partner_seagate reference_type: none - I Validate invoice by clicking on Validate button @@ -132,7 +119,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_michal1 + partner_id: base.res_partner_seagate reference_type: none - I Validate invoice by clicking on Validate button @@ -155,21 +142,21 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michal1"), ref('bank_journal_EUR'), 200.0, False, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_EUR'), 200.0, False, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 200.0, 'company_id': ref('base.main_company'), 'currency_id': ref('base.EUR'), 'journal_id': ref('bank_journal_EUR'), - 'partner_id': ref('res_partner_michal1'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'receipt', 'date': time.strftime("%Y-03-01"), 'payment_option': 'with_writeoff', 'writeoff_acc_id': ref('account.a_expense'), 'comment': 'Write Off', - 'name': 'First payment', + 'name': 'First payment: Case 2 USD/EUR DR USD', } if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] @@ -187,14 +174,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michal1'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that the move of my voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michal1'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -206,7 +193,7 @@ I check that the debtor account has 2 new lines with 144.44 and 77.78 in amount_currency columns and their credit columns are 130 and 70 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michal1'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -240,14 +227,14 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michal1"), ref('bank_journal_USD'), 80.0, ref('base.USD'), ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_USD'), 80.0, ref('base.USD'), ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 80.0, 'company_id': ref('base.main_company'), 'currency_id': ref('base.USD'), 'journal_id': ref('bank_journal_USD'), - 'partner_id': ref('res_partner_michal1'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'receipt', 'date': time.strftime("%Y-%m-%d"), @@ -255,7 +242,7 @@ 'writeoff_acc_id': ref('account.a_expense'), 'exchange_acc_id': ref('account.o_expense'), 'comment': 'Write Off', - 'name': 'Second payment', + 'name': 'Second payment: Case 2 SUPPL USD/EUR DR USD', } vals.update(self.onchange_date(cr, uid, [], time.strftime('%Y-04-01'), ref('base.USD'), 80.0)['value']) if not res['value']['line_cr_ids']: @@ -273,7 +260,7 @@ I check that writeoff amount computed is 2.22 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michal1'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (round(voucher_id.writeoff_amount, 2) == 2.22), "Writeoff amount is not 2.22$" - @@ -281,14 +268,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michal1'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that my voucher state is posted - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michal1'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert voucher_id.state == 'posted', "Voucher state is not posted" - @@ -301,7 +288,7 @@ I check that my writeoff is correct. 2.11 in credit and 2.22 in amount_currency - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michal1'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml index 9ed498442fb..09034fadf51 100644 --- a/addons/account_voucher/test/case3_eur_eur.yml +++ b/addons/account_voucher/test/case3_eur_eur.yml @@ -26,22 +26,9 @@ sequence_id: account.sequence_bank_journal default_debit_account_id: account.cash default_credit_account_id: account.cash - currency: base.EUR company_id: base.main_company view_id: account.account_journal_bank_view - - I create a new partner Peter Lawson. -- - !record {model: res.partner, id: res_partner_peter0}: - address: - - city: paris - country_id: base.fr - name: Peter - street: 1 rue Rockfeller - type: invoice - zip: '75016' - name: Mr.Peter Lawson -- I create the first invoice on 1st January for 150 EUR - !record {model: account.invoice, id: account_first_invoice_jan_eur}: @@ -60,7 +47,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_peter0 + partner_id: base.res_partner_seagate reference_type: none - I Validate invoice by clicking on Validate button @@ -95,7 +82,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_peter0 + partner_id: base.res_partner_seagate reference_type: none - I Validate invoice by clicking on Validate button @@ -118,21 +105,21 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.00, False, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_EUR'), 120.00, False, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 120.00, 'company_id': ref('base.main_company'), 'currency_id': ref('base.EUR'), 'journal_id': ref('bank_journal_EUR'), - 'partner_id': ref('res_partner_peter0'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'receipt', 'date': time.strftime("%Y-03-01"), 'payment_option': 'with_writeoff', 'writeoff_acc_id': ref('account.a_expense'), 'comment': 'Write Off', - 'name': 'First payment', + 'name': 'First payment: Case 3', } if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] @@ -149,7 +136,7 @@ I check that writeoff amount computed is 0.00 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 3'),('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (voucher_id.writeoff_amount == 0.00), "Writeoff amount is not 0.00" - @@ -157,14 +144,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 3'),('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that the move of my first voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 3'),('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -176,7 +163,7 @@ I check that the debtor account has 2 new lines with 0.00 and 0.00 in amount_currency columns and their credit are 20 and 100 respectively - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 3'),('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -210,21 +197,21 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.00, False, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_EUR'), 120.00, False, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 120.00, 'company_id': ref('base.main_company'), 'currency_id': ref('base.EUR'), 'journal_id': ref('bank_journal_EUR'), - 'partner_id': ref('res_partner_peter0'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'receipt', 'date': time.strftime("%Y-04-01"), 'payment_option': 'with_writeoff', 'writeoff_acc_id': ref('account.a_expense'), 'comment': 'Write Off', - 'name': 'Second payment', + 'name': 'Second payment: Case 3', } if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] @@ -241,7 +228,7 @@ I check that writeoff amount computed is 0.00 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 3'),('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (voucher_id.writeoff_amount == 0.00), "Writeoff amount is not 0" - @@ -249,14 +236,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 3'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that the move of my second voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 3'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -268,7 +255,7 @@ I check that the debtor account has 2 new lines with 0.00 and 0.00 in amount_currency columns and their credit are 70 and 50 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) + voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 3'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) diff --git a/addons/account_voucher/test/case4_cad_chf.yml b/addons/account_voucher/test/case4_cad_chf.yml index 557e20dec1a..b3abbb25e01 100644 --- a/addons/account_voucher/test/case4_cad_chf.yml +++ b/addons/account_voucher/test/case4_cad_chf.yml @@ -30,6 +30,16 @@ name: !eval "'%s-03-01' %(datetime.now().year)" rate: 1.25000 - + I create a cash account with currency CHF +- + !record {model: account.account, id: account_cash_chf_id}: + currency_id: base.CHF + name: "cash account in chf" + code: "Xcash chf" + type: 'liquidity' + user_type: "account.account_type_cash_moves" + +- I create a bank journal with CHF as currency - !record {model: account.journal, id: bank_journal_CHF}: @@ -38,24 +48,12 @@ type: bank analytic_journal_id: account.sit sequence_id: account.sequence_bank_journal - default_debit_account_id: account.cash - default_credit_account_id: account.cash + default_debit_account_id: account_cash_chf_id + default_credit_account_id: account_cash_chf_id currency: base.CHF company_id: base.main_company view_id: account.account_journal_bank_view - - I create a new partner John Armani. -- - !record {model: res.partner, id: res_partner_john0}: - address: - - city: paris - country_id: base.fr - name: John - street: 1 rue Rockfeller - type: invoice - zip: '75016' - name: Mr.John Armani -- I create the first invoice on 1st January for 200 CAD - !record {model: account.invoice, id: account_first_invoice_jan_cad}: @@ -74,7 +72,7 @@ product_id: product.product_product_pc1 uos_id: product.product_uom_unit journal_id: account.sales_journal - partner_id: res_partner_john0 + partner_id: base.res_partner_seagate reference_type: none - I Validate invoice by clicking on Validate button @@ -97,14 +95,14 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_john0"), ref('bank_journal_CHF'), 200.00, ref('base.CHF'), ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("base.res_partner_seagate"), ref('bank_journal_CHF'), 200.00, ref('base.CHF'), ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), 'amount': 200.00, 'company_id': ref('base.main_company'), 'currency_id': ref('base.CHF'), 'journal_id': ref('bank_journal_CHF'), - 'partner_id': ref('res_partner_john0'), + 'partner_id': ref('base.res_partner_seagate'), 'period_id': ref('account.period_3'), 'type': 'receipt', 'date': time.strftime("%Y-%m-%d"), @@ -112,7 +110,7 @@ 'writeoff_acc_id': ref('account.a_expense'), 'exchange_acc_id': ref('account.o_expense'), 'comment': 'Write Off', - 'name': 'First payment', + 'name': 'First payment: Case 4', } vals.update(self.onchange_date(cr, uid, [], time.strftime('%Y-03-01'), ref('base.CHF'), 200.0)['value']) if not res['value']['line_cr_ids']: @@ -128,7 +126,7 @@ I check that writeoff amount computed is 13.26 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 4'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) assert (round(voucher_id.writeoff_amount,2) == 13.26), "Writeoff amount is not 13.26 CHF" - @@ -136,14 +134,14 @@ - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 4'), ('partner_id', '=', ref('base.res_partner_seagate'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that the move of my voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 4'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -160,7 +158,7 @@ I check that my writeoff is correct. 11.05 credit and 13.26 amount_currency - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))]) + voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 4'), ('partner_id', '=', ref('base.res_partner_seagate'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index 2c9b2edee6e..46720b2732c 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -93,7 +93,7 @@ <notebook colspan="4"> <page string="Payment Information"> <field name="line_dr_ids" attrs="{'invisible': [('type', '=', 'receipt')]}" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, context)"> - <tree string="Open Supplier Journal Entries" editable="bottom"> + <tree string="Open Supplier Journal Entries" editable="bottom" colors="gray:amount==0"> <field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}" on_change="onchange_move_line_id(move_line_id)" domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]" @@ -107,7 +107,7 @@ </tree> </field> <field name="line_cr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('type', '=', 'payment')]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, context)"> - <tree string="Open Customer Journal Entries" editable="bottom"> + <tree string="Open Customer Journal Entries" editable="bottom" colors="gray:amount==0"> <field name="move_line_id"/> <field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/> <field name="date_original"/> @@ -160,7 +160,7 @@ <notebook colspan="4"> <page string="Payment Information"> <field name="line_dr_ids" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140"> - <tree string="Supplier Invoices and Outstanding transactions" editable="bottom"> + <tree string="Supplier Invoices and Outstanding transactions" editable="bottom" colors="gray:amount==0"> <field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}" on_change="onchange_move_line_id(move_line_id)" domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]" @@ -175,7 +175,7 @@ </tree> </field> <field name="line_cr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('pre_line','=',False)]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}"> - <tree string="Credits" editable="bottom"> + <tree string="Credits" editable="bottom" colors="gray:amount==0"> <field name="move_line_id"/> <field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/> <field name="date_original"/> @@ -309,7 +309,7 @@ <notebook colspan="4"> <page string="Payment Information"> <field name="line_cr_ids" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, context)"> - <tree string="Invoices and outstanding transactions" editable="bottom"> + <tree string="Invoices and outstanding transactions" editable="bottom" colors="gray:amount==0"> <field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}" on_change="onchange_move_line_id(move_line_id)" domain="[('account_id.type','in',('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]" @@ -324,7 +324,7 @@ </tree> </field> <field name="line_dr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('pre_line','=',False)]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, context)"> - <tree string="Credits" editable="bottom"> + <tree string="Credits" editable="bottom" colors="gray:amount==0"> <field name="move_line_id"/> <field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/> <field name="date_original"/> diff --git a/addons/account_voucher/voucher_sales_purchase_view.xml b/addons/account_voucher/voucher_sales_purchase_view.xml index db21b4ce86a..dfd535f29bc 100644 --- a/addons/account_voucher/voucher_sales_purchase_view.xml +++ b/addons/account_voucher/voucher_sales_purchase_view.xml @@ -168,7 +168,7 @@ <field name="res_model">account.voucher</field> <field name="view_type">form</field> <field name="domain">[('journal_id.type','in',['sale','sale_refund']), ('type','=','sale')]</field> - <field name="context">{'type':'sale'}</field> + <field name="context">{'default_type': 'sale', 'type': 'sale'}</field> <field name="view_id" eval="False"/> <field name="search_view_id" ref="view_voucher_filter_sale"/> <field name="target">current</field> @@ -198,7 +198,7 @@ <field name="res_model">account.voucher</field> <field name="view_type">form</field> <field name="domain">[('journal_id.type', 'in', ['bank', 'cash']), ('type','=','payment'), ('partner_id','=',partner_id)]</field> - <field name="context">{'type':'payment', 'partner_id': partner_id, 'default_reference':reference}</field> + <field name="context">{'default_type':'payment', 'type':'payment', 'default_partner_id': partner_id, 'partner_id': partner_id, 'default_reference':reference}</field> <field name="view_id" ref="view_vendor_payment_form"/> <field name="target">current</field> </record> @@ -287,7 +287,7 @@ <field name="res_model">account.voucher</field> <field name="view_type">form</field> <field name="domain">[('journal_id.type','in',['purchase','purchase_refund']), ('type','=','purchase')]</field> - <field name="context">{'type':'purchase'}</field> + <field name="context">{'default_type': 'purchase', 'type': 'purchase'}</field> <field name="view_id" eval="False"/> <field name="search_view_id" eval="view_voucher_filter_vendor"/> <field name="target">current</field> diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py index b087a95149e..114653d473e 100644 --- a/addons/analytic/analytic.py +++ b/addons/analytic/analytic.py @@ -150,7 +150,7 @@ class account_analytic_account(osv.osv): _columns = { 'name': fields.char('Account Name', size=128, required=True), 'complete_name': fields.function(_complete_name_calc, type='char', string='Full Account Name'), - 'code': fields.char('Account Code', size=24, select=True), + 'code': fields.char('Code/Reference', size=24, select=True), 'type': fields.selection([('view','View'), ('normal','Normal')], 'Account Type', help='If you select the View Type, it means you won\'t allow to create journal entries using that account.'), 'description': fields.text('Description'), 'parent_id': fields.many2one('account.analytic.account', 'Parent Analytic Account', select=2), @@ -168,7 +168,7 @@ class account_analytic_account(osv.osv): 'date_start': fields.date('Date Start'), 'date': fields.date('Date End', select=True), 'company_id': fields.many2one('res.company', 'Company', required=False), #not required because we want to allow different companies to use the same chart of account, except for leaf accounts. - 'state': fields.selection([('draft','New'),('open','Started'), ('pending','Pending'),('cancelled', 'Cancelled'),('close','Closed'),('template', 'Template')], 'State', required=True, + 'state': fields.selection([('template', 'Template'),('draft','New'),('open','Open'), ('pending','Pending'),('cancelled', 'Cancelled'),('close','Closed')], 'State', required=True, help='* When an account is created its in \'Draft\' state.\ \n* If any associated partner is there, it can be in \'Open\' state.\ \n* If any pending balance is there it can be in \'Pending\'. \ @@ -217,6 +217,12 @@ class account_analytic_account(osv.osv): default['line_ids'] = [] return super(account_analytic_account, self).copy(cr, uid, id, default, context=context) + def on_change_partner_id(self, cr, uid, id, partner_id, context={}): + if not partner_id: + return {'value': {'contact_id': False}} + addr = self.pool.get('res.partner').address_get(cr, uid, [partner_id], ['invoice']) + return {'value': {'contact_id': addr.get('invoice', False)}} + def on_change_company(self, cr, uid, id, company_id): if not company_id: return {} diff --git a/addons/analytic_user_function/analytic_user_function.py b/addons/analytic_user_function/analytic_user_function.py index 030a45db393..cfb1aba10d1 100644 --- a/addons/analytic_user_function/analytic_user_function.py +++ b/addons/analytic_user_function/analytic_user_function.py @@ -143,3 +143,5 @@ class hr_analytic_timesheet(osv.osv): hr_analytic_timesheet() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/anonymization/__init__.py b/addons/anonymization/__init__.py index 7be1a934c5a..4ddf3009947 100644 --- a/addons/anonymization/__init__.py +++ b/addons/anonymization/__init__.py @@ -22,3 +22,5 @@ import anonymization + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/anonymization/__openerp__.py b/addons/anonymization/__openerp__.py index 41e906c078a..ed22530c6bc 100644 --- a/addons/anonymization/__openerp__.py +++ b/addons/anonymization/__openerp__.py @@ -57,3 +57,5 @@ anonymization process to recover your previous data. 'images': ['images/anonymization1.jpeg','images/anonymization2.jpeg','images/anonymization3.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/anonymization/anonymization.py b/addons/anonymization/anonymization.py index 4af387a5c02..39fb415e9e1 100644 --- a/addons/anonymization/anonymization.py +++ b/addons/anonymization/anonymization.py @@ -578,3 +578,5 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory): ir_model_fields_anonymize_wizard() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/association/i18n/cs.po b/addons/association/i18n/cs.po index 5690d14c17e..08431ed8d93 100644 --- a/addons/association/i18n/cs.po +++ b/addons/association/i18n/cs.po @@ -4,17 +4,18 @@ # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" +"Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-11-12 11:51+0000\n" -"Last-Translator: Kuvaly [LCT] <kuvaly@seznam.cz>\n" -"Language-Team: \n" +"PO-Revision-Date: 2011-11-25 12:34+0000\n" +"Last-Translator: Jiří Hajda <robie@centrum.cz>\n" +"Language-Team: Czech <openerp-i18n-czech@lists.launchpad.net >\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:52+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:50+0000\n" +"X-Generator: Launchpad (build 14381)\n" +"X-Poedit-Language: Czech\n" #. module: association #: field:profile.association.config.install_modules_wizard,wiki:0 @@ -24,22 +25,22 @@ msgstr "Wiki" #. module: association #: view:profile.association.config.install_modules_wizard:0 msgid "Event Management" -msgstr "" +msgstr "Správa událostí" #. module: association #: field:profile.association.config.install_modules_wizard,project_gtd:0 msgid "Getting Things Done" -msgstr "" +msgstr "Mít vše hotovo (GTD)" #. module: association #: model:ir.module.module,description:association.module_meta_information msgid "This module is to create Profile for Associates" -msgstr "" +msgstr "Tento modul je k vytváření profilů asociací." #. module: association #: field:profile.association.config.install_modules_wizard,progress:0 msgid "Configuration Progress" -msgstr "" +msgstr "Proces nastavení" #. module: association #: view:profile.association.config.install_modules_wizard:0 @@ -47,21 +48,22 @@ msgid "" "Here are specific applications related to the Association Profile you " "selected." msgstr "" +"Zde jsou specifické aplikace vztažené k vámi vybraným profilům asociací." #. module: association #: view:profile.association.config.install_modules_wizard:0 msgid "title" -msgstr "" +msgstr "titulek" #. module: association #: help:profile.association.config.install_modules_wizard,event_project:0 msgid "Helps you to manage and organize your events." -msgstr "" +msgstr "Pomůže vám spravovat a organizovat vaše události." #. module: association #: field:profile.association.config.install_modules_wizard,config_logo:0 msgid "Image" -msgstr "" +msgstr "Obrázek" #. module: association #: help:profile.association.config.install_modules_wizard,hr_expense:0 @@ -69,6 +71,8 @@ msgid "" "Tracks and manages employee expenses, and can automatically re-invoice " "clients if the expenses are project-related." msgstr "" +"Sleduje a spravuje útraty zaměstnanců a může automaticky znovu fakturovat " +"klientům, pokud útraty jsou vztažené k projektu." #. module: association #: help:profile.association.config.install_modules_wizard,project_gtd:0 @@ -76,27 +80,29 @@ msgid "" "GTD is a methodology to efficiently organise yourself and your tasks. This " "module fully integrates GTD principle with OpenERP's project management." msgstr "" +"GTD je metodologie k efektivní organizaci váš a vašich úkolů. Tento modul " +"plně integruje principy GTD se správou projektů OpenERP." #. module: association #: view:profile.association.config.install_modules_wizard:0 msgid "Resources Management" -msgstr "" +msgstr "Správa zdrojů" #. module: association #: model:ir.module.module,shortdesc:association.module_meta_information msgid "Association profile" -msgstr "" +msgstr "Profil asociací" #. module: association #: field:profile.association.config.install_modules_wizard,hr_expense:0 msgid "Expenses Tracking" -msgstr "" +msgstr "Sledování útrat" #. module: association #: model:ir.actions.act_window,name:association.action_config_install_module #: view:profile.association.config.install_modules_wizard:0 msgid "Association Application Configuration" -msgstr "" +msgstr "Nastavení aplikace asociací" #. module: association #: help:profile.association.config.install_modules_wizard,wiki:0 @@ -104,6 +110,8 @@ msgid "" "Lets you create wiki pages and page groups in order to keep track of " "business knowledge and share it with and between your employees." msgstr "" +"Umožní vám vytvářet wiki stránky a skupiny stránek pro udržení přehledu o " +"obchodních znalostích a sdílet je s a mezi vašimi zaměstnanci." #. module: association #: help:profile.association.config.install_modules_wizard,project:0 @@ -111,16 +119,18 @@ msgid "" "Helps you manage your projects and tasks by tracking them, generating " "plannings, etc..." msgstr "" +"Pomůže vám spravovat vaše projekty a úkoly pomocí jejich sledování, " +"generování plánování, atd..." #. module: association #: model:ir.model,name:association.model_profile_association_config_install_modules_wizard msgid "profile.association.config.install_modules_wizard" -msgstr "" +msgstr "profile.association.config.install_modules_wizard" #. module: association #: field:profile.association.config.install_modules_wizard,event_project:0 msgid "Events" -msgstr "" +msgstr "Události" #. module: association #: view:profile.association.config.install_modules_wizard:0 @@ -131,4 +141,4 @@ msgstr "Správa projektů" #. module: association #: view:profile.association.config.install_modules_wizard:0 msgid "Configure" -msgstr "" +msgstr "Nastavit" diff --git a/addons/auction/board_auction_manager_view.xml b/addons/auction/board_auction_manager_view.xml index 67ad8334967..099909694f3 100644 --- a/addons/auction/board_auction_manager_view.xml +++ b/addons/auction/board_auction_manager_view.xml @@ -7,26 +7,20 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Auction manager "> - <hpaned position="100"> - <child1> - <action - string="Latest objects" - name="%(auction.action_report_latest_objects_manager_tree)d" - height="200" - width="510" /> + <board style="2-1"> + <column> + <action string="Latest objects" + name="%(auction.action_report_latest_objects_manager_tree)d"/> <action string="Latest deposits" name="%(auction.action_report_latest_doposit_manager_tree)d"/> - <action - string="Summary pointing by user" + <action string="Summary pointing by user" name="%(auction.action_report_auction_sign_in_out_manager_tree1)d" - view_mode="tree,graph" - /> + view_mode="tree,graph"/> <action string="Objects statistics" - name="%(auction.action_report_object_encoded_manager_tree)d" - /> - </child1> + name="%(auction.action_report_object_encoded_manager_tree)d"/> + </column> - <child2> + <column> <button string="My board" name="%(open_board_auction)d" @@ -34,22 +28,18 @@ type="action" colspan="4" /> - <action - string="Total Adjudications" + <action string="Total Adjudications" name="%(auction.action_report_auction_adjudication_tree)d" - view_mode="graph,tree" - colspan="4"/> - <action - string="Min/Adj/Max" + view_mode="graph,tree"/> + <action string="Min/Adj/Max" name="%(auction.action_report_auction_estimation_adj_category_manager_tree)d" - view_mode="graph,tree" colspan="4" /> + view_mode="graph,tree"/> - <action - string="Objects by day" + <action string="Objects by day" name="%(auction.action_report_auction_object_date_tree)d" - view_mode="graph,tree" colspan="4" /> - </child2> - </hpaned> + view_mode="graph,tree"/> + </column> + </board> </form> </field> </record> diff --git a/addons/auction/board_auction_view.xml b/addons/auction/board_auction_view.xml index cc784c93be2..668c5d4352b 100644 --- a/addons/auction/board_auction_view.xml +++ b/addons/auction/board_auction_view.xml @@ -58,36 +58,28 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Auction manager "> - <hpaned position="100"> - <child1> - <action - string="Latest objects" - name="%(auction.action_report_latest_objects_tree)d" - height="200" - width="510" /> + <board style="2-1"> + <column> + <action string="Latest objects" + name="%(auction.action_report_latest_objects_tree)d"/> <action string="Latest deposits" name="%(auction.action_report_latest_doposit_tree)d"/> <action string="Objects statistics" - name="%(auction.action_report_object_encoded_tree)d" - /> - </child1> + name="%(auction.action_report_object_encoded_tree)d"/> + </column> - <child2> - <action - string="Total Adjudications" + <column> + <action string="Total Adjudications" name="%(auction.action_report_auction_adjudication_tree)d" - view_mode="graph,tree" - colspan="4"/> - <action - string="Min/Adj/Max" + view_mode="graph,tree"/> + <action string="Min/Adj/Max" name="%(auction.action_report_auction_lots_estimation_adj_category_tree)d" - view_mode="graph,tree" colspan="4" /> - <action - string="Objects by day" + view_mode="graph,tree"/> + <action string="Objects by day" name="%(auction.action_report_auction_object_date_tree)d" - view_mode="graph,tree" colspan="4" /> - </child2> - </hpaned> + view_mode="graph,tree"/> + </column> + </board> </form> </field> </record> diff --git a/addons/auction/report/report_auction.py b/addons/auction/report/report_auction.py index 012ea3c891e..af5d76b6076 100644 --- a/addons/auction/report/report_auction.py +++ b/addons/auction/report/report_auction.py @@ -209,3 +209,5 @@ class report_object_encoded(osv.osv): report_object_encoded() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auction/test/auction.yml b/addons/auction/test/auction.yml index 72014f985ef..f970ffe86dd 100644 --- a/addons/auction/test/auction.yml +++ b/addons/auction/test/auction.yml @@ -34,21 +34,8 @@ - !record {model: account.journal, id: account.sales_journal}: analytic_journal_id: account.cose_journal_sale -- - I'm creating new Seller "Mr. Pinakin" with him email "info@mycustomer.com". -- - !record {model: res.partner, id: res_partner_mrpinakin0}: - address: - - city: Namur - country_id: base.be - phone: (+32).10.45.18.77 - street: 23, street ways - type: default - zip: '2324324' - email: 'info@mycustomer.com' - name: Mr. Pinakin -- +- I'm creating new Buyer "Mr. Patel" with his email "info@myinfobid.com". - !record {model: res.partner, id: res_partner_mrpatel0}: @@ -61,21 +48,7 @@ email: 'info@myinfobid.com' name: Mr. Patel -- - I'm creating new Buyer "Mr. Johnson" with his email "info@mrkjohnson.com". -- - !record {model: res.partner, id: res_partner_mrkjohnson0}: - address: - - city: paris - country_id: base.fr - name: Mark Johnson - street: 1 rue Rockfeller - type: invoice - zip: '75016' - email: 'info@mrkjohnson.com' - name: Mr. Mark Johnson - -- +- I'm creating new Buyer "Mr. Rahi" with his email "info@poalrahi.com". - !record {model: res.partner, id: res_partner_poalrahi0}: @@ -140,7 +113,7 @@ date_dep: !eval "'%s-08-01' %(datetime.now().year)" method: keep name: AD/006 - partner_id: res_partner_mrpinakin0 + partner_id: base.res_partner_maxtor specific_cost_ids: - account: auction.auction_expense amount: 200.0 @@ -149,7 +122,7 @@ I create a new object wooden-chair which is to be auctioned. - !record {model: auction.lots, id: auction_lots_woodenchair0}: - ach_uid: res_partner_mrkjohnson0 + ach_uid: base.res_partner_seagate artist_id: auction_artists_vincentvangogh0 auction_id: auction_dates_antiquefurnitureexhibition0 bord_vnd_id: auction_deposit_ad0 @@ -199,12 +172,12 @@ price: 3200.0 - - I create another bid for an object "wooden-chair" bid by a Mr.Johnson + I create another bid for an object "wooden-chair" bid by a Mr.Seagate - !record {model: auction.bid, id: auction_bid_bid2}: auction_id: auction_dates_antiquefurnitureexhibition0 name: bid/003 - partner_id: res_partner_mrkjohnson0 + partner_id: base.res_partner_seagate - I create a bid line. - @@ -215,7 +188,7 @@ lot_id: auction.auction_lots_woodenchair0 price: 4000.0 - - Mr. MarkJohnson bid are selected as the Finalist Bid with 4000 Euro + Mr. Seagate bids are selected as the Finalist Bid with 4000 Euro - I check that buyer price and seller price gets bound with the value - @@ -250,7 +223,7 @@ - !record {model: auction.lots.make.invoice.buyer, id: auction_lots_make_invoice_buyer_0}: amount: 3090.0 - buyer_id: res_partner_mrkjohnson0 + buyer_id: base.res_partner_seagate number: !eval "'%s/003' %(datetime.now().year)" objects: 1 - diff --git a/addons/auction/wizard/auction_lots_able.py b/addons/auction/wizard/auction_lots_able.py index 8604d691456..37d8374aad4 100644 --- a/addons/auction/wizard/auction_lots_able.py +++ b/addons/auction/wizard/auction_lots_able.py @@ -44,3 +44,5 @@ class auction_lots_able(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} auction_lots_able() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auction/wizard/auction_lots_cancel.py b/addons/auction/wizard/auction_lots_cancel.py index 3974241a071..7157ac8abea 100644 --- a/addons/auction/wizard/auction_lots_cancel.py +++ b/addons/auction/wizard/auction_lots_cancel.py @@ -53,4 +53,5 @@ class auction_lots_cancel(osv.osv): _columns = { } -auction_lots_cancel()
\ No newline at end of file +auction_lots_cancel() +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auction/wizard/auction_lots_enable.py b/addons/auction/wizard/auction_lots_enable.py index 290664ba697..c4c8792f76a 100644 --- a/addons/auction/wizard/auction_lots_enable.py +++ b/addons/auction/wizard/auction_lots_enable.py @@ -41,3 +41,5 @@ class auction_lots_enable(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} auction_lots_enable() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auction/wizard/auction_lots_make_invoice.py b/addons/auction/wizard/auction_lots_make_invoice.py index 3a87a202b74..19c39dc2c04 100644 --- a/addons/auction/wizard/auction_lots_make_invoice.py +++ b/addons/auction/wizard/auction_lots_make_invoice.py @@ -89,3 +89,5 @@ class auction_lots_make_invoice(osv.osv_memory): } auction_lots_make_invoice() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auction/wizard/auction_lots_make_invoice_buyer.py b/addons/auction/wizard/auction_lots_make_invoice_buyer.py index dc39ccbb717..253a5b317ff 100644 --- a/addons/auction/wizard/auction_lots_make_invoice_buyer.py +++ b/addons/auction/wizard/auction_lots_make_invoice_buyer.py @@ -89,3 +89,5 @@ class auction_lots_make_invoice_buyer(osv.osv_memory): } auction_lots_make_invoice_buyer() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auction/wizard/auction_pay_sel.py b/addons/auction/wizard/auction_pay_sel.py index 77484bbe988..42ea08e8094 100644 --- a/addons/auction/wizard/auction_pay_sel.py +++ b/addons/auction/wizard/auction_pay_sel.py @@ -55,3 +55,5 @@ class auction_pay_sel(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} auction_pay_sel() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auction/wizard/auction_taken.py b/addons/auction/wizard/auction_taken.py index 8ada436ae5d..38ac6dca2fe 100644 --- a/addons/auction/wizard/auction_taken.py +++ b/addons/auction/wizard/auction_taken.py @@ -51,3 +51,5 @@ class auction_taken(osv.osv_memory): return {'lot_ids': []} auction_taken() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auction/wizard/auction_transfer_unsold_object.py b/addons/auction/wizard/auction_transfer_unsold_object.py index f593a36de2e..0e52199e566 100644 --- a/addons/auction/wizard/auction_transfer_unsold_object.py +++ b/addons/auction/wizard/auction_transfer_unsold_object.py @@ -84,4 +84,5 @@ class auction_transfer_unsold_object(osv.osv): 'state':'draft'}) return {'type': 'ir.actions.act_window_close'} -auction_transfer_unsold_object()
\ No newline at end of file +auction_transfer_unsold_object() +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/audittrail/audittrail.py b/addons/audittrail/audittrail.py index 80af2e7ea3a..302d6e146bd 100644 --- a/addons/audittrail/audittrail.py +++ b/addons/audittrail/audittrail.py @@ -43,22 +43,17 @@ class audittrail_rule(osv.osv): "log_create": fields.boolean("Log Creates",help="Select this if you want to keep track of creation on any record of the object of this rule"), "log_action": fields.boolean("Log Action",help="Select this if you want to keep track of actions on the object of this rule"), "log_workflow": fields.boolean("Log Workflow",help="Select this if you want to keep track of workflow on any record of the object of this rule"), - "state": fields.selection((("draft", "Draft"), - ("subscribed", "Subscribed")), - "State", required=True), + "state": fields.selection((("draft", "Draft"), ("subscribed", "Subscribed")), "State", required=True), "action_id": fields.many2one('ir.actions.act_window', "Action ID"), - } - _defaults = { - 'state': lambda *a: 'draft', - 'log_create': lambda *a: 1, - 'log_unlink': lambda *a: 1, - 'log_write': lambda *a: 1, + 'state': 'draft', + 'log_create': 1, + 'log_unlink': 1, + 'log_write': 1, } - _sql_constraints = [ - ('model_uniq', 'unique (object_id)', """There is a rule defined on this object\n You cannot define another one the same object!""") + ('model_uniq', 'unique (object_id)', """There is already a rule defined on this object\n You cannot define another: please edit the existing one.""") ] __functions = {} @@ -178,54 +173,33 @@ class audittrail_log_line(osv.osv): class audittrail_objects_proxy(object_proxy): """ Uses Object proxy for auditing changes on object of subscribed Rules""" - def get_value_text(self, cr, uid, field_name, values, model, context=None): + def get_value_text(self, cr, uid, pool, resource_pool, method, field, value): """ - Gets textual values for the fields - e.g.: For field of type many2one it gives its name value instead of id - - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param field_name: List of fields for text values - @param values: Values for field to be converted into textual values - @return: values: List of textual values for given fields + Gets textual values for the fields. + If the field is a many2one, it returns the name. + If it's a one2many or a many2many, it returns a list of name. + In other cases, it just returns the value. + :param cr: the current row, from the database cursor, + :param uid: the current user’s ID for security checks, + :param pool: current db's pooler object. + :param resource_pool: pooler object of the model which values are being changed. + :param field: for which the text value is to be returned. + :param value: value of the field. + :param recursive: True or False, True will repeat the process recursively + :return: string value or a list of values(for O2M/M2M) """ - if not context: - context = {} - if field_name in('__last_update','id'): - return values - pool = pooler.get_pool(cr.dbname) - field_pool = pool.get('ir.model.fields') - model_pool = pool.get('ir.model') - obj_pool = pool.get(model.model) - if obj_pool._inherits: - inherits_ids = model_pool.search(cr, uid, [('model', '=', obj_pool._inherits.keys()[0])]) - field_ids = field_pool.search(cr, uid, [('name', '=', field_name), ('model_id', 'in', (model.id, inherits_ids[0]))]) + + field_obj = (resource_pool._all_columns.get(field)).column + if field_obj._type in ('one2many','many2many'): + data = pool.get(field_obj._obj).name_get(cr, uid, value) + #return the modifications on x2many fields as a list of names + res = map(lambda x:x[1], data) + elif field_obj._type == 'many2one': + #return the modifications on a many2one field as its value returned by name_get() + res = value and value[1] or value else: - field_ids = field_pool.search(cr, uid, [('name', '=', field_name), ('model_id', '=', model.id)]) - field_id = field_ids and field_ids[0] or False - assert field_id, _("'%s' field does not exist in '%s' model" %(field_name, model.model)) - - field = field_pool.read(cr, uid, field_id) - relation_model = field['relation'] - relation_model_pool = relation_model and pool.get(relation_model) or False - - if field['ttype'] == 'many2one': - res = False - relation_id = False - if values and type(values) == tuple: - relation_id = values[0] - if relation_id and relation_model_pool: - relation_model_object = relation_model_pool.read(cr, uid, relation_id, [relation_model_pool._rec_name]) - res = relation_model_object[relation_model_pool._rec_name] - return res - - elif field['ttype'] in ('many2many','one2many'): - res = [] - for relation_model_object in relation_model_pool.read(cr, uid, values, [relation_model_pool._rec_name]): - res.append(relation_model_object[relation_model_pool._rec_name]) - return res - - return values + res = value + return res def create_log_line(self, cr, uid, log_id, model, lines=[]): """ @@ -233,7 +207,7 @@ class audittrail_objects_proxy(object_proxy): @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, - @param model: Object who's values are being changed + @param model: Object which values are being changed @param lines: List of values for line is to be created """ pool = pooler.get_pool(cr.dbname) @@ -241,216 +215,273 @@ class audittrail_objects_proxy(object_proxy): model_pool = pool.get('ir.model') field_pool = pool.get('ir.model.fields') log_line_pool = pool.get('audittrail.log.line') - #start Loop for line in lines: - if line['name'] in('__last_update','id'): - continue + field_obj = obj_pool._all_columns.get(line['name']) + assert field_obj, _("'%s' field does not exist in '%s' model" %(line['name'], model.model)) + field_obj = field_obj.column + old_value = line.get('old_value', '') + new_value = line.get('new_value', '') + search_models = [model.id] if obj_pool._inherits: - inherits_ids = model_pool.search(cr, uid, [('model', '=', obj_pool._inherits.keys()[0])]) - field_ids = field_pool.search(cr, uid, [('name', '=', line['name']), ('model_id', 'in', (model.id, inherits_ids[0]))]) - else: - field_ids = field_pool.search(cr, uid, [('name', '=', line['name']), ('model_id', '=', model.id)]) - field_id = field_ids and field_ids[0] or False - assert field_id, _("'%s' field does not exist in '%s' model" %(line['name'], model.model)) - - field = field_pool.read(cr, uid, field_id) - old_value = 'old_value' in line and line['old_value'] or '' - new_value = 'new_value' in line and line['new_value'] or '' - old_value_text = 'old_value_text' in line and line['old_value_text'] or '' - new_value_text = 'new_value_text' in line and line['new_value_text'] or '' - - if old_value_text == new_value_text: - continue - if field['ttype'] == 'many2one': - if type(old_value) == tuple: - old_value = old_value[0] - if type(new_value) == tuple: - new_value = new_value[0] + search_models += model_pool.search(cr, uid, [('model', 'in', obj_pool._inherits.keys())]) + field_id = field_pool.search(cr, uid, [('name', '=', line['name']), ('model_id', 'in', search_models)]) + if field_obj._type == 'many2one': + old_value = old_value and old_value[0] or old_value + new_value = new_value and new_value[0] or new_value vals = { "log_id": log_id, - "field_id": field_id, + "field_id": field_id and field_id[0] or False, "old_value": old_value, "new_value": new_value, - "old_value_text": old_value_text, - "new_value_text": new_value_text, - "field_description": field['field_description'] + "old_value_text": line.get('old_value_text', ''), + "new_value_text": line.get('new_value_text', ''), + "field_description": field_obj.string } line_id = log_line_pool.create(cr, uid, vals) - cr.commit() - #End Loop return True - def log_fct(self, cr, uid, model, method, fct_src, *args): + def log_fct(self, cr, uid_orig, model, method, fct_src, *args): """ - Logging function: This function is performs logging oprations according to method - @param db: the current database - @param uid: the current user’s ID for security checks, - @param object: Object who's values are being changed - @param method: method to log: create, read, write, unlink + Logging function: This function is performing the logging operation + @param model: Object whose values are being changed + @param method: method to log: create, read, write, unlink, action or workflow action @param fct_src: execute method of Object proxy @return: Returns result as per method of Object proxy """ - uid_orig = uid - uid = 1 - res2 = args pool = pooler.get_pool(cr.dbname) resource_pool = pool.get(model) - log_pool = pool.get('audittrail.log') model_pool = pool.get('ir.model') - - model_ids = model_pool.search(cr, uid, [('model', '=', model)]) + model_ids = model_pool.search(cr, 1, [('model', '=', model)]) model_id = model_ids and model_ids[0] or False assert model_id, _("'%s' Model does not exist..." %(model)) - model = model_pool.browse(cr, uid, model_id) - - if method in ('create'): - res_id = fct_src(cr, uid_orig, model.model, method, *args) - resource = resource_pool.read(cr, uid, res_id, args[0].keys()) - vals = { - "method": method, - "object_id": model.id, - "user_id": uid_orig, - "res_id": resource['id'], - } - if 'id' in resource: - del resource['id'] - log_id = log_pool.create(cr, uid, vals) - lines = [] - for field in resource: - line = { - 'name': field, - 'new_value': resource[field], - 'new_value_text': self.get_value_text(cr, uid, field, resource[field], model) - } - lines.append(line) - self.create_log_line(cr, uid, log_id, model, lines) + model = model_pool.browse(cr, 1, model_id) - return res_id + # fields to log. currently only used by log on read() + field_list = [] + old_values = new_values = {} - elif method in ('read'): - res_ids = args[0] - old_values = {} + if method == 'create': res = fct_src(cr, uid_orig, model.model, method, *args) - if type(res) == list: - for v in res: - old_values[v['id']] = v - else: - old_values[res['id']] = res - for res_id in old_values: - vals = { - "method": method, - "object_id": model.id, - "user_id": uid_orig, - "res_id": res_id, - - } - log_id = log_pool.create(cr, uid, vals) - lines = [] - for field in old_values[res_id]: - line = { - 'name': field, - 'old_value': old_values[res_id][field], - 'old_value_text': self.get_value_text(cr, uid, field, old_values[res_id][field], model) - } - lines.append(line) - - self.create_log_line(cr, uid, log_id, model, lines) - return res - - elif method in ('unlink'): + if res: + res_ids = [res] + new_values = self.get_data(cr, uid_orig, pool, res_ids, model, method) + elif method == 'read': + res = fct_src(cr, uid_orig, model.model, method, *args) + # build the res_ids and the old_values dict. Here we don't use get_data() to + # avoid performing an additional read() + res_ids = [] + for record in res: + res_ids.append(record['id']) + old_values[(model.id, record['id'])] = {'value': record, 'text': record} + # log only the fields read + field_list = args[1] + elif method == 'unlink': res_ids = args[0] - old_values = {} - for res_id in res_ids: - old_values[res_id] = resource_pool.read(cr, uid, res_id) - - for res_id in res_ids: - vals = { - "method": method, - "object_id": model.id, - "user_id": uid_orig, - "res_id": res_id, - - } - log_id = log_pool.create(cr, uid, vals) - lines = [] - for field in old_values[res_id]: - if field in ('id'): - continue - line = { - 'name': field, - 'old_value': old_values[res_id][field], - 'old_value_text': self.get_value_text(cr, uid, field, old_values[res_id][field], model) - } - lines.append(line) - - self.create_log_line(cr, uid, log_id, model, lines) + old_values = self.get_data(cr, uid_orig, pool, res_ids, model, method) res = fct_src(cr, uid_orig, model.model, method, *args) - return res - else: + else: # method is write, action or workflow action res_ids = [] - res = True if args: res_ids = args[0] - old_values = {} - fields = [] - if len(args)>1 and type(args[1]) == dict: - fields = args[1].keys() - if type(res_ids) in (long, int): + if isinstance(res_ids, (long, int)): res_ids = [res_ids] if res_ids: - for resource in resource_pool.read(cr, uid, res_ids): - resource_id = resource['id'] - if 'id' in resource: - del resource['id'] - old_values_text = {} - old_value = {} - for field in resource.keys(): - old_value[field] = resource[field] - old_values_text[field] = self.get_value_text(cr, uid, field, resource[field], model) - old_values[resource_id] = {'text':old_values_text, 'value': old_value} - + # store the old values into a dictionary + old_values = self.get_data(cr, uid_orig, pool, res_ids, model, method) + # process the original function, workflow trigger... res = fct_src(cr, uid_orig, model.model, method, *args) - + if method == 'copy': + res_ids = [res] if res_ids: - for resource in resource_pool.read(cr, uid, res_ids): - resource_id = resource['id'] - if 'id' in resource: - del resource['id'] - vals = { - "method": method, - "object_id": model.id, - "user_id": uid_orig, - "res_id": resource_id, - } + # check the new values and store them into a dictionary + new_values = self.get_data(cr, uid_orig, pool, res_ids, model, method) + # compare the old and new values and create audittrail log if needed + self.process_data(cr, uid_orig, pool, res_ids, model, method, old_values, new_values, field_list) + return res + + def get_data(self, cr, uid, pool, res_ids, model, method): + """ + This function simply read all the fields of the given res_ids, and also recurisvely on + all records of a x2m fields read that need to be logged. Then it returns the result in + convenient structure that will be used as comparison basis. + + :param cr: the current row, from the database cursor, + :param uid: the current user’s ID. This parameter is currently not used as every + operation to get data is made as super admin. Though, it could be usefull later. + :param pool: current db's pooler object. + :param res_ids: Id's of resource to be logged/compared. + :param model: Object whose values are being changed + :param method: method to log: create, read, unlink, write, actions, workflow actions + :return: dict mapping a tuple (model_id, resource_id) with its value and textual value + { (model_id, resource_id): { 'value': ... + 'textual_value': ... + }, + } + """ + data = {} + resource_pool = pool.get(model.model) + # read all the fields of the given resources in super admin mode + for resource in resource_pool.read(cr, 1, res_ids): + values = {} + values_text = {} + resource_id = resource['id'] + # loop on each field on the res_ids we just have read + for field in resource: + if field in ('__last_update', 'id'): + continue + values[field] = resource[field] + # get the textual value of that field for this record + values_text[field] = self.get_value_text(cr, 1, pool, resource_pool, method, field, resource[field]) + + field_obj = resource_pool._all_columns.get(field).column + if field_obj._type in ('one2many','many2many'): + # check if an audittrail rule apply in super admin mode + if self.check_rules(cr, 1, field_obj._obj, method): + # check if the model associated to a *2m field exists, in super admin mode + x2m_model_ids = pool.get('ir.model').search(cr, 1, [('model', '=', field_obj._obj)]) + x2m_model_id = x2m_model_ids and x2m_model_ids[0] or False + assert x2m_model_id, _("'%s' Model does not exist..." %(field_obj._obj)) + x2m_model = pool.get('ir.model').browse(cr, 1, x2m_model_id) + #recursive call on x2m fields that need to be checked too + data.update(self.get_data(cr, 1, pool, resource[field], x2m_model, method)) + data[(model.id, resource_id)] = {'text':values_text, 'value': values} + return data + + def prepare_audittrail_log_line(self, cr, uid, pool, model, resource_id, method, old_values, new_values, field_list=[]): + """ + This function compares the old data (i.e before the method was executed) and the new data + (after the method was executed) and returns a structure with all the needed information to + log those differences. + + :param cr: the current row, from the database cursor, + :param uid: the current user’s ID. This parameter is currently not used as every + operation to get data is made as super admin. Though, it could be usefull later. + :param pool: current db's pooler object. + :param model: model object which values are being changed + :param resource_id: ID of record to which values are being changed + :param method: method to log: create, read, unlink, write, actions, workflow actions + :param old_values: dict of values read before execution of the method + :param new_values: dict of values read after execution of the method + :param field_list: optional argument containing the list of fields to log. Currently only + used when performing a read, it could be usefull later on if we want to log the write + on specific fields only. + + :return: dictionary with + * keys: tuples build as ID of model object to log and ID of resource to log + * values: list of all the changes in field values for this couple (model, resource) + return { + (model.id, resource_id): [] + } + + The reason why the structure returned is build as above is because when modifying an existing + record (res.partner, for example), we may have to log a change done in a x2many field (on + res.partner.address, for example) + """ + key = (model.id, resource_id) + lines = { + key: [] + } + # loop on all the fields + for field_name, field_definition in pool.get(model.model)._all_columns.items(): + #if the field_list param is given, skip all the fields not in that list + if field_list and field_name not in field_list: + continue + field_obj = field_definition.column + if field_obj._type in ('one2many','many2many'): + # checking if an audittrail rule apply in super admin mode + if self.check_rules(cr, 1, field_obj._obj, method): + # checking if the model associated to a *2m field exists, in super admin mode + x2m_model_ids = pool.get('ir.model').search(cr, 1, [('model', '=', field_obj._obj)]) + x2m_model_id = x2m_model_ids and x2m_model_ids[0] or False + assert x2m_model_id, _("'%s' Model does not exist..." %(field_obj._obj)) + x2m_model = pool.get('ir.model').browse(cr, 1, x2m_model_id) + # the resource_ids that need to be checked are the sum of both old and previous values (because we + # need to log also creation or deletion in those lists). + x2m_old_values_ids = old_values.get(key, {'value': {}})['value'].get(field_name, []) + x2m_new_values_ids = new_values.get(key, {'value': {}})['value'].get(field_name, []) + # We use list(set(...)) to remove duplicates. + res_ids = list(set(x2m_old_values_ids + x2m_new_values_ids)) + for res_id in res_ids: + lines.update(self.prepare_audittrail_log_line(cr, 1, pool, x2m_model, res_id, method, old_values, new_values, field_list)) + # if the value value is different than the old value: record the change + if key not in old_values or key not in new_values or old_values[key]['value'][field_name] != new_values[key]['value'][field_name]: + data = { + 'name': field_name, + 'new_value': key in new_values and new_values[key]['value'].get(field_name), + 'old_value': key in old_values and old_values[key]['value'].get(field_name), + 'new_value_text': key in new_values and new_values[key]['text'].get(field_name), + 'old_value_text': key in old_values and old_values[key]['text'].get(field_name) + } + lines[key].append(data) + return lines + def process_data(self, cr, uid, pool, res_ids, model, method, old_values={}, new_values={}, field_list=[]): + """ + This function processes and iterates recursively to log the difference between the old + data (i.e before the method was executed) and the new data and creates audittrail log + accordingly. + + :param cr: the current row, from the database cursor, + :param uid: the current user’s ID, + :param pool: current db's pooler object. + :param res_ids: Id's of resource to be logged/compared. + :param model: model object which values are being changed + :param method: method to log: create, read, unlink, write, actions, workflow actions + :param old_values: dict of values read before execution of the method + :param new_values: dict of values read after execution of the method + :param field_list: optional argument containing the list of fields to log. Currently only + used when performing a read, it could be usefull later on if we want to log the write + on specific fields only. + :return: True + """ + # loop on all the given ids + for res_id in res_ids: + # compare old and new values and get audittrail log lines accordingly + lines = self.prepare_audittrail_log_line(cr, uid, pool, model, res_id, method, old_values, new_values, field_list) - log_id = log_pool.create(cr, uid, vals) - lines = [] - for field in resource.keys(): - line = { - 'name': field, - 'new_value': resource[field], - 'old_value': old_values[resource_id]['value'][field], - 'new_value_text': self.get_value_text(cr, uid, field, resource[field], model), - 'old_value_text': old_values[resource_id]['text'][field] - } - lines.append(line) - - self.create_log_line(cr, uid, log_id, model, lines) - return res + # if at least one modification has been found + for model_id, resource_id in lines: + vals = { + 'method': method, + 'object_id': model_id, + 'user_id': uid, + 'res_id': resource_id, + } + if (model_id, resource_id) not in old_values and method not in ('copy', 'read'): + # the resource was not existing so we are forcing the method to 'create' + # (because it could also come with the value 'write' if we are creating + # new record through a one2many field) + vals.update({'method': 'create'}) + if (model_id, resource_id) not in new_values and method not in ('copy', 'read'): + # the resource is not existing anymore so we are forcing the method to 'unlink' + # (because it could also come with the value 'write' if we are deleting the + # record through a one2many field) + vals.update({'method': 'unlink'}) + # create the audittrail log in super admin mode, only if a change has been detected + if lines[(model_id, resource_id)]: + log_id = pool.get('audittrail.log').create(cr, 1, vals) + model = pool.get('ir.model').browse(cr, uid, model_id) + self.create_log_line(cr, 1, log_id, model, lines[(model_id, resource_id)]) return True def check_rules(self, cr, uid, model, method): + """ + Checks if auditrails is installed for that db and then if one rule match + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID, + @param model: value of _name of the object which values are being changed + @param method: method to log: create, read, unlink,write,actions,workflow actions + @return: True or False + """ pool = pooler.get_pool(cr.dbname) - # Check if auditrails is installed for that db and then if one rule match if 'audittrail.rule' in pool.models: model_ids = pool.get('ir.model').search(cr, 1, [('model', '=', model)]) model_id = model_ids and model_ids[0] or False if model_id: rule_ids = pool.get('audittrail.rule').search(cr, 1, [('object_id', '=', model_id), ('state', '=', 'subscribed')]) for rule in pool.get('audittrail.rule').read(cr, 1, rule_ids, ['user_id','log_read','log_write','log_create','log_unlink','log_action','log_workflow']): - if len(rule['user_id'])==0 or uid in rule['user_id']: + if len(rule['user_id']) == 0 or uid in rule['user_id']: if rule.get('log_'+method,0): return True elif method not in ('default_get','read','fields_view_get','fields_get','search','search_count','name_search','name_get','get','request_get', 'get_sc', 'unlink', 'write', 'create'): @@ -460,18 +491,14 @@ class audittrail_objects_proxy(object_proxy): def execute_cr(self, cr, uid, model, method, *args, **kw): fct_src = super(audittrail_objects_proxy, self).execute_cr if self.check_rules(cr,uid,model,method): - res = self.log_fct(cr, uid, model, method, fct_src, *args) - else: - res = fct_src(cr, uid, model, method, *args) - return res + return self.log_fct(cr, uid, model, method, fct_src, *args) + return fct_src(cr, uid, model, method, *args) def exec_workflow_cr(self, cr, uid, model, method, *args, **argv): fct_src = super(audittrail_objects_proxy, self).exec_workflow_cr if self.check_rules(cr,uid,model,'workflow'): - res = self.log_fct(cr, uid, model, method, fct_src, *args) - else: - res = fct_src(cr, uid, model, method, *args) - return res + return self.log_fct(cr, uid, model, method, fct_src, *args) + return fct_src(cr, uid, model, method, *args) audittrail_objects_proxy() diff --git a/addons/audittrail/wizard/audittrail_view_log.py b/addons/audittrail/wizard/audittrail_view_log.py index 65165c1d2d8..76284e75511 100644 --- a/addons/audittrail/wizard/audittrail_view_log.py +++ b/addons/audittrail/wizard/audittrail_view_log.py @@ -62,3 +62,5 @@ class audittrail_view_log(osv.osv_memory): return result audittrail_view_log() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_openid/controllers/__init__.py b/addons/auth_openid/controllers/__init__.py index 2d3be24431f..c5f359681b9 100644 --- a/addons/auth_openid/controllers/__init__.py +++ b/addons/auth_openid/controllers/__init__.py @@ -18,3 +18,5 @@ # ############################################################################## import main + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_openid/controllers/main.py b/addons/auth_openid/controllers/main.py index 78b8609e765..0c1274ba05a 100644 --- a/addons/auth_openid/controllers/main.py +++ b/addons/auth_openid/controllers/main.py @@ -223,3 +223,5 @@ class OpenIDController(openerpweb.Controller): session = getattr(req.session, 'openid_session', {}) return {'status': session.get('status'), 'message': session.get('message')} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_openid/res_users.py b/addons/auth_openid/res_users.py index 3278184474c..c9b5bfc7b26 100644 --- a/addons/auth_openid/res_users.py +++ b/addons/auth_openid/res_users.py @@ -92,3 +92,5 @@ class res_users(osv.osv): res_users() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_openid/utils.py b/addons/auth_openid/utils.py index 2761f3d0e1d..444b5eeaa05 100644 --- a/addons/auth_openid/utils.py +++ b/addons/auth_openid/utils.py @@ -44,3 +44,5 @@ def cursor(db): finally: cr.close() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_action_rule/i18n/pt.po b/addons/base_action_rule/i18n/pt.po index 106ba16af9d..d894a6b799b 100644 --- a/addons/base_action_rule/i18n/pt.po +++ b/addons/base_action_rule/i18n/pt.po @@ -8,25 +8,26 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-12-15 20:31+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" +"PO-Revision-Date: 2011-11-23 12:16+0000\n" +"Last-Translator: Paulino Ascenção <Unknown>\n" "Language-Team: Portuguese <pt@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:51+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-24 05:00+0000\n" +"X-Generator: Launchpad (build 14336)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 msgid "" "Check this if you want the rule to send an email to the responsible person." msgstr "" +"Assinale aqui se pretender que a regra envie um e-mail à pessoa responsável." #. module: base_action_rule #: field:base.action.rule,act_remind_partner:0 msgid "Remind Partner" -msgstr "Alertar parceiro" +msgstr "Relembrar parceiro" #. module: base_action_rule #: field:base.action.rule,trg_partner_categ_id:0 @@ -259,7 +260,7 @@ msgstr "Chamar o método do objeto" #. module: base_action_rule #: field:base.action.rule,act_email_to:0 msgid "Email To" -msgstr "" +msgstr "E-mail para" #. module: base_action_rule #: help:base.action.rule,act_mail_to_watchers:0 @@ -369,12 +370,12 @@ msgstr "Erro: A mensagem não está bem formatada" #. module: base_action_rule #: view:base.action.rule:0 msgid "Email Actions" -msgstr "" +msgstr "Ações do e-mail" #. module: base_action_rule #: view:base.action.rule:0 msgid "Email Information" -msgstr "" +msgstr "Informação sobre o e-mail" #. module: base_action_rule #: model:ir.model,name:base_action_rule.model_base_action_rule @@ -432,7 +433,7 @@ msgstr "" #. module: base_action_rule #: field:base.action.rule,act_email_cc:0 msgid "Add Watchers (Cc)" -msgstr "" +msgstr "Acdicionar observadores (CC)" #. module: base_action_rule #: view:base.action.rule:0 diff --git a/addons/base_calendar/i18n/bn.po b/addons/base_calendar/i18n/bn.po new file mode 100644 index 00000000000..e0d0b9c7cca --- /dev/null +++ b/addons/base_calendar/i18n/bn.po @@ -0,0 +1,1658 @@ +# Bengali 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-21 12:57+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Bengali <bn@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-22 05:00+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_related:0 +#: selection:res.alarm,trigger_related:0 +msgid "The event starts" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +msgid "Hourly" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Required to Join" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,exdate:0 +#: help:calendar.todo,exdate:0 +msgid "" +"This property defines the list of date/time exceptions for a recurring " +"calendar component." +msgstr "" + +#. module: base_calendar +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "" + +#. module: base_calendar +#: field:calendar.event.edit.all,name:0 +msgid "Title" +msgstr "শিরোনাম" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,rrule_type:0 +#: selection:calendar.todo,rrule_type:0 +msgid "Monthly" +msgstr "মাসভিত্তিক" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invited User" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invitation" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,recurrency:0 +#: help:calendar.todo,recurrency:0 +msgid "Recurrent Meeting" +msgstr "" + +#. module: base_calendar +#: model:ir.actions.act_window,name:base_calendar.action_res_alarm_view +#: model:ir.ui.menu,name:base_calendar.menu_crm_meeting_avail_alarm +msgid "Alarms" +msgstr "অ্যালার্ম" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Sunday" +msgstr "রবিবার" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: field:calendar.attendee,role:0 +msgid "Role" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Invitation details" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Fourth" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,show_as:0 +#: field:calendar.todo,show_as:0 +msgid "Show as" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,day:0 +#: selection:base.calendar.set.exrule,select1:0 +#: field:calendar.event,day:0 +#: selection:calendar.event,select1:0 +#: field:calendar.todo,day:0 +#: selection:calendar.todo,select1:0 +msgid "Date of month" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,class:0 +#: selection:calendar.todo,class:0 +msgid "Public" +msgstr "পাবলিক" + +#. module: base_calendar +#: view:calendar.event:0 +msgid " " +msgstr " " + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "March" +msgstr "মার্চ" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:414 +#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:90 +#, python-format +msgid "Warning !" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Friday" +msgstr "শুক্রবার" + +#. module: base_calendar +#: field:calendar.event,allday:0 +#: field:calendar.todo,allday:0 +msgid "All Day" +msgstr "সারাদিন" + +#. module: base_calendar +#: field:base.calendar.set.exrule,select1:0 +#: field:calendar.event,select1:0 +#: field:calendar.todo,select1:0 +msgid "Option" +msgstr "বিকল্প" + +#. module: base_calendar +#: selection:calendar.attendee,availability:0 +#: selection:calendar.event,show_as:0 +#: selection:calendar.todo,show_as:0 +#: selection:res.users,availability:0 +msgid "Free" +msgstr "ফ্রী" + +#. module: base_calendar +#: help:calendar.attendee,rsvp:0 +msgid "Indicats whether the favor of a reply is requested" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_ir_attachment +msgid "ir.attachment" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,delegated_to:0 +msgid "The users that the original request was delegated to" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,ref:0 +msgid "Event Ref" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,we:0 +#: field:calendar.event,we:0 +#: field:calendar.todo,we:0 +msgid "Wed" +msgstr "বুধ" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Show time as" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,tu:0 +#: field:calendar.event,tu:0 +#: field:calendar.todo,tu:0 +msgid "Tue" +msgstr "মঙ্গল" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,rrule_type:0 +#: selection:calendar.todo,rrule_type:0 +msgid "Yearly" +msgstr "বাৎসরিক" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_related:0 +#: selection:res.alarm,trigger_related:0 +msgid "The event ends" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Last" +msgstr "শেষ" + +#. module: base_calendar +#: help:calendar.attendee,state:0 +msgid "Status of the attendee's participation" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,cutype:0 +msgid "Room" +msgstr "রুম" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_interval:0 +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +#: selection:res.alarm,trigger_interval:0 +msgid "Days" +msgstr "দিন" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Invitation Detail" +msgstr "" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:1355 +#: code:addons/base_calendar/wizard/base_calendar_invite_attendee.py:96 +#: code:addons/base_calendar/wizard/base_calendar_invite_attendee.py:143 +#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:128 +#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:136 +#, python-format +msgid "Error!" +msgstr "ভুল" + +#. module: base_calendar +#: selection:calendar.attendee,role:0 +msgid "Chair Person" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,action:0 +msgid "Procedure" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,state:0 +#: selection:calendar.todo,state:0 +msgid "Cancelled" +msgstr "বাতিল করা হয়েছে" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_interval:0 +#: selection:res.alarm,trigger_interval:0 +msgid "Minutes" +msgstr "মিনিট" + +#. module: base_calendar +#: selection:calendar.alarm,action:0 +msgid "Display" +msgstr "প্রদর্শন" + +#. module: base_calendar +#: view:calendar.event.edit.all:0 +msgid "Edit all Occurrences" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invitation type" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +msgid "Secondly" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,event_date:0 +#: field:calendar.attendee,event_date:0 +#: view:calendar.event:0 +msgid "Event Date" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Group By..." +msgstr "...দিয়ে গ্রুপ করুন" + +#. module: base_calendar +#: help:base_calendar.invite.attendee,email:0 +msgid "Provide external email address who will receive this invitation." +msgstr "" + +#. module: base_calendar +#: model:ir.module.module,description:base_calendar.module_meta_information +msgid "" +"Full featured calendar system that supports:\n" +" - Calendar of events\n" +" - Alerts (create requests)\n" +" - Recurring events\n" +" - Invitations to people" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,cutype:0 +msgid "Specify the type of Invitation" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +msgid "Years" +msgstr "বছর" + +#. module: base_calendar +#: field:calendar.alarm,event_end_date:0 +#: field:calendar.attendee,event_end_date:0 +msgid "Event End Date" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,role:0 +msgid "Optional Participation" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,date_deadline:0 +#: field:calendar.todo,date_deadline:0 +msgid "Deadline" +msgstr "ডেডলাইন" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:385 +#: code:addons/base_calendar/base_calendar.py:1088 +#: code:addons/base_calendar/base_calendar.py:1090 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,active:0 +#: help:calendar.todo,active:0 +msgid "" +"If the active field is set to true, it will allow you to hide the " +"event alarm information without removing it." +msgstr "" + +#. module: base_calendar +#: model:ir.module.module,shortdesc:base_calendar.module_meta_information +msgid "Basic Calendar Functionality" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,organizer:0 +#: field:calendar.event,organizer_id:0 +#: field:calendar.todo,organizer:0 +#: field:calendar.todo,organizer_id:0 +msgid "Organizer" +msgstr "আয়োজক" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +#: field:calendar.event,user_id:0 +#: field:calendar.todo,user_id:0 +msgid "Responsible" +msgstr "দায়িত্বপ্রাপ্ত" + +#. module: base_calendar +#: view:calendar.event:0 +#: model:res.request.link,name:base_calendar.request_link_meeting +msgid "Event" +msgstr "ইভেন্ট" + +#. module: base_calendar +#: help:calendar.event,edit_all:0 +#: help:calendar.todo,edit_all:0 +msgid "Edit all Occurrences of recurrent Meeting." +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_occurs:0 +#: selection:res.alarm,trigger_occurs:0 +msgid "Before" +msgstr "আগে" + +#. module: base_calendar +#: view:calendar.event:0 +#: selection:calendar.event,state:0 +#: selection:calendar.todo,state:0 +msgid "Confirmed" +msgstr "নিশ্চিত" + +#. module: base_calendar +#: model:ir.actions.act_window,name:base_calendar.action_calendar_event_edit_all +msgid "Edit all events" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,attendee_ids:0 +#: field:calendar.event,attendee_ids:0 +#: field:calendar.todo,attendee_ids:0 +msgid "Attendees" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Confirm" +msgstr "নিশ্চিত" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_todo +msgid "Calendar Task" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,su:0 +#: field:calendar.event,su:0 +#: field:calendar.todo,su:0 +msgid "Sun" +msgstr "রবি" + +#. module: base_calendar +#: field:calendar.attendee,cutype:0 +msgid "Invite Type" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,partner_id:0 +msgid "Partner related to contact" +msgstr "" + +#. module: base_calendar +#: view:res.alarm:0 +msgid "Reminder details" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,parent_ids:0 +msgid "Delegrated From" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,select1:0 +#: selection:calendar.event,select1:0 +#: selection:calendar.todo,select1:0 +msgid "Day of month" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event,location:0 +#: field:calendar.event.edit.all,location:0 +#: field:calendar.todo,location:0 +msgid "Location" +msgstr "স্থান" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,send_mail:0 +msgid "Send mail?" +msgstr "" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,email:0 +#: selection:calendar.alarm,action:0 +#: field:calendar.attendee,email:0 +msgid "Email" +msgstr "ই-মেইল" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Event Detail" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,state:0 +msgid "Run" +msgstr "চালাও" + +#. module: base_calendar +#: field:calendar.event,exdate:0 +#: field:calendar.todo,exdate:0 +msgid "Exception Date/Times" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,class:0 +#: selection:calendar.todo,class:0 +msgid "Confidential" +msgstr "গুপ্ত" + +#. module: base_calendar +#: field:base.calendar.set.exrule,end_date:0 +#: field:calendar.event,end_date:0 +#: field:calendar.todo,end_date:0 +msgid "Repeat Until" +msgstr "" + +#. module: base_calendar +#: model:ir.actions.act_window,help:base_calendar.action_res_alarm_view +msgid "" +"Create specific calendar alarms that may be assigned to calendar events or " +"meetings." +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Visibility" +msgstr "দৃশ্যমানতা" + +#. module: base_calendar +#: field:calendar.attendee,rsvp:0 +msgid "Required Reply?" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,base_calendar_url:0 +#: field:calendar.todo,base_calendar_url:0 +msgid "Caldav URL" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +msgid "Select range to Exclude" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,recurrent_uid:0 +#: field:calendar.todo,recurrent_uid:0 +msgid "Recurrent ID" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "July" +msgstr "জুলাই" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: selection:calendar.attendee,state:0 +msgid "Accepted" +msgstr "গৃহীত" + +#. module: base_calendar +#: field:base.calendar.set.exrule,th:0 +#: field:calendar.event,th:0 +#: field:calendar.todo,th:0 +msgid "Thu" +msgstr "বৃহঃ" + +#. module: base_calendar +#: field:calendar.attendee,child_ids:0 +msgid "Delegrated To" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Required Reply" +msgstr "উত্তর প্রয়োজন" + +#. module: base_calendar +#: selection:calendar.event,end_type:0 +#: selection:calendar.todo,end_type:0 +msgid "Forever" +msgstr "চিরকাল" + +#. module: base_calendar +#: selection:calendar.attendee,role:0 +msgid "Participation required" +msgstr "অংশগ্রহণ প্রয়োজন" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +msgid "_Cancel" +msgstr "বাতিল (_C)" + +#. module: base_calendar +#: field:calendar.event,create_date:0 +#: field:calendar.todo,create_date:0 +msgid "Created" +msgstr "তৈরী হয়েছে" + +#. module: base_calendar +#: selection:calendar.event,class:0 +#: selection:calendar.todo,class:0 +msgid "Private" +msgstr "ব্যক্তিগত" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,rrule_type:0 +#: selection:calendar.todo,rrule_type:0 +msgid "Daily" +msgstr "দৈনিক" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:385 +#, python-format +msgid "Can not Duplicate" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,class:0 +#: field:calendar.todo,class:0 +msgid "Mark as" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: field:calendar.attendee,partner_address_id:0 +msgid "Contact" +msgstr "যোগাযোগ" + +#. module: base_calendar +#: help:calendar.event,rrule_type:0 +#: help:calendar.todo,rrule_type:0 +msgid "Let the event automatically repeat at that interval" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Delegate" +msgstr "" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,partner_id:0 +#: view:calendar.attendee:0 +#: field:calendar.attendee,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +#: selection:base_calendar.invite.attendee,type:0 +msgid "Partner Contacts" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +msgid "_Ok" +msgstr "ঠিক আছে(_O)" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "First" +msgstr "প্রথম" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Privacy" +msgstr "প্রাইভেসি" + +#. module: base_calendar +#: field:calendar.event,vtimezone:0 +#: field:calendar.todo,vtimezone:0 +msgid "Timezone" +msgstr "টাইমজোন" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Subject" +msgstr "বিষয়" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "September" +msgstr "সেপ্টেম্বর" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "December" +msgstr "" + +#. module: base_calendar +#: help:base_calendar.invite.attendee,send_mail:0 +msgid "Check this if you want to send an Email to Invited Person" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Availability" +msgstr "" + +#. module: base_calendar +#: view:calendar.event.edit.all:0 +msgid "_Save" +msgstr "সংরক্ষণ (_S)" + +#. module: base_calendar +#: selection:calendar.attendee,cutype:0 +msgid "Individual" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,count:0 +#: help:calendar.todo,count:0 +msgid "Repeat x times" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,user_id:0 +msgid "Owner" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Delegation Info" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event.edit.all,date:0 +msgid "Start Date" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,cn:0 +msgid "Common name" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: selection:calendar.attendee,state:0 +msgid "Declined" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "My Role" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "My Events" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Decline" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +msgid "Weeks" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,cutype:0 +msgid "Group" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,edit_all:0 +#: field:calendar.todo,edit_all:0 +msgid "Edit All" +msgstr "" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,contact_ids:0 +msgid "Contacts" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_res_alarm +msgid "Basic Alarm Information" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,fr:0 +#: field:calendar.event,fr:0 +#: field:calendar.todo,fr:0 +msgid "Fri" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_interval:0 +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +#: selection:res.alarm,trigger_interval:0 +msgid "Hours" +msgstr "" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:1090 +#, python-format +msgid "Count can not be Negative" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,member:0 +msgid "Member" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,location:0 +#: help:calendar.todo,location:0 +msgid "Location of Event" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,rrule:0 +#: field:calendar.todo,rrule:0 +msgid "Recurrent Rule" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,state:0 +msgid "Draft" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,attach:0 +msgid "Attachment" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invitation From" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "End of recurrency" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event.edit.all,alarm_id:0 +msgid "Reminder" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +#: model:ir.model,name:base_calendar.model_base_calendar_set_exrule +msgid "Set Exrule" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: model:ir.actions.act_window,name:base_calendar.action_view_event +#: model:ir.ui.menu,name:base_calendar.menu_events +msgid "Events" +msgstr "" + +#. module: base_calendar +#: model:ir.actions.act_window,name:base_calendar.action_view_calendar_invite_attendee_wizard +#: model:ir.model,name:base_calendar.model_base_calendar_invite_attendee +msgid "Invite Attendees" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,email:0 +msgid "Email of Invited Person" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,repeat:0 +#: field:calendar.event,count:0 +#: field:calendar.todo,count:0 +#: field:res.alarm,repeat:0 +msgid "Repeat" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,dir:0 +msgid "" +"Reference to the URIthat points to the directory information corresponding " +"to the attendee." +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "August" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Monday" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Third" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "June" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,alarm_id:0 +msgid "Basic Alarm" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +#: view:calendar.event:0 +msgid "The" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: field:calendar.attendee,delegated_from:0 +msgid "Delegated From" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,user_id:0 +msgid "User" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event,date:0 +msgid "Date" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "November" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,member:0 +msgid "Indicate the groups that the attendee belongs to" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +msgid "Data" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,mo:0 +#: field:calendar.event,mo:0 +#: field:calendar.todo,mo:0 +msgid "Mon" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,count:0 +msgid "Count" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +msgid "No Repeat" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "October" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Uncertain" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,language:0 +msgid "Language" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,trigger_occurs:0 +#: field:res.alarm,trigger_occurs:0 +msgid "Triggers" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "January" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,trigger_related:0 +#: field:res.alarm,trigger_related:0 +msgid "Related to" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,interval:0 +#: field:calendar.alarm,trigger_interval:0 +#: field:res.alarm,trigger_interval:0 +msgid "Interval" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Wednesday" +msgstr "" + +#. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:1088 +#, python-format +msgid "Interval can not be Negative" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,name:0 +#: view:calendar.event:0 +msgid "Summary" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,active:0 +#: field:calendar.event,active:0 +#: field:calendar.todo,active:0 +#: field:res.alarm,active:0 +msgid "Active" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Choose day in the month where repeat the meeting" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,action:0 +msgid "Action" +msgstr "" + +#. module: base_calendar +#: help:base_calendar.invite.attendee,type:0 +msgid "Select whom you want to Invite" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,duration:0 +#: help:res.alarm,duration:0 +msgid "" +"Duration' and 'Repeat' are both optional, but if one occurs, so MUST the " +"other" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_event_edit_all +msgid "Calendar Edit all event" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,role:0 +msgid "Participation role for the calendar user" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: field:calendar.attendee,delegated_to:0 +msgid "Delegated To" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,action:0 +msgid "Defines the action to be invoked when an alarm is triggered" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,end_type:0 +#: selection:calendar.todo,end_type:0 +msgid "End date" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Search Events" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Recurrency Option" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +#: selection:calendar.event,rrule_type:0 +#: selection:calendar.todo,rrule_type:0 +msgid "Weekly" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,active:0 +#: help:res.alarm,active:0 +msgid "" +"If the active field is set to true, it will allow you to hide the event " +"alarm information without removing it." +msgstr "" + +#. module: base_calendar +#: field:calendar.event,recurrent_id:0 +#: field:calendar.todo,recurrent_id:0 +msgid "Recurrent ID date" +msgstr "" + +#. module: base_calendar +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,state:0 +#: view:calendar.attendee:0 +#: field:calendar.attendee,state:0 +#: view:calendar.event:0 +#: field:calendar.event,state:0 +#: field:calendar.todo,state:0 +msgid "State" +msgstr "" + +#. module: base_calendar +#: view:res.alarm:0 +msgid "Reminder Details" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "To Review" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,freq:0 +#: field:calendar.event,freq:0 +#: field:calendar.todo,freq:0 +msgid "Frequency" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,state:0 +msgid "Done" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,interval:0 +#: help:calendar.todo,interval:0 +msgid "Repeat every (Days/Week/Month/Year)" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +#: field:base_calendar.invite.attendee,user_ids:0 +msgid "Users" +msgstr "" + +#. module: base_calendar +#: view:base.calendar.set.exrule:0 +msgid "of" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +#: view:calendar.event:0 +#: view:calendar.event.edit.all:0 +msgid "Cancel" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_res_users +msgid "res.users" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Tuesday" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,description:0 +msgid "" +"Provides a more complete description of the " +"calendar component, than that provided by the " +"\"SUMMARY\" property" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Responsible User" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,availability:0 +#: selection:calendar.event,show_as:0 +#: selection:calendar.todo,show_as:0 +#: selection:res.users,availability:0 +msgid "Busy" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_event +msgid "Calendar Event" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,state:0 +#: selection:calendar.event,state:0 +#: selection:calendar.todo,state:0 +msgid "Tentative" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,interval:0 +#: field:calendar.todo,interval:0 +msgid "Repeat every" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,end_type:0 +#: selection:calendar.todo,end_type:0 +msgid "Fix amout of times" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,recurrency:0 +#: field:calendar.todo,recurrency:0 +msgid "Recurrent" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,rrule_type:0 +#: field:calendar.todo,rrule_type:0 +msgid "Recurrency" +msgstr "" + +#. module: base_calendar +#: model:ir.actions.act_window,name:base_calendar.action_view_attendee_form +#: model:ir.ui.menu,name:base_calendar.menu_attendee_invitations +msgid "Event Invitations" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Thursday" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,exrule:0 +#: field:calendar.todo,exrule:0 +msgid "Exception Rule" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,language:0 +msgid "" +"To specify the language for text values in aproperty or property parameter." +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Details" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,exrule:0 +#: help:calendar.todo,exrule:0 +msgid "" +"Defines a rule or repeating pattern of time to exclude from the recurring " +"rule." +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,month_list:0 +#: field:calendar.event,month_list:0 +#: field:calendar.todo,month_list:0 +msgid "Month" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +#: view:calendar.event:0 +msgid "Invite People" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,rrule:0 +#: help:calendar.todo,rrule:0 +msgid "" +"Defines a rule or repeating pattern for recurring events\n" +"e.g.: Every other month on the last Sunday of the month for 10 occurrences: " +" FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=-1SU" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,dir:0 +msgid "URI Reference" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,description:0 +#: view:calendar.event:0 +#: field:calendar.event,description:0 +#: field:calendar.event,name:0 +#: field:calendar.todo,description:0 +#: field:calendar.todo,name:0 +msgid "Description" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "May" +msgstr "" + +#. module: base_calendar +#: field:base_calendar.invite.attendee,type:0 +#: view:calendar.attendee:0 +msgid "Type" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Search Invitations" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,trigger_occurs:0 +#: selection:res.alarm,trigger_occurs:0 +msgid "After" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,state:0 +msgid "Stop" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_ir_values +msgid "ir.values" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_ir_model +msgid "Objects" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: selection:calendar.attendee,state:0 +msgid "Delegated" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,sa:0 +#: field:calendar.event,sa:0 +#: field:calendar.todo,sa:0 +msgid "Sat" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Choose day where repeat the meeting" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,freq:0 +msgid "Minutely" +msgstr "" + +#. module: base_calendar +#: help:calendar.attendee,sent_by:0 +msgid "Specify the user that is acting on behalf of the calendar user" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +#: field:calendar.event.edit.all,date_deadline:0 +msgid "End Date" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "February" +msgstr "" + +#. module: base_calendar +#: selection:calendar.event,freq:0 +#: selection:calendar.todo,freq:0 +msgid "Months" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,cutype:0 +msgid "Resource" +msgstr "" + +#. module: base_calendar +#: field:res.alarm,name:0 +msgid "Name" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_alarm +msgid "Event alarm information" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,name:0 +msgid "" +"Contains the text to be used as the message subject for " +"email or contains the text to be used for display" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,alarm_id:0 +#: field:calendar.event,base_calendar_alarm_id:0 +#: field:calendar.todo,alarm_id:0 +#: field:calendar.todo,base_calendar_alarm_id:0 +msgid "Alarm" +msgstr "" + +#. module: base_calendar +#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:90 +#, python-format +msgid "Please Apply Recurrency before applying Exception Rule." +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,sent_by_uid:0 +msgid "Sent By User" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,month_list:0 +#: selection:calendar.event,month_list:0 +#: selection:calendar.todo,month_list:0 +msgid "April" +msgstr "" + +#. module: base_calendar +#: view:calendar.event:0 +msgid "Recurrency period" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,week_list:0 +#: field:calendar.event,week_list:0 +#: field:calendar.todo,week_list:0 +msgid "Weekday" +msgstr "" + +#. module: base_calendar +#: field:base.calendar.set.exrule,byday:0 +#: field:calendar.event,byday:0 +#: field:calendar.todo,byday:0 +msgid "By day" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,model_id:0 +msgid "Model" +msgstr "" + +#. module: base_calendar +#: selection:calendar.alarm,action:0 +msgid "Audio" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,id:0 +#: field:calendar.todo,id:0 +msgid "ID" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,role:0 +msgid "For information Purpose" +msgstr "" + +#. module: base_calendar +#: view:base_calendar.invite.attendee:0 +msgid "Invite" +msgstr "" + +#. module: base_calendar +#: model:ir.model,name:base_calendar.model_calendar_attendee +msgid "Attendee information" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,res_id:0 +msgid "Resource ID" +msgstr "" + +#. module: base_calendar +#: selection:calendar.attendee,state:0 +msgid "Needs Action" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,sent_by:0 +msgid "Sent By" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,sequence:0 +#: field:calendar.todo,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: base_calendar +#: help:calendar.event,alarm_id:0 +#: help:calendar.todo,alarm_id:0 +msgid "Set an alarm at this time, before the event occurs" +msgstr "" + +#. module: base_calendar +#: selection:base_calendar.invite.attendee,type:0 +msgid "Internal User" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +#: view:calendar.event:0 +msgid "Accept" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,week_list:0 +#: selection:calendar.event,week_list:0 +#: selection:calendar.todo,week_list:0 +msgid "Saturday" +msgstr "" + +#. module: base_calendar +#: view:calendar.attendee:0 +msgid "Invitation To" +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Second" +msgstr "" + +#. module: base_calendar +#: field:calendar.attendee,availability:0 +#: field:res.users,availability:0 +msgid "Free/Busy" +msgstr "" + +#. module: base_calendar +#: field:calendar.event,end_type:0 +#: field:calendar.todo,end_type:0 +msgid "Way to end reccurency" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,duration:0 +#: field:calendar.alarm,trigger_duration:0 +#: field:calendar.event,duration:0 +#: field:calendar.todo,date:0 +#: field:calendar.todo,duration:0 +#: field:res.alarm,duration:0 +#: field:res.alarm,trigger_duration:0 +msgid "Duration" +msgstr "" + +#. module: base_calendar +#: selection:base_calendar.invite.attendee,type:0 +msgid "External Email" +msgstr "" + +#. module: base_calendar +#: field:calendar.alarm,trigger_date:0 +msgid "Trigger Date" +msgstr "" + +#. module: base_calendar +#: help:calendar.alarm,attach:0 +msgid "" +"* Points to a sound resource, which is rendered when the " +"alarm is triggered for audio,\n" +" * File which is intended to be sent as message " +"attachments for email,\n" +" * Points to a procedure resource, which is invoked when " +" the alarm is triggered for procedure." +msgstr "" + +#. module: base_calendar +#: selection:base.calendar.set.exrule,byday:0 +#: selection:calendar.event,byday:0 +#: selection:calendar.todo,byday:0 +msgid "Fifth" +msgstr "" diff --git a/addons/base_contact/i18n/cs.po b/addons/base_contact/i18n/cs.po index c93c7f7f7ba..2e4b8e18e42 100644 --- a/addons/base_contact/i18n/cs.po +++ b/addons/base_contact/i18n/cs.po @@ -4,17 +4,18 @@ # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" +"Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-08-03 00:58+0000\n" -"Last-Translator: Mantavya Gajjar (Open ERP) <Unknown>\n" -"Language-Team: \n" +"PO-Revision-Date: 2011-11-25 12:34+0000\n" +"Last-Translator: Jiří Hajda <robie@centrum.cz>\n" +"Language-Team: Czech <openerp-i18n-czech@lists.launchpad.net >\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:04+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:49+0000\n" +"X-Generator: Launchpad (build 14381)\n" +"X-Poedit-Language: Czech\n" #. module: base_contact #: field:res.partner.contact,title:0 @@ -24,7 +25,7 @@ msgstr "Název" #. module: base_contact #: view:res.partner.address:0 msgid "# of Contacts" -msgstr "" +msgstr "# z kontaktů" #. module: base_contact #: field:res.partner.job,fax:0 @@ -34,27 +35,27 @@ msgstr "Fax" #. module: base_contact #: view:base.contact.installer:0 msgid "title" -msgstr "" +msgstr "nadpis" #. module: base_contact #: help:res.partner.job,date_start:0 msgid "Start date of job(Joining Date)" -msgstr "" +msgstr "Datum zahájení práce (datum připojení)" #. module: base_contact #: view:base.contact.installer:0 msgid "Select the Option for Addresses Migration" -msgstr "" +msgstr "Vyberte volbu pro přesun adres" #. module: base_contact #: help:res.partner.job,function:0 msgid "Function of this contact with this partner" -msgstr "" +msgstr "Funkce tohoto kontaktu s tímto partnerem" #. module: base_contact #: help:res.partner.job,state:0 msgid "Status of Address" -msgstr "" +msgstr "Stav adresy" #. module: base_contact #: help:res.partner.job,name:0 @@ -62,64 +63,66 @@ msgid "" "You may enter Address first,Partner will be linked " "automatically if any." msgstr "" +"Můžete zadat nejdříve adresu. Pokud je nějaký partner, " +"bude napojen automaticky." #. module: base_contact #: help:res.partner.job,fax:0 msgid "Job FAX no." -msgstr "" +msgstr "Číslo FAXu do práce" #. module: base_contact #: field:res.partner.contact,mobile:0 msgid "Mobile" -msgstr "" +msgstr "Mobil" #. module: base_contact #: view:res.partner.contact:0 #: field:res.partner.contact,comment:0 msgid "Notes" -msgstr "" +msgstr "Poznámky" #. module: base_contact #: model:process.node,note:base_contact.process_node_contacts0 msgid "People you work with." -msgstr "" +msgstr "Lidé, s kterými pracujete." #. module: base_contact #: model:process.transition,note:base_contact.process_transition_functiontoaddress0 msgid "Define functions and address." -msgstr "" +msgstr "Určit funkce a adresu." #. module: base_contact #: help:res.partner.job,date_stop:0 msgid "Last date of job" -msgstr "" +msgstr "Poslední datum práce" #. module: base_contact #: view:base.contact.installer:0 #: field:base.contact.installer,migrate:0 msgid "Migrate" -msgstr "" +msgstr "Přesunout" #. module: base_contact #: view:res.partner.contact:0 #: field:res.partner.job,name:0 msgid "Partner" -msgstr "" +msgstr "Partner" #. module: base_contact #: model:process.node,note:base_contact.process_node_function0 msgid "Jobs at a same partner address." -msgstr "" +msgstr "Pracovní pozice u stejné adresy partnera." #. module: base_contact #: model:process.node,name:base_contact.process_node_partners0 msgid "Partners" -msgstr "" +msgstr "Partneři" #. module: base_contact #: field:res.partner.job,state:0 msgid "State" -msgstr "" +msgstr "Stav" #. module: base_contact #: help:res.partner.contact,active:0 @@ -127,6 +130,8 @@ msgid "" "If the active field is set to False, it will allow you to " "hide the partner contact without removing it." msgstr "" +"Pokud je aktivní pole nastaveno na Nepravda, umožní vám to " +"skrýt kontakt partnera bez jeho odstranění." #. module: base_contact #: model:ir.module.module,description:base_contact.module_meta_information @@ -151,22 +156,40 @@ msgid "" "an other object.\n" " " msgstr "" +"\n" +" Tento modul umožňuje úplně spravovat vaše kontakty.\n" +"\n" +" Nechá vás určit\n" +" *kontakty nevztažené k partnerovi,\n" +" *kontakty pracující na několika adresách (případně i pro různé " +"partnery),\n" +" *kontakty s možnými různými funkcemi pro každou jeho pracovní " +"adresu\n" +"\n" +" Také přidává nové položky nabídky umístěné v\n" +" Partneři \\ Kontakty\n" +" Partneři \\ Funkce\n" +"\n" +" Berte na vědomí, že tento modul převádí existující adresy na \"adresy + " +"kontakty\". To znamená, že některé pole adres budou chybět (jako jméno " +"kontaktu), protože ty jsou definovány v jiném objektu.\n" +" " #. module: base_contact #: model:ir.module.module,shortdesc:base_contact.module_meta_information #: model:process.process,name:base_contact.process_process_basecontactprocess0 msgid "Base Contact" -msgstr "" +msgstr "Základní kontakt" #. module: base_contact #: field:res.partner.job,date_stop:0 msgid "Date Stop" -msgstr "" +msgstr "Datum zastavení" #. module: base_contact #: model:ir.actions.act_window,name:base_contact.action_res_partner_job msgid "Contact's Jobs" -msgstr "" +msgstr "Pozice kontaktu" #. module: base_contact #: view:res.partner:0 @@ -179,95 +202,97 @@ msgid "" "Order of importance of this job title in the list of job " "title of the linked partner" msgstr "" +"Pořadí důležitosti této pracovní pozice v seznamu titulů " +"pozic napojeného partnera" #. module: base_contact #: field:res.partner.job,extension:0 msgid "Extension" -msgstr "" +msgstr "Rozšíření" #. module: base_contact #: help:res.partner.job,extension:0 msgid "Internal/External extension phone number" -msgstr "" +msgstr "Vnitřní/vnější telefoní číslo klapky" #. module: base_contact #: help:res.partner.job,phone:0 msgid "Job Phone no." -msgstr "" +msgstr "Telefoní číslo do práce." #. module: base_contact #: view:res.partner.contact:0 #: field:res.partner.contact,job_ids:0 msgid "Functions and Addresses" -msgstr "" +msgstr "Funkce a adresy" #. module: base_contact #: model:ir.model,name:base_contact.model_res_partner_contact #: field:res.partner.job,contact_id:0 msgid "Contact" -msgstr "" +msgstr "Kontakt" #. module: base_contact #: help:res.partner.job,email:0 msgid "Job E-Mail" -msgstr "" +msgstr "Pracovní E-Mail" #. module: base_contact #: field:res.partner.job,sequence_partner:0 msgid "Partner Seq." -msgstr "" +msgstr "Poř. parnera" #. module: base_contact #: model:process.transition,name:base_contact.process_transition_functiontoaddress0 msgid "Function to address" -msgstr "" +msgstr "Funkce na adresu" #. module: base_contact #: field:base.contact.installer,progress:0 msgid "Configuration Progress" -msgstr "" +msgstr "Průběh nastavení" #. module: base_contact #: field:res.partner.contact,name:0 msgid "Last Name" -msgstr "" +msgstr "Příjmení" #. module: base_contact #: view:res.partner:0 #: view:res.partner.contact:0 msgid "Communication" -msgstr "" +msgstr "Komunikace" #. module: base_contact #: field:base.contact.installer,config_logo:0 #: field:res.partner.contact,photo:0 msgid "Image" -msgstr "" +msgstr "Obrázek" #. module: base_contact #: selection:res.partner.job,state:0 msgid "Past" -msgstr "" +msgstr "Minulý" #. module: base_contact #: model:ir.model,name:base_contact.model_res_partner_address msgid "Partner Addresses" -msgstr "" +msgstr "Adresy partnerů" #. module: base_contact #: view:base.contact.installer:0 msgid "Address's Migration to Contacts" -msgstr "" +msgstr "Stěhování adresy na kontakty" #. module: base_contact #: field:res.partner.job,sequence_contact:0 msgid "Contact Seq." -msgstr "" +msgstr "Poř. kontaktu" #. module: base_contact #: view:res.partner.address:0 msgid "Search Contact" -msgstr "" +msgstr "Hledat kontakt" #. module: base_contact #: model:ir.actions.act_window,name:base_contact.action_partner_contact_form @@ -277,7 +302,7 @@ msgstr "" #: view:res.partner:0 #: field:res.partner.address,job_ids:0 msgid "Contacts" -msgstr "Kotakty" +msgstr "Kontakty" #. module: base_contact #: view:base.contact.installer:0 @@ -285,52 +310,54 @@ msgid "" "Due to changes in Address and Partner's relation, some of the details from " "address are needed to be migrated into contact information." msgstr "" +"Kvůli změnám v adrese a vztahu partnera, některé podrobnosti adresy jsou " +"potřebné, aby byly přesunuty do informací účtu." #. module: base_contact #: model:process.node,note:base_contact.process_node_addresses0 msgid "Working and private addresses." -msgstr "" +msgstr "Pracovní a soukromé adresy." #. module: base_contact #: help:res.partner.job,address_id:0 msgid "Address which is linked to the Partner" -msgstr "" +msgstr "Adresa, která je napojena na partnera" #. module: base_contact #: field:res.partner.job,function:0 msgid "Partner Function" -msgstr "" +msgstr "Funkce partnera" #. module: base_contact #: help:res.partner.job,other:0 msgid "Additional phone field" -msgstr "" +msgstr "Doplňující pole telefonu" #. module: base_contact #: field:res.partner.contact,website:0 msgid "Website" -msgstr "" +msgstr "Webová stránka" #. module: base_contact #: view:base.contact.installer:0 msgid "Otherwise these details will not be visible from address/contact." -msgstr "" +msgstr "Jinak tyto podrobnosti nebudou viditelné z adresy/kontaktu." #. module: base_contact #: view:base.contact.installer:0 msgid "Configure" -msgstr "" +msgstr "Nastavit" #. module: base_contact #: field:res.partner.contact,email:0 #: field:res.partner.job,email:0 msgid "E-Mail" -msgstr "" +msgstr "E-mail" #. module: base_contact #: model:ir.model,name:base_contact.model_base_contact_installer msgid "base.contact.installer" -msgstr "" +msgstr "base.contact.installer" #. module: base_contact #: view:res.partner.job:0 @@ -345,27 +372,27 @@ msgstr "Telefon" #. module: base_contact #: view:base.contact.installer:0 msgid "Do you want to migrate your Address data in Contact Data?" -msgstr "" +msgstr "Chcete stěhovat vaše data adresy v datech kontaktu?" #. module: base_contact #: field:res.partner.contact,active:0 msgid "Active" -msgstr "" +msgstr "Aktivní" #. module: base_contact #: field:res.partner.contact,function:0 msgid "Main Function" -msgstr "" +msgstr "Hlavní funkce" #. module: base_contact #: model:process.transition,note:base_contact.process_transition_partnertoaddress0 msgid "Define partners and their addresses." -msgstr "" +msgstr "Určuje partnery a jejich adresy." #. module: base_contact #: view:res.partner.contact:0 msgid "Seq." -msgstr "" +msgstr "Poř." #. module: base_contact #: field:res.partner.contact,lang_id:0 @@ -375,37 +402,37 @@ msgstr "Jazyk" #. module: base_contact #: view:res.partner.contact:0 msgid "Extra Information" -msgstr "" +msgstr "Speciální informace" #. module: base_contact #: model:process.node,note:base_contact.process_node_partners0 msgid "Companies you work with." -msgstr "" +msgstr "Společnosti, se kterými pracujete." #. module: base_contact #: view:res.partner.contact:0 msgid "Partner Contact" -msgstr "" +msgstr "Kontakt partnera" #. module: base_contact #: view:res.partner.contact:0 msgid "General" -msgstr "" +msgstr "Obecný" #. module: base_contact #: view:res.partner.contact:0 msgid "Photo" -msgstr "" +msgstr "Fotka" #. module: base_contact #: field:res.partner.contact,birthdate:0 msgid "Birth Date" -msgstr "" +msgstr "Datum narození" #. module: base_contact #: help:base.contact.installer,migrate:0 msgid "If you select this, all addresses will be migrated." -msgstr "" +msgstr "Pokud toto vyberete, všechny adresy budou přesunuty." #. module: base_contact #: selection:res.partner.job,state:0 @@ -420,12 +447,12 @@ msgstr "Křestní jméno" #. module: base_contact #: model:ir.model,name:base_contact.model_res_partner_job msgid "Contact Partner Function" -msgstr "" +msgstr "Kontakt funkce partnera" #. module: base_contact #: field:res.partner.job,other:0 msgid "Other" -msgstr "" +msgstr "Jiné" #. module: base_contact #: model:process.node,name:base_contact.process_node_function0 @@ -436,17 +463,17 @@ msgstr "Funkce" #: field:res.partner.address,job_id:0 #: field:res.partner.contact,job_id:0 msgid "Main Job" -msgstr "" +msgstr "Hlavní práce" #. module: base_contact #: model:process.transition,note:base_contact.process_transition_contacttofunction0 msgid "Defines contacts and functions." -msgstr "" +msgstr "Určuje kontakty a funkce." #. module: base_contact #: model:process.transition,name:base_contact.process_transition_contacttofunction0 msgid "Contact to function" -msgstr "" +msgstr "Kontakt na funkci" #. module: base_contact #: view:res.partner:0 @@ -457,53 +484,53 @@ msgstr "Adresa" #. module: base_contact #: field:res.partner.contact,country_id:0 msgid "Nationality" -msgstr "" +msgstr "Národnost" #. module: base_contact #: model:ir.actions.act_window,name:base_contact.act_res_partner_jobs msgid "Open Jobs" -msgstr "" +msgstr "Otevřené pozice" #. module: base_contact #: field:base.contact.installer,name:0 msgid "Name" -msgstr "" +msgstr "Jméno" #. module: base_contact #: view:base.contact.installer:0 msgid "You can migrate Partner's current addresses to the contact." -msgstr "" +msgstr "Můžete stěhovat partnerovu aktuální adresu do kontaktu." #. module: base_contact #: field:res.partner.contact,partner_id:0 msgid "Main Employer" -msgstr "" +msgstr "Hlavní zaměstnavatel" #. module: base_contact #: model:ir.actions.act_window,name:base_contact.action_base_contact_installer msgid "Address Migration" -msgstr "" +msgstr "Stěhování adresy" #. module: base_contact #: view:res.partner:0 msgid "Postal Address" -msgstr "" +msgstr "Poštovní adresa" #. module: base_contact #: model:process.node,name:base_contact.process_node_addresses0 #: view:res.partner:0 msgid "Addresses" -msgstr "" +msgstr "Adresy" #. module: base_contact #: model:process.transition,name:base_contact.process_transition_partnertoaddress0 msgid "Partner to address" -msgstr "" +msgstr "Partner na adresu" #. module: base_contact #: field:res.partner.job,date_start:0 msgid "Date Start" -msgstr "" +msgstr "Počáteční datum" #. module: base_contact #: help:res.partner.job,sequence_contact:0 @@ -511,6 +538,8 @@ msgid "" "Order of importance of this address in the list of " "addresses of the linked contact" msgstr "" +"Pořadí podle důležitosti této adresy v seznamu adres napojeného " +"kontaktu" #~ msgid "Invalid XML for View Architecture!" #~ msgstr "Invalidní XML pro zobrazení architektury!" diff --git a/addons/base_crypt/__init__.py b/addons/base_crypt/__init__.py index a8b9a6b0740..921c536b575 100644 --- a/addons/base_crypt/__init__.py +++ b/addons/base_crypt/__init__.py @@ -21,3 +21,5 @@ from service import security import crypt + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_crypt/__openerp__.py b/addons/base_crypt/__openerp__.py index 025f7db0704..23e29420036 100644 --- a/addons/base_crypt/__openerp__.py +++ b/addons/base_crypt/__openerp__.py @@ -62,3 +62,5 @@ will disable LDAP authentication completely if installed at the same time. "installable": True, "certificate" : "00721290471310299725", } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_crypt/i18n/oc.po b/addons/base_crypt/i18n/oc.po new file mode 100644 index 00000000000..ef234e97cb7 --- /dev/null +++ b/addons/base_crypt/i18n/oc.po @@ -0,0 +1,73 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-20 09:17+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: base_crypt +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "Podètz pas aver dos utilizaires amb lo meteis identificant !" + +#. module: base_crypt +#: model:ir.model,name:base_crypt.model_res_users +msgid "res.users" +msgstr "res.users" + +#. module: base_crypt +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "" +"La societat causida fa pas partida de las societats autorizadas per aqueste " +"utilizaire" + +#. module: base_crypt +#: code:addons/base_crypt/crypt.py:132 +#, python-format +msgid "Please specify the password !" +msgstr "Entratz un senhal" + +#. module: base_crypt +#: model:ir.module.module,shortdesc:base_crypt.module_meta_information +msgid "Base - Password Encryption" +msgstr "Basa - Chifratge del senhal" + +#. module: base_crypt +#: code:addons/base_crypt/crypt.py:132 +#, python-format +msgid "Error" +msgstr "Error" + +#. module: base_crypt +#: model:ir.module.module,description:base_crypt.module_meta_information +msgid "" +"This module replaces the cleartext password in the database with a password " +"hash,\n" +"preventing anyone from reading the original password.\n" +"For your existing user base, the removal of the cleartext passwords occurs " +"the first time\n" +"a user logs into the database, after installing base_crypt.\n" +"After installing this module it won't be possible to recover a forgotten " +"password for your\n" +"users, the only solution is for an admin to set a new password.\n" +"\n" +"Note: installing this module does not mean you can ignore basic security " +"measures,\n" +"as the password is still transmitted unencrypted on the network (by the " +"client),\n" +"unless you are using a secure protocol such as XML-RPCS.\n" +" " +msgstr "" diff --git a/addons/base_module_doc_rst/__init__.py b/addons/base_module_doc_rst/__init__.py index f306de84dba..87582ff4c7c 100644 --- a/addons/base_module_doc_rst/__init__.py +++ b/addons/base_module_doc_rst/__init__.py @@ -21,3 +21,5 @@ import base_module_doc_rst import wizard import report + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_module_doc_rst/__openerp__.py b/addons/base_module_doc_rst/__openerp__.py index 41425f77749..22a3b39028b 100644 --- a/addons/base_module_doc_rst/__openerp__.py +++ b/addons/base_module_doc_rst/__openerp__.py @@ -42,3 +42,5 @@ This module generates the Technical Guides of selected modules in Restructured T 'images': ['images/base_module_doc_rst1.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_module_doc_rst/report/report_proximity_graph.py b/addons/base_module_doc_rst/report/report_proximity_graph.py index d14d709f501..b17d4bb517f 100644 --- a/addons/base_module_doc_rst/report/report_proximity_graph.py +++ b/addons/base_module_doc_rst/report/report_proximity_graph.py @@ -78,4 +78,5 @@ class report_graph(report.interface.report_int): pdf_string = self.get_proximity_graph(cr, uid, data['id']) return (pdf_string, 'pdf') -report_graph('report.proximity.graph', 'ir.module.module')
\ No newline at end of file +report_graph('report.proximity.graph', 'ir.module.module') +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_module_doc_rst/wizard/__init__.py b/addons/base_module_doc_rst/wizard/__init__.py index 6f6e62e8767..c6614aacbc1 100644 --- a/addons/base_module_doc_rst/wizard/__init__.py +++ b/addons/base_module_doc_rst/wizard/__init__.py @@ -22,3 +22,5 @@ import wizard_tech_guide_rst import generate_relation_graph + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_module_doc_rst/wizard/wizard_tech_guide_rst.py b/addons/base_module_doc_rst/wizard/wizard_tech_guide_rst.py index b7a5d6da397..bb02d7c33d2 100644 --- a/addons/base_module_doc_rst/wizard/wizard_tech_guide_rst.py +++ b/addons/base_module_doc_rst/wizard/wizard_tech_guide_rst.py @@ -507,3 +507,5 @@ class wizard_tech_guide_rst(wizard.interface): wizard_tech_guide_rst('tech.guide.rst') + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/About.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/About.py index b31065ce37e..401cf88b418 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/About.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/About.py @@ -109,3 +109,5 @@ if __name__<>"package" and __name__=="__main__": elif __name__=="package": g_ImplementationHelper.addImplementation( About, "org.openoffice.openerp.report.about", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/AddAttachment.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/AddAttachment.py index 4dbb28a30c0..c65ba32e6bf 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/AddAttachment.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/AddAttachment.py @@ -275,3 +275,5 @@ if __name__<>"package" and __name__=="__main__": AddAttachment(None) elif __name__=="package": g_ImplementationHelper.addImplementation( AddAttachment, "org.openoffice.openerp.report.addattachment", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Change.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Change.py index 0b68ab10b01..cdc5c7553b1 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Change.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Change.py @@ -137,3 +137,5 @@ if __name__<>"package" and __name__=="__main__": elif __name__=="package": g_ImplementationHelper.addImplementation( Change, "org.openoffice.openerp.report.change", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ConvertBracesToField.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ConvertBracesToField.py index 59b7d32b529..bb80c3ecd61 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ConvertBracesToField.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ConvertBracesToField.py @@ -283,3 +283,5 @@ if __name__<>"package": else: g_ImplementationHelper.addImplementation( ConvertBracesToField, "org.openoffice.openerp.report.convertBF", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ConvertFieldsToBraces.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ConvertFieldsToBraces.py index d804405c990..892061c56b4 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ConvertFieldsToBraces.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ConvertFieldsToBraces.py @@ -83,3 +83,5 @@ if __name__<>"package": else: g_ImplementationHelper.addImplementation( ConvertFieldsToBraces, "org.openoffice.openerp.report.convertFB", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ExportToRML.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ExportToRML.py index e2720c1e803..dd00f1719e1 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ExportToRML.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ExportToRML.py @@ -130,3 +130,5 @@ if __name__<>"package" and __name__=="__main__": ExportToRML(None) elif __name__=="package": g_ImplementationHelper.addImplementation( ExportToRML, "org.openoffice.openerp.report.exporttorml", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Expression.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Expression.py index 074a3bd020e..ecdf13454dc 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Expression.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Expression.py @@ -113,3 +113,5 @@ if __name__<>"package" and __name__=="__main__": elif __name__=="package": g_ImplementationHelper.addImplementation( Expression, "org.openoffice.openerp.report.expression", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Fields.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Fields.py index cfe65d61022..92044f78fe1 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Fields.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Fields.py @@ -289,3 +289,5 @@ if __name__<>"package" and __name__=="__main__": elif __name__=="package": g_ImplementationHelper.addImplementation( Fields, "org.openoffice.openerp.report.fields", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/LoginTest.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/LoginTest.py index 012c6f896a2..85059d7712c 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/LoginTest.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/LoginTest.py @@ -53,3 +53,5 @@ class LoginTest: if not loginstatus: Change(None) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ModifyExistingReport.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ModifyExistingReport.py index 138513475bb..2ccd8358c97 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ModifyExistingReport.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ModifyExistingReport.py @@ -211,3 +211,5 @@ if __name__<>"package" and __name__=="__main__": elif __name__=="package": g_ImplementationHelper.addImplementation( ModifyExistingReport, "org.openoffice.openerp.report.modifyreport", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/NewReport.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/NewReport.py index 0e4a18c3b10..6022e44df7a 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/NewReport.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/NewReport.py @@ -117,3 +117,5 @@ elif __name__=="package": NewReport, "org.openoffice.openerp.report.opennewreport", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Repeatln.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Repeatln.py index d8458be027d..0eab6d1710c 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Repeatln.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Repeatln.py @@ -298,3 +298,5 @@ if __name__<>"package" and __name__=="__main__": elif __name__=="package": g_ImplementationHelper = unohelper.ImplementationHelper() g_ImplementationHelper.addImplementation( RepeatIn, "org.openoffice.openerp.report.repeatln", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/SendToServer.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/SendToServer.py index 896f3cfcac2..3a6d799f8a5 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/SendToServer.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/SendToServer.py @@ -239,3 +239,5 @@ if __name__<>"package" and __name__=="__main__": SendtoServer(None) elif __name__=="package": g_ImplementationHelper.addImplementation( SendtoServer, "org.openoffice.openerp.report.sendtoserver", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ServerParameter.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ServerParameter.py index 245cd1dc7ce..9b69e4a5c15 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ServerParameter.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/ServerParameter.py @@ -172,3 +172,5 @@ if __name__<>"package" and __name__=="__main__": elif __name__=="package": g_ImplementationHelper.addImplementation( ServerParameter, "org.openoffice.openerp.report.serverparam", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Translation.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Translation.py index 54343d02d7f..73146f1b68a 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Translation.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/Translation.py @@ -272,3 +272,5 @@ if __name__<>"package" and __name__=="__main__": elif __name__=="package": g_ImplementationHelper.addImplementation( AddLang, "org.openoffice.openerp.report.langtag", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/__init__.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/__init__.py index d2192cd5ddd..0ccd1c9d011 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/__init__.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/__init__.py @@ -59,3 +59,5 @@ import ConvertBracesToField import ConvertFieldsToBraces import ExportToRML import SendtoServer + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/compile_all.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/compile_all.py index acafd5f549e..4740c61b178 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/compile_all.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/compile_all.py @@ -47,3 +47,5 @@ import compileall compileall.compile_dir('package') + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/__init__.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/__init__.py index 2a732da8226..a60ae586303 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/__init__.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/__init__.py @@ -26,3 +26,5 @@ import gui import logreport import rpc import tiny_socket + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/actions.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/actions.py index 56a83159e4a..8511bb8343d 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/actions.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/actions.py @@ -109,3 +109,5 @@ class TextListenerProcAdapter( unohelper.Base, XTextListener ): apply( self.oProcToCall, (oTextEvent,) + self.tParams ) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/error.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/error.py index a6cfe9215a3..c0a3e5b5d63 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/error.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/error.py @@ -58,3 +58,5 @@ class ErrorDialog: def btnOkOrCancel_clicked( self, oActionEvent ): self.win.endExecute() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/functions.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/functions.py index db1f15b1fc5..29f1cd87e46 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/functions.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/functions.py @@ -262,3 +262,5 @@ def GetAFileName(): return sPath + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/gui.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/gui.py index 79f2ae370de..975aa387193 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/gui.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/gui.py @@ -820,3 +820,5 @@ class DBModalDialog: """ self.oDialogControl.endExecute() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/logreport.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/logreport.py index dfcc78374c9..2aab8596862 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/logreport.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/logreport.py @@ -46,3 +46,5 @@ class Logger(object): def shutdown(self): logging.shutdown() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/rpc.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/rpc.py index f211c6309f4..f7c7f636485 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/rpc.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/rpc.py @@ -202,3 +202,5 @@ class NETRPCGateway(RPCGateway): info = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/tiny_socket.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/tiny_socket.py index 415e4b3c91e..30a2079433a 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/tiny_socket.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/tiny_socket.py @@ -91,3 +91,5 @@ class mysocket: + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/tools.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/tools.py index 8c9a8c9a1a8..ef22a3a0d51 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/tools.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/tools.py @@ -38,3 +38,5 @@ def write_data_to_file( filename, data ): fp.write( data ) fp.close() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/modify.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/modify.py index fa7874cff45..fc3d6672b79 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/modify.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/modify.py @@ -136,3 +136,5 @@ if __name__<>"package": else: g_ImplementationHelper.addImplementation( modify, "org.openoffice.openerp.report.modify", ("com.sun.star.task.Job",),) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/test/test_fields.py b/addons/base_report_designer/plugin/openerp_report_designer/test/test_fields.py index 8afd773b3fb..8954aa8d7a8 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/test/test_fields.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/test/test_fields.py @@ -30,3 +30,5 @@ print print 'Field selection for a repeatIn', '='*40 get('account.invoice', level=0, ending=['one2many','many2many'], recur=['many2one']) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_report_designer/wizard/base_report_designer_modify.py b/addons/base_report_designer/wizard/base_report_designer_modify.py index d0790cdc0ad..03d1ac19d7e 100644 --- a/addons/base_report_designer/wizard/base_report_designer_modify.py +++ b/addons/base_report_designer/wizard/base_report_designer_modify.py @@ -148,3 +148,5 @@ class base_report_rml_save(osv.osv_memory): } base_report_rml_save() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_setup/base_setup_views.xml b/addons/base_setup/base_setup_views.xml index 165e1c6d12a..35d0c647892 100644 --- a/addons/base_setup/base_setup_views.xml +++ b/addons/base_setup/base_setup_views.xml @@ -139,7 +139,7 @@ </field> </record> <record id="action_partner_terminology_config_form" model="ir.actions.act_window"> - <field name="name">Specify Your Terminology for Customers</field> + <field name="name">Use another word to say "Customer"</field> <field name="type">ir.actions.act_window</field> <field name="res_model">base.setup.terminology</field> <field name="view_type">form</field> diff --git a/addons/base_tools/__init__.py b/addons/base_tools/__init__.py index 50a14119520..4c241b72be9 100644 --- a/addons/base_tools/__init__.py +++ b/addons/base_tools/__init__.py @@ -1 +1,3 @@ # Debian packaging removes blank files, so this comment is added. + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_tools/__openerp__.py b/addons/base_tools/__openerp__.py index ec32805533e..6fff6c3c207 100644 --- a/addons/base_tools/__openerp__.py +++ b/addons/base_tools/__openerp__.py @@ -19,3 +19,5 @@ Creates menu link for Tools from where tools like survey, lunch, idea, etc. are "installable": True, "certificate" : "00571588675379342237" } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_tools/i18n/oc.po b/addons/base_tools/i18n/oc.po new file mode 100644 index 00000000000..47c934ff404 --- /dev/null +++ b/addons/base_tools/i18n/oc.po @@ -0,0 +1,32 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-20 09:19+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: base_tools +#: model:ir.module.module,shortdesc:base_tools.module_meta_information +msgid "Common base for tools modules" +msgstr "Basa comuna pels moduls utilitaris" + +#. module: base_tools +#: model:ir.module.module,description:base_tools.module_meta_information +msgid "" +"\n" +" " +msgstr "" +"\n" +" " diff --git a/addons/board/board.py b/addons/board/board.py index 6a87d5b190b..dd3d75e1dca 100644 --- a/addons/board/board.py +++ b/addons/board/board.py @@ -56,14 +56,14 @@ class board_board(osv.osv): #End Loop arch = """<?xml version="1.0"?> <form string="My Board"> - <hpaned> - <child1> + <board style="1-1"> + <column> %s - </child1> - <child2> + </column> + <column> %s - </child2> - </hpaned> + </column> + </board> </form>""" % ('\n'.join(left), '\n'.join(right)) return arch @@ -134,10 +134,10 @@ class board_board(osv.osv): res['arch'] = self._arch_preprocessing(cr, user, res['arch'], context=context) res['toolbar'] = {'print': [], 'action': [], 'relate': []} return res - - - def _arch_preprocessing(self, cr, user, arch, context=None): - from lxml import etree + + + def _arch_preprocessing(self, cr, user, arch, context=None): + from lxml import etree def remove_unauthorized_children(node): for child in node.iterchildren(): if child.tag=='action' and child.get('invisible'): @@ -145,17 +145,17 @@ class board_board(osv.osv): else: child=remove_unauthorized_children(child) return node - + def encode(s): if isinstance(s, unicode): return s.encode('utf8') return s - - archnode = etree.fromstring(encode(arch)) + + archnode = etree.fromstring(encode(arch)) return etree.tostring(remove_unauthorized_children(archnode),pretty_print=True) - - - + + + _columns = { 'name': fields.char('Dashboard', size=64, required=True), diff --git a/addons/board/board_data_admin.xml b/addons/board/board_data_admin.xml index 0a65d816d8f..c43b2cd9602 100644 --- a/addons/board/board_data_admin.xml +++ b/addons/board/board_data_admin.xml @@ -158,7 +158,7 @@ </record> <!-- bind adminitration dashboard to the root administration --> - <menuitem id="base.menu_administration" icon="terp-administration" name="Administration" sequence="50" action="open_board_administration_form"/> + <menuitem id="base.menu_administration" icon="terp-administration" name="Settings" sequence="50" action="open_board_administration_form"/> <!-- add a menu item in adminitration/reporting/dashboards --> <menuitem id="base.menu_reporting" name="Reporting" parent="base.menu_administration" sequence="11" groups="base.group_extended"/> diff --git a/addons/board/board_data_home.xml b/addons/board/board_data_home.xml index accb112673b..8a0f150d5be 100644 --- a/addons/board/board_data_home.xml +++ b/addons/board/board_data_home.xml @@ -44,14 +44,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string=""> - <board style="2-1"> + <board style="1"> <column> <action name="%(action_application_tiles)d"/> </column> - <column> - <action name="%(action_res_widgets_tweets)d"/> - <action name="%(action_res_widgets_events)d"/> - </column> </board> </form> </field> diff --git a/addons/board/security/ir.model.access.csv b/addons/board/security/ir.model.access.csv index 8661750bfb8..34bc2169016 100644 --- a/addons/board/security/ir.model.access.csv +++ b/addons/board/security/ir.model.access.csv @@ -1,6 +1,6 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_board_board","board.board","model_board_board","base.group_user",1,1,1,1 -"access_board_board_line","board.board.line","model_board_board_line","base.group_user",1,1,1,1 -"access_res_log_report","res.log.report","model_res_log_report","base.group_user",1,1,1,1 -"access_res_log_report_system","res.log.report system","model_res_log_report",base.group_system,1,0,0,0 -"access_res_log_report_erp_manager","res.log.report erp_manager","model_res_log_report",base.group_erp_manager,1,0,0,0 +"access_board_board all","board.board","model_board_board",,1,0,0,0 +"access_board_board_line all","board.board.line","model_board_board_line",,1,0,0,0 +"access_board_board system","board.board system","model_board_board",base.group_system,1,1,1,1 +"access_board_board_line system","board.board.line system","model_board_board_line",base.group_system,1,1,1,1 +"access_res_log_report all","res.log.report","model_res_log_report",,1,0,0,0 diff --git a/addons/caldav/caldav.py b/addons/caldav/caldav.py index 2517f88f789..0f0f5ddd762 100644 --- a/addons/caldav/caldav.py +++ b/addons/caldav/caldav.py @@ -25,3 +25,5 @@ urlparse.uses_netloc.append('caldav') urlparse.uses_netloc.append('caldavs') #EOF + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/caldav/caldav_view.xml b/addons/caldav/caldav_view.xml index d8025ef578e..72e88a6c7b4 100644 --- a/addons/caldav/caldav_view.xml +++ b/addons/caldav/caldav_view.xml @@ -45,6 +45,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="domain">[('calendar_collection','=',True)]</field> + <field name="context">{'default_calendar_collection': True}</field> </record> <record model="ir.actions.act_window" id="document.action_document_directory_form"> diff --git a/addons/caldav/calendar_collection.py b/addons/caldav/calendar_collection.py index 1258ba5bf18..1abbf573ef0 100644 --- a/addons/caldav/calendar_collection.py +++ b/addons/caldav/calendar_collection.py @@ -86,3 +86,5 @@ class calendar_collection(osv.osv): return self.get_schedule_inbox_URL(cr, uid, ids, context=context) calendar_collection() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/caldav/orm_utils.py b/addons/caldav/orm_utils.py index 00521831e0f..b154d54d1aa 100644 --- a/addons/caldav/orm_utils.py +++ b/addons/caldav/orm_utils.py @@ -46,3 +46,5 @@ if True: # we need this indentation level ;) return res[0][0] #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/caldav/wizard/caldav_browse.py b/addons/caldav/wizard/caldav_browse.py index 5b78c480d07..f4bb8aeaabc 100644 --- a/addons/caldav/wizard/caldav_browse.py +++ b/addons/caldav/wizard/caldav_browse.py @@ -275,3 +275,5 @@ class user_preference(osv.osv_memory): } user_preference() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/claim_from_delivery/i18n/oc.po b/addons/claim_from_delivery/i18n/oc.po new file mode 100644 index 00000000000..e7670a75613 --- /dev/null +++ b/addons/claim_from_delivery/i18n/oc.po @@ -0,0 +1,33 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-11-20 09:19+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: claim_from_delivery +#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery +msgid "Claim" +msgstr "Reclamacion" + +#. module: claim_from_delivery +#: model:ir.module.module,description:claim_from_delivery.module_meta_information +msgid "Create Claim from delivery order:\n" +msgstr "Crear una reclamacion sus un bon de liurason :\n" + +#. module: claim_from_delivery +#: model:ir.module.module,shortdesc:claim_from_delivery.module_meta_information +msgid "Claim from delivery" +msgstr "Reclamacion sus la liurason" diff --git a/addons/crm/board_crm_statistical_view.xml b/addons/crm/board_crm_statistical_view.xml index 607d4497c37..5ea3844e896 100644 --- a/addons/crm/board_crm_statistical_view.xml +++ b/addons/crm/board_crm_statistical_view.xml @@ -78,31 +78,22 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Statistics Dashboard"> - <hpaned> - <child1> - <action - string="Opportunities by Categories" - name="%(act_oppor_categ)d" - colspan="4" - height="200" - width="250"/> + <board style="1-1"> + <column> + <action string="Opportunities by Categories" + name="%(act_oppor_categ)d"/> - <action - string="Opportunities by Stage" - name="%(act_opportunity_stage)d" - height="200" - colspan="4"/> + <action string="Opportunities by Stage" + name="%(act_opportunity_stage)d"/> - </child1> - <child2> + </column> + <column> - <action - string="Planned Revenue by Stage and User" - name="%(act_oppor_stage_user)d" - colspan="4"/> + <action string="Planned Revenue by Stage and User" + name="%(act_oppor_stage_user)d"/> - </child2> - </hpaned> + </column> + </board> </form> </field> </record> diff --git a/addons/crm/board_crm_view.xml b/addons/crm/board_crm_view.xml index 069e3025b13..7b80feffd30 100644 --- a/addons/crm/board_crm_view.xml +++ b/addons/crm/board_crm_view.xml @@ -62,10 +62,11 @@ <record model="ir.actions.act_window" id="act_my_oppor"> <field name="name">My Open Opportunities</field> - <field name="res_model">crm.lead</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="domain">[('user_id','=',uid),('state','=','open'), ('type', '=', 'opportunity')]</field> + <field name="res_model">crm.lead</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="domain">[('user_id','=',uid),('state','=','open'), ('type', '=', 'opportunity')]</field> + <field name="context">{'default_user_id': uid, 'default_type': 'opportunity'}</field> </record> <record model="ir.actions.act_window.view" id="act_my_oppor_tree_view"> @@ -88,7 +89,8 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="view_id" ref="crm.crm_case_tree_view_meet"/> - <field name="domain">[('user_id','=',uid),('state','not in',('cancel','done'))]</field> + <field name="domain">[('user_id','=',uid),('state','not in',('cancel','done'))]</field> + <field name="context">{'default_user_id': uid}</field> </record> <record model="ir.actions.act_window" id="act_my_oppor_stage"> @@ -116,34 +118,21 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Sales Dashboard"> - <hpaned> - <child1> - <action - string="My Open Opportunities" - name="%(act_my_oppor)d" - colspan="4" - height="150" - groups="base.group_sale_salesman,base.group_sale_manager" - width="510"/> + <board style="1-1"> + <column> + <action string="My Open Opportunities" + name="%(act_my_oppor)d"/> <action string="My Meetings" - name="%(act_my_meetings)d" - height="150" - colspan="4"/> - </child1> - <child2> - <action - string="My Planned Revenues by Stage" - name="%(act_my_oppor_stage)d" - groups="base.group_sale_salesman,base.group_sale_manager" - colspan="4"/> - <action - string="My Win/Lost Ratio" - name="%(act_sales_pipeline)d" - groups="base.group_sale_salesman,base.group_sale_manager" - colspan="4"/> - </child2> - </hpaned> + name="%(act_my_meetings)d"/> + </column> + <column> + <action string="My Planned Revenues by Stage" + name="%(act_my_oppor_stage)d"/> + <action string="My Win/Lost Ratio" + name="%(act_sales_pipeline)d"/> + </column> + </board> </form> </field> </record> diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 1c1784e961d..03cdb31832d 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -578,3 +578,5 @@ class users(osv.osv): return res users() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 91c8a453cd6..e74ce00d728 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -42,11 +42,19 @@ class crm_lead(crm_case, osv.osv): _order = "priority,date_action,id desc" _inherit = ['mail.thread','res.partner.address'] - def _read_group_stage_ids(self, cr, uid, ids, domain, context=None): - context = context or {} + def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): + access_rights_uid = access_rights_uid or uid stage_obj = self.pool.get('crm.case.stage') - stage_ids = stage_obj.search(cr, uid, ['|', ('id','in',ids), ('case_default','=',1)], context=context) - return stage_obj.name_get(cr, uid, stage_ids, context=context) + order = stage_obj._order + if read_group_order == 'stage_id desc': + # lame hack to allow reverting search, should just work in the trivial case + order = "%s desc" % order + stage_ids = stage_obj._search(cr, uid, ['|', ('id','in',ids),('case_default','=',1)], order=order, + access_rights_uid=access_rights_uid, context=context) + result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) + return result _group_by_full = { 'stage_id': _read_group_stage_ids diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 16a90e4e44d..bed2e110b3e 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -35,7 +35,7 @@ <field name="res_model">crm.case.categ</field> <field name="view_type">form</field> <field name="view_id" ref="crm_case_categ_tree-view"/> - <field name="context">{'object_id': 'crm.lead'}</field> + <field name="context" eval="{'object_id': ref('model_crm_lead')}"/> <field name="domain">[('object_id.model', '=', 'crm.lead')]</field> <field name="help">Create specific categories that fit your company's activities to better classify and analyse your leads and opportunities. Such categories could for instance reflect your product structure or the different types of sales you do.</field> </record> @@ -348,9 +348,9 @@ <a string="Schedule Meeting" name="action_makeMeeting" type="object" icon="stock_calendar"/> </div> <div class="oe_kanban_right"> - <a name="case_pending" string="Pending" states="draft,open" type="object" icon="lead-stage-pending" /> - <a name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="lead-stage-won" /> - <a name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" icon="lead-stage-lost" /> + <a name="case_pending" string="Pending" states="draft,open" type="object" icon="kanban-pause" /> + <a name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="kanban-apply" /> + <a name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" icon="kanban-stop" /> </div> <br class="oe_kanban_clear"/> </div> diff --git a/addons/crm/crm_meeting_menu.xml b/addons/crm/crm_meeting_menu.xml index 1aca651958b..19ca9266332 100644 --- a/addons/crm/crm_meeting_menu.xml +++ b/addons/crm/crm_meeting_menu.xml @@ -14,7 +14,7 @@ <record model="ir.actions.act_window" id="crm_case_categ_meet_create_partner"> <field name="name">Schedule a Meeting</field> - <field name="context" eval="{'default_state':'draft'}"/> + <field name="context">{'default_partner_id': active_id}</field> </record> diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml index 636cb8289fb..d35300b62b5 100644 --- a/addons/crm/crm_meeting_view.xml +++ b/addons/crm/crm_meeting_view.xml @@ -10,7 +10,7 @@ <field name="view_type">form</field> <field name="view_id" ref="crm.crm_case_categ_tree-view"/> <field name="domain">[('object_id.model', '=', 'crm.meeting')]</field> - <field name="context">{'object_id':'crm.meeting'}</field> + <field name="context" eval="{'object_id': ref('model_crm_meeting')}"/> <field name="help">Create different meeting categories to better organize and classify your meetings.</field> </record> diff --git a/addons/crm/crm_phonecall_view.xml b/addons/crm/crm_phonecall_view.xml index 54ea8bd7dfc..23f871d1581 100644 --- a/addons/crm/crm_phonecall_view.xml +++ b/addons/crm/crm_phonecall_view.xml @@ -10,7 +10,7 @@ <field name="view_type">form</field> <field name="view_id" ref="crm.crm_case_categ_tree-view"/> <field name="domain">[('object_id.model', '=', 'crm.phonecall')]</field> - <field name="context">{'object_id':'crm.phonecall'}</field> + <field name="context" eval="{'object_id': ref('model_crm_phonecall')}"/> <field name="help">Create specific phone call categories to better define the type of calls tracked in the system.</field> </record> diff --git a/addons/crm/report/crm_phonecall_report.py b/addons/crm/report/crm_phonecall_report.py index f68bea03880..ef3bcccdc9a 100644 --- a/addons/crm/report/crm_phonecall_report.py +++ b/addons/crm/report/crm_phonecall_report.py @@ -99,3 +99,5 @@ class crm_phonecall_report(osv.osv): crm_phonecall c )""") crm_phonecall_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/wizard/crm_add_note.py b/addons/crm/wizard/crm_add_note.py index 478f051fe58..6bd84bda21d 100644 --- a/addons/crm/wizard/crm_add_note.py +++ b/addons/crm/wizard/crm_add_note.py @@ -49,3 +49,5 @@ class crm_add_note(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} crm_add_note() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/wizard/crm_phonecall_to_opportunity.py b/addons/crm/wizard/crm_phonecall_to_opportunity.py index 549afa0559b..ffab1867ebb 100644 --- a/addons/crm/wizard/crm_phonecall_to_opportunity.py +++ b/addons/crm/wizard/crm_phonecall_to_opportunity.py @@ -127,3 +127,5 @@ class crm_phonecall2opportunity(osv.osv_memory): return res crm_phonecall2opportunity() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_caldav/i18n/oc.po b/addons/crm_caldav/i18n/oc.po new file mode 100644 index 00000000000..58d92403c46 --- /dev/null +++ b/addons/crm_caldav/i18n/oc.po @@ -0,0 +1,50 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:20+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: crm_caldav +#: model:ir.actions.act_window,name:crm_caldav.action_caldav_browse +msgid "Caldav Browse" +msgstr "Navigar dins CalDav" + +#. module: crm_caldav +#: model:ir.model,name:crm_caldav.model_crm_meeting +msgid "Meeting" +msgstr "Rendètz-vos" + +#. module: crm_caldav +#: model:ir.module.module,shortdesc:crm_caldav.module_meta_information +msgid "Extended Module to Add CalDav feature on Meeting" +msgstr "Modul espandit per apondre la foncionalitat CalDav a las acampadas" + +#. module: crm_caldav +#: model:ir.module.module,description:crm_caldav.module_meta_information +msgid "" +"\n" +" New Features in Meeting:\n" +" * Share meeting with other calendar clients like sunbird\n" +msgstr "" +"\n" +" Foncionalitats novèlas per las acampadas :\n" +" * Partiment d'acampadas amb d'autres clients de calendièrs coma " +"sunbird\n" + +#. module: crm_caldav +#: model:ir.ui.menu,name:crm_caldav.menu_caldav_browse +msgid "Synchronyze this calendar" +msgstr "Sincronizar aqueste calendièr" diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml index a2ad01e0651..7ec18da18eb 100644 --- a/addons/crm_claim/crm_claim_view.xml +++ b/addons/crm_claim/crm_claim_view.xml @@ -14,7 +14,7 @@ <field name="view_type">form</field> <field name="view_id" ref="crm.crm_case_categ_tree-view"/> <field name="domain">[('object_id.model', '=', 'crm.claim')]</field> - <field name="context">{'object_id':'crm.claim'}</field> + <field name="context" eval="{'object_id': ref('model_crm_claim')}"/> <field name="help">Create claim categories to better manage and classify your claims. Some example of claims can be: preventive action, corrective action.</field> </record> @@ -318,7 +318,7 @@ <act_window domain="[('partner_address_id', '=', active_id)]" - context="{'default_partner_id': partner_id}" + context="{'default_partner_address_id': active_id}" id="act_claim_partner_address" name="Claims" view_mode="tree,form" diff --git a/addons/crm_fundraising/crm_fundraising.py b/addons/crm_fundraising/crm_fundraising.py index 07ba7460dec..37c5bb8ccee 100644 --- a/addons/crm_fundraising/crm_fundraising.py +++ b/addons/crm_fundraising/crm_fundraising.py @@ -112,3 +112,5 @@ class crm_fundraising(crm.crm_case, osv.osv): } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_fundraising/crm_fundraising_view.xml b/addons/crm_fundraising/crm_fundraising_view.xml index 7c89b68590a..67f82bddd22 100644 --- a/addons/crm_fundraising/crm_fundraising_view.xml +++ b/addons/crm_fundraising/crm_fundraising_view.xml @@ -14,7 +14,7 @@ <field name="view_type">form</field> <field name="view_id" ref="crm.crm_case_categ_tree-view"/> <field name="domain">[('object_id.model', '=', 'crm.fundraising')]</field> - <field name="context">{'object_id':'crm.fundraising'}</field> + <field name="context" eval="{'object_id': ref('model_crm_fundraising')}"/> <field name="help">Manage and define the fund raising categories you want to be maintained in the system.</field> </record> diff --git a/addons/crm_helpdesk/crm_helpdesk_view.xml b/addons/crm_helpdesk/crm_helpdesk_view.xml index 5b3203f19d0..4b0ec72166b 100644 --- a/addons/crm_helpdesk/crm_helpdesk_view.xml +++ b/addons/crm_helpdesk/crm_helpdesk_view.xml @@ -14,7 +14,7 @@ <field name="view_type">form</field> <field name="view_id" ref="crm.crm_case_categ_tree-view"/> <field name="domain">[('object_id.model', '=', 'crm.helpdesk')]</field> - <field name="context">{'object_id':'crm.helpdesk'}</field> + <field name="context" eval="{'object_id': ref('model_crm_helpdesk')}"/> <field name="help">Create and manage helpdesk categories to better manage and classify your support requests.</field> </record> diff --git a/addons/crm_partner_assign/__init__.py b/addons/crm_partner_assign/__init__.py index 3bb196d3193..8d4bf993aff 100644 --- a/addons/crm_partner_assign/__init__.py +++ b/addons/crm_partner_assign/__init__.py @@ -22,3 +22,5 @@ import partner_geo_assign import wizard import report + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_partner_assign/__openerp__.py b/addons/crm_partner_assign/__openerp__.py index 9e72204e31d..a38da8a665a 100644 --- a/addons/crm_partner_assign/__openerp__.py +++ b/addons/crm_partner_assign/__openerp__.py @@ -52,3 +52,5 @@ You can also use the geolocalization without using the GPS coordinates. 'certificate': '00503409558942442061', 'images': ['images/partner_geo_localization.jpeg','images/partner_grade.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_partner_assign/partner_geo_assign.py b/addons/crm_partner_assign/partner_geo_assign.py index 2b67f80c066..401d09146ae 100644 --- a/addons/crm_partner_assign/partner_geo_assign.py +++ b/addons/crm_partner_assign/partner_geo_assign.py @@ -181,3 +181,5 @@ class crm_lead(osv.osv): return ok crm_lead() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_partner_assign/report/__init__.py b/addons/crm_partner_assign/report/__init__.py index a211aeede1e..45065314b25 100644 --- a/addons/crm_partner_assign/report/__init__.py +++ b/addons/crm_partner_assign/report/__init__.py @@ -22,3 +22,5 @@ import crm_lead_report import crm_partner_report + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_partner_assign/report/crm_lead_report_view.xml b/addons/crm_partner_assign/report/crm_lead_report_view.xml index 01bbefb84d4..a0bbd62c131 100644 --- a/addons/crm_partner_assign/report/crm_lead_report_view.xml +++ b/addons/crm_partner_assign/report/crm_lead_report_view.xml @@ -141,7 +141,7 @@ <field name="name">Opp. Assignment Analysis</field> <field name="res_model">crm.lead.report.assign</field> <field name="view_type">form</field> - <field name="context">{"search_default_group_partner_date": 1, "search_default_group_grade":1,'group_by_no_leaf':1,'group_by':[]}</field> + <field name="context">{'default_type': 'opportunity', "search_default_group_partner_date": 1, "search_default_group_grade":1,'group_by_no_leaf':1,'group_by':[]}</field> <field name="view_mode">tree</field> <field name="domain">[('type', '=', 'opportunity')]</field> </record> diff --git a/addons/crm_partner_assign/report/crm_partner_report.py b/addons/crm_partner_assign/report/crm_partner_report.py index 10e74a34b76..c5afe9b5b82 100644 --- a/addons/crm_partner_assign/report/crm_partner_report.py +++ b/addons/crm_partner_assign/report/crm_partner_report.py @@ -61,3 +61,5 @@ class crm_partner_report_assign(osv.osv): )""") crm_partner_report_assign() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_partner_assign/wizard/__init__.py b/addons/crm_partner_assign/wizard/__init__.py index be6c1533722..b6bda71deaf 100644 --- a/addons/crm_partner_assign/wizard/__init__.py +++ b/addons/crm_partner_assign/wizard/__init__.py @@ -21,3 +21,5 @@ import crm_forward_to_partner import crm_merge_opportunity + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_partner_assign/wizard/crm_merge_opportunity.py b/addons/crm_partner_assign/wizard/crm_merge_opportunity.py index 3993a5df066..3c56fada5a1 100644 --- a/addons/crm_partner_assign/wizard/crm_merge_opportunity.py +++ b/addons/crm_partner_assign/wizard/crm_merge_opportunity.py @@ -40,3 +40,5 @@ class crm_merge_opportunity_assign_partner(osv.osv_memory): return data crm_merge_opportunity_assign_partner() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_todo/__init__.py b/addons/crm_todo/__init__.py index 891c71db7ff..528f4b2d439 100644 --- a/addons/crm_todo/__init__.py +++ b/addons/crm_todo/__init__.py @@ -20,3 +20,5 @@ ############################################################################## import crm_todo + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_todo/__openerp__.py b/addons/crm_todo/__openerp__.py index 9a57a24cf27..3b870153347 100644 --- a/addons/crm_todo/__openerp__.py +++ b/addons/crm_todo/__openerp__.py @@ -39,3 +39,5 @@ Todo list for CRM leads and opportunities. 'installable': True, 'active': False, } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_todo/crm_todo.py b/addons/crm_todo/crm_todo.py index ba7445ecef1..b1f6aa05af0 100644 --- a/addons/crm_todo/crm_todo.py +++ b/addons/crm_todo/crm_todo.py @@ -35,3 +35,5 @@ class crm_todo(osv.osv): + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/decimal_precision/__init__.py b/addons/decimal_precision/__init__.py index 708ad26bbe1..ea6c1b4d1ca 100644 --- a/addons/decimal_precision/__init__.py +++ b/addons/decimal_precision/__init__.py @@ -22,3 +22,5 @@ #import decimal_precision from decimal_precision import get_precision + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/decimal_precision/__openerp__.py b/addons/decimal_precision/__openerp__.py index b8ac25eb379..91e7ce57029 100644 --- a/addons/decimal_precision/__openerp__.py +++ b/addons/decimal_precision/__openerp__.py @@ -44,3 +44,5 @@ The decimal precision is configured per company. } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml index deb13679355..c46253777d2 100644 --- a/addons/delivery/delivery_view.xml +++ b/addons/delivery/delivery_view.xml @@ -233,7 +233,7 @@ <field name="view_mode">tree,form</field> <field name="domain">[('invoice_state','=','2binvoiced'),('state','=','done'),('type','=','out')]</field> <field name="filter" eval="True"/> - <field name="context">{'contact_display': 'partner'}</field> + <field name="context">{'default_invoice_state': '2binvoiced', 'default_type': 'out', 'contact_display': 'partner'}</field> <field name="search_view_id" ref="stock.view_picking_out_search"/> </record> diff --git a/addons/delivery/i18n/cs.po b/addons/delivery/i18n/cs.po index b703e4b42c8..7cb6f787ed1 100644 --- a/addons/delivery/i18n/cs.po +++ b/addons/delivery/i18n/cs.po @@ -4,111 +4,112 @@ # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" +"Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2009-02-03 19:47+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" -"Language-Team: \n" +"PO-Revision-Date: 2011-11-25 14:16+0000\n" +"Last-Translator: Jiří Hajda <robie@centrum.cz>\n" +"Language-Team: Czech <openerp-i18n-czech@lists.launchpad.net >\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 04:55+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:49+0000\n" +"X-Generator: Launchpad (build 14381)\n" +"X-Poedit-Language: Czech\n" #. module: delivery #: report:sale.shipping:0 msgid "Order Ref." -msgstr "" +msgstr "Odkaz objednávky" #. module: delivery #: model:product.template,name:delivery.delivery_product_product_template msgid "Delivery by Poste" -msgstr "" +msgstr "Dodání podle zaslání" #. module: delivery #: view:delivery.grid:0 msgid "Destination" -msgstr "" +msgstr "Cíl" #. module: delivery #: field:stock.move,weight_net:0 msgid "Net weight" -msgstr "" +msgstr "Čistá hmotnost" #. module: delivery #: view:stock.picking:0 msgid "Delivery Order" -msgstr "" +msgstr "Objednávka doručení" #. module: delivery #: code:addons/delivery/delivery.py:141 #, python-format msgid "No price available !" -msgstr "" +msgstr "Žádná dostupná cena !" #. module: delivery #: model:ir.model,name:delivery.model_delivery_grid_line msgid "Delivery Grid Line" -msgstr "" +msgstr "Řádek dodací sítě" #. module: delivery #: view:delivery.grid:0 msgid "Delivery grids" -msgstr "" +msgstr "Dodací sítě" #. module: delivery #: selection:delivery.grid.line,type:0 #: selection:delivery.grid.line,variable_factor:0 #: field:stock.picking,volume:0 msgid "Volume" -msgstr "" +msgstr "Objem" #. module: delivery #: sql_constraint:sale.order:0 msgid "Order Reference must be unique !" -msgstr "" +msgstr "Odkaz objednávky musí být jedinečný !" #. module: delivery #: field:delivery.grid,line_ids:0 msgid "Grid Line" -msgstr "" +msgstr "Řádek sítě" #. module: delivery #: model:ir.actions.report.xml,name:delivery.report_shipping msgid "Delivery order" -msgstr "" +msgstr "Objednávka doručení" #. module: delivery #: view:res.partner:0 msgid "Deliveries Properties" -msgstr "" +msgstr "Vlastnosti doručení" #. module: delivery #: model:ir.actions.act_window,name:delivery.action_picking_tree4 msgid "Picking to be invoiced" -msgstr "" +msgstr "Navádění k fakturaci" #. module: delivery #: help:delivery.grid,sequence:0 msgid "Gives the sequence order when displaying a list of delivery grid." -msgstr "" +msgstr "Dává pořadí posloupnosti, když zobrazuje seznam dodací sítě." #. module: delivery #: view:delivery.grid:0 #: field:delivery.grid,country_ids:0 msgid "Countries" -msgstr "" +msgstr "Země" #. module: delivery #: report:sale.shipping:0 msgid "Delivery Order :" -msgstr "" +msgstr "Objednávka doručení :" #. module: delivery #: field:delivery.grid.line,variable_factor:0 msgid "Variable Factor" -msgstr "" +msgstr "Proměnný koeficient" #. module: delivery #: model:ir.actions.act_window,help:delivery.action_delivery_grid_form @@ -118,11 +119,15 @@ msgid "" "can define several price lists for one delivery method, per country or a " "zone in a specific country defined by a postal code range." msgstr "" +"Ceník dodání vám umožní spočítat cenu a prodejní cenu přepravy podle " +"hmotnosti výrobků a dalších kritérií. Můžete určit několik ceníků pro jednu " +"dodací metodu podle země nebo zóny ve specifické zemi určené podle rozsahu " +"počtovního kódu." #. module: delivery #: selection:delivery.grid.line,price_type:0 msgid "Fixed" -msgstr "" +msgstr "Pevné" #. module: delivery #: view:delivery.sale.order:0 @@ -137,23 +142,24 @@ msgstr "Způsob doručení" #. module: delivery #: model:ir.model,name:delivery.model_stock_move msgid "Stock Move" -msgstr "" +msgstr "Přesun zásob" #. module: delivery #: code:addons/delivery/delivery.py:141 #, python-format msgid "No line matched this order in the choosed delivery grids !" msgstr "" +"Neodpovídají žádné řádky této objednávce, pokud je vybrána dodací síť !" #. module: delivery #: field:stock.picking,carrier_tracking_ref:0 msgid "Carrier Tracking Ref" -msgstr "" +msgstr "Odkaz sledování přepravce" #. module: delivery #: field:stock.picking,weight_net:0 msgid "Net Weight" -msgstr "" +msgstr "Čistá hmotnost" #. module: delivery #: model:ir.actions.act_window,help:delivery.action_delivery_carrier_form @@ -162,57 +168,60 @@ msgid "" "Each delivery method can be assigned to a price list which computes the " "price of the delivery according to the products sold or delivered." msgstr "" +"Vytvořit a spravovat dodací metody, které chcete pro vaše prodejní aktivity. " +"Každá dodací metoda může být přiřazena k ceníku, který spočítá cenu přepravy " +"podle výrobků prodaných nebo dodaných." #. module: delivery #: code:addons/delivery/stock.py:98 #, python-format msgid "Warning" -msgstr "" +msgstr "Varování" #. module: delivery #: view:delivery.grid:0 msgid "Grid definition" -msgstr "" +msgstr "Určení sítě" #. module: delivery #: view:delivery.sale.order:0 msgid "_Cancel" -msgstr "" +msgstr "_Zrušit" #. module: delivery #: field:delivery.grid.line,operator:0 msgid "Operator" -msgstr "" +msgstr "Operátor" #. module: delivery #: model:ir.model,name:delivery.model_res_partner msgid "Partner" -msgstr "" +msgstr "Partner" #. module: delivery #: model:ir.model,name:delivery.model_sale_order msgid "Sales Order" -msgstr "" +msgstr "Prodejní objednávka" #. module: delivery #: model:ir.model,name:delivery.model_delivery_grid msgid "Delivery Grid" -msgstr "" +msgstr "Dodací síť" #. module: delivery #: report:sale.shipping:0 msgid "Invoiced to" -msgstr "" +msgstr "Fakturováno" #. module: delivery #: model:ir.model,name:delivery.model_stock_picking msgid "Picking List" -msgstr "" +msgstr "Naváděcí seznam" #. module: delivery #: model:ir.model,name:delivery.model_delivery_sale_order msgid "Make Delievery" -msgstr "" +msgstr "Provést dodání" #. module: delivery #: model:ir.module.module,description:delivery.module_meta_information @@ -224,16 +233,22 @@ msgid "" "\n" " " msgstr "" +"Umožní vám přidat dodací metody v prodejním příkazu a navádění.\n" +" Můžete určit vaše ceny přepravce and dodací sítě.\n" +" Když vytváříte faktury z navádění, OpenERP je schopný přidat a spočítat " +"dodací řádky.\n" +"\n" +" " #. module: delivery #: view:delivery.grid.line:0 msgid "Grid Lines" -msgstr "" +msgstr "Řádky sítě" #. module: delivery #: field:delivery.grid.line,grid_id:0 msgid "Grid" -msgstr "" +msgstr "Síť" #. module: delivery #: help:delivery.grid,active:0 @@ -241,31 +256,33 @@ msgid "" "If the active field is set to False, it will allow you to hide the delivery " "grid without removing it." msgstr "" +"Pokud je aktivní pole nastaveno na Nepravda, umožní vám to skrýt dodací síť " +"bez jejího odebrání." #. module: delivery #: field:delivery.grid,zip_to:0 msgid "To Zip" -msgstr "" +msgstr "Na PSČ" #. module: delivery #: report:sale.shipping:0 msgid "Order Date" -msgstr "" +msgstr "Datum objednání" #. module: delivery #: field:delivery.grid,name:0 msgid "Grid Name" -msgstr "" +msgstr "Jméno sítě" #. module: delivery #: view:stock.move:0 msgid "Weights" -msgstr "" +msgstr "Váhy" #. module: delivery #: field:stock.picking,number_of_packages:0 msgid "Number of Packages" -msgstr "" +msgstr "Počet balíků" #. module: delivery #: selection:delivery.grid.line,type:0 @@ -274,7 +291,7 @@ msgstr "" #: field:stock.move,weight:0 #: field:stock.picking,weight:0 msgid "Weight" -msgstr "" +msgstr "Váha" #. module: delivery #: help:delivery.carrier,active:0 @@ -282,179 +299,181 @@ msgid "" "If the active field is set to False, it will allow you to hide the delivery " "carrier without removing it." msgstr "" +"Pokud je aktivní pole nastaveno na Nepravda, umožní vám to skrýt dodacího " +"přepravce bez jeho odebrání." #. module: delivery #: code:addons/delivery/wizard/delivery_sale_order.py:95 #, python-format msgid "No grid available !" -msgstr "" +msgstr "Žádná dostupná síť !" #. module: delivery #: selection:delivery.grid.line,operator:0 msgid ">=" -msgstr "" +msgstr ">=" #. module: delivery #: code:addons/delivery/wizard/delivery_sale_order.py:66 #: code:addons/delivery/wizard/delivery_sale_order.py:98 #, python-format msgid "Order not in draft state !" -msgstr "" +msgstr "Objednávka není ve stavu koncept !" #. module: delivery #: constraint:res.partner:0 msgid "Error ! You can not create recursive associated members." -msgstr "" +msgstr "Chyba ! Nemůžete vytvořit rekurzivní asociované členy." #. module: delivery #: report:sale.shipping:0 msgid "Lot" -msgstr "" +msgstr "Dávka" #. module: delivery #: constraint:stock.move:0 msgid "You try to assign a lot which is not from the same product" -msgstr "" +msgstr "Snažíte se přiřadit dávku, která není ze stejného výrobku" #. module: delivery #: field:delivery.carrier,active:0 #: field:delivery.grid,active:0 msgid "Active" -msgstr "" +msgstr "Aktivní" #. module: delivery #: report:sale.shipping:0 msgid "Shipping Date" -msgstr "" +msgstr "Datum expedice" #. module: delivery #: field:delivery.carrier,product_id:0 msgid "Delivery Product" -msgstr "" +msgstr "Dodání výrobku" #. module: delivery #: view:delivery.grid.line:0 msgid "Condition" -msgstr "" +msgstr "Podmínka" #. module: delivery #: field:delivery.grid.line,standard_price:0 msgid "Cost Price" -msgstr "" +msgstr "Výrobní cena" #. module: delivery #: selection:delivery.grid.line,price_type:0 #: field:delivery.grid.line,type:0 msgid "Variable" -msgstr "" +msgstr "Proměnné" #. module: delivery #: help:res.partner,property_delivery_carrier:0 msgid "This delivery method will be used when invoicing from picking." -msgstr "" +msgstr "Dodací metoda bude použita při fakturaci z nasvádění." #. module: delivery #: field:delivery.grid.line,max_value:0 msgid "Maximum Value" -msgstr "" +msgstr "Maximální hodnota" #. module: delivery #: report:sale.shipping:0 msgid "Quantity" -msgstr "" +msgstr "Množství" #. module: delivery #: field:delivery.grid,zip_from:0 msgid "Start Zip" -msgstr "" +msgstr "Počáteční PSČ" #. module: delivery #: help:sale.order,carrier_id:0 msgid "" "Complete this field if you plan to invoice the shipping based on picking." -msgstr "" +msgstr "Vyplňte toto pole, pokud plánujete fakturovat přepravu při navádění." #. module: delivery #: field:delivery.carrier,partner_id:0 msgid "Carrier Partner" -msgstr "" +msgstr "Přepravní partner" #. module: delivery #: view:res.partner:0 msgid "Sales & Purchases" -msgstr "" +msgstr "Prodeje & Nákupy" #. module: delivery #: selection:delivery.grid.line,operator:0 msgid "<=" -msgstr "" +msgstr "<=" #. module: delivery #: constraint:stock.move:0 msgid "You must assign a production lot for this product" -msgstr "" +msgstr "Pro tento výrobek musíte přiřadit výrobní dávku." #. module: delivery #: view:delivery.sale.order:0 msgid "Create Deliveries" -msgstr "" +msgstr "Vytvořit dodání" #. module: delivery #: model:ir.actions.act_window,name:delivery.action_delivery_cost #: view:sale.order:0 msgid "Delivery Costs" -msgstr "" +msgstr "Ceny dodání" #. module: delivery #: report:sale.shipping:0 msgid "Description" -msgstr "" +msgstr "Popis" #. module: delivery #: model:ir.actions.act_window,name:delivery.action_delivery_grid_form #: model:ir.ui.menu,name:delivery.menu_action_delivery_grid_form msgid "Delivery Pricelist" -msgstr "" +msgstr "Ceník dodání" #. module: delivery #: field:delivery.carrier,price:0 #: selection:delivery.grid.line,type:0 #: selection:delivery.grid.line,variable_factor:0 msgid "Price" -msgstr "" +msgstr "Cena" #. module: delivery #: code:addons/delivery/wizard/delivery_sale_order.py:95 #, python-format msgid "No grid matching for this carrier !" -msgstr "" +msgstr "Žádná síť odpovídající tomuto přepravci !" #. module: delivery #: model:ir.ui.menu,name:delivery.menu_delivery msgid "Delivery" -msgstr "" +msgstr "Dodací" #. module: delivery #: selection:delivery.grid.line,type:0 #: selection:delivery.grid.line,variable_factor:0 msgid "Weight * Volume" -msgstr "" +msgstr "Hmotnost * Objem" #. module: delivery #: selection:delivery.grid.line,operator:0 msgid "=" -msgstr "" +msgstr "=" #. module: delivery #: code:addons/delivery/stock.py:99 #, python-format msgid "The carrier %s (id: %d) has no delivery grid!" -msgstr "" +msgstr "Přepravce %s (id: %d) nemá dodací síť!" #. module: delivery #: field:delivery.grid.line,name:0 msgid "Name" -msgstr "" +msgstr "Jméno" #. module: delivery #: view:delivery.carrier:0 @@ -464,55 +483,55 @@ msgstr "" #: report:sale.shipping:0 #: field:stock.picking,carrier_id:0 msgid "Carrier" -msgstr "" +msgstr "Přepravce" #. module: delivery #: view:delivery.sale.order:0 msgid "_Apply" -msgstr "" +msgstr "_Použít" #. module: delivery #: field:sale.order,id:0 msgid "ID" -msgstr "" +msgstr "ID" #. module: delivery #: code:addons/delivery/wizard/delivery_sale_order.py:66 #: code:addons/delivery/wizard/delivery_sale_order.py:98 #, python-format msgid "The order state have to be draft to add delivery lines." -msgstr "" +msgstr "Stav objednávky musí být koncept pro přidání dodacích řádků." #. module: delivery #: model:ir.module.module,shortdesc:delivery.module_meta_information msgid "Carriers and deliveries" -msgstr "" +msgstr "Přepravci a doručení" #. module: delivery #: field:delivery.carrier,grids_id:0 msgid "Delivery Grids" -msgstr "" +msgstr "Dodací síť" #. module: delivery #: field:delivery.grid,sequence:0 msgid "Sequence" -msgstr "" +msgstr "Posloupnost" #. module: delivery #: field:delivery.grid.line,list_price:0 msgid "Sale Price" -msgstr "" +msgstr "Prodejní cena" #. module: delivery #: view:delivery.grid:0 #: field:delivery.grid,state_ids:0 msgid "States" -msgstr "" +msgstr "Stavy" #. module: delivery #: field:delivery.grid.line,price_type:0 msgid "Price Type" -msgstr "" +msgstr "Typ ceny" #~ msgid "Cancel" #~ msgstr "Storno" diff --git a/addons/document/board_document_view.xml b/addons/document/board_document_view.xml index 8d80b4a1497..471b2966be5 100644 --- a/addons/document/board_document_view.xml +++ b/addons/document/board_document_view.xml @@ -7,30 +7,25 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Document board"> - <hpaned position="100"> - <child1> - <action - string="New Files" + <board style="1-1" > + <column> + <action string="New Files" name="%(document.action_view_all_document_tree1)d" view_mode="tree,form"/> - <action - string="File Size by Month" + <action string="File Size by Month" name="%(document.action_view_size_month)d" view_mode="graph,tree"/> - </child1> - <child2> - <action - string="Files by Resource Type" + </column> + <column> + <action string="Files by Resource Type" name="%(document.action_view_document_by_resourcetype_graph)d" - view_mode="graph,tree" - /> + view_mode="graph,tree"/> - <action - string="Files by Partner" + <action string="Files by Partner" name="%(document.action_view_files_by_partner)d" view_mode="graph,tree"/> - </child2> - </hpaned> + </column> + </board> </form> </field> </record> @@ -70,26 +65,23 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Document board"> - <hpaned position="100"> - <child1> - <action - string="Wall of Shame" + <board style="1-1"> + <column> + <action string="Wall of Shame" name="%(document.action_view_wall)d" view_mode="tree"/> - </child1> - <child2> - <action - string="Files by Users" + </column> + <column> + <action string="Files by Users" name="%(document.action_view_user_graph)d" view_mode="graph,tree"/> - <action - string="Files by Month" + <action string="Files by Month" name="%(document.action_view_files_by_month_graph)d" view_mode="graph,tree"/> - </child2> - </hpaned> + </column> + </board> </form> </field> </record> diff --git a/addons/document/dict_tools.py b/addons/document/dict_tools.py index 10d2fdc69f3..e117b429f83 100644 --- a/addons/document/dict_tools.py +++ b/addons/document/dict_tools.py @@ -55,3 +55,5 @@ def dict_filter(srcdic, keys, res=None): return res #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/directory_content.py b/addons/document/directory_content.py index e690e50d4b4..5b8ec3ddd93 100644 --- a/addons/document/directory_content.py +++ b/addons/document/directory_content.py @@ -120,4 +120,5 @@ class document_directory_content(osv.osv): return pdf document_directory_content() -#eof
\ No newline at end of file +#eof +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/directory_report.py b/addons/document/directory_report.py index 2726fcd5462..202725a1d3f 100644 --- a/addons/document/directory_report.py +++ b/addons/document/directory_report.py @@ -60,3 +60,5 @@ class ir_action_report_xml(osv.osv): } ir_action_report_xml() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/document.py b/addons/document/document.py index 774c4e53a80..1bf177f50e6 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -349,3 +349,5 @@ class document_file(osv.osv): document_file() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/document_directory.py b/addons/document/document_directory.py index 2a3f54f53ba..d09d2cc86d5 100644 --- a/addons/document/document_directory.py +++ b/addons/document/document_directory.py @@ -307,3 +307,5 @@ class document_directory_node(osv.osv): 'directory_id': fields.many2one('document.directory', 'Document directory', ondelete="set null"), } document_directory_node() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/document_storage.py b/addons/document/document_storage.py index b61b7fd65fc..fe757e7876d 100644 --- a/addons/document/document_storage.py +++ b/addons/document/document_storage.py @@ -786,3 +786,5 @@ document_storage() #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml index 7564dfc938e..05e49ae89ad 100644 --- a/addons/document/document_view.xml +++ b/addons/document/document_view.xml @@ -372,7 +372,6 @@ <field name="model" eval="'document.directory'"/> <field name="name">Browse Files</field> <field name="value" eval="'ir.actions.act_window,%d'%action_document_file_directory_form"/> - <field name="object" eval="True"/> </record> <record model="ir.ui.view" id="view_attachment_form_inherit"> @@ -414,6 +413,7 @@ </record> <act_window domain="[('partner_id', '=', active_id)]" + context="{'default_partner_id': active_id}" id="act_res_partner_document" name="Related Documents" res_model="ir.attachment" src_model="res.partner" @@ -421,6 +421,7 @@ <act_window domain="[('parent_id', '=', active_id)]" + context="{'default_parent_id': active_id}" id="zoom_directory" name="Related Documents" res_model="ir.attachment" src_model="document.directory"/> diff --git a/addons/document/nodes.py b/addons/document/nodes.py index 0c4194847c1..ee89f3d4c6c 100644 --- a/addons/document/nodes.py +++ b/addons/document/nodes.py @@ -1557,4 +1557,5 @@ class nodefd_static(StringIO, node_descriptor): cr.close() StringIO.close(self) -#eof
\ No newline at end of file +#eof +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/report/__init__.py b/addons/document/report/__init__.py index bfdeacdaae8..f5b827f04b0 100644 --- a/addons/document/report/__init__.py +++ b/addons/document/report/__init__.py @@ -18,4 +18,6 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## -import document_report
\ No newline at end of file +import document_report + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/std_index.py b/addons/document/std_index.py index 4f939aab4df..fe42cfb1795 100644 --- a/addons/document/std_index.py +++ b/addons/document/std_index.py @@ -209,3 +209,5 @@ cntIndex.register(OpenDoc()) #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/test_cindex.py b/addons/document/test_cindex.py index 05101a7a491..a257c2c43a5 100755 --- a/addons/document/test_cindex.py +++ b/addons/document/test_cindex.py @@ -51,3 +51,5 @@ for fname in args: print "Keyboard interrupt" #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/wizard/__init__.py b/addons/document/wizard/__init__.py index b143b583426..c4decc58fba 100644 --- a/addons/document/wizard/__init__.py +++ b/addons/document/wizard/__init__.py @@ -19,3 +19,5 @@ # ############################################################################## import document_configuration + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document/wizard/document_configuration.py b/addons/document/wizard/document_configuration.py index 97eda4e2d62..6a69e638b4e 100644 --- a/addons/document/wizard/document_configuration.py +++ b/addons/document/wizard/document_configuration.py @@ -110,3 +110,5 @@ class document_configuration(osv.osv_memory): 'ressource_tree': 1 }) document_configuration() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/i18n/ar.po b/addons/document_ftp/i18n/ar.po new file mode 100644 index 00000000000..d0483dce57c --- /dev/null +++ b/addons/document_ftp/i18n/ar.po @@ -0,0 +1,135 @@ +# 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-18 07:10+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Arabic <ar@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-19 05:13+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: document_ftp +#: model:ir.model,name:document_ftp.model_document_ftp_configuration +msgid "Auto Directory Configuration" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "" +"Indicate the network address on which your OpenERP server should be " +"reachable for end-users. This depends on your network topology and " +"configuration, and will only affect the links displayed to the users. The " +"format is HOST:PORT and the default host (localhost) is only suitable for " +"access from the server machine itself.." +msgstr "" + +#. module: document_ftp +#: field:document.ftp.configuration,progress:0 +msgid "Configuration Progress" +msgstr "" + +#. module: document_ftp +#: model:ir.actions.url,name:document_ftp.action_document_browse +msgid "Browse Files" +msgstr "" + +#. module: document_ftp +#: field:document.ftp.configuration,config_logo:0 +msgid "Image" +msgstr "الصورة" + +#. module: document_ftp +#: field:document.ftp.configuration,host:0 +msgid "Address" +msgstr "العنوان" + +#. module: document_ftp +#: field:document.ftp.browse,url:0 +msgid "FTP Server" +msgstr "" + +#. module: document_ftp +#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory +msgid "FTP Server Configuration" +msgstr "" + +#. module: document_ftp +#: model:ir.module.module,description:document_ftp.module_meta_information +msgid "" +"This is a support FTP Interface with document management system.\n" +" With this module you would not only be able to access documents through " +"OpenERP\n" +" but you would also be able to connect with them through the file system " +"using the\n" +" FTP client.\n" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.browse:0 +msgid "_Browse" +msgstr "" + +#. module: document_ftp +#: help:document.ftp.configuration,host:0 +msgid "" +"Server address or IP and port to which users should connect to for DMS access" +msgstr "" + +#. module: document_ftp +#: model:ir.ui.menu,name:document_ftp.menu_document_browse +msgid "Shared Repository (FTP)" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.browse:0 +msgid "_Cancel" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "Configure FTP Server" +msgstr "" + +#. module: document_ftp +#: model:ir.module.module,shortdesc:document_ftp.module_meta_information +msgid "Integrated FTP Server with Document Management System" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "title" +msgstr "" + +#. module: document_ftp +#: model:ir.model,name:document_ftp.model_document_ftp_browse +msgid "Document FTP Browse" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "Knowledge Application Configuration" +msgstr "" + +#. module: document_ftp +#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse +msgid "Document Browse" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.browse:0 +msgid "Browse Document" +msgstr "" + +#. module: document_ftp +#: view:document.ftp.configuration:0 +msgid "res_config_contents" +msgstr "" diff --git a/addons/document_ftp/test_easyftp.py b/addons/document_ftp/test_easyftp.py index 74890b1a333..16bace4b167 100644 --- a/addons/document_ftp/test_easyftp.py +++ b/addons/document_ftp/test_easyftp.py @@ -68,3 +68,5 @@ def get_ftp_fulldata(ftp, fname, limit=8192): return ''.join(data) #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/wizard/ftp_browse.py b/addons/document_ftp/wizard/ftp_browse.py index 6e182082aeb..e8f127c3c3b 100644 --- a/addons/document_ftp/wizard/ftp_browse.py +++ b/addons/document_ftp/wizard/ftp_browse.py @@ -61,3 +61,5 @@ class document_ftp_browse(osv.osv_memory): } document_ftp_browse() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/wizard/ftp_configuration.py b/addons/document_ftp/wizard/ftp_configuration.py index 0ae133bb92a..5da2ddf11e8 100644 --- a/addons/document_ftp/wizard/ftp_configuration.py +++ b/addons/document_ftp/wizard/ftp_configuration.py @@ -48,3 +48,5 @@ class document_ftp_configuration(osv.osv_memory): {'url': 'ftp://'+(conf.host or 'localhost:8021')+'/' + cr.dbname+'/'}) document_ftp_configuration() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/__init__.py b/addons/document_webdav/__init__.py index ac417e18087..7cd1a38fc80 100644 --- a/addons/document_webdav/__init__.py +++ b/addons/document_webdav/__init__.py @@ -24,4 +24,5 @@ import webdav_server import document_webdav -#eof
\ No newline at end of file +#eof +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/__openerp__.py b/addons/document_webdav/__openerp__.py index 5576c17ba64..303f5c70e2c 100644 --- a/addons/document_webdav/__openerp__.py +++ b/addons/document_webdav/__openerp__.py @@ -72,3 +72,5 @@ which needs explicit configuration in openerp-server.conf, too. "certificate" : "001236490750845657973", 'images': ['images/dav_properties.jpeg','images/directories_structure_principals.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/cache.py b/addons/document_webdav/cache.py index 7f03aa6da13..95ff9d31f62 100644 --- a/addons/document_webdav/cache.py +++ b/addons/document_webdav/cache.py @@ -37,3 +37,5 @@ def memoize(maxsize): return wrapper return decorating_function + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py index c167d90ba42..772b7600f20 100644 --- a/addons/document_webdav/dav_fs.py +++ b/addons/document_webdav/dav_fs.py @@ -1023,3 +1023,5 @@ class openerp_dav_handler(dav_interface): if cr: cr.close() #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/document_webdav.py b/addons/document_webdav/document_webdav.py index f5fa7b591d8..da463c9eb1b 100644 --- a/addons/document_webdav/document_webdav.py +++ b/addons/document_webdav/document_webdav.py @@ -127,4 +127,5 @@ class dav_file_property(osv.osv): dav_file_property() -#eof
\ No newline at end of file +#eof +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/nodes.py b/addons/document_webdav/nodes.py index 5927eade899..d6ceca458cd 100644 --- a/addons/document_webdav/nodes.py +++ b/addons/document_webdav/nodes.py @@ -400,3 +400,5 @@ node_descriptor = nodes.node_descriptor #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/redirect.py b/addons/document_webdav/redirect.py index 71af3271ab7..7bc0883f9e8 100644 --- a/addons/document_webdav/redirect.py +++ b/addons/document_webdav/redirect.py @@ -106,3 +106,5 @@ class RedirectHTTPHandler(HttpLogHandler, FixSendError, HttpOptions, HTTPHandler #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/test_davclient.py b/addons/document_webdav/test_davclient.py index b4317282c6a..3c20cfed5b8 100755 --- a/addons/document_webdav/test_davclient.py +++ b/addons/document_webdav/test_davclient.py @@ -704,4 +704,5 @@ class DAVClient(object): etag = m.getheader('ETag') return etag or True -#eof
\ No newline at end of file +#eof +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/webdav.py b/addons/document_webdav/webdav.py index 3a68fb04fed..baa394e94a1 100644 --- a/addons/document_webdav/webdav.py +++ b/addons/document_webdav/webdav.py @@ -341,3 +341,5 @@ def create_prop(self): REPORT.create_prop = create_prop #eof + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py index aeff0a23f25..81435a72137 100644 --- a/addons/document_webdav/webdav_server.py +++ b/addons/document_webdav/webdav_server.py @@ -649,3 +649,5 @@ init_principals_redirect() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/__init__.py b/addons/edi/__init__.py new file mode 100644 index 00000000000..b4a80c0f1dd --- /dev/null +++ b/addons/edi/__init__.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## +import logging + +import models +import edi_service +from models.edi import EDIMixin, edi_document + +# web +try: + import controllers +except ImportError: + logging.getLogger('init.load').warn( + """Could not load openerp-web section of EDI, EDI will not behave correctly + +To fix, launch openerp-web in embedded mode""") + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/__openerp__.py b/addons/edi/__openerp__.py new file mode 100644 index 00000000000..4d96780b10c --- /dev/null +++ b/addons/edi/__openerp__.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## +{ + 'name': 'Electronic Data Interchange (EDI)', + 'version': '1.0', + 'category': 'Tools', + 'complexity': "easy", + 'description': """ +Provides a common EDI platform that other Applications can use +============================================================== + +OpenERP specifies a generic EDI format for exchanging business +documents between different systems, and provides generic +mechanisms to import and export them. + +More details about OpenERP's EDI format may be found in the +technical OpenERP documentation at http://doc.openerp.com + """, + 'author': 'OpenERP SA', + 'website': 'http://www.openerp.com', + 'depends': ['base', 'email_template'], + 'data': [ + 'security/ir.model.access.csv', + ], + 'test': [ + 'test/edi_partner_test.yml', + ], + 'js': [ + 'static/src/js/edi.js', + ], + "css": [ + "static/src/css/edi.css" + ], + 'installable': True, + 'active': False, + 'certificate': '002046536359186', +} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/controllers/__init__.py b/addons/edi/controllers/__init__.py new file mode 100644 index 00000000000..9f828025b8e --- /dev/null +++ b/addons/edi/controllers/__init__.py @@ -0,0 +1,3 @@ +import main + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/controllers/main.py b/addons/edi/controllers/main.py new file mode 100644 index 00000000000..83c3a1608e9 --- /dev/null +++ b/addons/edi/controllers/main.py @@ -0,0 +1,86 @@ +import json +import textwrap + +import simplejson +import werkzeug.wrappers + +import web.common.http as openerpweb +import web.controllers.main + +class EDI(openerpweb.Controller): + # http://hostname:8069/edi/view?db=XXXX&token=XXXXXXXXXXX + # http://hostname:8069/edi/import_url?url=URIEncodedURL + _cp_path = "/edi" + + def template(self, req, mods='web,edi'): + self.wc = openerpweb.controllers_path['/web/webclient'] + d = {} + d["js"] = "\n".join('<script type="text/javascript" src="%s"></script>'%i for i in self.wc.manifest_list(req, mods, 'js')) + d["css"] = "\n".join('<link rel="stylesheet" href="%s">'%i for i in self.wc.manifest_list(req, mods, 'css')) + d["modules"] = simplejson.dumps(mods.split(',')) + return d + + @openerpweb.httprequest + def view(self, req, db, token): + d = self.template(req) + d["init"] = 'new s.edi.EdiView(null,"%s","%s").appendTo($("body"));'%(db,token) + r = web.controllers.main.html_template % d + return r + + @openerpweb.httprequest + def import_url(self, req, url): + d = self.template(req) + d["init"] = 'new s.edi.EdiImport(null,"%s").appendTo($("body"));'%(url) + r = web.controllers.main.html_template % d + return r + + @openerpweb.httprequest + def download(self, req, db, token): + result = req.session.proxy('edi').get_edi_document(db, token) + response = werkzeug.wrappers.Response( result, headers=[('Content-Type', 'text/html; charset=utf-8'), ('Content-Length', len(result))]) + return response + + @openerpweb.httprequest + def download_attachment(self, req, db, token): + result = req.session.proxy('edi').get_edi_document(db, token) + doc = json.loads(result)[0] + attachment = doc['__attachments'] and doc['__attachments'][0] + if attachment: + result = attachment["content"].decode('base64') + import email.Utils as utils + + # Encode as per RFC 2231 + filename_utf8 = attachment['file_name'] + filename_encoded = "%s=%s" % ('filename*', + utils.encode_rfc2231(filename_utf8, 'utf-8')) + response = werkzeug.wrappers.Response(result, headers=[('Content-Type', 'application/pdf'), + ('Content-Disposition', 'inline; ' + filename_encoded), + ('Content-Length', len(result))]) + return response + + @openerpweb.httprequest + def binary(self, req, db, token, field_path="company_address.logo", content_type='image/png'): + result = req.session.proxy('edi').get_edi_document(db, token) + doc = json.loads(result)[0] + for name in field_path.split("."): + doc = doc[name] + result = doc.decode('base64') + response = werkzeug.wrappers.Response(result, headers=[('Content-Type', content_type), + ('Content-Length', len(result))]) + return response + + @openerpweb.jsonrequest + def get_edi_document(self, req, db, token): + result = req.session.proxy('edi').get_edi_document(db, token) + return json.loads(result) + + @openerpweb.jsonrequest + def import_edi_url(self, req, url): + result = req.session.proxy('edi').import_edi_url(req.session._db, req.session._uid, req.session._password, url) + if len(result) == 1: + return {"action": web.controllers.main.clean_action(req, result[0][2])} + return True + +# + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/edi_service.py b/addons/edi/edi_service.py new file mode 100644 index 00000000000..074720a03e9 --- /dev/null +++ b/addons/edi/edi_service.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## +import logging + +import netsvc +import openerp + +_logger = logging.getLogger('edi.service') + +class edi(netsvc.ExportService): + + def __init__(self, name="edi"): + netsvc.ExportService.__init__(self, name) + + def _edi_dispatch(self, db_name, method_name, *method_args): + try: + registry = openerp.modules.registry.RegistryManager.get(db_name) + assert registry, 'Unknown database %s' % db_name + edi_document = registry['edi.document'] + cr = registry.db.cursor() + res = None + res = getattr(edi_document, method_name)(cr, *method_args) + cr.commit() + except Exception: + _logger.exception('Failed to execute EDI method %s with args %r', method_name, method_args) + raise + finally: + cr.close() + return res + + def exp_get_edi_document(self, db_name, edi_token): + return self._edi_dispatch(db_name, 'get_document', 1, edi_token) + + def exp_import_edi_document(self, db_name, uid, passwd, edi_document, context=None): + return self._edi_dispatch(db_name, 'import_edi', uid, edi_document, None) + + def exp_import_edi_url(self, db_name, uid, passwd, edi_url, context=None): + return self._edi_dispatch(db_name, 'import_edi', uid, None, edi_url) + + def dispatch(self, method, params): + if method in ['import_edi_document', 'import_edi_url']: + (db, uid, passwd ) = params[0:3] + openerp.service.security.check(db, uid, passwd) + elif method in ['get_edi_document']: + # No security check for these methods + pass + else: + raise KeyError("Method not found: %s" % method) + fn = getattr(self, 'exp_'+method) + return fn(*params) + +edi() +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/models/__init__.py b/addons/edi/models/__init__.py new file mode 100644 index 00000000000..a1e61299334 --- /dev/null +++ b/addons/edi/models/__init__.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +import edi +import res_partner +import res_company +import res_currency + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/models/edi.py b/addons/edi/models/edi.py new file mode 100644 index 00000000000..b8fc8699ca2 --- /dev/null +++ b/addons/edi/models/edi.py @@ -0,0 +1,684 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +import base64 +import hashlib +import json +import logging +import re +import threading +import time +import urllib2 + +import openerp +import openerp.release as release +import netsvc +import pooler +from osv import osv,fields,orm +from tools.translate import _ +from tools.safe_eval import safe_eval as eval + +EXTERNAL_ID_PATTERN = re.compile(r'^([^.:]+)(?::([^.]+))?\.(\S+)$') +EDI_VIEW_WEB_URL = '%s/edi/view?debug=1&db=%s&token=%s' +EDI_PROTOCOL_VERSION = 1 # arbitrary ever-increasing version number +EDI_GENERATOR = 'OpenERP ' + release.major_version +EDI_GENERATOR_VERSION = release.version_info + +def split_external_id(ext_id): + match = EXTERNAL_ID_PATTERN.match(ext_id) + assert match, \ + _("'%s' is an invalid external ID") % (ext_id) + return {'module': match.group(1), + 'db_uuid': match.group(2), + 'id': match.group(3), + 'full': match.group(0)} + +def safe_unique_id(database_id, model, record_id): + """Generate a unique string to represent a (database_uuid,model,record_id) pair + without being too long, and with a very low probability of collisions. + """ + msg = "%s-%s-%s-%s" % (time.time(), database_id, model, record_id) + digest = hashlib.sha1(msg).digest() + # fold the sha1 20 bytes digest to 9 bytes + digest = ''.join(chr(ord(x) ^ ord(y)) for (x,y) in zip(digest[:9], digest[9:-2])) + # b64-encode the 9-bytes folded digest to a reasonable 12 chars ASCII ID + digest = base64.urlsafe_b64encode(digest) + return '%s-%s' % (model.replace('.','_'), digest) + +def last_update_for(record): + """Returns the last update timestamp for the given record, + if available, otherwise False + """ + if record._model._log_access: + record_log = record.perm_read()[0] + return record_log.get('write_date') or record_log.get('create_date') or False + return False + +_logger = logging.getLogger('edi') + +class edi_document(osv.osv): + _name = 'edi.document' + _description = 'EDI Document' + _columns = { + 'name': fields.char("EDI token", size = 128, help="Unique identifier for retrieving an EDI document."), + 'document': fields.text("Document", help="EDI document content") + } + _sql_constraints = [ + ('name_uniq', 'unique (name)', 'EDI Tokens must be unique!') + ] + + def new_edi_token(self, cr, uid, record): + """Return a new, random unique token to identify this model record, + and to be used as token when exporting it as an EDI document. + + :param browse_record record: model record for which a token is needed + """ + db_uuid = self.pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid') + edi_token = hashlib.sha256('%s-%s-%s-%s' % (time.time(), db_uuid, record._name, record.id)).hexdigest() + return edi_token + + def serialize(self, edi_documents): + """Serialize the given EDI document structures (Python dicts holding EDI data), + using JSON serialization. + + :param [dict] edi_documents: list of EDI document structures to serialize + :return: UTF-8 encoded string containing the serialized document + """ + serialized_list = json.dumps(edi_documents) + return serialized_list + + def generate_edi(self, cr, uid, records, context=None): + """Generates a final EDI document containing the EDI serialization + of the given records, which should all be instances of a Model + that has the :meth:`~.edi` mixin. The document is not saved in the + database, this is done by :meth:`~.export_edi`. + + :param list(browse_record) records: records to export as EDI + :return: UTF-8 encoded string containing the serialized records + """ + edi_list = [] + for record in records: + record_model_obj = self.pool.get(record._name) + edi_list += record_model_obj.edi_export(cr, uid, [record], context=context) + return self.serialize(edi_list) + + def get_document(self, cr, uid, edi_token, context=None): + """Retrieve the EDI document corresponding to the given edi_token. + + :return: EDI document string + :raise: ValueError if requested EDI token does not match any know document + """ + _logger.debug("get_document(%s)", edi_token) + edi_ids = self.search(cr, uid, [('name','=', edi_token)], context=context) + if not edi_ids: + raise ValueError('Invalid EDI token: %s' % edi_token) + edi = self.browse(cr, uid, edi_ids[0], context=context) + return edi.document + + def load_edi(self, cr, uid, edi_documents, context=None): + """Import the given EDI document structures into the system, using + :meth:`~.import_edi`. + + :param edi_documents: list of Python dicts containing the deserialized + version of EDI documents + :return: list of (model, id, action) tuple containing the model and database ID + of all records that were imported in the system, plus a suggested + action definition dict for displaying each document. + """ + ir_module = self.pool.get('ir.module.module') + res = [] + for edi_document in edi_documents: + module = edi_document.get('__import_module') or edi_document.get('__module') + assert module, 'a `__module` or `__import_module` attribute is required in each EDI document' + if module != 'base' and not ir_module.search(cr, uid, [('name','=',module),('state','=','installed')]): + raise osv.except_osv(_('Missing Application'), + _("The document you are trying to import requires the OpenERP `%s` application. " + "You can install it by connecting as the administrator and opening the configuration assistant.")%(module,)) + model = edi_document.get('__import_model') or edi_document.get('__model') + assert model, 'a `__model` or `__import_model` attribute is required in each EDI document' + model_obj = self.pool.get(model) + assert model_obj, 'model `%s` cannot be found, despite module `%s` being available - '\ + 'this EDI document seems invalid or unsupported' % (model,module) + record_id = model_obj.edi_import(cr, uid, edi_document, context=context) + record_action = model_obj._edi_record_display_action(cr, uid, record_id, context=context) + res.append((model, record_id, record_action)) + return res + + def deserialize(self, edi_documents_string): + """Return deserialized version of the given EDI Document string. + + :param str|unicode edi_documents_string: UTF-8 string (or unicode) containing + JSON-serialized EDI document(s) + :return: Python object representing the EDI document(s) (usually a list of dicts) + """ + return json.loads(edi_documents_string) + + def export_edi(self, cr, uid, records, context=None): + """Export the given database records as EDI documents, stores them + permanently with a new unique EDI token, for later retrieval via :meth:`~.get_document`, + and returns the list of the new corresponding ``ir.edi.document`` records. + + :param records: list of browse_record of any model + :return: list of IDs of the new ``ir.edi.document`` entries, in the same + order as the provided ``records``. + """ + exported_ids = [] + for record in records: + document = self.generate_edi(cr, uid, [record], context) + token = self.new_edi_token(cr, uid, record) + self.create(cr, uid, { + 'name': token, + 'document': document + }, context=context) + exported_ids.append(token) + return exported_ids + + def import_edi(self, cr, uid, edi_document=None, edi_url=None, context=None): + """Import a JSON serialized EDI Document string into the system, first retrieving it + from the given ``edi_url`` if provided. + + :param str|unicode edi_document: UTF-8 string or unicode containing JSON-serialized + EDI Document to import. Must not be provided if + ``edi_url`` is given. + :param str|unicode edi_url: URL where the EDI document (same format as ``edi_document``) + may be retrieved, without authentication. + """ + if edi_url: + assert not edi_document, 'edi_document must not be provided if edi_url is given' + edi_document = urllib2.urlopen(edi_url).read() + assert edi_document, 'EDI Document is empty!' + edi_documents = self.deserialize(edi_document) + return self.load_edi(cr, uid, edi_documents, context=context) + + +class EDIMixin(object): + """Mixin class for Model objects that want be exposed as EDI documents. + Classes that inherit from this mixin class should override the + ``edi_import()`` and ``edi_export()`` methods to implement their + specific behavior, based on the primitives provided by this mixin.""" + + def _edi_requires_attributes(self, attributes, edi_document): + model_name = edi_document.get('__imported_model') or edi_document.get('__model') or self._name + for attribute in attributes: + assert edi_document.get(attribute),\ + 'Attribute `%s` is required in %s EDI documents' % (attribute, model_name) + + # private method, not RPC-exposed as it creates ir.model.data entries as + # SUPERUSER based on its parameters + def _edi_external_id(self, cr, uid, record, existing_id=None, existing_module=None, + context=None): + """Generate/Retrieve unique external ID for ``record``. + Each EDI record and each relationship attribute in it is identified by a + unique external ID, which includes the database's UUID, as a way to + refer to any record within any OpenERP instance, without conflict. + + For OpenERP records that have an existing "External ID" (i.e. an entry in + ir.model.data), the EDI unique identifier for this record will be made of + "%s:%s:%s" % (module, database UUID, ir.model.data ID). The database's + UUID MUST NOT contain a colon characters (this is guaranteed by the + UUID algorithm). + + For records that have no existing ir.model.data entry, a new one will be + created during the EDI export. It is recommended that the generated external ID + contains a readable reference to the record model, plus a unique value that + hides the database ID. If ``existing_id`` is provided (because it came from + an import), it will be used instead of generating a new one. + If ``existing_module`` is provided (because it came from + an import), it will be used instead of using local values. + + :param browse_record record: any browse_record needing an EDI external ID + :param string existing_id: optional existing external ID value, usually coming + from a just-imported EDI record, to be used instead + of generating a new one + :param string existing_module: optional existing module name, usually in the + format ``module:db_uuid`` and coming from a + just-imported EDI record, to be used instead + of local values + :return: the full unique External ID to use for record + """ + ir_model_data = self.pool.get('ir.model.data') + db_uuid = self.pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid') + ext_id = record.get_external_id()[record.id] + if not ext_id: + ext_id = existing_id or safe_unique_id(db_uuid, record._name, record.id) + # ID is unique cross-db thanks to db_uuid (already included in existing_module) + module = existing_module or "%s:%s" % (record._original_module, db_uuid) + _logger.debug("%s: Generating new external ID `%s.%s` for %r", self._name, + module, ext_id, record) + ir_model_data.create(cr, openerp.SUPERUSER_ID, + {'name': ext_id, + 'model': record._name, + 'module': module, + 'res_id': record.id}) + else: + module, ext_id = ext_id.split('.') + if not ':' in module: + # this record was not previously EDI-imported + if not module == record._original_module: + # this could happen for data records defined in a module that depends + # on the module that owns the model, e.g. purchase defines + # product.pricelist records. + _logger.debug('Mismatching module: expected %s, got %s, for %s', + module, record._original_module, record) + # ID is unique cross-db thanks to db_uuid + module = "%s:%s" % (module, db_uuid) + + return '%s.%s' % (module, ext_id) + + def _edi_record_display_action(self, cr, uid, id, context=None): + """Returns an appropriate action definition dict for displaying + the record with ID ``rec_id``. + + :param int id: database ID of record to display + :return: action definition dict + """ + return {'type': 'ir.actions.act_window', + 'view_mode': 'form,tree', + 'view_type': 'form', + 'res_model': self._name, + 'res_id': id} + + def edi_metadata(self, cr, uid, records, context=None): + """Return a list containing the boilerplate EDI structures for + exporting ``records`` as EDI, including + the metadata fields + + The metadata fields always include:: + + { + '__model': 'some.model', # record model + '__module': 'module', # require module + '__id': 'module:db-uuid:model.id', # unique global external ID for the record + '__last_update': '2011-01-01 10:00:00', # last update date in UTC! + '__version': 1, # EDI spec version + '__generator' : 'OpenERP', # EDI generator + '__generator_version' : [6,1,0], # server version, to check compatibility. + '__attachments_': + } + + :param list(browse_record) records: records to export + :return: list of dicts containing boilerplate EDI metadata for each record, + at the corresponding index from ``records``. + """ + data_ids = [] + ir_attachment = self.pool.get('ir.attachment') + results = [] + for record in records: + ext_id = self._edi_external_id(cr, uid, record, context=context) + edi_dict = { + '__id': ext_id, + '__last_update': last_update_for(record), + '__model' : record._name, + '__module' : record._original_module, + '__version': EDI_PROTOCOL_VERSION, + '__generator': EDI_GENERATOR, + '__generator_version': EDI_GENERATOR_VERSION, + } + attachment_ids = ir_attachment.search(cr, uid, [('res_model','=', record._name), ('res_id', '=', record.id)]) + if attachment_ids: + attachments = [] + for attachment in ir_attachment.browse(cr, uid, attachment_ids, context=context): + attachments.append({ + 'name' : attachment.name, + 'content': attachment.datas, # already base64 encoded! + 'file_name': attachment.datas_fname, + }) + edi_dict.update(__attachments=attachments) + results.append(edi_dict) + return results + + def edi_m2o(self, cr, uid, record, context=None): + """Return a m2o EDI representation for the given record. + + The EDI format for a many2one is:: + + ['unique_external_id', 'Document Name'] + """ + edi_ext_id = self._edi_external_id(cr, uid, record, context=context) + relation_model = record._model + name = relation_model.name_get(cr, uid, [record.id], context=context) + name = name and name[0][1] or False + return [edi_ext_id, name] + + def edi_o2m(self, cr, uid, records, edi_struct=None, context=None): + """Return a list representing a O2M EDI relationship containing + all the given records, according to the given ``edi_struct``. + This is basically the same as exporting all the record using + :meth:`~.edi_export` with the given ``edi_struct``, and wrapping + the results in a list. + + Example:: + + [ # O2M fields would be a list of dicts, with their + { '__id': 'module:db-uuid.id', # own __id. + '__last_update': 'iso date', # update date + 'name': 'some name', + #... + }, + # ... + ], + """ + result = [] + for record in records: + result += record._model.edi_export(cr, uid, [record], edi_struct=edi_struct, context=context) + return result + + def edi_m2m(self, cr, uid, records, context=None): + """Return a list representing a M2M EDI relationship directed towards + all the given records. + This is basically the same as exporting all the record using + :meth:`~.edi_m2o` and wrapping the results in a list. + + Example:: + + # M2M fields are exported as a list of pairs, like a list of M2O values + [ + ['module:db-uuid.id1', 'Task 01: bla bla'], + ['module:db-uuid.id2', 'Task 02: bla bla'] + ] + """ + return [self.edi_m2o(cr, uid, r, context=context) for r in records] + + def edi_export(self, cr, uid, records, edi_struct=None, context=None): + """Returns a list of dicts representing an edi.document containing the + records, and matching the given ``edi_struct``, if provided. + + :param edi_struct: if provided, edi_struct should be a dictionary + with a skeleton of the fields to export. + Basic fields can have any key as value, but o2m + values should have a sample skeleton dict as value, + to act like a recursive export. + For example, for a res.partner record:: + + edi_struct: { + 'name': True, + 'company_id': True, + 'address': { + 'name': True, + 'street': True, + } + } + + Any field not specified in the edi_struct will not + be included in the exported data. Fields with no + value (False) will be omitted in the EDI struct. + If edi_struct is omitted, no fields will be exported + """ + if edi_struct is None: + edi_struct = {} + fields_to_export = edi_struct.keys() + results = [] + for record in records: + edi_dict = self.edi_metadata(cr, uid, [record], context=context)[0] + for field in fields_to_export: + column = self._all_columns[field].column + value = getattr(record, field) + if not value and value not in ('', 0): + continue + elif column._type == 'many2one': + value = self.edi_m2o(cr, uid, value, context=context) + elif column._type == 'many2many': + value = self.edi_m2m(cr, uid, value, context=context) + elif column._type == 'one2many': + value = self.edi_o2m(cr, uid, value, edi_struct=edi_struct.get(field, {}), context=context) + edi_dict[field] = value + results.append(edi_dict) + return results + + def edi_export_and_email(self, cr, uid, ids, template_ext_id, context=None): + """Export the given records just like :meth:`~.export_edi`, the render the + given email template, in order to trigger appropriate notifications. + This method is intended to be called as part of business documents' + lifecycle, so it silently ignores any error occurring during the process, + as this is usually non-critical. To avoid any delay, it is also asynchronous + and will spawn a short-lived thread to perform the action. + + :param str template_ext_id: external id of the email.template to use for + the mail notifications + :return: True + """ + def email_task(): + db = pooler.get_db(cr.dbname) + local_cr = None + try: + time.sleep(3) # lame workaround to wait for commit of parent transaction + # grab a fresh browse_record on local cursor + local_cr = db.cursor() + web_root_url = self.pool.get('ir.config_parameter').get_param(local_cr, uid, 'web.base.url') + if not web_root_url: + _logger.warning('Ignoring EDI mail notification, web.base.url not defined in parameters') + return + mail_tmpl = self._edi_get_object_by_external_id(local_cr, uid, template_ext_id, 'email.template', context=context) + if not mail_tmpl: + # skip EDI export if the template was not found + _logger.warning('Ignoring EDI mail notification, template %s cannot be located', template_ext_id) + return + for edi_record in self.browse(local_cr, uid, ids, context=context): + edi_token = self.pool.get('edi.document').export_edi(local_cr, uid, [edi_record], context = context)[0] + edi_context = dict(context, edi_web_url_view=EDI_VIEW_WEB_URL % (web_root_url, local_cr.dbname, edi_token)) + self.pool.get('email.template').send_mail(local_cr, uid, mail_tmpl.id, edi_record.id, + force_send=False, context=edi_context) + _logger.info('EDI export successful for %s #%s, email notification sent.', self._name, edi_record.id) + except Exception: + _logger.warning('Ignoring EDI mail notification, failed to generate it.', exc_info=True) + finally: + if local_cr: + local_cr.commit() + local_cr.close() + + threading.Thread(target=email_task, name='EDI ExportAndEmail for %s %r' % (self._name, ids)).start() + return True + + def _edi_get_object_by_name(self, cr, uid, name, model_name, context=None): + model = self.pool.get(model_name) + search_results = model.name_search(cr, uid, name, operator='=', context=context) + if len(search_results) == 1: + return model.browse(cr, uid, search_results[0][0], context=context) + return False + + def _edi_generate_report_attachment(self, cr, uid, record, context=None): + """Utility method to generate the first PDF-type report declared for the + current model with ``usage`` attribute set to ``default``. + This must be called explicitly by models that need it, usually + at the beginning of ``edi_export``, before the call to ``super()``.""" + ir_actions_report = self.pool.get('ir.actions.report.xml') + matching_reports = ir_actions_report.search(cr, uid, [('model','=',self._name), + ('report_type','=','pdf'), + ('usage','=','default')]) + if matching_reports: + report = ir_actions_report.browse(cr, uid, matching_reports[0]) + report_service = 'report.' + report.report_name + service = netsvc.LocalService(report_service) + (result, format) = service.create(cr, uid, [record.id], {'model': self._name}, context=context) + eval_context = {'time': time, 'object': record} + if not report.attachment or not eval(report.attachment, eval_context): + # no auto-saving of report as attachment, need to do it manually + result = base64.b64encode(result) + file_name = record.name_get()[0][1] + file_name = re.sub(r'[^a-zA-Z0-9_-]', '_', file_name) + file_name += ".pdf" + ir_attachment = self.pool.get('ir.attachment').create(cr, uid, + {'name': file_name, + 'datas': result, + 'datas_fname': file_name, + 'res_model': self._name, + 'res_id': record.id}, + context=context) + + def _edi_import_attachments(self, cr, uid, record_id, edi_document, context=None): + ir_attachment = self.pool.get('ir.attachment') + for attachment in edi_document.get('__attachments', []): + # check attachment data is non-empty and valid + file_data = None + try: + file_data = base64.b64decode(attachment.get('content')) + except TypeError: + pass + assert file_data, 'Incorrect/Missing attachment file content' + assert attachment.get('name'), 'Incorrect/Missing attachment name' + assert attachment.get('file_name'), 'Incorrect/Missing attachment file name' + assert attachment.get('file_name'), 'Incorrect/Missing attachment file name' + ir_attachment.create(cr, uid, {'name': attachment['name'], + 'datas_fname': attachment['file_name'], + 'res_model': self._name, + 'res_id': record_id, + # should be pure 7bit ASCII + 'datas': str(attachment['content']), + }, context=context) + + + def _edi_get_object_by_external_id(self, cr, uid, external_id, model, context=None): + """Returns browse_record representing object identified by the model and external_id, + or None if no record was found with this external id. + + :param external_id: fully qualified external id, in the EDI form + ``module:db_uuid:identifier``. + :param model: model name the record belongs to. + """ + ir_model_data = self.pool.get('ir.model.data') + # external_id is expected to have the form: ``module:db_uuid:model.random_name`` + ext_id_members = split_external_id(external_id) + db_uuid = self.pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid') + module = ext_id_members['module'] + ext_id = ext_id_members['id'] + modules = [] + ext_db_uuid = ext_id_members['db_uuid'] + if ext_db_uuid: + modules.append('%s:%s' % (module, ext_id_members['db_uuid'])) + if ext_db_uuid is None or ext_db_uuid == db_uuid: + # local records may also be registered without the db_uuid + modules.append(module) + data_ids = ir_model_data.search(cr, uid, [('model','=',model), + ('name','=',ext_id), + ('module','in',modules)]) + if data_ids: + model = self.pool.get(model) + data = ir_model_data.browse(cr, uid, data_ids[0], context=context) + result = model.browse(cr, uid, data.res_id, context=context) + return result + + def edi_import_relation(self, cr, uid, model, value, external_id, context=None): + """Imports a M2O/M2M relation EDI specification ``[external_id,value]`` for the + given model, returning the corresponding database ID: + + * First, checks if the ``external_id`` is already known, in which case the corresponding + database ID is directly returned, without doing anything else; + * If the ``external_id`` is unknown, attempts to locate an existing record + with the same ``value`` via name_search(). If found, the given external_id will + be assigned to this local record (in addition to any existing one) + * If previous steps gave no result, create a new record with the given + value in the target model, assign it the given external_id, and return + the new database ID + """ + _logger.debug("%s: Importing EDI relationship [%r,%r]", model, external_id, value) + target = self._edi_get_object_by_external_id(cr, uid, external_id, model, context=context) + need_new_ext_id = False + if not target: + _logger.debug("%s: Importing EDI relationship [%r,%r] - ID not found, trying name_get", + self._name, external_id, value) + target = self._edi_get_object_by_name(cr, uid, value, model, context=context) + need_new_ext_id = True + if not target: + _logger.debug("%s: Importing EDI relationship [%r,%r] - name not found, creating it!", + self._name, external_id, value) + # also need_new_ext_id here, but already been set above + model = self.pool.get(model) + res_id, name = model.name_create(cr, uid, value, context=context) + target = model.browse(cr, uid, res_id, context=context) + if need_new_ext_id: + ext_id_members = split_external_id(external_id) + # module name is never used bare when creating ir.model.data entries, in order + # to avoid being taken as part of the module's data, and cleanup up at next update + module = "%s:%s" % (ext_id_members['module'], ext_id_members['db_uuid']) + # create a new ir.model.data entry for this value + self._edi_external_id(cr, uid, target, existing_id=ext_id_members['id'], existing_module=module, context=context) + return target.id + + def edi_import(self, cr, uid, edi_document, context=None): + """Imports a dict representing an edi.document into the system. + + :param dict edi_document: EDI document to import + :return: the database ID of the imported record + """ + assert self._name == edi_document.get('__import_model') or \ + ('__import_model' not in edi_document and self._name == edi_document.get('__model')), \ + "EDI Document Model and current model do not match: '%s' (EDI) vs '%s' (current)" % \ + (edi_document['__model'], self._name) + + # First check the record is now already known in the database, in which case it is ignored + ext_id_members = split_external_id(edi_document['__id']) + existing = self._edi_get_object_by_external_id(cr, uid, ext_id_members['full'], self._name, context=context) + if existing: + _logger.info("'%s' EDI Document with ID '%s' is already known, skipping import!", self._name, ext_id_members['full']) + return existing.id + + record_values = {} + o2m_todo = {} # o2m values are processed after their parent already exists + for field_name, field_value in edi_document.iteritems(): + # skip metadata and empty fields + if field_name.startswith('__') or field_value is None or field_value is False: + continue + field_info = self._all_columns.get(field_name) + if not field_info: + _logger.warning('Ignoring unknown field `%s` when importing `%s` EDI document', field_name, self._name) + continue + field = field_info.column + # skip function/related fields + if isinstance(field, fields.function): + _logger.warning("Unexpected function field value found in '%s' EDI document: '%s'" % (self._name, field_name)) + continue + relation_model = field._obj + if field._type == 'many2one': + record_values[field_name] = self.edi_import_relation(cr, uid, relation_model, + field_value[1], field_value[0], + context=context) + elif field._type == 'many2many': + record_values[field_name] = [self.edi_import_relation(cr, uid, relation_model, m2m_value[1], + m2m_value[0], context=context) + for m2m_value in field_value] + elif field._type == 'one2many': + # must wait until parent report is imported, as the parent relationship + # is often required in o2m child records + o2m_todo[field_name] = field_value + else: + record_values[field_name] = field_value + + module_ref = "%s:%s" % (ext_id_members['module'], ext_id_members['db_uuid']) + record_id = self.pool.get('ir.model.data')._update(cr, uid, self._name, module_ref, record_values, + xml_id=ext_id_members['id'], context=context) + + record_display, = self.name_get(cr, uid, [record_id], context=context) + + # process o2m values, connecting them to their parent on-the-fly + for o2m_field, o2m_value in o2m_todo.iteritems(): + field = self._all_columns[o2m_field].column + dest_model = self.pool.get(field._obj) + for o2m_line in o2m_value: + # link to parent record: expects an (ext_id, name) pair + o2m_line[field._fields_id] = (ext_id_members['full'], record_display[1]) + dest_model.edi_import(cr, uid, o2m_line, context=context) + + # process the attachments, if any + self._edi_import_attachments(cr, uid, record_id, edi_document, context=context) + + return record_id + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/edi/models/res_company.py b/addons/edi/models/res_company.py new file mode 100644 index 00000000000..cf5efe997e0 --- /dev/null +++ b/addons/edi/models/res_company.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import fields,osv + +class res_company(osv.osv): + """Helper subclass for res.company providing util methods for working with + companies in the context of EDI import/export. The res.company object + itself is not EDI-exportable""" + _inherit = "res.company" + + def edi_export_address(self, cr, uid, company, edi_address_struct=None, context=None): + """Returns a dict representation of the address of the company record, suitable for + inclusion in an EDI document, and matching the given edi_address_struct if provided. + The first found address is returned, in order of preference: invoice, contact, default. + + :param browse_record company: company to export + :return: dict containing the address representation for the company record, or + an empty dict if no address can be found + """ + res_partner = self.pool.get('res.partner') + res_partner_address = self.pool.get('res.partner.address') + addresses = res_partner.address_get(cr, uid, [company.partner_id.id], ['default', 'contact', 'invoice']) + addr_id = addresses['invoice'] or addresses['contact'] or addresses['default'] + result = {} + if addr_id: + address = res_partner_address.browse(cr, uid, addr_id, context=context) + result = res_partner_address.edi_export(cr, uid, [address], edi_struct=edi_address_struct, context=context)[0] + if company.logo: + result['logo'] = company.logo # already base64-encoded + if company.paypal_account: + result['paypal_account'] = company.paypal_account + # bank info: include only bank account supposed to be displayed in document footers + res_partner_bank = self.pool.get('res.partner.bank') + bank_ids = res_partner_bank.search(cr, uid, [('company_id','=',company.id),('footer','=',True)], context=context) + if bank_ids: + result['bank_ids'] = res_partner_address.edi_m2m(cr, uid, + res_partner_bank.browse(cr, uid, bank_ids, context=context), + context=context) + return result + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/models/res_currency.py b/addons/edi/models/res_currency.py new file mode 100644 index 00000000000..0f56bc83f45 --- /dev/null +++ b/addons/edi/models/res_currency.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import fields,osv +from edi import EDIMixin +from openerp import SUPERUSER_ID + +RES_CURRENCY_EDI_STRUCT = { + #custom: 'code' + 'symbol': True, + 'rate': True, +} + +class res_currency(osv.osv, EDIMixin): + _inherit = "res.currency" + + def edi_export(self, cr, uid, records, edi_struct=None, context=None): + edi_struct = dict(edi_struct or RES_CURRENCY_EDI_STRUCT) + edi_doc_list = [] + for currency in records: + # Get EDI doc based on struct. The result will also contain all metadata fields and attachments. + edi_doc = super(res_currency,self).edi_export(cr, uid, [currency], edi_struct, context)[0] + edi_doc.update(code=currency.name) + edi_doc_list.append(edi_doc) + return edi_doc_list + + def edi_import(self, cr, uid, edi_document, context=None): + self._edi_requires_attributes(('code','symbol'), edi_document) + external_id = edi_document['__id'] + existing_currency = self._edi_get_object_by_external_id(cr, uid, external_id, 'res_currency', context=context) + if existing_currency: + return existing_currency.id + + # find with unique ISO code + existing_ids = self.search(cr, uid, [('name','=',edi_document['code'])]) + if existing_ids: + return existing_ids[0] + + # nothing found, create a new one + currency_id = self.create(cr, SUPERUSER_ID, {'name': edi_document['code'], + 'symbol': edi_document['symbol']}, context=context) + rate = edi_document.pop('rate') + if rate: + self.pool.get('res.currency.rate').create(cr, SUPERUSER_ID, {'currency_id': currency_id, + 'rate': rate}, context=context) + return currency_id + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/models/res_partner.py b/addons/edi/models/res_partner.py new file mode 100644 index 00000000000..7c40a5c7354 --- /dev/null +++ b/addons/edi/models/res_partner.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## +import logging + +from osv import fields,osv +from edi import EDIMixin +from openerp import SUPERUSER_ID +from tools.translate import _ + +RES_PARTNER_ADDRESS_EDI_STRUCT = { + 'name': True, + 'email': True, + 'street': True, + 'street2': True, + 'zip': True, + 'city': True, + 'country_id': True, + 'state_id': True, + 'phone': True, + 'fax': True, + 'mobile': True, +} + +RES_PARTNER_EDI_STRUCT = { + 'name': True, + 'ref': True, + 'lang': True, + 'website': True, + 'address': RES_PARTNER_ADDRESS_EDI_STRUCT +} + +class res_partner(osv.osv, EDIMixin): + _inherit = "res.partner" + + def edi_export(self, cr, uid, records, edi_struct=None, context=None): + return super(res_partner,self).edi_export(cr, uid, records, + edi_struct or dict(RES_PARTNER_EDI_STRUCT), + context=context) + +class res_partner_address(osv.osv, EDIMixin): + _inherit = "res.partner.address" + + def _get_bank_type(self, cr, uid, context=None): + # first option: the "normal" bank type, installed by default + res_partner_bank_type = self.pool.get('res.partner.bank.type') + try: + return self.pool.get('ir.model.data').get_object(cr, uid, 'base', 'bank_normal', context=context).code + except ValueError: + pass + + # second option: create a new custom type for EDI or use it if already created, as IBAN type is + # not always appropriate: we need a free-form bank type for max flexibility (users can correct + # data manually after import) + code, label = 'edi_generic', 'Generic Bank Type (auto-created for EDI)' + bank_code_ids = res_partner_bank_type.search(cr, uid, [('code','=',code)], context=context) + if not bank_code_ids: + logging.getLogger('edi.res_partner').info('Normal bank account type is missing, creating ' + 'a generic bank account type for EDI.') + self.res_partner_bank_type.create(cr, SUPERUSER_ID, {'name': label, + 'code': label}) + return code + + def edi_export(self, cr, uid, records, edi_struct=None, context=None): + return super(res_partner_address,self).edi_export(cr, uid, records, + edi_struct or dict(RES_PARTNER_ADDRESS_EDI_STRUCT), + context=context) + + def edi_import(self, cr, uid, edi_document, context=None): + # handle bank info, if any + edi_bank_ids = edi_document.pop('bank_ids', None) + address_id = super(res_partner_address,self).edi_import(cr, uid, edi_document, context=context) + if edi_bank_ids: + address = self.browse(cr, uid, address_id, context=context) + import_ctx = dict((context or {}), + default_partner_id=address.partner_id.id, + default_state=self._get_bank_type(cr, uid, context)) + for ext_bank_id, bank_name in edi_bank_ids: + try: + self.edi_import_relation(cr, uid, 'res.partner.bank', + bank_name, ext_bank_id, context=import_ctx) + except osv.except_osv: + # failed to import it, try again with unrestricted default type + logging.getLogger('edi.res_partner').warning('Failed to import bank account using' + 'bank type: %s, ignoring', import_ctx['default_state'], + exc_info=True) + return address_id +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/edi/security/ir.model.access.csv b/addons/edi/security/ir.model.access.csv new file mode 100644 index 00000000000..f1942397ac5 --- /dev/null +++ b/addons/edi/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_ir_edi_all_read","access_ir_edi_all_read","model_edi_document",,1,0,0,0 +"access_ir_edi_employee_create","access_ir_edi_employee_create","model_edi_document","base.group_user",1,0,1,0
\ No newline at end of file diff --git a/addons/edi/static/src/css/edi.css b/addons/edi/static/src/css/edi.css new file mode 100644 index 00000000000..478985ee585 --- /dev/null +++ b/addons/edi/static/src/css/edi.css @@ -0,0 +1,220 @@ +/** EDI content **/ +.openerp .company_logo { + background-size: 180px 46px; +} +.oe_edi_view { + width: 65%; + vertical-align: top; + padding: 0px 25px; + border-right: 1px solid #D2CFCF; +} +.oe_edi_sidebar_container { + width: 35%; + padding: 0px 10px; + vertical-align: top; +} +button.oe_edi_action_print { + font-size: 1.5em; + margin-left: 35%; + margin-bottom: 20px; +} +button.oe_edi_action_print img { + vertical-align: bottom; + width: 32px; + height: 32px; +} + +.openerp input.invalid { + background-color: #F66 !important; + border: 1px solid #D00 !important; + color: #000; +} +/* following browse-specific hacks need to be separate rules, as browsers are + required to ignore rules with unknown selectors. At time of writing, there + is no standard way to style HTML5 placeholders */ +.openerp input.invalid:-moz-placeholder { + color: #FFF; +} +.openerp input.invalid::-webkit-input-placeholder { + color: #FFF; +} + +/** EDI Sidebar **/ +.oe_edi_sidebar_title { + border-bottom: 1px solid #D2CFCF; + font-weight: bold; + font-size: 1.3em; + min-width: 10em; +} +.oe_edi_nested_block, .oe_edi_nested_block_import, .oe_edi_nested_block_pay { + margin: 0px 40px; + min-width: 10em; + display: none; /* made visible by click on parent input/label */ +} +.oe_edi_right_top .oe_edi_nested_block label { + float: left; + text-align: right; + margin-right: 0.5em; + line-height: 180%; + font-weight: bold; + min-width: 5em; +} +.oe_edi_option { + padding-left: 5px; + line-height: 2em; +} +.oe_edi_option:hover { + background: #e8e8e8; +} +.oe_edi_import_button { + margin: 2px 10px; + white-space: nowrap; +} +.oe_edi_small, .oe_edi_small input { + font-size: 90%; +} + +/** Sidebar bottom **/ +.oe_edi_paypal_button { + margin: 6px; +} + + +/** Paperbox, from http://www.sitepoint.com/pure-css3-paper-curl/ **/ +body { + background: #EEE; /* contrast with paper */ +} +.oe_edi_paperbox { + position: relative; + width: 700px; + padding: 30px; + padding-bottom: 50px; + margin: 20px auto; + background-color: #fff; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); +} +.oe_edi_paperbox:before, .oe_edi_paperbox:after { + position: absolute; + width: 40%; + height: 10px; + content: ' '; + left: 12px; + bottom: 15px; + background: transparent; + -webkit-transform: skew(-5deg) rotate(-5deg); + -moz-transform: skew(-5deg) rotate(-5deg); + -ms-transform: skew(-5deg) rotate(-5deg); + -o-transform: skew(-5deg) rotate(-5deg); + transform: skew(-5deg) rotate(-5deg); + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); + z-index: -1; +} +.oe_edi_paperbox:after { + left: auto; right: 12px; + -webkit-transform: skew(5deg) rotate(5deg); + -moz-transform: skew(5deg) rotate(5deg); + -ms-transform: skew(5deg) rotate(5deg); + -o-transform: skew(5deg) rotate(5deg); + transform: skew(5deg) rotate(5deg); +} + +/** Sale Order / Purchase Order Preview **/ +table.oe_edi_data, .oe_edi_doc_title { + border-collapse: collapse; + clear: both; +} +.oe_edi_data th { + white-space: nowrap; +} +.oe_edi_data .oe_edi_floor { + border-bottom: 1px solid black; +} +.oe_edi_data .oe_edi_ceiling { + border-top: 1px solid black; +} +.oe_edi_data .oe_edi_data_row { + border-bottom: 1px solid #D2CFCF; +} +.oe_edi_data_row td { + vertical-align: top; +} +.oe_edi_inner_note { + font-style: italic; + font-size: 95%; + padding-left: 10px; +} +.oe_edi_shade { + background: #e8e8e8; +} +.oe_edi_company_name { + text-transform: uppercase; + font-weight: bold; +} +.oe_edi_address_from { + float: left; +} +.oe_edi_address_to { + float: right; + margin-top: 25px; + margin-bottom: 30px; +} +.oe_edi_company_block_title { + width: 375px; + margin: 0px; + padding: 2px 14px; + background-color: #252525; + border-top-left-radius: 5px 5px; + border-top-right-radius: 5px 5px; + background-repeat: repeat no-repeat; +} +.oe_edi_company_block_title .oe_edi_company_name { + margin: 0px; + font-size: 1em; + color: #FFF; +} +.oe_edi_company_block_body { + width: 375px; + margin: 0px; + padding: 5px 14px; + line-height: 16px; + background-color: rgb(242, 242, 242); +} +.oe_edi_company_block_body p { + color: #222; + margin: 5px 0px; +} +.oe_edi_summary_label { + float: left; +} +.oe_edi_summary_value { + float: right; +} + + +/** Python code highlighting **/ +/* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann + (http://qbnz.com/highlighter/ and http://geshi.org/) */ +.python .de1, .python .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;} +.python {font-family:monospace;} +.python .imp {font-weight: bold; color: red;} +.python li, .python .li1 {background: #ffffff; list-style: none;} +.python .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;} +.python .li2 {background: #f8f8f8;} +.python .kw1 {color: #ff7700;font-weight:bold;} +.python .kw2 {color: #008000;} +.python .kw3 {color: #dc143c;} +.python .kw4 {color: #0000cd;} +.python .co1 {color: #808080; font-style: italic;} +.python .coMULTI {color: #808080; font-style: italic;} +.python .es0 {color: #000099; font-weight: bold;} +.python .br0 {color: black;} +.python .sy0 {color: #66cc66;} +.python .st0 {color: #483d8b;} +.python .nu0 {color: #ff4500;} +.python .me1 {color: black;} +.python span.xtra { display:block; } +.python ol { padding: 0px; }
\ No newline at end of file diff --git a/addons/edi/static/src/img/pdf.png b/addons/edi/static/src/img/pdf.png Binary files differnew file mode 100644 index 00000000000..d35dfd20c2d --- /dev/null +++ b/addons/edi/static/src/img/pdf.png diff --git a/addons/edi/static/src/js/edi.js b/addons/edi/static/src/js/edi.js new file mode 100644 index 00000000000..9397c1cf280 --- /dev/null +++ b/addons/edi/static/src/js/edi.js @@ -0,0 +1,174 @@ +openerp.edi = function(openerp) { +openerp.web.qweb.add_template("/edi/static/src/xml/edi.xml"); +openerp.web.qweb.add_template("/edi/static/src/xml/edi_account.xml"); +openerp.web.qweb.add_template("/edi/static/src/xml/edi_sale_purchase.xml"); +openerp.edi = {} + +openerp.edi.EdiView = openerp.web.Widget.extend({ + init: function(parent, db, token) { + this._super(); + this.db = db; + this.token = token; + this.session = new openerp.web.Connection(); + this.template = "EdiEmpty"; + this.content = ""; + this.sidebar = ""; + }, + start: function() { + this._super(); + var param = {"db": this.db, "token": this.token}; + this.rpc('/edi/get_edi_document', param, this.on_document_loaded, this.on_document_failed); + }, + on_document_loaded: function(docs){ + this.doc = docs[0]; + var template_content = "Edi." + this.doc.__model + ".content"; + var template_sidebar = "Edi." + this.doc.__model + ".sidebar"; + var param = {"widget":this, "doc":this.doc}; + if (openerp.web.qweb.templates[template_sidebar]) { + this.sidebar = openerp.web.qweb.render(template_sidebar, param); + } + if (openerp.web.qweb.templates[template_content]) { + this.content = openerp.web.qweb.render(template_content, param); + } + this.$element.html(openerp.web.qweb.render("EdiView", param)); + this.$element.find('button.oe_edi_action_print').bind('click', this.do_print); + this.$element.find('button#oe_edi_import_existing').bind('click', this.do_import_existing); + this.$element.find('button#oe_edi_import_create').bind('click', this.do_import_create); + this.$element.find('button#oe_edi_download').bind('click', this.do_download); + this.$element.find('.oe_edi_import_choice, .oe_edi_import_choice_label').bind('click', this.toggle_choice('import')); + this.$element.find('.oe_edi_pay_choice, .oe_edi_pay_choice_label').bind('click', this.toggle_choice('pay')); + this.$element.find('#oe_edi_download_show_code').bind('click', this.show_code); + }, + on_document_failed: function(response) { + var self = this; + var params = { + error: response, + //TODO: should this be _t() wrapped? + message: "Sorry, this document cannot be located. Perhaps the link you are using has expired?" + } + $(openerp.web.qweb.render("DialogWarning", params)).dialog({ + title: "Document not found", + modal: true, + }); + }, + show_code: function($event) { + $('#oe_edi_download_code').toggle(); + }, + get_download_url: function() { + var l = window.location; + var url_prefix = l.protocol + '//' + l.host; + return url_prefix +'/edi/download?db=' + this.db + '&token=' + this.token; + }, + get_paypal_url: function(document_type, ref_field) { + var comp_name = encodeURIComponent(this.doc.company_id[1]); + var doc_ref = encodeURIComponent(this.doc[ref_field]); + var paypal_account = encodeURIComponent(this.doc.company_address.paypal_account); + var amount = encodeURIComponent(this.doc.amount_total); + var cur_code = encodeURIComponent(this.doc.currency.code); + var paypal_url = "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick" + + "&business=" + paypal_account + + "&item_name=" + document_type + "%20" + comp_name + "%20" + doc_ref + + "&invoice=" + doc_ref + + "&amount=" + amount + + "¤cy_code=" + cur_code + + "&button_subtype=services&no_note=1&bn=OpenERP_PayNow_" + cur_code; + return paypal_url; + }, + toggle_choice: function(mode) { + return function($e) { + $('.oe_edi_nested_block_'+mode).hide(); + $('.'+$e.target.id+'_nested').show(); + return true; + } + }, + do_print: function(e){ + var l = window.location; + window.location = l.protocol + '//' + l.host + "/edi/download_attachment?db=" + this.db + "&token=" + this.token; + }, + do_import_existing: function(e) { + var url_download = this.get_download_url(); + var $edi_text_server_input = this.$element.find('#oe_edi_txt_server_url'); + var server_url = $edi_text_server_input.val(); + $edi_text_server_input.removeClass('invalid'); + if (!server_url) { + $edi_text_server_input.addClass('invalid'); + return false; + } + var protocol = "http://"; + if (server_url.toLowerCase().lastIndexOf('http', 0) == 0 ) { + protocol = ''; + } + window.location = protocol + server_url + '/edi/import_url?url=' + encodeURIComponent(url_download); + }, + do_import_create: function(e){ + var url_download = this.get_download_url(); + window.location = "https://cc.my.openerp.com/odms/create_edi?url=" + encodeURIComponent(url_download); + }, + do_download: function(e){ + window.location = this.get_download_url(); + } +}); + +openerp.edi.EdiImport = openerp.web.Widget.extend({ + init: function(parent,url) { + this._super(); + this.url = url; + var params = {}; + + this.template = "EdiImport"; + this.session = new openerp.web.Connection(); + this.login = new openerp.web.Login(this); + this.header = new openerp.web.Header(this); + this.header.on_logout.add(this.login.on_logout); + }, + start: function() { + this.session.on_session_invalid.add_last(this.do_ask_login) + this.session.on_session_valid.add_last(this.do_import); + this.header.appendTo($("#oe_header")); + this.session.start(); + this.login.appendTo($('#oe_login')); + }, + do_ask_login: function() { + this.login.do_ask_login(this.do_import); + }, + do_import: function() { + this.rpc('/edi/import_edi_url', {url: this.url}, this.on_imported, this.on_imported_error); + }, + on_imported: function(response) { + if ('action' in response) { + this.rpc("/web/session/save_session_action", {the_action: response.action}, function(key) { + window.location = "/web/webclient/home?debug=1&s_action="+encodeURIComponent(key); + }); + } + else { + $('<div>').dialog({ + modal: true, + title: 'Import Successful!', + buttons: { + Ok: function() { + $(this).dialog("close"); + window.location = "/web/webclient/home"; + } + } + }).html('The document has been successfully imported!'); + } + }, + on_imported_error: function(response){ + var self = this; + var msg = "Sorry, the document could not be imported."; + if (response.data.fault_code) { + msg += "\n Reason:" + response.data.fault_code; + } + var params = {error: response, message: msg}; + $(openerp.web.qweb.render("DialogWarning", params)).dialog({ + title: "Document Import Notification", + modal: true, + buttons: { + Ok: function() { $(this).dialog("close"); } + } + }); + } +}); + +} +// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: diff --git a/addons/edi/static/src/xml/edi.xml b/addons/edi/static/src/xml/edi.xml new file mode 100644 index 00000000000..1e662a2b2cc --- /dev/null +++ b/addons/edi/static/src/xml/edi.xml @@ -0,0 +1,93 @@ +<template> +<t t-name="EdiEmpty"> + <div style="height:100%;"></div> +</t> +<t t-name="EdiImport"> + <t t-call="Interface"/> +</t> +<t t-name="EdiView"> + <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" id="oe_app" class="oe-application oe_forms"> + <tr> + <td colspan="2" valign="top" id="oe_header" class="header"> + <div> <a href="/" class="company_logo_link"> + <div class="company_logo" + t-att-style="'background: url('+ (doc.company_address ? '/edi/binary?db='+widget.db+'&token='+widget.token : '/web/static/src/img/logo.png')+')'"/></a> </div> + </td> + </tr> + <tr> + <td colspan="2" valign="top" height="100%"> + <table cellspacing="0" cellpadding="0" border="0" height="100%" width="100%"> + <tr> + <td class="oe_edi_view"> + <p class="oe_form_paragraph"><t t-raw="widget.content"/></p> + <button type="button" class="oe_edi_action_print"> + View/Print <img src="/edi/static/src/img/pdf.png"/> + </button> + </td> + <td class="oe_edi_sidebar_container"> + <p class="oe_edi_sidebar_title"> + Import this document + </p> + <div class="oe_edi_option"> + <input type="radio" id="oe_edi_import_openerp" name="oe_edi_import" class="oe_edi_import_choice"/> + <label for="oe_edi_import_openerp" id="oe_edi_import_openerp" class="oe_edi_import_choice_label">Import it into an existing OpenERP instance</label> + </div> + <p class="oe_edi_nested_block_import oe_edi_import_openerp_nested"> + <label for="oe_edi_txt_server_url">OpenERP instance address:</label> + <br/> + <input type="text" id="oe_edi_txt_server_url" placeholder="http://example.my.openerp.com/"/><br/> + <button type="button" class="oe_edi_import_button" id="oe_edi_import_existing">Import</button> + </p> + + <div class="oe_edi_option"> + <input type="radio" id="oe_edi_import_saas" name="oe_edi_import" class="oe_edi_import_choice"/> + <label for="oe_edi_import_saas" id="oe_edi_import_saas" class="oe_edi_import_choice_label">Import it into a new OpenERP Online instance</label> + </div> + <p class="oe_edi_nested_block_import oe_edi_import_saas_nested"> + <button type="button" class="oe_edi_import_button" id="oe_edi_import_create">Create my new OpenERP instance</button> + </p> + + <div class="oe_edi_option"> + <input type="radio" id="oe_edi_import_download" name="oe_edi_import" class="oe_edi_import_choice"/> + <label for="oe_edi_import_download" id="oe_edi_import_download" class="oe_edi_import_choice_label">Import into another application</label> + </div> + <p class="oe_edi_nested_block_import oe_edi_small oe_edi_import_download_nested"> + OpenERP's Electronic Data Interchange documents are based on a generic and language + independent <a href="http://json.org">JSON</a> serialization of the document's attribute. + It is usually very quick and straightforward to create a small plug-in for your preferred + application that will be capable of importing any OpenERP EDI document. + You can find out more details about how to do this and what the content of OpenERP EDI documents + is like in the <a href="http://doc.openerp.com/search.html?q=edi">OpenERP documentation</a>. + <br/> + To get started immediately, <a href="#" id="oe_edi_download_show_code">see is all it takes to use this EDI document in Python</a>. + </p> + <div class="python oe_edi_nested_block_import oe_edi_small" id="oe_edi_download_code"> + <ol><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">urllib2</span><span class="sy0">,</span> simplejson</div></li> + <li class="li1"><div class="de1">edi_document <span class="sy0">=</span> <span class="kw3">urllib2</span>.<span class="me1">urlopen</span><span class="br0">(</span><span class="st0">'<t t-esc="widget.get_download_url()"/>'</span><span class="br0">)</span>.<span class="me1">read</span><span class="br0">(</span><span class="br0">)</span></div></li> + <li class="li2"><div class="de2">document_data <span class="sy0">=</span> simplejson.<span class="me1">loads</span><span class="br0">(</span>edi_document<span class="br0">)</span><span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span></div></li> + <li class="li1"><div class="de1"><span class="kw1">print</span> <span class="st0">"Amount: "</span><span class="sy0">,</span> document_data<span class="br0">[</span><span class="st0">'amount_total'</span><span class="br0">]</span></div></li> + </ol></div> + <p class="oe_edi_nested_block_import oe_edi_small oe_edi_import_download_nested"> + You can download the raw EDI document here:<br/> + <input type="text" readonly="readonly" t-att-value="widget.get_download_url()"/> + <button type="button" class="oe_edi_import_button" id="oe_edi_download">Download</button> + </p> + + <div class="oe_edi_right_bottom"> + <t t-raw="widget.sidebar"/> + </div> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td colspan="2"> + <div id="oe_footer" class="oe_footer"> + <p class="oe_footer_powered">Powered by <a href="http://www.openerp.com">OpenERP</a></p> + </div> + </td> + </tr> + </table> +</t> +</template> diff --git a/addons/edi/static/src/xml/edi_account.xml b/addons/edi/static/src/xml/edi_account.xml new file mode 100644 index 00000000000..dc6fb7f9754 --- /dev/null +++ b/addons/edi/static/src/xml/edi_account.xml @@ -0,0 +1,163 @@ +<template> +<t t-name="Edi.account.invoice.content"> + <div class="oe_edi_paperbox"> + <div class="oe_edi_address_from"> + <div class="oe_edi_company_block_title"> + <span class="oe_edi_company_name"><t t-esc="doc.company_id[1]"/></span> + </div> + <div class="oe_edi_company_block_body"> + <p> + <t t-if="doc.company_address"> + <t t-if="doc.company_address.street" t-esc="doc.company_address.street"/><br/> + <t t-if="doc.company_address.street2"><t t-esc="doc.company_address.street2"/><br/></t> + <t t-if="doc.company_address.zip" t-esc="doc.company_address.zip"/> <t t-if="doc.company_address.city" t-esc="doc.company_address.city"/> <br/> + <t t-if="doc.company_address.country_id"><t t-esc="doc.company_address.country_id[1]"/><br/></t> + </t> + </p> + </div> + </div> + <div class="oe_edi_address_to"> + <div class="oe_edi_company_block_title"> + <span class="oe_edi_company_name"><t t-esc="doc.partner_id[1]"/></span> + </div> + <div class="oe_edi_company_block_body"> + <p> + <t t-if="doc.partner_address"> + <t t-if="doc.partner_address.street" t-esc="doc.partner_address.street"/><br/> + <t t-if="doc.partner_address.street2"><t t-esc="doc.partner_address.street2"/><br/></t> + <t t-if="doc.partner_address.zip" t-esc="doc.partner_address.zip"/> <t t-if="doc.partner_address.city" t-esc="doc.partner_address.city"/> <br/> + <t t-if="doc.partner_address.country_id"><t t-esc="doc.partner_address.country_id[1]"/><br/></t> + </t> + </p> + </div> + </div> + <h1 class="oe_edi_doc_title">Invoice <t t-esc="doc.internal_number"/>: <t t-esc="_.str.sprintf('%.2f',doc.amount_total)"/> <t t-esc="doc.currency.code"/></h1> + <table width="100%" class="oe_edi_data oe_edi_shade"> + <tr class="oe_edi_floor"> + <th align="left">Description</th> + <th align="left">Date</th> + <th align="left">Your Reference</th> + </tr> + <tr class="oe_edi_data_row"> + <td align="left"><t t-esc="doc.name"/></td> + <td align="left"><t t-esc="doc.date_invoice"/></td> + <td align="left"><t t-esc="doc.partner_ref"/></td> + </tr> + </table> + <p/> + <table width="100%" class="oe_edi_data"> + <tr class="oe_edi_floor"> + <th align="left">Product Description</th> + <th align="right">Quantity</th> + <th align="right">Unit Price</th> + <th align="right">Discount</th> + <th align="right">Price</th> + </tr> + <t t-if="doc.invoice_line" t-foreach="doc.invoice_line" t-as="invoice_line"> + <tr class="oe_edi_data_row"> + <td align="left"><t t-esc="invoice_line.name"/> + <t t-if="invoice_line.note"> + <pre class="oe_edi_inner_note"><t t-esc="invoice_line.note"/></pre> + </t> + </td> + <td align="right"><t t-esc="_.str.sprintf('%.2f',invoice_line.quantity)"/> <t t-esc="invoice_line.uos_id[1]"/></td> + <td align="right"><t t-esc="_.str.sprintf('%.2f',invoice_line.price_unit)"/></td> + <td align="right"><t t-esc="_.str.sprintf('%.2f',invoice_line.discount)"/></td> + <td align="right"><t t-esc="_.str.sprintf('%.2f',invoice_line.price_subtotal)"/> <t t-esc="doc.currency.code"/></td> + </tr> + </t> + <tr> + <td colspan="3"></td> + <td colspan="2" class="oe_edi_ceiling"> + <div class="oe_edi_summary_label"> + Net Total: + </div> + <div class="oe_edi_summary_value"> + <t t-esc="_.str.sprintf('%.2f',doc.amount_untaxed)"/> <t t-esc="doc.currency.code"/> + </div> + </td> + </tr> + <tr> + <td colspan="3"></td> + <td colspan="2" class="oe_edi_floor"> + <div class="oe_edi_summary_label"> + Taxes: + </div> + <div class="oe_edi_summary_value"> + <t t-esc="_.str.sprintf('%.2f',doc.amount_tax)"/> <t t-esc="doc.currency.code"/> + </div> + </td> + </tr> + <tr> + <td colspan="3"></td> + <th colspan="2" class="oe_edi_shade"> + <div class="oe_edi_summary_label"> + Total: + </div> + <div class="oe_edi_summary_value"> + <t t-esc="_.str.sprintf('%.2f',doc.amount_total)"/> <t t-esc="doc.currency.code"/> + </div> + </th> + </tr> + </table> + <t t-if="doc.tax_line"> + <table class="oe_edi_data" width="40%"> + <tr class="oe_edi_floor"> + <th align="left">Tax</th> + <th align="right">Base Amount</th> + <th align="right">Amount</th> + </tr> + <t t-if="doc.tax_line"><t t-foreach="doc.tax_line" t-as="tax_line"> + <tr class="oe_edi_data_row"> + <td align="left"><t t-esc="tax_line.name"/></td> + <td align="right"><t t-esc="_.str.sprintf('%.2f',tax_line.base_amount)"/> <t t-esc="doc.currency.code"/></td> + <td align="right"><t t-esc="_.str.sprintf('%.2f',tax_line.amount)"/> <t t-esc="doc.currency.code"/></td> + </tr> + </t> + </t> + </table> + </t> + <t t-if="doc.comment"> + <p>Notes:</p> + <pre class="oe_edi_inner_note"><t t-esc="doc.comment"/></pre> + </t> + </div> +</t> +<t t-name="Edi.account.invoice.sidebar"> + <t t-if="!doc.reconciled && (doc.type == 'out_invoice' or doc.type == 'in_refund')"> + <t t-if="doc.company_address.paypal_account || doc.company_address.bank_ids"> + <p class="oe_edi_sidebar_title">Pay Online</p> + <t t-if="doc.company_address.paypal_account"> + <div class="oe_edi_option"> + <input type="radio" id="oe_edi_paypal" name="oe_edi_pay" class="oe_edi_pay_choice"/> + <label for="oe_edi_paypal" id="oe_edi_paypal" class="oe_edi_pay_choice_label">Paypal</label> + </div> + <p class="oe_edi_nested_block_pay oe_edi_paypal_nested"> + You may directly pay this invoice online via Paypal's secure payment gateway:<br/> + <a t-att-href="widget.get_paypal_url('Invoice','internal_number')" target="_new"> + <img class="oe_edi_paypal_button" src="https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif"/> + </a> + </p> + </t> + <t t-if="doc.company_address.bank_ids"> + <div class="oe_edi_option"> + <input type="radio" id="oe_edi_pay_wire" name="oe_edi_pay" class="oe_edi_pay_choice"/> + <label for="oe_edi_pay_wire" id="oe_edi_pay_wire" class="oe_edi_pay_choice_label">Bank Wire Transfer</label> + </div> + <p class="oe_edi_nested_block_pay oe_edi_pay_wire_nested"> + Please transfer <strong><t t-esc="_.str.sprintf('%.2f',doc.amount_total)"/> <t t-esc="doc.currency.code"/></strong> to + <strong><t t-esc="doc.company_id[1]"/></strong> (postal address on the invoice header) + using one of the following bank accounts. Be sure to mention the invoice + reference <strong><t t-esc="doc.internal_number"/></strong> on the transfer: + <br/><br/> + </p> + <ul class="oe_edi_nested_block_pay oe_edi_pay_wire_nested"> + <t t-foreach="doc.company_address.bank_ids" t-as="bank_info"> + <li><t t-esc="bank_info[1]"/></li> + </t> + </ul> + </t> + </t> + </t> +</t> +</template> diff --git a/addons/edi/static/src/xml/edi_sale_purchase.xml b/addons/edi/static/src/xml/edi_sale_purchase.xml new file mode 100644 index 00000000000..4e0fdd7fc4e --- /dev/null +++ b/addons/edi/static/src/xml/edi_sale_purchase.xml @@ -0,0 +1,161 @@ +<template> +<t t-name="Edi.sale.order.content"> +<div class="oe_edi_paperbox"> + <div class="oe_edi_address_from"> + <div class="oe_edi_company_block_title"> + <span class="oe_edi_company_name"><t t-esc="doc.company_id[1]"/></span> + </div> + <div class="oe_edi_company_block_body"> + <p> + <t t-if="doc.company_address"> + <t t-if="doc.company_address.street" t-esc="doc.company_address.street"/><br/> + <t t-if="doc.company_address.street2"><t t-esc="doc.company_address.street2"/><br/></t> + <t t-if="doc.company_address.zip" t-esc="doc.company_address.zip"/> <t t-if="doc.company_address.city" t-esc="doc.company_address.city"/> <br/> + <t t-if="doc.company_address.country_id"><t t-esc="doc.company_address.country_id[1]"/><br/></t> + </t> + </p> + </div> + </div> + + <div class="oe_edi_address_to"> + <div class="oe_edi_company_block_title"> + <span class="oe_edi_company_name"><t t-esc="doc.partner_id[1]"/></span> + </div> + <div class="oe_edi_company_block_body"> + <p> + <t t-if="doc.partner_address"> + <t t-if="doc.partner_address.street" t-esc="doc.partner_address.street"/><br/> + <t t-if="doc.partner_address.street2"><t t-esc="doc.partner_address.street2"/><br/></t> + <t t-if="doc.partner_address.zip" t-esc="doc.partner_address.zip"/> <t t-if="doc.partner_address.city" t-esc="doc.partner_address.city"/> <br/> + <t t-if="doc.partner_address.country_id"><t t-esc="doc.partner_address.country_id[1]"/><br/></t> + </t> + </p> + </div> + </div> + + <h1 class="oe_edi_doc_title">Order <t t-esc="doc.name"/>: <t t-esc="_.str.sprintf('%.2f',doc.amount_total)"/> <t t-esc="doc.currency.code"/></h1> + + <table width="100%" class="oe_edi_data oe_edi_shade"> + <tr class="oe_edi_floor"> + <th align="left">Your Reference</th> + <th align="left">Date</th> + <th align="left">Salesman</th> + <th align="left">Payment terms</th> + </tr> + <tr class="oe_edi_data_row"> + <td align="left"><t t-if="doc.partner_ref" t-esc="doc.partner_ref"/></td> + <td align="left"><t t-esc="doc.date_order"/></td> + <td align="left"><t t-if="doc.user_id" t-esc="doc.user_id[1]"/></td> + <td align="left"> + <t t-if="doc.payment_term" t-esc="doc.payment_term[1]"/> + </td> + </tr> + </table> + <p/> + <table width="100%" class="oe_edi_data"> + <tr class="oe_edi_floor"> + <th align="left">Product Description</th> + <th align="right">Quantity</th> + <th align="right">Unit Price</th> + <th align="right">Discount(%)</th> + <th align="right">Price</th> + </tr> + <t t-if="doc.order_line" t-foreach="doc.order_line" t-as="doc_line"> + <tr class="oe_edi_data_row"> + <td align="left"><t t-esc="doc_line.name"/> + <t t-if="doc_line.notes"> + <pre class="oe_edi_inner_note"><t t-esc="doc_line.notes"/></pre> + </t> + </td> + <td align="right"> + <t t-esc="_.str.sprintf('%.2f',doc_line.product_qty)"/> <t t-esc="doc_line.product_uom[1]"/> + </td> + <td align="right"><t t-esc="_.str.sprintf('%.2f',doc_line.price_unit)"/></td> + <td align="right"><t t-esc="_.str.sprintf('%.2f',doc_line.discount or 0.0)"/></td> + <td align="right"><t t-esc="_.str.sprintf('%.2f',doc_line.price_subtotal)"/> <t t-esc="doc.currency.code"/></td> + </tr> + </t> + <tr> + <td colspan="3"></td> + <td colspan="2" class="oe_edi_ceiling"> + <div class="oe_edi_summary_label"> + Net Total: + </div> + <div class="oe_edi_summary_value"> + <t t-esc="_.str.sprintf('%.2f',doc.amount_untaxed)"/> <t t-esc="doc.currency.code"/> + </div> + </td> + </tr> + <tr> + <td colspan="3"></td> + <td colspan="2" class="oe_edi_floor"> + <div class="oe_edi_summary_label"> + Taxes: + </div> + <div class="oe_edi_summary_value"> + <t t-esc="_.str.sprintf('%.2f',doc.amount_tax)"/> <t t-esc="doc.currency.code"/> + </div> + </td> + </tr> + <tr> + <td colspan="3"></td> + <th colspan="2" class="oe_edi_shade"> + <div class="oe_edi_summary_label"> + Total: + </div> + <div class="oe_edi_summary_value"> + <t t-esc="_.str.sprintf('%.2f',doc.amount_total)"/> <t t-esc="doc.currency.code"/> + </div> + </th> + </tr> + </table> + <t t-if="doc.notes"> + <p>Notes:</p> + <pre class="oe_edi_inner_note"><t t-esc="doc.notes"/></pre> + </t> +</div> +</t> +<t t-name="Edi.sale.order.sidebar"> + <t t-if="doc.order_policy && (doc.order_policy == 'prepaid' || doc.order_policy == 'manual')"> + <t t-if="doc.company_address.paypal_account || doc.company_address.bank_ids"> + <p class="oe_edi_sidebar_title">Pay Online</p> + <t t-if="doc.company_address.paypal_account"> + <div class="oe_edi_option"> + <input type="radio" id="oe_edi_paypal" name="oe_edi_pay" class="oe_edi_pay_choice"/> + <label for="oe_edi_paypal" id="oe_edi_paypal" class="oe_edi_pay_choice_label">Paypal</label> + </div> + <p class="oe_edi_nested_block_pay oe_edi_paypal_nested"> + You may directly pay this order online via Paypal's secure payment gateway:<br/> + <a t-att-href="widget.get_paypal_url('Sale Order','name')" target="_new"> + <img class="oe_edi_paypal_button" src="https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif"/> + </a> + </p> + </t> + <t t-if="doc.company_address.bank_ids"> + <div class="oe_edi_option"> + <input type="radio" id="oe_edi_pay_wire" name="oe_edi_pay" class="oe_edi_pay_choice"/> + <label for="oe_edi_pay_wire" id="oe_edi_pay_wire" class="oe_edi_pay_choice_label">Bank Wire Transfer</label> + </div> + <p class="oe_edi_nested_block_pay oe_edi_pay_wire_nested"> + Please transfer <strong><t t-esc="_.str.sprintf('%.2f',doc.amount_total)"/> <t t-esc="doc.currency.code"/></strong> to + <strong><t t-esc="doc.company_id[1]"/></strong> (postal address on the order header) + using one of the following bank accounts. Be sure to mention the document + reference <strong><t t-esc="doc.name"/></strong> on the transfer: + <br/><br/> + </p> + <ul class="oe_edi_nested_block_pay oe_edi_pay_wire_nested"> + <t t-foreach="doc.company_address.bank_ids" t-as="bank_info"> + <li><t t-esc="bank_info[1]"/></li> + </t> + </ul> + </t> + </t> + </t> +</t> +<t t-name="Edi.purchase.order.content"> + <t t-call="Edi.sale.order.content"/> +</t> +<t t-name="Edi.purchase.order.sidebar"> + <t t-call="Edi.sale.order.sidebar"/> +</t> +</template> diff --git a/addons/edi/test/edi_partner_test.yml b/addons/edi/test/edi_partner_test.yml new file mode 100644 index 00000000000..cca39417927 --- /dev/null +++ b/addons/edi/test/edi_partner_test.yml @@ -0,0 +1,44 @@ +- + In order to test the basic EDI system, I will export a partner, + modify the exported EDI document to add an attachment and change + the data, and then re-import it and re-export it. + + with an attached file, check the result, the alter the data + and reimport it. +- + !python {model: edi.document}: | + import json + partner_obj = self.pool.get('res.partner') + tokens = self.export_edi(cr, uid, [partner_obj.browse(cr, uid, ref('base.res_partner_agrolait'))]) + doc = self.get_document(cr, uid, tokens[0], context=context) + edi_doc, = json.loads(doc) + + # check content of the document + assert edi_doc.get('__id').endswith('.res_partner_agrolait'), 'Incorrect external ID' + assert edi_doc.get('__model') == 'res.partner', 'Incorrect/Missing __model' + assert edi_doc.get('__module') == 'base', 'Incorrect/Missing __module' + assert edi_doc.get('__last_update'), 'Missing __last_update' + + # try to import the document after changing the name and id, and attaching a + # file, and check that a new partner is returned + edi_doc['__id'] = 'base:xxd37f8a-xx55-11e0-xxdd-xx81124c8b50.res_partner_xxx' + edi_doc['name'] = 'AgroMilk' + attachment = { + 'name': 'Test file', + 'file_name': 'test.png', + # base64 standard requires blocks of 57bytes=76chars, NL-separated + 'content': 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAKCAYAAACE2W/HAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A\n/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oIDQ84BkjLWAYAAACNSURBVCjP\njZKxDUJBDEOf/wbUbEHDhkxAzRjUDECBhMQYjIApuPBNpK+PpUinOPYll5Nt1iCJXifbSPpJZtHg\nXLUdu0FWpMEt87a/xtsmqjjNetPFyhuWYFuj7RcgQBNwXNGdw2CqY85yXWi5z7YBnmRyEHvg0YSX\nrLE9P30nwugOHHr+s5va4x+fofAGm1+JjnJICm0AAAAASUVORK5CYII=\n', + } + edi_doc['__attachments'] = [attachment] + doc = json.dumps([edi_doc]) + result, = self.import_edi(cr, uid, edi_document=doc) + assert result[0] == 'res.partner' and result[1] > ref('base.res_partner_agrolait'),\ + "Expected (%r,> %r) after import 1, got %r" % ('res.partner', ref('base.res_partner_agrolait'), result) + + # export the same partner we just created, and see if the output matches the input + tokens = self.export_edi(cr, uid, [partner_obj.browse(cr, uid, result[1])]) + doc_output = self.get_document(cr, uid, tokens[0], context=context) + edi_doc_output, = json.loads(doc_output) + for attribute in ('__model', '__module', '__id', 'name', '__attachments'): + assert edi_doc_output.get(attribute) == edi_doc.get(attribute), \ + 'Incorrect value for %s, expected %r, got %r' % (attribute, edi_doc.get(attribute), edi_doc_output.get(attribute))
\ No newline at end of file diff --git a/addons/email_template/__init__.py b/addons/email_template/__init__.py index 97931ea8bd5..d1cf5b28431 100644 --- a/addons/email_template/__init__.py +++ b/addons/email_template/__init__.py @@ -21,5 +21,6 @@ ############################################################################## import email_template import wizard +import res_partner # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/email_template/__openerp__.py b/addons/email_template/__openerp__.py index 06fa969c0c2..2ab7f194d18 100644 --- a/addons/email_template/__openerp__.py +++ b/addons/email_template/__openerp__.py @@ -61,9 +61,13 @@ Openlabs was kept "data": [ 'wizard/email_template_preview_view.xml', 'email_template_view.xml', + 'res_partner_view.xml', 'wizard/email_compose_message_view.xml', 'security/ir.model.access.csv' ], + "demo": [ + 'res_partner_demo.yml', + ], "installable": True, "active": False, "certificate" : "00817073628967384349", diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 3917b3f2ddb..237279c16aa 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -28,6 +28,7 @@ from osv import osv from osv import fields import tools from tools.translate import _ +from urllib import quote as quote try: from mako.template import Template as MakoTemplate @@ -66,6 +67,7 @@ class email_template(osv.osv): user=user, # context kw would clash with mako internals ctx=context, + quote=quote, format_exceptions=True) if result == u'False': result = u'' @@ -305,6 +307,7 @@ class email_template(osv.osv): 'attachment_ids': False, 'message_id': False, 'state': 'outgoing', + 'subtype': 'plain', } if not template_id: return values @@ -319,6 +322,9 @@ class email_template(osv.osv): template.model, res_id, context=context) \ or False + if values['body_html']: + values.update(subtype='html') + if template.user_signature: signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature values['body_text'] += '\n\n' + signature @@ -355,20 +361,24 @@ class email_template(osv.osv): values['attachments'] = attachments return values - def send_mail(self, cr, uid, template_id, res_id, context=None): + def send_mail(self, cr, uid, template_id, res_id, force_send=False, context=None): """Generates a new mail message for the given template and record, - and schedule it for delivery through the ``mail`` module's scheduler. + and schedules it for delivery through the ``mail`` module's scheduler. :param int template_id: id of the template to render :param int res_id: id of the record to render the template with (model is taken from the template) + :param bool force_send: if True, the generated mail.message is + immediately sent after being created, as if the scheduler + was executed for this message only. + :returns: id of the mail.message that was created """ mail_message = self.pool.get('mail.message') ir_attachment = self.pool.get('ir.attachment') template = self.browse(cr, uid, template_id, context) values = self.generate_email(cr, uid, template_id, res_id, context=context) attachments = values.pop('attachments') or {} - message_id = mail_message.create(cr, uid, values, context=context) + msg_id = mail_message.create(cr, uid, values, context=context) # link attachments attachment_ids = [] for fname, fcontent in attachments.iteritems(): @@ -377,10 +387,13 @@ class email_template(osv.osv): 'datas_fname': fname, 'datas': fcontent, 'res_model': mail_message._name, - 'res_id': message_id, + 'res_id': msg_id, } if context.has_key('default_type'): del context['default_type'] - attachment_ids.append(ir_attachment.create(cr, uid, attachment_data, context)) + attachment_ids.append(ir_attachment.create(cr, uid, attachment_data, context=context)) + if force_send: + mail_message.send(cr, uid, [msg_id], context=context) + return msg_id # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/email_template/email_template_view.xml b/addons/email_template/email_template_view.xml index d6a651f0bc2..507dae3cd25 100644 --- a/addons/email_template/email_template_view.xml +++ b/addons/email_template/email_template_view.xml @@ -155,9 +155,8 @@ <field name="search_view_id" ref="view_email_template_search"/> </record> - <menuitem name="Templates" id="menu_email_template_all_tools" - parent="mail.menu_email_message_tools" action="action_email_template_tree_all" /> - + <menuitem id="menu_email_templates" parent="base.menu_email" action="action_email_template_tree_all" + sequence="20"/> </data> </openerp> diff --git a/addons/email_template/html2text.py b/addons/email_template/html2text.py index 2479843777a..745381850e3 100755 --- a/addons/email_template/html2text.py +++ b/addons/email_template/html2text.py @@ -453,3 +453,5 @@ if __name__ == "__main__": data = sys.stdin.read().decode('utf8') wrapwrite(html2text(data, baseurl)) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/email_template/res_partner.py b/addons/email_template/res_partner.py new file mode 100644 index 00000000000..a451b171b70 --- /dev/null +++ b/addons/email_template/res_partner.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import fields,osv + +class res_partner(osv.osv): + """Inherit res.partner to add a generic opt-out field that can be used + to restrict usage of automatic email templates. + This field is unused by default. """ + _inherit = 'res.partner' + + _columns = { + 'opt_out': fields.boolean('Opt-out', help="If checked, this partner will not receive any automated email " \ + "notifications, such as the availability of invoices."), + } + + _defaults = { + 'opt_out': False, + } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/email_template/res_partner_demo.yml b/addons/email_template/res_partner_demo.yml new file mode 100644 index 00000000000..8eaf48f9e87 --- /dev/null +++ b/addons/email_template/res_partner_demo.yml @@ -0,0 +1,9 @@ +- + Set opt-out to True on all demo partners +- + !python {model: res.partner}: | + partner_ids = self.search(cr, uid, []) + # assume partners with an external ID come from demo data + ext_ids = self._get_external_ids(cr, uid, partner_ids) + ids_to_update = [k for (k,v) in ext_ids.iteritems() if v] + self.write(cr, uid, ids_to_update, {'opt_out': True})
\ No newline at end of file diff --git a/addons/email_template/res_partner_view.xml b/addons/email_template/res_partner_view.xml new file mode 100644 index 00000000000..0d2f919a96e --- /dev/null +++ b/addons/email_template/res_partner_view.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" ?> +<openerp> + <data> + <record model="ir.ui.view" id="res_partner_opt_out_form"> + <field name="name">res.partner.opt_out.form</field> + <field name="model">res.partner</field> + <field name="type">form</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <xpath expr="/form/notebook/page/field[@name='active']" position="after"> + <field name="opt_out" groups="base.group_extended"/> + </xpath> + </field> + </record> + </data> +</openerp>
\ No newline at end of file diff --git a/addons/email_template/wizard/__init__.py b/addons/email_template/wizard/__init__.py index b9ac29ec4c2..c979c90acd0 100644 --- a/addons/email_template/wizard/__init__.py +++ b/addons/email_template/wizard/__init__.py @@ -22,3 +22,5 @@ import email_template_preview import mail_compose_message + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/email_template/wizard/email_template_preview.py b/addons/email_template/wizard/email_template_preview.py index 650b714866d..4ef0e9fa156 100644 --- a/addons/email_template/wizard/email_template_preview.py +++ b/addons/email_template/wizard/email_template_preview.py @@ -87,6 +87,8 @@ class email_template_preview(osv.osv_memory): signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature description += '\n' + signature vals['body_text'] = description + if template.body_html: + vals['body_html'] = self.render_template(cr, uid, template.body_html, model, res_id, context) or '' vals['report_name'] = self.render_template(cr, uid, template.report_name, model, res_id, context) return {'value': vals} diff --git a/addons/event/board_association_view.xml b/addons/event/board_association_view.xml index 78fc8395341..47c5e65f196 100644 --- a/addons/event/board_association_view.xml +++ b/addons/event/board_association_view.xml @@ -40,24 +40,20 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Association Dashboard"> - <hpaned position="100"> - <child1> + <board style="1-1"> + <column> <action string="Next Events" name="%(act_event_view)d" - domain="[('state','not in',('cancel','done'))]" - colspan="4"/> - <action - string="Unconfirmed Registrations" + domain="[('state','not in',('cancel','done'))]"/> + <action string="Unconfirmed Registrations" name="%(event.act_event_list_register_event)d" - colspan="4" domain="[('state','=','draft')]"/> - </child1> - <child2> + </column> + <column> <action string="Events Filling Status" - name="%(act_event_reg)d" - colspan="4"/> - </child2> - </hpaned> + name="%(act_event_reg)d"/> + </column> + </board> </form> </field> </record> diff --git a/addons/event/i18n/cs.po b/addons/event/i18n/cs.po index 95ba2ab5cc9..616838be295 100644 --- a/addons/event/i18n/cs.po +++ b/addons/event/i18n/cs.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-09-06 06:14+0000\n" +"PO-Revision-Date: 2011-11-25 10:45+0000\n" "Last-Translator: Jiří Hajda <robie@centrum.cz>\n" "Language-Team: Czech <cs@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 04:58+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:49+0000\n" +"X-Generator: Launchpad (build 14381)\n" "X-Poedit-Language: Czech\n" #. module: event @@ -220,7 +220,7 @@ msgstr "Odpovědět" #. module: event #: model:ir.actions.act_window,name:event.open_board_associations_manager msgid "Event Dashboard" -msgstr "Nástěnka uválosti" +msgstr "Nástěnka události" #. module: event #: model:event.event,name:event.event_1 diff --git a/addons/event/report/report_event_registration_view.xml b/addons/event/report/report_event_registration_view.xml index 3fd24c0a366..ef69c674e43 100644 --- a/addons/event/report/report_event_registration_view.xml +++ b/addons/event/report/report_event_registration_view.xml @@ -53,10 +53,11 @@ <field name="arch" type="xml"> <search string="Event on Registration"> <group> - <filter string=" Year " icon="terp-go-year" + <filter string="Year" icon="terp-go-year" name="year" domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>=',time.strftime('%%Y-01-01'))]" help="Events created in current year"/> - <filter string=" Month " icon="terp-go-month" name="this_month" + <separator orientation="vertical"/> + <filter string="Month" icon="terp-go-month" name="this_month" domain="[('date','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]" help="Events created in current month"/> <filter icon="terp-go-month" string=" Month-1 " @@ -126,7 +127,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,graph</field> <field name="search_view_id" ref="view_report_event_registration_search"/> - <field name="context">{"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, 'group_by_no_leaf':1, 'group_by':[]}</field> + <field name="context">{"search_default_year":1,"search_default_this_month":1,"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, 'group_by_no_leaf':1, 'group_by':[]}</field> </record> <record model="ir.actions.act_window.view" id="action_report_event_registration_tree"> diff --git a/addons/fetchmail/__init__.py b/addons/fetchmail/__init__.py index f9c384ce103..934df9846dd 100644 --- a/addons/fetchmail/__init__.py +++ b/addons/fetchmail/__init__.py @@ -21,3 +21,5 @@ ############################################################################## import fetchmail + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/fetchmail/__openerp__.py b/addons/fetchmail/__openerp__.py index ae082aacacd..b50c33b2394 100644 --- a/addons/fetchmail/__openerp__.py +++ b/addons/fetchmail/__openerp__.py @@ -74,3 +74,5 @@ mail. 'certificate' : '00692978332890137453', 'images': ['images/1_email_servers.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/fetchmail/fetchmail_view.xml b/addons/fetchmail/fetchmail_view.xml index 4cd182c0818..56b7165ac56 100644 --- a/addons/fetchmail/fetchmail_view.xml +++ b/addons/fetchmail/fetchmail_view.xml @@ -132,7 +132,7 @@ </record> <act_window - context="{'search_default_server_id': active_id, 'default_server_id': active_id}" + context="{'search_default_server_id': active_id, 'default_fetchmail_server_id': active_id}" id="act_server_history" name="Messages" domain="[('email_from', '!=', False), ('fetchmail_server_id', '=', active_id)]" res_model="mail.message" src_model="fetchmail.server"/> diff --git a/addons/fetchmail/i18n/sl.po b/addons/fetchmail/i18n/sl.po new file mode 100644 index 00000000000..2cdcd56b63d --- /dev/null +++ b/addons/fetchmail/i18n/sl.po @@ -0,0 +1,308 @@ +# Slovenian 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-22 16:44+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Slovenian <sl@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-23 05:20+0000\n" +"X-Generator: Launchpad (build 14336)\n" + +#. module: fetchmail +#: constraint:email.server:0 +msgid "" +"Warning! Record for selected Model can not be created\n" +"Please choose valid Model" +msgstr "" + +#. module: fetchmail +#: selection:email.server,state:0 +msgid "Confirmed" +msgstr "Potrjeno" + +#. module: fetchmail +#: view:email.server:0 +msgid "Confirm" +msgstr "Potrdi" + +#. module: fetchmail +#: view:email.server:0 +msgid "Group By..." +msgstr "Združi po ..." + +#. module: fetchmail +#: view:email.server:0 +#: field:email.server,state:0 +msgid "State" +msgstr "Država" + +#. module: fetchmail +#: view:email.server:0 +msgid "POP" +msgstr "POP" + +#. module: fetchmail +#: selection:email.server,state:0 +msgid "Not Confirmed" +msgstr "Nepotrjeno" + +#. module: fetchmail +#: field:email.server,user:0 +msgid "User Name" +msgstr "Uporabniško Ime" + +#. module: fetchmail +#: view:email.server:0 +msgid "Type" +msgstr "Tip" + +#. module: fetchmail +#: view:email.server:0 +msgid "POP/IMAP Servers" +msgstr "POP/IMAP Strežniki" + +#. module: fetchmail +#: model:ir.module.module,shortdesc:fetchmail.module_meta_information +msgid "Fetchmail Server" +msgstr "" + +#. module: fetchmail +#: view:email.server:0 +#: field:email.server,note:0 +msgid "Description" +msgstr "Opis" + +#. module: fetchmail +#: help:email.server,object_id:0 +msgid "" +"OpenObject Model. Generates a record of this model.\n" +"Select Object with message_new attrbutes." +msgstr "" + +#. module: fetchmail +#: field:email.server,attach:0 +msgid "Add Attachments ?" +msgstr "Dodaj Priloge ?" + +#. module: fetchmail +#: view:email.server:0 +msgid "# of emails" +msgstr "# od emalov" + +#. module: fetchmail +#: model:ir.actions.act_window,name:fetchmail.act_server_history +msgid "Email History" +msgstr "" + +#. module: fetchmail +#: field:email.server,user_id:0 +msgid "User" +msgstr "Uporabnik" + +#. module: fetchmail +#: field:email.server,date:0 +msgid "Date" +msgstr "Datum" + +#. module: fetchmail +#: selection:email.server,state:0 +msgid "Waiting for Verification" +msgstr "Čaka na Potrditev" + +#. module: fetchmail +#: field:email.server,password:0 +msgid "Password" +msgstr "Geslo" + +#. module: fetchmail +#: model:ir.actions.act_window,name:fetchmail.act_server_history +#: view:mailgate.message:0 +msgid "Emails" +msgstr "E-pošte" + +#. module: fetchmail +#: view:email.server:0 +msgid "Search Email Servers" +msgstr "Poišči Email Strežnik" + +#. module: fetchmail +#: view:email.server:0 +msgid "Server & Login" +msgstr "Strežnik in Prijava" + +#. module: fetchmail +#: view:email.server:0 +msgid "Auto Reply?" +msgstr "Avtomatski Odzivnik?" + +#. module: fetchmail +#: field:email.server,name:0 +msgid "Name" +msgstr "Ime" + +#. module: fetchmail +#: model:ir.model,name:fetchmail.model_mailgate_message +msgid "Mailgateway Message" +msgstr "" + +#. module: fetchmail +#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree +msgid "POP Servers" +msgstr "" + +#. module: fetchmail +#: view:email.server:0 +msgid "Set to Draft" +msgstr "" + +#. module: fetchmail +#: field:email.server,message_ids:0 +#: model:ir.actions.act_window,name:fetchmail.action_view_mail_message_emails +msgid "Messages" +msgstr "Sporočila" + +#. module: fetchmail +#: model:ir.ui.menu,name:fetchmail.menu_action_fetchmail_server_tree +msgid "Fetchmail Services" +msgstr "" + +#. module: fetchmail +#: field:email.server,server:0 +msgid "Server" +msgstr "Strežnik" + +#. module: fetchmail +#: field:email.server,active:0 +msgid "Active" +msgstr "Aktiven" + +#. module: fetchmail +#: view:email.server:0 +msgid "Process Parameter" +msgstr "Parametri Procesa" + +#. module: fetchmail +#: field:email.server,is_ssl:0 +msgid "SSL ?" +msgstr "SSL ?" + +#. module: fetchmail +#: selection:email.server,type:0 +#: selection:mailgate.message,server_type:0 +msgid "IMAP Server" +msgstr "IMAP Strežnik" + +#. module: fetchmail +#: field:email.server,object_id:0 +msgid "Model" +msgstr "" + +#. module: fetchmail +#: view:email.server:0 +msgid "IMAP" +msgstr "IMAP" + +#. module: fetchmail +#: view:email.server:0 +#: model:ir.model,name:fetchmail.model_email_server +msgid "POP/IMAP Server" +msgstr "POP/IMAP Strežnik" + +#. module: fetchmail +#: constraint:email.server:0 +msgid "Warning! Can't have duplicate server configuration!" +msgstr "Opozorilo! Ne morete podvojiti konfiguracije strežnika!" + +#. module: fetchmail +#: field:email.server,type:0 +#: field:mailgate.message,server_type:0 +msgid "Server Type" +msgstr "Tip Strežnika" + +#. module: fetchmail +#: view:email.server:0 +msgid "Login Information" +msgstr "Prijavni podatki" + +#. module: fetchmail +#: view:email.server:0 +msgid "Server Information" +msgstr "Podatki o strežniku" + +#. module: fetchmail +#: help:email.server,attach:0 +msgid "Fetches mail with attachments if true." +msgstr "" + +#. module: fetchmail +#: selection:email.server,type:0 +#: selection:mailgate.message,server_type:0 +msgid "POP Server" +msgstr "POP Strežnik" + +#. module: fetchmail +#: field:email.server,port:0 +msgid "Port" +msgstr "Vrata" + +#. module: fetchmail +#: model:ir.module.module,description:fetchmail.module_meta_information +msgid "" +"Fetchmail: \n" +" * Fetch email from Pop / IMAP server\n" +" * Support SSL\n" +" * Integrated with all Modules\n" +" * Automatic Email Receive\n" +" * Email based Records (Add, Update)\n" +" " +msgstr "" + +#. module: fetchmail +#: view:email.server:0 +msgid "SSL" +msgstr "SSL" + +#. module: fetchmail +#: help:email.server,action_id:0 +msgid "" +"An Email Server Action. It will be run whenever an e-mail is fetched from " +"server." +msgstr "" + +#. module: fetchmail +#: help:email.server,priority:0 +msgid "Priority between 0 to 10, select define the order of Processing" +msgstr "" + +#. module: fetchmail +#: field:email.server,action_id:0 +msgid "Email Server Action" +msgstr "" + +#. module: fetchmail +#: field:email.server,priority:0 +msgid "Server Priority" +msgstr "" + +#. module: fetchmail +#: view:mailgate.message:0 +#: field:mailgate.message,server_id:0 +msgid "Mail Server" +msgstr "Poštni Strežnik" + +#. module: fetchmail +#: view:email.server:0 +msgid "Fetch Emails" +msgstr "" + +#~ msgid "Email Servers" +#~ msgstr "Email Strežniki" diff --git a/addons/fetchmail_crm/__init__.py b/addons/fetchmail_crm/__init__.py index 5831b3284bb..b5b36afb7e9 100644 --- a/addons/fetchmail_crm/__init__.py +++ b/addons/fetchmail_crm/__init__.py @@ -18,3 +18,5 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/fetchmail_crm/__openerp__.py b/addons/fetchmail_crm/__openerp__.py index 66cff346d0a..671aad4a871 100644 --- a/addons/fetchmail_crm/__openerp__.py +++ b/addons/fetchmail_crm/__openerp__.py @@ -37,3 +37,5 @@ 'installable': True, 'active': False, } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/fetchmail_crm_claim/__init__.py b/addons/fetchmail_crm_claim/__init__.py index 5831b3284bb..b5b36afb7e9 100644 --- a/addons/fetchmail_crm_claim/__init__.py +++ b/addons/fetchmail_crm_claim/__init__.py @@ -18,3 +18,5 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/fetchmail_crm_claim/__openerp__.py b/addons/fetchmail_crm_claim/__openerp__.py index cfe6a675d20..6b4a346ed51 100644 --- a/addons/fetchmail_crm_claim/__openerp__.py +++ b/addons/fetchmail_crm_claim/__openerp__.py @@ -37,3 +37,5 @@ 'installable': True, 'active': False, } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/fetchmail_hr_recruitment/__init__.py b/addons/fetchmail_hr_recruitment/__init__.py index 5831b3284bb..b5b36afb7e9 100644 --- a/addons/fetchmail_hr_recruitment/__init__.py +++ b/addons/fetchmail_hr_recruitment/__init__.py @@ -18,3 +18,5 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/fetchmail_hr_recruitment/__openerp__.py b/addons/fetchmail_hr_recruitment/__openerp__.py index 75531097645..0925f2cbcc9 100644 --- a/addons/fetchmail_hr_recruitment/__openerp__.py +++ b/addons/fetchmail_hr_recruitment/__openerp__.py @@ -37,3 +37,5 @@ 'installable': True, 'active': False, } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/fetchmail_project_issue/__init__.py b/addons/fetchmail_project_issue/__init__.py index 5831b3284bb..b5b36afb7e9 100644 --- a/addons/fetchmail_project_issue/__init__.py +++ b/addons/fetchmail_project_issue/__init__.py @@ -18,3 +18,5 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/fetchmail_project_issue/__openerp__.py b/addons/fetchmail_project_issue/__openerp__.py index 1165949108a..ca42ed6faaf 100644 --- a/addons/fetchmail_project_issue/__openerp__.py +++ b/addons/fetchmail_project_issue/__openerp__.py @@ -37,3 +37,5 @@ 'installable': True, 'active': False, } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr/hr_board.xml b/addons/hr/hr_board.xml index 874b0d368d6..620f1f51c88 100644 --- a/addons/hr/hr_board.xml +++ b/addons/hr/hr_board.xml @@ -8,12 +8,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="My Board"> - <hpaned> - <child1> - </child1> - <child2> - </child2> - </hpaned> + <board style="2-1"> + <column> + </column> + <column> + </column> + </board> </form> </field> </record> @@ -27,7 +27,7 @@ </record> <menuitem id="menu_hr_root" icon="terp-hr" name="Human Resources" sequence="15" action="open_board_hr"/> - <menuitem id="menu_hr_reporting" parent="menu_hr_root" name="Reporting" sequence="10" /> + <menuitem id="menu_hr_reporting" parent="menu_hr_root" name="Reporting" sequence="10" /> <menuitem id="menu_hr_dashboard" parent="menu_hr_reporting" name="Dashboard" sequence="0"/> <menuitem id="menu_hr_dashboard_user" parent="menu_hr_dashboard" action="open_board_hr" icon="terp-graph" sequence="4"/> @@ -38,12 +38,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="HR Manager Board"> - <hpaned> - <child1> - </child1> - <child2> - </child2> - </hpaned> + <board style="2-1"> + <column> + </column> + <column> + </column> + </board> </form> </field> </record> diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index 96ff4160bb2..c2b0626fab0 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -184,7 +184,7 @@ <field name="view_type">tree</field> <field name="view_mode">tree,form</field> <field name="view_id" ref="view_employee_tree"/> - <field name="domain">[('parent_id','=',False),('user_id','=',uid)]</field> + <field name="domain">[('parent_id','=',False)]</field> <field name="search_view_id" ref="view_employee_filter"/> </record> @@ -352,7 +352,6 @@ <field eval="'hr.employee.category'" name="model"/> <field name="name">Employees by Categories</field> <field eval="'ir.actions.act_window,%d'%hr_employee_normal_action_tree" name="value"/> - <field eval="True" name="object"/> </record> <menuitem action="open_view_categ_tree" diff --git a/addons/hr/i18n/bn.po b/addons/hr/i18n/bn.po new file mode 100644 index 00000000000..05fd169ae01 --- /dev/null +++ b/addons/hr/i18n/bn.po @@ -0,0 +1,829 @@ +# Bengali 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-21 12:43+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Bengali <bn@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-22 05:00+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: hr +#: model:process.node,name:hr.process_node_openerpuser0 +msgid "Openerp user" +msgstr "Openerp ব্যাবহারকারী" + +#. module: hr +#: view:hr.job:0 +#: field:hr.job,requirements:0 +msgid "Requirements" +msgstr "আবশ্যকতা" + +#. module: hr +#: constraint:hr.department:0 +msgid "Error! You can not create recursive departments." +msgstr "ভুল! আপনি রিকারসিভ দপ্তর তৈরি করতে পারবেন না।" + +#. module: hr +#: model:process.transition,name:hr.process_transition_contactofemployee0 +msgid "Link the employee to information" +msgstr "তথ্যের সাথে কর্মচারী যুক্ত করুন" + +#. module: hr +#: field:hr.employee,sinid:0 +msgid "SIN No" +msgstr "ন্যাশনাল আইডি নং" + +#. module: hr +#: model:ir.module.module,shortdesc:hr.module_meta_information +#: model:ir.ui.menu,name:hr.menu_hr_deshboard +#: model:ir.ui.menu,name:hr.menu_hr_main +#: model:ir.ui.menu,name:hr.menu_hr_management +#: model:ir.ui.menu,name:hr.menu_hr_root +msgid "Human Resources" +msgstr "জনসম্পদ" + +#. module: hr +#: view:hr.employee:0 +#: view:hr.job:0 +msgid "Group By..." +msgstr "...দিয়ে গ্রুপ করুন" + +#. module: hr +#: model:ir.actions.act_window,help:hr.action_hr_job +msgid "" +"Job Positions are used to define jobs and their requirements. You can keep " +"track of the number of employees you have per job position and how many you " +"expect in the future. You can also attach a survey to a job position that " +"will be used in the recruitment process to evaluate the applicants for this " +"job position." +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: field:hr.employee,department_id:0 +#: view:hr.job:0 +#: field:hr.job,department_id:0 +#: view:res.users:0 +msgid "Department" +msgstr "বিভাগ" + +#. module: hr +#: help:hr.installer,hr_attendance:0 +msgid "Simplifies the management of employee's attendances." +msgstr "কর্মচারী উপস্থিতি ম্যানেজমেন্ট সহজতর করে" + +#. module: hr +#: view:hr.job:0 +msgid "Mark as Old" +msgstr "" + +#. module: hr +#: view:hr.job:0 +msgid "Jobs" +msgstr "কাজ" + +#. module: hr +#: view:hr.job:0 +msgid "In Recruitment" +msgstr "নিয়োগপ্রাপ্ত" + +#. module: hr +#: view:hr.installer:0 +msgid "title" +msgstr "শিরোনাম" + +#. module: hr +#: field:hr.department,company_id:0 +#: view:hr.employee:0 +#: view:hr.job:0 +#: field:hr.job,company_id:0 +msgid "Company" +msgstr "কোম্পানি" + +#. module: hr +#: field:hr.job,no_of_recruitment:0 +msgid "Expected in Recruitment" +msgstr "নিয়োগে কাম্য" + +#. module: hr +#: model:ir.ui.menu,name:hr.menu_open_view_attendance_reason_config +msgid "Holidays" +msgstr "ছুটির দিন" + +#. module: hr +#: help:hr.installer,hr_holidays:0 +msgid "Tracks employee leaves, allocation requests and planning." +msgstr "কর্মচারীদের ছুটির হিসাব রাখে" + +#. module: hr +#: model:ir.model,name:hr.model_hr_employee_marital_status +msgid "Employee Marital Status" +msgstr "কর্মচারীর বৈবাহিক অবস্থা" + +#. module: hr +#: help:hr.employee,partner_id:0 +msgid "" +"Partner that is related to the current employee. Accounting transaction will " +"be written on this partner belongs to employee." +msgstr "" + +#. module: hr +#: model:process.transition,name:hr.process_transition_employeeuser0 +msgid "Link a user to an employee" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_contract:0 +msgid "Employee's Contracts" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_payroll:0 +msgid "Generic Payroll system." +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "My Departments Employee" +msgstr "" + +#. module: hr +#: model:hr.employee.marital.status,name:hr.hr_employee_marital_status_married +msgid "Married" +msgstr "" + +#. module: hr +#: constraint:hr.employee:0 +msgid "" +"Error ! You cannot select a department for which the employee is the manager." +msgstr "" + +#. module: hr +#: help:hr.employee,passport_id:0 +msgid "Employee Passport Information" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,help:hr.open_module_tree_department +msgid "" +"Your Company's Department Structure is used to manage all documents related " +"to employees by departments: expenses and timesheet validation, leaves " +"management, recruitments, etc." +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Position" +msgstr "পদ" + +#. module: hr +#: model:ir.actions.act_window,name:hr.action2 +msgid "Employee Hierarchy" +msgstr "" + +#. module: hr +#: model:process.transition,note:hr.process_transition_employeeuser0 +msgid "" +"The Related user field on the Employee form allows to link the OpenERP user " +"(and her rights) to the employee." +msgstr "" + +#. module: hr +#: view:hr.job:0 +#: selection:hr.job,state:0 +msgid "In Recruitement" +msgstr "" + +#. module: hr +#: field:hr.employee,identification_id:0 +msgid "Identification No" +msgstr "" + +#. module: hr +#: field:hr.job,no_of_employee:0 +msgid "No of Employee" +msgstr "" + +#. module: hr +#: selection:hr.employee,gender:0 +msgid "Female" +msgstr "মহিলা" + +#. module: hr +#: help:hr.installer,hr_timesheet_sheet:0 +msgid "" +"Tracks and helps employees encode and validate timesheets and attendances." +msgstr "" + +#. module: hr +#: field:hr.installer,hr_evaluation:0 +msgid "Periodic Evaluations" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_timesheet_sheet:0 +msgid "Timesheets" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_view_employee_tree +msgid "Employees Structure" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Social IDs" +msgstr "" + +#. module: hr +#: help:hr.job,no_of_employee:0 +msgid "Number of employee with that job." +msgstr "" + +#. module: hr +#: field:hr.employee,work_phone:0 +msgid "Work Phone" +msgstr "কর্মস্থলের ফোন" + +#. module: hr +#: field:hr.employee.category,child_ids:0 +msgid "Child Categories" +msgstr "" + +#. module: hr +#: view:hr.job:0 +#: field:hr.job,description:0 +#: model:ir.model,name:hr.model_hr_job +msgid "Job Description" +msgstr "" + +#. module: hr +#: field:hr.employee,work_location:0 +msgid "Office Location" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: view:hr.job:0 +#: model:ir.model,name:hr.model_hr_employee +#: model:process.node,name:hr.process_node_employee0 +msgid "Employee" +msgstr "" + +#. module: hr +#: model:process.node,note:hr.process_node_employeecontact0 +msgid "Other information" +msgstr "" + +#. module: hr +#: field:hr.employee,work_email:0 +msgid "Work E-mail" +msgstr "" + +#. module: hr +#: field:hr.department,complete_name:0 +#: field:hr.employee.category,complete_name:0 +msgid "Name" +msgstr "নাম" + +#. module: hr +#: field:hr.employee,birthday:0 +msgid "Date of Birth" +msgstr "জন্মদিন" + +#. module: hr +#: model:ir.ui.menu,name:hr.menu_hr_reporting +msgid "Reporting" +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_ir_actions_act_window +msgid "ir.actions.act_window" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_board_hr +msgid "Human Resources Dashboard" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: field:hr.employee,job_id:0 +#: view:hr.job:0 +msgid "Job" +msgstr "" + +#. module: hr +#: view:hr.department:0 +#: field:hr.department,member_ids:0 +msgid "Members" +msgstr "" + +#. module: hr +#: model:ir.ui.menu,name:hr.menu_hr_configuration +msgid "Configuration" +msgstr "" + +#. module: hr +#: view:hr.installer:0 +msgid "" +"You can enhance the base HR Application by installing few HR-related " +"functionalities." +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Categories" +msgstr "" + +#. module: hr +#: field:hr.job,expected_employees:0 +msgid "Expected Employees" +msgstr "" + +#. module: hr +#: help:hr.employee,sinid:0 +msgid "Social Insurance Number" +msgstr "" + +#. module: hr +#: model:hr.employee.marital.status,name:hr.hr_employee_marital_status_divorced +msgid "Divorced" +msgstr "" + +#. module: hr +#: field:hr.employee.category,parent_id:0 +msgid "Parent Category" +msgstr "" + +#. module: hr +#: constraint:hr.employee.category:0 +msgid "Error ! You cannot create recursive Categories." +msgstr "" + +#. module: hr +#: view:hr.department:0 +#: model:ir.actions.act_window,name:hr.open_module_tree_department +#: model:ir.ui.menu,name:hr.menu_hr_department_tree +#: view:res.users:0 +#: field:res.users,context_department_id:0 +msgid "Departments" +msgstr "" + +#. module: hr +#: model:process.node,name:hr.process_node_employeecontact0 +msgid "Employee Contact" +msgstr "" + +#. module: hr +#: view:board.board:0 +msgid "My Board" +msgstr "" + +#. module: hr +#: selection:hr.employee,gender:0 +msgid "Male" +msgstr "" + +#. module: hr +#: field:hr.installer,progress:0 +msgid "Configuration Progress" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_view_categ_form +#: model:ir.ui.menu,name:hr.menu_view_employee_category_form +msgid "Categories of Employee" +msgstr "" + +#. module: hr +#: view:hr.employee.category:0 +#: model:ir.model,name:hr.model_hr_employee_category +msgid "Employee Category" +msgstr "" + +#. module: hr +#: field:hr.installer,config_logo:0 +msgid "Image" +msgstr "" + +#. module: hr +#: model:process.process,name:hr.process_process_employeecontractprocess0 +msgid "Employee Contract" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_evaluation:0 +msgid "" +"Lets you create and manage the periodic evaluation and performance review of " +"employees." +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_hr_department +msgid "hr.department" +msgstr "" + +#. module: hr +#: help:hr.employee,parent_id:0 +msgid "It is linked with manager of Department" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_recruitment:0 +msgid "Recruitment Process" +msgstr "" + +#. module: hr +#: field:hr.employee,category_ids:0 +#: field:hr.employee.category,name:0 +msgid "Category" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,help:hr.open_view_employee_list_my +msgid "" +"Here you can manage your work force by creating employees and assigning them " +"specific properties in the system. Maintain all employee related information " +"and keep track of anything that needs to be recorded for them. The personal " +"information tab will help you maintain their identity data. The Categories " +"tab gives you the opportunity to assign them related employee categories " +"depending on their position and activities within the company. A category " +"can be a seniority level within the company or a department. The Timesheets " +"tab allows to assign them a specific timesheet and analytic journal where " +"they will be able to enter time through the system. In the note tab, you can " +"enter text data that should be recorded for a specific employee." +msgstr "" + +#. module: hr +#: help:hr.employee,bank_account_id:0 +msgid "Employee bank salary account" +msgstr "" + +#. module: hr +#: field:hr.department,note:0 +msgid "Note" +msgstr "" + +#. module: hr +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Contact Information" +msgstr "" + +#. module: hr +#: field:hr.employee,address_id:0 +msgid "Working Address" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_board_hr_manager +msgid "HR Manager Dashboard" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Status" +msgstr "" + +#. module: hr +#: view:hr.installer:0 +msgid "Configure" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.open_view_categ_tree +#: model:ir.ui.menu,name:hr.menu_view_employee_category_tree +msgid "Categories structure" +msgstr "" + +#. module: hr +#: field:hr.employee,partner_id:0 +msgid "unknown" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_holidays:0 +msgid "Holidays / Leaves Management" +msgstr "" + +#. module: hr +#: field:hr.employee,ssnid:0 +msgid "SSN No" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Active" +msgstr "" + +#. module: hr +#: constraint:hr.employee:0 +msgid "Error ! You cannot create recursive Hierarchy of Employees." +msgstr "" + +#. module: hr +#: view:hr.department:0 +msgid "Companies" +msgstr "" + +#. module: hr +#: model:ir.module.module,description:hr.module_meta_information +msgid "" +"\n" +" Module for human resource management. You can manage:\n" +" * Employees and hierarchies : You can define your employee with User and " +"display hierarchies\n" +" * HR Departments\n" +" * HR Jobs\n" +" " +msgstr "" + +#. module: hr +#: model:process.transition,note:hr.process_transition_contactofemployee0 +msgid "" +"In the Employee form, there are different kind of information like Contact " +"information." +msgstr "" + +#. module: hr +#: help:hr.job,expected_employees:0 +msgid "Required number of Employees in total for that job." +msgstr "" + +#. module: hr +#: selection:hr.job,state:0 +msgid "Old" +msgstr "" + +#. module: hr +#: field:hr.employee.marital.status,description:0 +msgid "Status Description" +msgstr "" + +#. module: hr +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "" + +#. module: hr +#: view:hr.job:0 +#: field:hr.job,state:0 +msgid "State" +msgstr "" + +#. module: hr +#: field:hr.employee,marital:0 +#: view:hr.employee.marital.status:0 +#: field:hr.employee.marital.status,name:0 +#: model:ir.actions.act_window,name:hr.action_hr_marital_status +#: model:ir.ui.menu,name:hr.hr_menu_marital_status +msgid "Marital Status" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_recruitment:0 +msgid "Helps you manage and streamline your recruitment process." +msgstr "" + +#. module: hr +#: model:process.node,note:hr.process_node_employee0 +msgid "Employee form and structure" +msgstr "" + +#. module: hr +#: field:hr.employee,photo:0 +msgid "Photo" +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_res_users +msgid "res.users" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_payroll_account:0 +msgid "Payroll Accounting" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +msgid "Personal Information" +msgstr "" + +#. module: hr +#: field:hr.employee,passport_id:0 +msgid "Passport No" +msgstr "" + +#. module: hr +#: view:res.users:0 +msgid "Current Activity" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_expense:0 +msgid "" +"Tracks and manages employee expenses, and can automatically re-invoice " +"clients if the expenses are project-related." +msgstr "" + +#. module: hr +#: view:hr.job:0 +msgid "Current" +msgstr "" + +#. module: hr +#: field:hr.department,parent_id:0 +msgid "Parent Department" +msgstr "" + +#. module: hr +#: view:hr.employee.category:0 +msgid "Employees Categories" +msgstr "" + +#. module: hr +#: field:hr.employee,address_home_id:0 +msgid "Home Address" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_attendance:0 +#: model:ir.ui.menu,name:hr.menu_open_view_attendance_reason_new_config +msgid "Attendances" +msgstr "" + +#. module: hr +#: view:hr.employee.marital.status:0 +#: view:hr.job:0 +msgid "Description" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_contract:0 +msgid "Extends employee profiles to help manage their contracts." +msgstr "" + +#. module: hr +#: field:hr.installer,hr_payroll:0 +msgid "Payroll" +msgstr "" + +#. module: hr +#: model:hr.employee.marital.status,name:hr.hr_employee_marital_status_single +msgid "Single" +msgstr "" + +#. module: hr +#: field:hr.job,name:0 +msgid "Job Name" +msgstr "" + +#. module: hr +#: view:hr.job:0 +#: selection:hr.job,state:0 +msgid "In Position" +msgstr "" + +#. module: hr +#: field:hr.employee,mobile_phone:0 +msgid "Mobile" +msgstr "" + +#. module: hr +#: view:hr.department:0 +msgid "department" +msgstr "" + +#. module: hr +#: field:hr.employee,country_id:0 +msgid "Nationality" +msgstr "" + +#. module: hr +#: view:hr.department:0 +#: view:hr.employee:0 +#: field:hr.employee,notes:0 +msgid "Notes" +msgstr "" + +#. module: hr +#: model:ir.model,name:hr.model_hr_installer +msgid "hr.installer" +msgstr "" + +#. module: hr +#: view:board.board:0 +msgid "HR Manager Board" +msgstr "" + +#. module: hr +#: field:hr.employee,resource_id:0 +msgid "Resource" +msgstr "" + +#. module: hr +#: view:hr.installer:0 +#: model:ir.actions.act_window,name:hr.action_hr_installer +msgid "Human Resources Application Configuration" +msgstr "" + +#. module: hr +#: field:hr.employee,gender:0 +msgid "Gender" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: field:hr.job,employee_ids:0 +#: model:ir.actions.act_window,name:hr.hr_employee_normal_action_tree +#: model:ir.actions.act_window,name:hr.open_view_employee_list +#: model:ir.actions.act_window,name:hr.open_view_employee_list_my +#: model:ir.ui.menu,name:hr.menu_open_view_employee_list_my +#: model:ir.ui.menu,name:hr.menu_view_employee_category_configuration_form +msgid "Employees" +msgstr "" + +#. module: hr +#: field:hr.employee,bank_account_id:0 +msgid "Bank Account" +msgstr "" + +#. module: hr +#: field:hr.department,name:0 +msgid "Department Name" +msgstr "" + +#. module: hr +#: help:hr.employee,ssnid:0 +msgid "Social Security Number" +msgstr "" + +#. module: hr +#: model:process.node,note:hr.process_node_openerpuser0 +msgid "Creation of a OpenERP user" +msgstr "" + +#. module: hr +#: field:hr.department,child_ids:0 +msgid "Child Departments" +msgstr "" + +#. module: hr +#: model:ir.actions.act_window,name:hr.action_hr_job +#: model:ir.ui.menu,name:hr.menu_hr_job +msgid "Job Positions" +msgstr "" + +#. module: hr +#: view:hr.employee:0 +#: field:hr.employee,coach_id:0 +msgid "Coach" +msgstr "" + +#. module: hr +#: view:hr.installer:0 +msgid "Configure Your Human Resources Application" +msgstr "" + +#. module: hr +#: field:hr.installer,hr_expense:0 +msgid "Expenses" +msgstr "" + +#. module: hr +#: field:hr.department,manager_id:0 +#: view:hr.employee:0 +#: field:hr.employee,parent_id:0 +msgid "Manager" +msgstr "" + +#. module: hr +#: model:hr.employee.marital.status,name:hr.hr_employee_marital_status_widower +msgid "Widower" +msgstr "" + +#. module: hr +#: help:hr.installer,hr_payroll_account:0 +msgid "Generic Payroll system Integrated with Accountings." +msgstr "" + +#. module: hr +#: field:hr.employee,child_ids:0 +msgid "Subordinates" +msgstr "" diff --git a/addons/hr/i18n/fr_CH.po b/addons/hr/i18n/fr_CH.po new file mode 100644 index 00000000000..650fcdb8b92 --- /dev/null +++ b/addons/hr/i18n/fr_CH.po @@ -0,0 +1,29 @@ +# French (Switzerland) 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 <bogdanovidiu.stanciu@gmail.com>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15:13+0000\n" +"PO-Revision-Date: 2011-11-06 15:15+0000\n" +"Last-Translator: Bogdan Stanciu (bstanciu)\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-11-05 05:31+0000\n" +"X-Generator: Launchpad (build 14231)\n" + +#. module: hr +#: field:hr.employee,ssnid:0 +msgid "SSN No" +msgstr "No. AVS" + +#. module: hr +#: help:hr.employee,ssnid:0 +msgid "Social Security Number" +msgstr "Numéro de sécurité sociale (AVS)" + diff --git a/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml b/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml index e9b5fecf330..660cdbc81cd 100644 --- a/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml +++ b/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml @@ -29,7 +29,6 @@ <record model="ir.values" id="hr_attendance_month_values"> <field name="model_id" ref="hr.model_hr_employee" /> - <field name="object" eval="1" /> <field name="name">Attendances By Month</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_hr_attendance_month'))" /> diff --git a/addons/hr_attendance/wizard/hr_attendance_byweek_view.xml b/addons/hr_attendance/wizard/hr_attendance_byweek_view.xml index 4ed56ce1800..63cd0978a7f 100644 --- a/addons/hr_attendance/wizard/hr_attendance_byweek_view.xml +++ b/addons/hr_attendance/wizard/hr_attendance_byweek_view.xml @@ -28,7 +28,6 @@ <record model="ir.values" id="hr_attendance_week_values"> <field name="model_id" ref="hr.model_hr_employee" /> - <field name="object" eval="1" /> <field name="name">Attendances By Week</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_hr_attendance_week'))" /> diff --git a/addons/hr_attendance/wizard/hr_attendance_error_view.xml b/addons/hr_attendance/wizard/hr_attendance_error_view.xml index 6eec4701fb4..8f943d7d1da 100644 --- a/addons/hr_attendance/wizard/hr_attendance_error_view.xml +++ b/addons/hr_attendance/wizard/hr_attendance_error_view.xml @@ -32,7 +32,6 @@ <record model="ir.values" id="hr_attendance_error_values"> <field name="model_id" ref="hr.model_hr_employee" /> - <field name="object" eval="1" /> <field name="name">Attendance Error Report</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_hr_attendance_error'))" /> diff --git a/addons/hr_evaluation/__openerp__.py b/addons/hr_evaluation/__openerp__.py index f082d9bfcef..720c49302d4 100644 --- a/addons/hr_evaluation/__openerp__.py +++ b/addons/hr_evaluation/__openerp__.py @@ -39,7 +39,7 @@ level of employee hierarchy fills what and final review and evaluation is done by the manager.Every evaluation filled by the employees can be viewed in the form of pdf file. Implements a dashboard for My Current Evaluations """, - "demo": [], + "demo": ["hr_evaluation_demo.xml"], "data": [ "security/ir.model.access.csv", "security/hr_evaluation_security.xml", diff --git a/addons/hr_evaluation/board_hr_evaluation_view.xml b/addons/hr_evaluation/board_hr_evaluation_view.xml index 70d6245b1ee..7f6d3142db5 100644 --- a/addons/hr_evaluation/board_hr_evaluation_view.xml +++ b/addons/hr_evaluation/board_hr_evaluation_view.xml @@ -10,15 +10,15 @@ <field name="domain">[('state','in',('wait', 'progress')),('create_uid','=',uid)]</field> <field name="search_view_id" ref="hr_evaluation.view_hr_evaluation_tree"/> </record> - + <record id="board_hr_evaluation_form" model="ir.ui.view"> <field name="name">board.hr.evaluation.form</field> <field name="model">board.board</field> - <field name="inherit_id" ref="hr.board_hr_form"/> + <field name="inherit_id" ref="hr.board_hr_form"/> <field name="type">form</field> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1" position="inside"> - <action colspan="4" height="220" name="%(act_hr_evaluation_tree)d" string="My Evaluation Remaining" width="510"/> + <xpath expr="/form/board/column" position="inside"> + <action name="%(act_hr_evaluation_tree)d" string="My Evaluation Remaining"/> </xpath> </field> </record> diff --git a/addons/hr_evaluation/hr_evaluation_data.xml b/addons/hr_evaluation/hr_evaluation_data.xml index 6745b997b3f..40ff397534e 100644 --- a/addons/hr_evaluation/hr_evaluation_data.xml +++ b/addons/hr_evaluation/hr_evaluation_data.xml @@ -1210,23 +1210,11 @@ Once the form had been filled, the employee send it to his supervisor. <field eval="1" name="wait"/> </record> </data> - + <data noupdate="1"> <record id="hr.employee" model="hr.employee"> <field name="evaluation_plan_id" ref="hr_evaluation_plan_managersevaluationplan0"/> </record> - - <record id="hr.employee1" model="hr.employee"> - <field name="evaluation_plan_id" ref="hr_evaluation_plan_managersevaluationplan0"/> - </record> - - <record id="hr.employee2" model="hr.employee"> - <field name="evaluation_plan_id" ref="hr_evaluation_plan_managersevaluationplan0"/> - </record> - - <record id="hr.employee3" model="hr.employee"> - <field name="evaluation_plan_id" ref="hr_evaluation_plan_managersevaluationplan0"/> - </record> </data> <data> diff --git a/addons/hr_evaluation/hr_evaluation_demo.xml b/addons/hr_evaluation/hr_evaluation_demo.xml new file mode 100644 index 00000000000..db096f13266 --- /dev/null +++ b/addons/hr_evaluation/hr_evaluation_demo.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data noupdate="1"> + + <record id="hr.employee1" model="hr.employee"> + <field name="evaluation_plan_id" ref="hr_evaluation_plan_managersevaluationplan0"/> + </record> + + <record id="hr.employee2" model="hr.employee"> + <field name="evaluation_plan_id" ref="hr_evaluation_plan_managersevaluationplan0"/> + </record> + + <record id="hr.employee3" model="hr.employee"> + <field name="evaluation_plan_id" ref="hr_evaluation_plan_managersevaluationplan0"/> + </record> + + </data> +</openerp>
\ No newline at end of file diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml index e15b461d2e2..d8dfa7e40ca 100644 --- a/addons/hr_evaluation/hr_evaluation_view.xml +++ b/addons/hr_evaluation/hr_evaluation_view.xml @@ -381,7 +381,7 @@ <field name="view_type">form</field> <field name="view_id" ref="view_hr_evaluation_interview_form"/> <field name="domain">[('is_evaluation' ,'=', True)]</field> - <field name="context">{"search_default_todo":1,"search_default_user_id":uid}</field> + <field name="context">{'default_is_evaluation': True, "search_default_todo":1,"search_default_user_id":uid}</field> <field name="search_view_id" ref="view_hr_evaluation_interview_search"/> <field name="help">Interview Requests are generated automatically by OpenERP according to an employee's Appraisal Plan. Each user receives automatic emails and requests to evaluate their colleagues periodically.</field> </record> diff --git a/addons/hr_expense/board_hr_expense_manager_view.xml b/addons/hr_expense/board_hr_expense_manager_view.xml index c45979057a1..0f09c9a3290 100644 --- a/addons/hr_expense/board_hr_expense_manager_view.xml +++ b/addons/hr_expense/board_hr_expense_manager_view.xml @@ -16,8 +16,8 @@ <field name="inherit_id" ref="hr.board_hr_manager_form"/> <field name="type">form</field> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1" position="inside"> - <action colspan="4" height="220" name="%(action_employee_expense)d" string="All Employee Expenses" /> + <xpath expr="/form/board/column" position="inside"> + <action name="%(action_employee_expense)d" string="All Employee Expenses"/> </xpath> </field> </record> diff --git a/addons/hr_expense/board_hr_expense_view.xml b/addons/hr_expense/board_hr_expense_view.xml index 4e213048dc7..d9c80d6f755 100644 --- a/addons/hr_expense/board_hr_expense_view.xml +++ b/addons/hr_expense/board_hr_expense_view.xml @@ -7,6 +7,7 @@ <field name="res_model">hr.expense.expense</field> <field name="view_type">form</field> <field name="domain">[('state','in',('confirm', 'accepted')),('user_id','=',uid)]</field> + <field name="context">{'default_user_id': uid}</field> <field name="view_id" ref="hr_expense.view_editable_expenses_tree"/> </record> @@ -16,8 +17,8 @@ <field name="inherit_id" ref="hr.board_hr_form"/> <field name="type">form</field> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1" position="inside"> - <action colspan="4" height="220" name="%(action_my_expense)d" string="My Expenses" /> + <xpath expr="/form/board/column" position="inside"> + <action name="%(action_my_expense)d" string="My Expenses"/> </xpath> </field> </record> diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py index 201c70c642c..478b8120935 100644 --- a/addons/hr_expense/hr_expense.py +++ b/addons/hr_expense/hr_expense.py @@ -137,8 +137,9 @@ class hr_expense_expense(osv.osv): inv_ids.append(self.browse(cr, uid, id).invoice_id.id) return { 'name': _('Supplier Invoices'), + 'view_type': 'form', 'view_mode': 'form', - 'view_id': [res[1] if res else False], + 'view_id': [res and res[1] or False], 'res_model': 'account.invoice', 'context': "{'type':'out_invoice', 'journal_type': 'purchase'}", 'type': 'ir.actions.act_window', diff --git a/addons/hr_expense/hr_expense_workflow.xml b/addons/hr_expense/hr_expense_workflow.xml index 7946bef3b6b..328a07879a4 100644 --- a/addons/hr_expense/hr_expense_workflow.xml +++ b/addons/hr_expense/hr_expense_workflow.xml @@ -104,13 +104,6 @@ </record> <record id="t10" model="workflow.transition"> - <field name="act_from" ref="act_invoice"/> - <field name="act_to" ref="act_refused"/> - <field name="signal">subflow.cancel</field> - <field name="group_id" ref="base.group_hr_user"/> - </record> - - <record id="t11" model="workflow.transition"> <field name="act_from" ref="act_refused"/> <field name="act_to" ref="act_draft"/> <field name="signal">draft</field> diff --git a/addons/hr_holidays/board_hr_holidays_view.xml b/addons/hr_holidays/board_hr_holidays_view.xml index 9dc9646da9b..f0a0ab0741a 100644 --- a/addons/hr_holidays/board_hr_holidays_view.xml +++ b/addons/hr_holidays/board_hr_holidays_view.xml @@ -16,8 +16,8 @@ <field name="type">form</field> <field name="inherit_id" ref="hr.board_hr_form"/> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child2" position="inside"> - <action colspan="4" height="220" name="%(action_hr_holidays_leaves_by_month)d" string="Leaves" /> + <xpath expr="/form/board/column" position="inside"> + <action name="%(action_hr_holidays_leaves_by_month)d" string="Leaves"/> </xpath> </field> </record> diff --git a/addons/hr_holidays/board_hr_manager_holidays_view.xml b/addons/hr_holidays/board_hr_manager_holidays_view.xml index 662569fb81d..1c7c6280f8b 100644 --- a/addons/hr_holidays/board_hr_manager_holidays_view.xml +++ b/addons/hr_holidays/board_hr_manager_holidays_view.xml @@ -18,8 +18,8 @@ <field name="inherit_id" ref="hr.board_hr_manager_form"/> <field name="type">form</field> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1" position="inside"> - <action colspan="4" height="220" name="%(action_view_holiday_status_manager_board)d" string="All Employee Leaves"/> + <xpath expr="/form/board/column" position="inside"> + <action name="%(action_view_holiday_status_manager_board)d" string="All Employee Leaves"/> </xpath> </field> </record> diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index a43378b1c95..e8afac04cb4 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -285,7 +285,7 @@ <field name="name">Requests Approve</field> <field name="res_model">hr.holidays</field> <field name="view_type">form</field> - <field name="context">{'search_default_approve':1,"search_default_department_id": department_id}</field> + <field name="context">{'default_type': 'add', 'search_default_approve':1,"search_default_department_id": department_id}</field> <field name="domain">[('type','=','add')]</field> <field name="view_id" ref="edit_holiday_new"/> <field name="search_view_id" ref="view_hr_holidays_filter"/> diff --git a/addons/hr_holidays/report/available_holidays.py b/addons/hr_holidays/report/available_holidays.py index 26c654db9dd..cb3a89eeb3e 100644 --- a/addons/hr_holidays/report/available_holidays.py +++ b/addons/hr_holidays/report/available_holidays.py @@ -19,3 +19,5 @@ # ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_holidays/test/test_hr_holiday.yml b/addons/hr_holidays/test/test_hr_holiday.yml index c4a847640b6..af476386e0b 100644 --- a/addons/hr_holidays/test/test_hr_holiday.yml +++ b/addons/hr_holidays/test/test_hr_holiday.yml @@ -1,140 +1,34 @@ - In order to test the hr_holiday module in OpenERP, I will Allocate leaves for Employee and manage leaves and leaves requests. - - I create new user "test_holiday_user1" who will make leave request. -- - !record {model: res.users, id: test_holiday_user1}: - company_id: base.main_company - context_lang: en_US - groups_id: - - base.group_user - - base.group_hr_manager - - base.group_hr_user - login: test_holiday_user1 - name: test_holiday_user1 - password: test_holiday_user1 -- - I create a new employee “Mark Johnshon” as Manager to validate employee leave. -- - !record {model: hr.employee, id: hr_employee_employee0}: - address_home_id: base.res_partner_address_1 - company_id: base.main_company - gender: male - name: Mark Johnson - user_id: base.user_root -- - I Create another employee "Phil Graves" as "test_holiday_user1". -- - !record {model: hr.employee, id: hr_employee_philgraves0}: - address_home_id: base.res_partner_address_8 - name: Phil Graves - parent_id: 'hr_employee_employee0' - user_id: 'test_holiday_user1' -- - I create a new Leave type "Sick Leave". -- - !record {model: hr.holidays.status, id: hr_holidays_status_sick0}: - color_name: red - name: Sick Leave. - limit: 12 - -- - I allocate leave request for employee "Phil Graves". -- - !record {model: hr.holidays, id: hr_holidays_allocateleaveforuser0}: - holiday_status_id: hr_holidays_status_sick0 - name: Sick Leaves for Phil Graves - number_of_days_temp: 12.0 - date_from: !eval "'%s-05-20 13:59:00' %(datetime.now().year)" - date_to: !eval "'%s-05-22 13:59:00' %(datetime.now().year)" - type: add -- - I assign allocation type as 'Employee'. -- - !python {model: hr.holidays}: | - self.onchange_type(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], 'employee') -- - I change Leave Type of the employee. -- - !python {model: hr.holidays}: | - res = self.onchange_sec_id(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], ref('holiday_status_sl')) - values = dict([('holiday_status_id', ref('holiday_status_sl'))] + res['value'].items()) - self.write(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], values, None) -- I assign the dates in the holiday request. - - !python {model: hr.holidays}: | - from datetime import datetime - date_from = '%s-%s-%s 14:00:00' %(datetime.now().year, datetime.now().month, datetime.now().day) - date_to = '%s-%s-%s 19:59:00' %(datetime.now().year, datetime.now().month, datetime.now().day) - res = self.onchange_date_from(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], date_to, date_from) - values = dict([('date_from', date_from),('date_to',date_to)] + res['value'].items()) - self.write(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], values, None) + !record {model: hr.holidays, id: hr_holiday1}: + name: Sick Leave + holiday_status_id: holiday_status_cl + date_from: !eval time.strftime('%Y-%m-10 10:00:00') + date_to: !eval time.strftime('%Y-%m-11 19:00:00') + employee_id: hr.employee1 + type: remove - - I confirmed the allocation by clicking on "Confirm" button. + I confirmed the holiday request by clicking on "Confirm" button. - - !workflow {model: hr.holidays, action: confirm, ref: hr_holidays_allocateleaveforuser0} - + !workflow {model: hr.holidays, action: confirm, ref: hr_holidays_employee1_cl} - - I find a small mistake on my leave request to I refuse the leave request to correct a mistake. + I find a small mistake on my leave request to I click on "Refuse" button to correct a mistake. - - !workflow {model: hr.holidays, action: refuse, ref: hr_holidays_allocateleaveforuser0} - + !workflow {model: hr.holidays, action: refuse, ref: hr_holidays_employee1_cl} - I again set to draft and then confirm. - !python {model: hr.holidays}: | import netsvc wf_service = netsvc.LocalService("workflow") - self.set_to_draft(cr, uid, [ref('hr_holidays_allocateleaveforuser0')]) - wf_service.trg_validate(uid, 'hr.holidays', ref('hr_holidays_allocateleaveforuser0'), 'confirm', cr) -- - I validate the allocation by clicking on "To Approve" button. -- - !workflow {model: hr.holidays, action: validate, ref: hr_holidays_allocateleaveforuser0} - -- - I connect as "test_holiday_user1", and create a new leave request for employee "Phil Graves". -- - !record {model: hr.holidays, id: hr_holidays_iwanttoleaveforgotohospital0}: - date_from: !eval "'%s-05-20 11:48:00' %(datetime.now().year)" - date_to: !eval "'%s-05-21 11:48:00' %(datetime.now().year)" - employee_id: 'hr_employee_philgraves0' - holiday_status_id: 'hr_holidays_status_sick0' - name: Appointment with Doctor - notes: My appointment with the doctor is confirmed. So please accept my leave. - number_of_days_temp: 2.0 - type: remove - user_id: 'test_holiday_user1' -- - I check that Leave Request is in "Draft" state. -- - !assert {model: hr.holidays, id: hr_holidays_iwanttoleaveforgotohospital0}: - - state == 'draft' - -- - I confirm leave Request by click on "Confirm" button. -- - !workflow {model: hr.holidays, action: confirm, ref: hr_holidays_iwanttoleaveforgotohospital0} - -- - I connect as "Admin" user and Open Leave request of "Phil Graves" and "validate" it by click on "Approve" button. -- - !workflow {model: hr.holidays, action: validate, ref: hr_holidays_iwanttoleaveforgotohospital0} - -- - I check that "Leave Manager" field is automatically filled by the user who validate the leave'. -- - !python {model: hr.holidays}: | - ids2 = self.pool.get('hr.employee').search(cr, uid, [('user_id','=', uid)]) - obj = self.browse(cr, uid, ref('hr_holidays_iwanttoleaveforgotohospital0')) - assert ids2[0] == obj.manager_id.id - + self.set_to_draft(cr, uid, [ref('hr_holidays_employee1_cl')]) + wf_service.trg_validate(uid, 'hr.holidays', ref('hr_holidays_employee1_cl'), 'confirm', cr) - - I check that Leave request state is "Validated". + I validate the holiday request by clicking on "To Approve" button. - - !assert {model: hr.holidays, id: hr_holidays_iwanttoleaveforgotohospital0}: - - state == "validate" - + !workflow {model: hr.holidays, action: validate, ref: hr_holidays_employee1_cl} - - I can also see Summary of Employee's holiday by using 'Employee's Holidays' Report. This report will allows to choose to print holidays with state Confirmed, Validated or both. + I can also see Summary of Employee's holiday by using "Employee's Holidays" Report. This report will allows to choose to print holidays with state Confirmed, Validated or both. diff --git a/addons/hr_holidays/wizard/hr_holidays_summary_employees_view.xml b/addons/hr_holidays/wizard/hr_holidays_summary_employees_view.xml index 980ad38c855..530d2a60351 100644 --- a/addons/hr_holidays/wizard/hr_holidays_summary_employees_view.xml +++ b/addons/hr_holidays/wizard/hr_holidays_summary_employees_view.xml @@ -35,7 +35,6 @@ <record model="ir.values" id="hr_holidays_summary_employee_value"> <field name="model_id" ref="hr.model_hr_employee" /> - <field name="object" eval="1" /> <field name="name">Employee's Holidays</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_hr_holidays_summary_employee'))" /> @@ -44,4 +43,4 @@ </record> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py index 8b1987ec058..affd81cce6d 100644 --- a/addons/hr_payroll/hr_payroll.py +++ b/addons/hr_payroll/hr_payroll.py @@ -928,6 +928,10 @@ class hr_payslip_line(osv.osv): 'total': fields.function(_calculate_total, method=True, type='float', string='Total', digits_compute=dp.get_precision('Payroll'),store=True ), } + _defaults = { + 'quantity': 1.0, + } + hr_payslip_line() class hr_payroll_structure(osv.osv): diff --git a/addons/hr_payroll/hr_payroll_view.xml b/addons/hr_payroll/hr_payroll_view.xml index 01fe270710d..98ec4be407b 100644 --- a/addons/hr_payroll/hr_payroll_view.xml +++ b/addons/hr_payroll/hr_payroll_view.xml @@ -759,13 +759,14 @@ <act_window name="Payslip Computation Details" domain="[('slip_id', '=', active_id)]" + context="{'default_slip_id': active_id}" res_model="hr.payslip.line" src_model="hr.payslip" id="act_payslip_lines"/> <act_window name="Payslip Lines" domain="[('register_id', '=', active_id)]" - context="{'search_default_register_id': 1}" + context="{'default_register_id': active_id, 'search_default_register_id': 1}" res_model="hr.payslip.line" src_model="hr.contribution.register" id="act_contribution_reg_payslip_lines"/> diff --git a/addons/hr_payroll/i18n/cs.po b/addons/hr_payroll/i18n/cs.po new file mode 100644 index 00000000000..39f45018ed4 --- /dev/null +++ b/addons/hr_payroll/i18n/cs.po @@ -0,0 +1,1618 @@ +# Czech 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-25 12:32+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Czech <cs@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-26 05:50+0000\n" +"X-Generator: Launchpad (build 14381)\n" + +#. module: hr_payroll +#: report:employees.salary:0 +msgid "E-mail Address" +msgstr "" + +#. module: hr_payroll +#: view:hr.allounce.deduction.categoty:0 +msgid "Based" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,net:0 +#: field:hr.employee,net:0 +#: field:hr.payroll.register,net:0 +#: field:hr.payslip,net:0 +#: report:salary.structure:0 +msgid "Net Salary" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Recompute Sheet" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +msgid "Employees Salary Details" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +msgid "Allowances with Basic:" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +#: report:salary.structure:0 +msgid "Department" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +msgid "Deductions:" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,gratuity:0 +msgid "Use for Gratuity ?" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,working_days_per_week:0 +#: field:hr.payslip,working_days:0 +#: report:payslip.pdf:0 +msgid "Working Days" +msgstr "" + +#. module: hr_payroll +#: selection:hr.allounce.deduction.categoty,type:0 +#: selection:hr.payslip.line,type:0 +msgid "Loan" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +msgid "Salary Payment Register" +msgstr "" + +#. module: hr_payroll +#: field:hr.employee,slip_ids:0 +#: view:hr.payroll.register:0 +#: field:hr.payroll.register,line_ids:0 +#: model:ir.actions.act_window,name:hr_payroll.act_hr_employee_payslip_list +msgid "Payslips" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.report.xml,name:hr_payroll.year_salary_report +msgid "Year Salary Report" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payroll.register,state:0 +#: selection:hr.payslip,state:0 +msgid "Paid Salary" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "(" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,company_id:0 +#: field:hr.allounce.deduction.categoty,company_id:0 +#: field:hr.contibution.register,company_id:0 +#: field:hr.holidays.status,company_id:0 +#: field:hr.payroll.advice,company_id:0 +#: field:hr.payroll.register,company_id:0 +#: field:hr.payroll.structure,company_id:0 +#: field:hr.payslip,company_id:0 +msgid "Company" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "The Manager" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Details" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +#: report:payslip.pdf:0 +msgid "," +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.advice:0 +#: view:hr.payroll.register:0 +#: view:hr.payslip:0 +msgid "Set to Draft" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:180 +#: code:addons/hr_payroll/hr_payroll.py:195 +#: code:addons/hr_payroll/hr_payroll.py:285 +#: code:addons/hr_payroll/hr_payroll.py:835 +#: code:addons/hr_payroll/hr_payroll.py:1111 +#: code:addons/hr_payroll/hr_payroll.py:1126 +#: code:addons/hr_payroll/hr_payroll.py:1410 +#, python-format +msgid "Variable Error: %s " +msgstr "" + +#. module: hr_payroll +#: view:hr.passport:0 +msgid "Expire" +msgstr "" + +#. module: hr_payroll +#: selection:hr.holidays.status,type:0 +msgid "Half-Pay Holiday" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +#: field:hr.payslip,other_pay:0 +msgid "Others" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,slip_id:0 +#: model:ir.model,name:hr_payroll.model_hr_payslip +#: report:payslip.pdf:0 +msgid "Pay Slip" +msgstr "" + +#. module: hr_payroll +#: report:salary.structure:0 +msgid "Contract Detail:" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,igross:0 +#: field:hr.payslip,inet:0 +msgid "Calculaton Field" +msgstr "" + +#. module: hr_payroll +#: help:hr.payroll.advice,bank_id:0 +#: help:hr.payroll.register,bank_id:0 +msgid "Select the Bank Address from whcih the salary is going to be paid" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice.line,advice_id:0 +msgid "Bank Advice" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:hr.payroll.register,state:0 +#: selection:hr.payslip,state:0 +msgid "Reject" +msgstr "" + +#. module: hr_payroll +#: selection:hr.allounce.deduction.categoty,type:0 +#: selection:hr.payslip.line,type:0 +msgid "Leaves" +msgstr "" + +#. module: hr_payroll +#: field:hr.contibution.register.line,register_id:0 +#: view:hr.payslip:0 +#: field:hr.payslip,register_id:0 +#: report:payslip.pdf:0 +msgid "Register" +msgstr "" + +#. module: hr_payroll +#: constraint:hr.employee:0 +msgid "" +"Error ! You cannot select a department for which the employee is the manager." +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Total Deductions" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution.line,value:0 +#: field:hr.payslip.line.line,value:0 +msgid "Value" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "Name of the Employee" +msgstr "" + +#. module: hr_payroll +#: view:hr.contibution.register:0 +msgid "Register Lines" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Salary Computation" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.advice.line,amount:0 +#: report:payroll.advice:0 +#: report:salary.structure:0 +msgid "Amount" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:1225 +#, python-format +msgid "Please check configuration of %s, payroll head is missing" +msgstr "" + +#. module: hr_payroll +#: selection:company.contribution,amount_type:0 +msgid "Percentage" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: view:hr.allounce.deduction.categoty:0 +msgid "Other Information" +msgstr "" + +#. module: hr_payroll +#: field:hr.passport,country_id:0 +msgid "Country of Issue" +msgstr "" + +#. module: hr_payroll +#: field:hr.contibution.register.line,emp_deduction:0 +msgid "Employee Deduction" +msgstr "" + +#. module: hr_payroll +#: selection:hr.allounce.deduction.categoty,type:0 +#: selection:hr.payslip.line,type:0 +msgid "Other Deduction" +msgstr "" + +#. module: hr_payroll +#: selection:hr.holidays.status,type:0 +msgid "Paid Holiday" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: view:hr.allounce.deduction.categoty:0 +#: view:hr.passport:0 +#: view:hr.payslip:0 +msgid "Group By..." +msgstr "" + +#. module: hr_payroll +#: field:hr.passport,date_expire:0 +msgid "Passport Expire Date" +msgstr "" + +#. module: hr_payroll +#: selection:hr.holidays.status,type:0 +msgid "Un-Paid Holiday" +msgstr "" + +#. module: hr_payroll +#: view:hr.passport:0 +msgid "Valid From" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip,igross:0 +#: help:hr.payslip,inet:0 +msgid "" +"Calculation field used for internal calculation, do not place this on form" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Amount (in words) :" +msgstr "" + +#. module: hr_payroll +#: field:hr.holidays.status,type:0 +msgid "Payment" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.structure:0 +#: view:hr.payslip:0 +#: field:hr.payslip,line_ids:0 +#: view:hr.payslip.line:0 +#: model:ir.model,name:hr_payroll.model_hr_payslip_line +msgid "Payslip Line" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Identification No" +msgstr "" + +#. module: hr_payroll +#: view:hr.allounce.deduction.categoty:0 +#: field:hr.allounce.deduction.categoty,base:0 +msgid "Based on" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payroll.register,state:0 +#: selection:hr.payslip,state:0 +msgid "Wating for Verification" +msgstr "" + +#. module: hr_payroll +#: model:ir.module.module,shortdesc:hr_payroll.module_meta_information +msgid "Human Resource Payroll" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "Total:" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Posted" +msgstr "" + +#. module: hr_payroll +#: model:ir.module.module,description:hr_payroll.module_meta_information +msgid "" +"Generic Payroll system\n" +" * Employee Details\n" +" * Employee Contracts\n" +" * Passport based Contract\n" +" * Allowances / Deductions\n" +" * Allow to configure Basic / Grows / Net Salary\n" +" * Employee Payslip\n" +" * Monthly Payroll Register\n" +" * Integrated with Holiday Management\n" +" " +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_holidays_status +msgid "Leave Type" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +msgid "Date :" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,total:0 +msgid "Sub Total" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Payments -" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,visa_no:0 +msgid "Visa No" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution.line,from_val:0 +#: report:employees.salary:0 +#: field:hr.payslip.line.line,from_val:0 +#: report:year.salary:0 +msgid "From" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.advice.line,bysal:0 +#: report:payroll.advice:0 +msgid "By Salary" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.employees.detail,date_to:0 +#: field:hr.payroll.year.salary,date_to:0 +#: report:salary.structure:0 +msgid "End Date" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.report.xml,name:hr_payroll.salary_payslip +msgid "Employee PaySlip" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,leaves:0 +msgid "Leave Deductions" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +#: report:payroll.advice:0 +msgid "Authorised Signature" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payslip.line,amount_type:0 +msgid "Function Value" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_contibution_register_line +msgid "Contribution Register Line" +msgstr "" + +#. module: hr_payroll +#: report:salary.structure:0 +msgid "Notes:" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.advice,state:0 +#: field:hr.payroll.register,state:0 +#: field:hr.payslip,state:0 +msgid "State" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.advice:0 +msgid "Paymeny Lines" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Other Lines" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: view:hr.allounce.deduction.categoty:0 +#: view:hr.payroll.structure:0 +#: view:hr.payslip:0 +#: view:hr.payslip.line:0 +msgid "Function Arguments" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_hr_company_contribution_tree +#: model:ir.ui.menu,name:hr_payroll.menu_hr_company_contribution_tree +msgid "Company Contributions" +msgstr "" + +#. module: hr_payroll +#: field:hr.contibution.register.line,employee_id:0 +#: field:hr.passport,employee_id:0 +#: field:hr.payroll.advice.line,employee_id:0 +#: field:hr.payslip,employee_id:0 +#: field:hr.payslip.line,employee_id:0 +#: model:ir.model,name:hr_payroll.model_hr_employee +msgid "Employee" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,base:0 +msgid "Formula" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_payroll_advice_line +msgid "Bank Advice Lines" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: view:hr.allounce.deduction.categoty:0 +#: field:hr.allounce.deduction.categoty,type:0 +#: field:hr.payslip.line,type:0 +#: report:salary.structure:0 +msgid "Type" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Email" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +msgid "#" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:469 +#: code:addons/hr_payroll/hr_payroll.py:1225 +#, python-format +msgid "Error !" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.register:0 +#: view:hr.payslip:0 +msgid "Verify Sheet" +msgstr "" + +#. module: hr_payroll +#: help:hr.contract,working_days_per_week:0 +msgid "No of Working days / week for an employee" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payroll.register,state:0 +#: selection:hr.payslip,state:0 +msgid "New Slip" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,basic:0 +msgid "Net Basic" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,gross:0 +#: field:hr.employee,gross:0 +#: field:hr.payroll.register,grows:0 +#: field:hr.payslip,grows:0 +#: report:salary.structure:0 +msgid "Gross Salary" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Total Earnings" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_hr_payroll_employees_detail +#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_employees_detail +msgid "Employee Salary Statement" +msgstr "" + +#. module: hr_payroll +#: selection:hr.allounce.deduction.categoty,type:0 +#: selection:hr.payslip.line,type:0 +msgid "Other Payment" +msgstr "" + +#. module: hr_payroll +#: field:hr.employee,advantages_net:0 +#: report:payslip.pdf:0 +#: report:salary.structure:0 +msgid "Deductions" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "C/D" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,permit_no:0 +msgid "Work Permit No" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.advice,line_ids:0 +msgid "Employee Salary" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.advice,chaque_nos:0 +msgid "Chaque Nos" +msgstr "" + +#. module: hr_payroll +#: field:hr.contibution.register,monthly_total_by_emp:0 +msgid "Total By Employee" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: selection:company.contribution,amount_type:0 +#: selection:company.contribution.line,amount_type:0 +#: selection:hr.payslip.line,amount_type:0 +#: selection:hr.payslip.line.line,amount_type:0 +msgid "Fixed Amount" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution.line,to_val:0 +#: report:employees.salary:0 +#: field:hr.payslip.line.line,to_val:0 +#: report:year.salary:0 +msgid "To" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:180 +#: code:addons/hr_payroll/hr_payroll.py:195 +#: code:addons/hr_payroll/hr_payroll.py:285 +#: code:addons/hr_payroll/hr_payroll.py:835 +#: code:addons/hr_payroll/hr_payroll.py:1111 +#: code:addons/hr_payroll/hr_payroll.py:1126 +#: code:addons/hr_payroll/hr_payroll.py:1410 +#, python-format +msgid "Variable Error !" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_payroll_employees_detail +msgid "hr.payroll.employees.detail" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.register:0 +#: view:hr.payslip:0 +msgid "Pay Salary" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.advice.line,name:0 +msgid "Bank Account A/C" +msgstr "" + +#. module: hr_payroll +#: view:hr.contibution.register:0 +msgid "Contribution Lines" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +msgid "For the month of" +msgstr "" + +#. module: hr_payroll +#: view:hr.allounce.deduction.categoty:0 +#: selection:hr.allounce.deduction.categoty,type:0 +#: field:hr.payroll.register,deduction:0 +#: report:hr.payroll.register.sheet:0 +#: field:hr.payslip,deduction:0 +#: selection:hr.payslip.line,type:0 +msgid "Deduction" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_payroll_advice +msgid "Bank Advice Note" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.register:0 +#: view:hr.payslip:0 +msgid "Payslip" +msgstr "" + +#. module: hr_payroll +#: constraint:hr.contract:0 +msgid "Error! contract start-date must be lower then contract end-date." +msgstr "" + +#. module: hr_payroll +#: selection:hr.allounce.deduction.categoty,type:0 +#: selection:hr.payslip.line,type:0 +msgid "Loan Installment" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.register:0 +msgid "Complete HR Checking" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "Yours Sincerely" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "SI. No." +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Net Amount" +msgstr "" + +#. module: hr_payroll +#: report:salary.structure:0 +msgid "Salary Structure:" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.report.xml,name:hr_payroll.year_employees_detail +msgid "Employees Salary Detail" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_payslip_line_line +msgid "Function Line" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.advice:0 +#: selection:hr.payroll.advice,state:0 +#: selection:hr.payroll.register,state:0 +#: selection:hr.payslip,state:0 +msgid "Confirm Sheet" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +msgid "Others:" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: selection:company.contribution,amount_type:0 +msgid "Function Calculation" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,worked_days:0 +#: report:payslip.pdf:0 +msgid "Worked Day" +msgstr "" + +#. module: hr_payroll +#: field:hr.contibution.register,monthly_total_by_comp:0 +msgid "Total By Company" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.advice.line,flag:0 +msgid "D/C" +msgstr "" + +#. module: hr_payroll +#: view:hr.passport:0 +msgid "Country & Address" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +msgid "Employee Code" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Basic Salary – Leaves" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,amount_type:0 +#: field:company.contribution.line,amount_type:0 +#: field:hr.payslip.line,amount_type:0 +#: field:hr.payslip.line.line,amount_type:0 +#: report:salary.structure:0 +msgid "Amount Type" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: field:hr.payslip.line,category_id:0 +msgid "Category" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: view:hr.allounce.deduction.categoty:0 +#: field:hr.payslip.line,company_contrib:0 +#: model:ir.model,name:hr_payroll.model_company_contribution +msgid "Company Contribution" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,category_id:0 +msgid "Heads" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.report.xml,name:hr_payroll.year_payroll_register +msgid "Print Statement" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Draft" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Earnings" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +#: report:salary.structure:0 +msgid "Basic" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_hr_passport_tree +msgid "All Passports" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_hr_payroll_year_salary +#: model:ir.ui.menu,name:hr_payroll.menu_wizard_print_year_salary +msgid "Salary Register" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +#: report:hr.payroll.register.sheet:0 +msgid "Employee Name" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_passport +msgid "Passport Detail" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payslip.line,amount_type:0 +msgid "Percentage (%)" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.advice,register_id:0 +#: view:hr.payroll.register:0 +#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_register_form +#: model:ir.model,name:hr_payroll.model_hr_payroll_register +#: model:ir.ui.menu,name:hr_payroll.hr_menu_payroll_register +msgid "Payroll Register" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +#: report:payroll.advice:0 +msgid "For" +msgstr "" + +#. module: hr_payroll +#: field:hr.passport,contracts_ids:0 +msgid "Contracts" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.structure:0 +msgid "Employee Function" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Paid" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Approve Sheet" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,paid:0 +msgid "Paid ? " +msgstr "" + +#. module: hr_payroll +#: view:hr.holidays.status:0 +msgid "Validation" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +msgid "Title" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +msgid "Search Company Contribution" +msgstr "" + +#. module: hr_payroll +#: field:hr.allounce.deduction.categoty,user_id:0 +msgid "User" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.advice:0 +msgid "Payment Lines" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Compute Sheet" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,active:0 +#: field:hr.payroll.register,active:0 +msgid "Active" +msgstr "" + +#. module: hr_payroll +#: help:hr.allounce.deduction.categoty,condition:0 +msgid "Applied this head for calculation if condition is true" +msgstr "" + +#. module: hr_payroll +#: report:year.salary:0 +msgid "Yearly Salary Details" +msgstr "" + +#. module: hr_payroll +#: constraint:hr.employee:0 +msgid "Error ! You cannot create recursive Hierarchy of Employees." +msgstr "" + +#. module: hr_payroll +#: field:hr.allounce.deduction.categoty,condition:0 +msgid "Condition" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payroll.register,state:0 +#: selection:hr.payslip,state:0 +msgid "Wating for HR Verification" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "Payment Advice:" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.register:0 +msgid "Compute" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +#: field:hr.payslip,deg_id:0 +#: report:payslip.pdf:0 +#: report:salary.structure:0 +msgid "Designation" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +msgid "HR Manager" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,basic:0 +#: field:hr.employee,basic:0 +#: field:hr.payslip,basic_before_leaves:0 +#: report:payslip.pdf:0 +msgid "Basic Salary" +msgstr "" + +#. module: hr_payroll +#: field:hr.allounce.deduction.categoty,code:0 +msgid "Category Code" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.register:0 +msgid "Salary Information" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_allounce_deduction_categoty +#: model:ir.model,name:hr_payroll.model_hr_allounce_deduction_categoty_line +msgid "Allowance Deduction Categoty" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Companies" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Authorized Signature" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,contract_id:0 +#: model:ir.model,name:hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payroll.advice,state:0 +msgid "Draft Sheet" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payroll.year.salary,salary_on:0 +msgid "Next Month Date" +msgstr "" + +#. module: hr_payroll +#: field:hr.contibution.register.line,date:0 +#: field:hr.payroll.advice,date:0 +#: field:hr.payroll.register,date:0 +#: field:hr.payslip,date:0 +msgid "Date" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,visa_expire:0 +msgid "Visa Expire Date" +msgstr "" + +#. module: hr_payroll +#: view:hr.passport:0 +msgid "Search Passport" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +#: report:salary.structure:0 +msgid "Phone No." +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,contribute_per:0 +#: field:company.contribution.line,contribution_id:0 +#: view:hr.allounce.deduction.categoty:0 +#: view:hr.contibution.register:0 +#: view:hr.contibution.register.line:0 +msgid "Contribution" +msgstr "" + +#. module: hr_payroll +#: field:hr.allounce.deduction.categoty,state:0 +msgid "Label" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.structure:0 +#: view:hr.payslip:0 +#: view:hr.payslip.line:0 +msgid "Company contribution" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +#: report:salary.structure:0 +msgid "Other No." +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,code:0 +#: field:hr.contibution.register.line,code:0 +#: field:hr.holidays.status,code:0 +#: field:hr.payroll.structure,code:0 +#: field:hr.payslip.line,code:0 +#: report:payslip.pdf:0 +#: report:salary.structure:0 +msgid "Code" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_bank_advice_tree +#: model:ir.ui.menu,name:hr_payroll.hr_menu_payment_advice +msgid "Payment Advice" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +msgid "Number :" +msgstr "" + +#. module: hr_payroll +#: help:hr.allounce.deduction.categoty,base:0 +msgid "" +"This will use to computer the % fields values, in general its on basic, but " +"You can use all heads code field in small letter as a variable name i.e. " +"hra, ma, lta, etc...., also you can use, static varible basic" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Computation Overview" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.year.salary,salary_on:0 +msgid "Salary On" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.advice,number:0 +#: field:hr.payroll.register,number:0 +#: field:hr.payslip,number:0 +msgid "Number" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,struct_id:0 +#: field:hr.employee,line_ids:0 +#: view:hr.payroll.structure:0 +#: field:hr.payroll.structure,line_ids:0 +#: view:hr.payslip:0 +#: view:hr.payslip.line:0 +#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_employee_grade_form +#: model:ir.actions.report.xml,name:hr_payroll.salary_structure_register +#: model:ir.model,name:hr_payroll.model_hr_payroll_structure +#: model:ir.ui.menu,name:hr_payroll.menu_hr_employee_function +msgid "Salary Structure" +msgstr "" + +#. module: hr_payroll +#: field:hr.contibution.register,register_line_ids:0 +msgid "Register Line" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.register:0 +#: view:hr.payslip:0 +msgid "Cancel" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.employees.detail:0 +#: view:hr.payroll.year.salary:0 +msgid "Close" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,amount:0 +msgid "Amount / Percentage" +msgstr "" + +#. module: hr_payroll +#: field:hr.employee,advantages_gross:0 +#: report:hr.payroll.register.sheet:0 +#: report:salary.structure:0 +msgid "Allowances" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payroll.year.salary,salary_on:0 +msgid "Current Month Date" +msgstr "" + +#. module: hr_payroll +#: report:salary.structure:0 +msgid "Salary" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,passport_id:0 +#: field:hr.passport,name:0 +msgid "Passport No" +msgstr "" + +#. module: hr_payroll +#: view:hr.passport:0 +msgid "Passport" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +msgid "Total Salary" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "for period" +msgstr "" + +#. module: hr_payroll +#: field:hr.holidays.status,head_id:0 +msgid "Payroll Head" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,register_id:0 +#: model:ir.actions.act_window,name:hr_payroll.action_contibution_register_form +#: model:ir.model,name:hr_payroll.model_hr_contibution_register +#: model:ir.ui.menu,name:hr_payroll.menu_action_hr_contibution_register_form +msgid "Contribution Register" +msgstr "" + +#. module: hr_payroll +#: report:salary.structure:0 +msgid "E-mail" +msgstr "" + +#. module: hr_payroll +#: view:hr.allounce.deduction.categoty:0 +#: model:ir.actions.act_window,name:hr_payroll.hr_allounce_deduction_tree +#: model:ir.ui.menu,name:hr_payroll.menu_hr_allounce_deduction_tree +msgid "Salary Heads" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.employees.detail:0 +#: view:hr.payroll.year.salary:0 +msgid "Print Report" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,line_ids:0 +#: view:hr.payroll.structure:0 +#: view:hr.payslip:0 +#: view:hr.payslip.line:0 +#: field:hr.payslip.line,line_ids:0 +msgid "Calculations" +msgstr "" + +#. module: hr_payroll +#: help:company.contribution,contribute_per:0 +msgid "" +"Define Company contribution ratio 1.00=100% contribution, If Employee " +"Contribute 5% then company will and here 0.50 defined then company will " +"contribute 50% on employee 5% contribution" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Other Informations" +msgstr "" + +#. module: hr_payroll +#: view:hr.contibution.register:0 +msgid "Month" +msgstr "" + +#. module: hr_payroll +#: view:hr.passport:0 +msgid "Issue" +msgstr "" + +#. module: hr_payroll +#: view:hr.allounce.deduction.categoty:0 +msgid "Dynamic Computation" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Basic Salary without Leave:" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: view:hr.allounce.deduction.categoty:0 +#: view:hr.payroll.structure:0 +#: view:hr.payslip:0 +#: view:hr.payslip.line:0 +#: field:hr.payslip.line,function_id:0 +msgid "Function" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "States" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "Dear Sir/Madam," +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_allounce_deduction_categoty +msgid "Allowance Deduction Heads" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +msgid "Gross Sal." +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: field:company.contribution,note:0 +#: view:hr.allounce.deduction.categoty:0 +#: field:hr.allounce.deduction.categoty,note:0 +#: view:hr.contibution.register:0 +#: field:hr.contibution.register,note:0 +#: view:hr.passport:0 +#: field:hr.passport,note:0 +#: field:hr.payroll.advice,note:0 +#: field:hr.payroll.register,note:0 +#: view:hr.payroll.structure:0 +#: field:hr.payroll.structure,note:0 +#: view:hr.payslip:0 +#: field:hr.payslip,note:0 +#: view:hr.payslip.line:0 +#: field:hr.payslip.line,note:0 +msgid "Description" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.employees.detail,date_from:0 +#: field:hr.payroll.year.salary,date_from:0 +#: report:salary.structure:0 +msgid "Start Date" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Deduction -" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid ")" +msgstr "" + +#. module: hr_payroll +#: view:hr.contibution.register:0 +msgid "Contribution Registers" +msgstr "" + +#. module: hr_payroll +#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_reporting +#: model:ir.ui.menu,name:hr_payroll.menu_hr_root_payroll +#: model:ir.ui.menu,name:hr_payroll.payroll_configure +msgid "Payroll" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_contract_wage_type +msgid "Wage Type" +msgstr "" + +#. module: hr_payroll +#: report:hr.payroll.register.sheet:0 +msgid "Net Sal." +msgstr "" + +#. module: hr_payroll +#: sql_constraint:hr.passport:0 +msgid "The Passport No must be unique !" +msgstr "" + +#. module: hr_payroll +#: field:hr.allounce.deduction.categoty,name:0 +msgid "Category Name" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_payroll_year_salary +msgid "hr.payroll.year.salary" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +#: field:hr.passport,address_id:0 +#: report:payslip.pdf:0 +#: report:salary.structure:0 +msgid "Address" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line.line,slipline_id:0 +msgid "Slip Line" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Number of Leaves" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +#: field:hr.payroll.advice,bank_id:0 +#: field:hr.payroll.register,bank_id:0 +#: report:salary.structure:0 +msgid "Bank" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.advice:0 +msgid "Cancel Sheet" +msgstr "" + +#. module: hr_payroll +#: selection:hr.allounce.deduction.categoty,type:0 +#: selection:hr.payslip.line,type:0 +msgid "Advance" +msgstr "" + +#. module: hr_payroll +#: report:salary.structure:0 +msgid "Special Allowances and Deductions For Employee:" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution,name:0 +#: field:company.contribution.line,name:0 +#: field:hr.contibution.register,name:0 +#: field:hr.contibution.register.line,name:0 +#: field:hr.payroll.advice,name:0 +#: field:hr.payroll.register,name:0 +#: field:hr.payroll.structure,name:0 +#: field:hr.payslip,name:0 +#: field:hr.payslip.line,name:0 +#: field:hr.payslip.line.line,name:0 +#: report:payslip.pdf:0 +#: report:salary.structure:0 +#: report:year.salary:0 +msgid "Name" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Leaved Deduction" +msgstr "" + +#. module: hr_payroll +#: view:hr.passport:0 +msgid "Country" +msgstr "" + +#. module: hr_payroll +#: view:hr.passport:0 +#: view:hr.payroll.employees.detail:0 +#: field:hr.payroll.employees.detail,employee_ids:0 +#: view:hr.payroll.year.salary:0 +#: field:hr.payroll.year.salary,employee_ids:0 +#: view:hr.payslip:0 +msgid "Employees" +msgstr "" + +#. module: hr_payroll +#: report:payroll.advice:0 +msgid "Bank Account" +msgstr "" + +#. module: hr_payroll +#: help:company.contribution,register_id:0 +msgid "Contribution register based on company" +msgstr "" + +#. module: hr_payroll +#: help:hr.allounce.deduction.categoty,sequence:0 +msgid "Use to arrange calculation sequence" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,total_pay:0 +msgid "Total Payment" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Leave Deductions Line:" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payroll.register,state:0 +#: selection:hr.payslip,state:0 +msgid "Wating for Account Verification" +msgstr "" + +#. module: hr_payroll +#: field:hr.contibution.register.line,comp_deduction:0 +msgid "Company Deduction" +msgstr "" + +#. module: hr_payroll +#: view:hr.holidays.status:0 +msgid "Payroll Configurtion" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:469 +#, python-format +msgid "Please define bank account for the %s employee" +msgstr "" + +#. module: hr_payroll +#: field:hr.passport,date_issue:0 +msgid "Passport Issue Date" +msgstr "" + +#. module: hr_payroll +#: view:hr.allounce.deduction.categoty:0 +#: selection:hr.allounce.deduction.categoty,type:0 +#: field:hr.payroll.register,allounce:0 +#: field:hr.payslip,allounce:0 +#: selection:hr.payslip.line,type:0 +msgid "Allowance" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,holiday_days:0 +msgid "No of Leaves" +msgstr "" + +#. module: hr_payroll +#: field:hr.employee,otherid:0 +msgid "Other Id" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Bank Details" +msgstr "" + +#. module: hr_payroll +#: report:payslip.pdf:0 +msgid "Slip ID" +msgstr "" + +#. module: hr_payroll +#: field:company.contribution.line,sequence:0 +#: field:hr.allounce.deduction.categoty,sequence:0 +#: field:hr.payslip.line,sequence:0 +#: field:hr.payslip.line.line,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payslip_form +#: model:ir.ui.menu,name:hr_payroll.menu_department_tree +msgid "Employee Payslip" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Content" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.employees.detail:0 +#: view:hr.payroll.year.salary:0 +msgid "Year Salary" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.register:0 +msgid "Allowance / Deduction" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.report.xml,name:hr_payroll.payroll_advice +msgid "Bank Payment Advice" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Search Payslips" +msgstr "" + +#. module: hr_payroll +#: report:employees.salary:0 +#: field:hr.contibution.register.line,total:0 +#: report:year.salary:0 +msgid "Total" +msgstr "" + +#. module: hr_payroll +#: view:company.contribution:0 +#: view:hr.allounce.deduction.categoty:0 +#: field:hr.allounce.deduction.categoty,contribute_ids:0 +msgid "Contributions" +msgstr "" diff --git a/addons/hr_payroll/wizard/hr_payroll_contribution_register_report.xml b/addons/hr_payroll/wizard/hr_payroll_contribution_register_report.xml index cb787cf536e..e48a8f6470c 100644 --- a/addons/hr_payroll/wizard/hr_payroll_contribution_register_report.xml +++ b/addons/hr_payroll/wizard/hr_payroll_contribution_register_report.xml @@ -33,7 +33,6 @@ <record model="ir.values" id="payslip_lines_contribution_register_value"> <field name="model_id" ref="model_hr_contribution_register" /> - <field name="object" eval="1" /> <field name="name">PaySlip Lines</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_payslip_lines_contribution_register'))" /> @@ -42,4 +41,4 @@ </record> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/hr_payroll_account/hr_payroll_account.py b/addons/hr_payroll_account/hr_payroll_account.py index 684289c9737..3463713d37d 100644 --- a/addons/hr_payroll_account/hr_payroll_account.py +++ b/addons/hr_payroll_account/hr_payroll_account.py @@ -39,7 +39,13 @@ class hr_payslip(osv.osv): 'journal_id': fields.many2one('account.journal', 'Expense Journal',states={'draft': [('readonly', False)]}, readonly=True, required=True), 'move_id': fields.many2one('account.move', 'Accounting Entry', readonly=True), } - + + def copy(self, cr, uid, id, default=None, context=None): + if default is None: + default = {} + default['move_id'] = False + return super(hr_payslip, self).copy(cr, uid, id, default, context=context) + def create(self, cr, uid, vals, context=None): if context is None: context = {} @@ -95,9 +101,9 @@ class hr_payslip(osv.osv): partner_id = False debit_account_id = line.salary_rule_id.account_debit.id credit_account_id = line.salary_rule_id.account_credit.id - + if debit_account_id: - + debit_line = (0, 0, { 'name': line.name, 'date': timenow, @@ -113,9 +119,9 @@ class hr_payslip(osv.osv): }) line_ids.append(debit_line) debit_sum += debit_line[2]['debit'] - debit_line[2]['credit'] - + if credit_account_id: - + credit_line = (0, 0, { 'name': line.name, 'date': timenow, @@ -147,7 +153,7 @@ class hr_payslip(osv.osv): 'credit': debit_sum - credit_sum, }) line_ids.append(adjust_credit) - + elif debit_sum < credit_sum: acc_id = slip.journal_id.default_debit_account_id.id if not acc_id: diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py index b728609c53d..4797ef14044 100644 --- a/addons/hr_recruitment/__openerp__.py +++ b/addons/hr_recruitment/__openerp__.py @@ -54,7 +54,7 @@ system to store and search in your CV base. 'hr_recruitment_data.xml' ], 'demo_xml': [ - 'hr_recruitment_demo.xml', + 'hr_recruitment_demo.yml', ], 'test':['test/test_hr_recruitment.yml'], 'installable': True, diff --git a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml index 822a7da3249..8af4b0f8553 100644 --- a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml +++ b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml @@ -33,8 +33,8 @@ <field name="inherit_id" ref="hr.board_hr_manager_form"/> <field name="type">form</field> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child2" position="inside"> - <action colspan="4" height="220" name="%(action_applicants_status)d" string="Applicants Status"/> + <xpath expr="/form/board/column" position="inside"> + <action name="%(action_applicants_status)d" string="Applicants Status"/> </xpath> </field> </record> diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index 931600fef9f..8acb95e7088 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -197,11 +197,19 @@ class hr_applicant(crm.crm_case, osv.osv): 'color': 0, } - def _read_group_stage_ids(self, cr, uid, ids, domain, context=None): - context = context or {} + def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): + access_rights_uid = access_rights_uid or uid stage_obj = self.pool.get('hr.recruitment.stage') - stage_ids = stage_obj.search(cr, uid, ['|',('id','in',ids), ('department_id','=',False)], context=context) - return stage_obj.name_get(cr, uid, stage_ids, context=context) + order = stage_obj._order + if read_group_order == 'stage_id desc': + # lame hack to allow reverting search, should just work in the trivial case + order = "%s desc" % order + stage_ids = stage_obj._search(cr, uid, ['|',('id','in',ids),('department_id','=',False)], order=order, + access_rights_uid=access_rights_uid, context=context) + result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) + return result _group_by_full = { 'stage_id': _read_group_stage_ids @@ -440,7 +448,18 @@ class hr_applicant(crm.crm_case, osv.osv): }) else: raise osv.except_osv(_('Warning!'),_('You must define Applied Job for Applicant !')) - return self.case_close(cr, uid, ids, *args) + self.case_close(cr, uid, ids, *args) + + mod_obj = self.pool.get('ir.model.data') + act = mod_obj.get_object_reference(cr, uid, 'hr', 'open_view_employee_list') + + act_obj = self.pool.get('ir.actions.act_window') + act_win = act_obj.read(cr, uid, act[1], []) + + act_win['domain'] = [('id','=',emp_id)] + act_win['view_mode'] = 'form,tree' + act_win['res_id'] = emp_id + return act_win def case_reset(self, cr, uid, ids, *args): """Resets case as draft diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml index e1172f0b075..d6cb5952d38 100644 --- a/addons/hr_recruitment/hr_recruitment_data.xml +++ b/addons/hr_recruitment/hr_recruitment_data.xml @@ -19,19 +19,6 @@ </record> - - <!-- CASE CATEGORY(categ_id) --> - - <record model="crm.case.categ" id="categ_job1"> - <field name="name">Salesman</field> - <field name="object_id" search="[('model','=','hr.applicant')]" model="ir.model"/> - </record> - - <record model="crm.case.categ" id="categ_job2"> - <field name="name">Junior Developer</field> - <field name="object_id" search="[('model','=','hr.applicant')]" model="ir.model"/> - </record> - <!-- Resource(type_id) --> <record model="hr.recruitment.degree" id="degree_graduate"> diff --git a/addons/hr_recruitment/hr_recruitment_demo.xml b/addons/hr_recruitment/hr_recruitment_demo.xml deleted file mode 100644 index 0fc2c94f034..00000000000 --- a/addons/hr_recruitment/hr_recruitment_demo.xml +++ /dev/null @@ -1,178 +0,0 @@ -<?xml version="1.0"?> -<openerp> -<data noupdate="1"> - <!-- - ((((((((((( Demo Cases ))))))))))) - --> - - <!--For Jobs Requests--> - <record id="hr_case_salesman0" model="hr.applicant"> - <field eval="time.strftime('%Y-%m-01 10:35:50')" name="date"/> - <field eval="time.strftime('%Y-%m-03')" name="date_deadline"/> - <field name="type_id" ref="degree_graduate"/> - <field name="partner_id" ref="base.res_partner_asus"/> - <field eval="'2'" name="priority"/> - <field name="user_id" ref="base.user_root"/> - <field eval="'Enrique Jones'" name="partner_name"/> - <field eval="'draft'" name="state"/> - <field eval="'enrique@rediff.com'" name="partner_name2"/> - <field eval="'9963214587'" name="partner_mobile"/> - <field eval="1" name="active"/> - <field eval="9.0" name="duration"/> - <field name="categ_id" ref="categ_job1"/> - <field name="stage_id" ref="stage_job1"/> - <field eval="'Salesman'" name="name"/> - <field eval="'1236547890'" name="partner_phone"/> - </record> - <record id="hr_case_traineemca0" model="hr.applicant"> - <field name="partner_address_id" ref="base.res_partner_address_14"/> - <field eval="time.strftime('%Y-%m-10 18:15:00')" name="date"/> - <field name="type_id" ref="degree_bac5"/> - <field name="partner_id" ref="base.res_partner_15"/> - <field eval="'3'" name="priority"/> - <field name="user_id" ref="base.user_root"/> - <field eval="'Marie Justine'" name="partner_name"/> - <field eval="'open'" name="state"/> - <field eval="5.15" name="duration"/> - <field eval="'marie@gmail.com'" name="partner_name2"/> - <field eval="'9988774455'" name="partner_mobile"/> - <field eval="1" name="active"/> - <field name="categ_id" ref="categ_job2"/> - <field name="stage_id" ref="stage_job4"/> - <field eval="'Trainee - MCA'" name="name"/> - <field eval="time.strftime('%Y-%m-15')" name="date_deadline"/> - <field eval="'6633225'" name="partner_phone"/> - </record> - <record id="hr_case_fresher0" model="hr.applicant"> - <field eval="time.strftime('%Y-%m-15 16:10:00')" name="date"/> - <field eval="time.strftime('%Y-%m-18')" name="date_deadline"/> - <field name="type_id" ref="degree_licenced"/> - <field name="partner_id" ref="base.res_partner_5"/> - <field eval="'1'" name="priority"/> - <field name="user_id" ref="base.user_root"/> - <field eval="1.45" name="duration"/> - <field eval="'Jose'" name="partner_name"/> - <field eval="'pending'" name="state"/> - <field eval="'jose@timesgroup.com'" name="partner_name2"/> - <field eval="1" name="active"/> - <field name="categ_id" ref="categ_job1"/> - <field name="stage_id" ref="stage_job3"/> - <field eval="'Fresher'" name="name"/> - <field eval="'999666735'" name="partner_phone"/> - </record> - <record id="hr_case_yrsexperienceinphp0" model="hr.applicant"> - <field eval="time.strftime('%Y-%m-25 16:25:52')" name="date"/> - <field eval="time.strftime('%Y-%m-28')" name="date_deadline"/> - <field name="categ_id" ref="categ_job2"/> - <field name="type_id" ref="degree_bac5"/> - <field name="partner_id" ref="base.res_partner_10"/> - <field eval="'3'" name="priority"/> - <field name="user_id" ref="base.user_root"/> - <field eval="1.35" name="duration"/> - <field eval="'Sandra Elvis'" name="partner_name"/> - <field eval="'sandra@example.com'" name="partner_name2"/> - <field eval="'cancel'" name="state"/> - <field eval="1" name="active"/> - <field name="stage_id" ref="stage_job6"/> - <field eval="'More than 5 yrs Experience in PHP'" name="name"/> - </record> - <record id="hr_case_marketingjob0" model="hr.applicant"> - <field eval="time.strftime('%Y-%m-26 17:15:32')" name="date"/> - <field eval="time.strftime('%Y-%m-28')" name="date_deadline"/> - <field name="type_id" ref="degree_licenced"/> - <field name="partner_id" ref="base.res_partner_11"/> - <field eval="'4'" name="priority"/> - <field name="user_id" ref="base.user_demo"/> - <field eval="2.0" name="duration"/> - <field eval="'John Bruno'" name="partner_name"/> - <field eval="'done'" name="state"/> - <field eval="'john@market.edu'" name="partner_name2"/> - <field eval="'9966332214'" name="partner_mobile"/> - <field eval="1" name="active"/> - <field name="categ_id" ref="categ_job1"/> - <field name="stage_id" ref="stage_job5"/> - <field eval="'Marketing Job'" name="name"/> - <field eval="'33968745'" name="partner_phone"/> - </record> - <record id="hr_case_financejob0" model="hr.applicant"> - <field eval="time.strftime('%Y-%m-26 17:39:42')" name="date"/> - <field eval="time.strftime('%Y-%m-28')" name="date_deadline"/> - <field name="type_id" ref="degree_licenced"/> - <field name="partner_id" ref="base.res_partner_11"/> - <field eval="'4'" name="priority"/> - <field name="user_id" ref="base.user_root"/> - <field eval="'David Armstrong'" name="partner_name"/> - <field eval="'done'" name="state"/> - <field eval="'david@market.edu'" name="partner_name2"/> - <field eval="'9966332214'" name="partner_mobile"/> - <field eval="1" name="active"/> - <field eval="2.20" name="duration"/> - <field name="categ_id" ref="categ_job1"/> - <field name="stage_id" ref="stage_job5"/> - <field eval="'Finance Job'" name="name"/> - <field eval="'33968745'" name="partner_phone"/> - </record> - <record id="hr_case_traineemca1" model="hr.applicant"> - <field name="partner_address_id" ref="base.res_partner_address_14"/> - <field eval="time.strftime('%Y-%m-12 17:49:19')" name="date"/> - <field name="type_id" ref="degree_bac5"/> - <field name="partner_id" ref="base.res_partner_15"/> - <field eval="'3'" name="priority"/> - <field name="user_id" ref="base.user_root"/> - <field eval="'Tina Augustie'" name="partner_name"/> - <field eval="'open'" name="state"/> - <field eval="1.15" name="duration"/> - <field eval="'tina_augustie@example.com'" name="partner_name2"/> - <field eval="'9898745745'" name="partner_mobile"/> - <field eval="1" name="active"/> - <field name="categ_id" ref="categ_job2"/> - <field name="stage_id" ref="stage_job4"/> - <field eval="'Trainee - MCA'" name="name"/> - <field eval="time.strftime('%Y-%m-15')" name="date_deadline"/> - <field eval="'6630125'" name="partner_phone"/> - </record> - - <record id="hr_case_programmer" model="hr.applicant"> - <field name="partner_address_id" ref="base.res_partner_address_14"/> - <field eval="time.strftime('%Y-%m-12 17:49:19')" name="date"/> - <field name="type_id" ref="degree_bac5"/> - <field name="partner_id" ref="base.res_partner_15"/> - <field eval="'3'" name="priority"/> - <field name="user_id" ref="base.user_root"/> - <field eval="'Shane Williams'" name="partner_name"/> - <field eval="'open'" name="state"/> - <field eval="1.15" name="duration"/> - <field eval="'tina_augustie@example.com'" name="partner_name2"/> - <field eval="'9812398524'" name="partner_mobile"/> - <field eval="1" name="active"/> - <field name="categ_id" ref="categ_job2"/> - <field name="stage_id" ref="stage_job4"/> - <field eval="'Programmer'" name="name"/> - <field eval="time.strftime('%Y-%m-15')" name="date_deadline"/> - <field eval="'6630125'" name="partner_phone"/> - <field name="job_id" ref="hr.job_jr_appli"/> - <field name="department_id" ref="hr.dep_it"/> - <field eval="11000.0" name="salary_expected"/> - </record> - - <record id="hr_case_advertisement" model="hr.applicant"> - <field eval="time.strftime('%Y-%m-26 17:39:42')" name="date"/> - <field eval="time.strftime('%Y-%m-28')" name="date_deadline"/> - <field name="type_id" ref="degree_licenced"/> - <field name="partner_id" ref="base.res_partner_11"/> - <field eval="'4'" name="priority"/> - <field name="user_id" ref="base.user_root"/> - <field eval="'David Armstrong'" name="partner_name"/> - <field eval="'done'" name="state"/> - <field eval="'david@market.edu'" name="partner_name2"/> - <field eval="'9925741564'" name="partner_mobile"/> - <field eval="1" name="active"/> - <field eval="2.20" name="duration"/> - <field name="categ_id" ref="categ_job1"/> - <field name="stage_id" ref="stage_job5"/> - <field eval="'Advertisement'" name="name"/> - <field eval="'25968745'" name="partner_phone"/> - <field eval="11000.0" name="salary_expected"/> - </record> -</data> -</openerp> diff --git a/addons/hr_recruitment/hr_recruitment_demo.yml b/addons/hr_recruitment/hr_recruitment_demo.yml new file mode 100644 index 00000000000..bcf2248fc40 --- /dev/null +++ b/addons/hr_recruitment/hr_recruitment_demo.yml @@ -0,0 +1,109 @@ +- + !record {model: hr.applicant, id: hr_case_salesman0}: + date: !eval time.strftime('%Y-%m-01 10:35:50') + type_id: degree_graduate + priority: '2' + partner_name: 'Enrique Jones' + partner_mobile: '9963214587' + job_id: hr.job_jr_appli + stage_id: stage_job1 + name: 'Salesman' + partner_phone: '1236547890' + +- + !record {model: hr.applicant, id: hr_case_traineemca0}: + partner_address_id: base.res_partner_address_14 + date: !eval time.strftime('%Y-%m-10 18:15:00') + type_id: degree_bac5 + priority: '3' + user_id: base.user_demo + partner_name: 'Marie Justine' + state: 'open' + partner_mobile: '9988774455' + job_id: hr.job_jr_appli + stage_id: stage_job4 + name: 'Trainee - MCA' + partner_phone: '6633225' +- + !record {model: hr.applicant, id: hr_case_fresher0}: + date: !eval time.strftime('%Y-%m-15 16:10:00') + type_id: degree_licenced + priority: '1' + user_id: base.user_root + partner_name: 'Jose' + job_id: hr.job_jr_appli + stage_id: stage_job3 + name: 'Fresher' + partner_phone: '999666735' +- + !record {model: hr.applicant, id: hr_case_yrsexperienceinphp0}: + date: !eval time.strftime('%Y-%m-25 16:25:52') + job_id: hr.job_jr_appli + type_id: degree_bac5 + user_id: base.user_root + partner_name: 'Sandra Elvis' + state: 'cancel' + stage_id: stage_job6 + name: 'More than 5 yrs Experience in PHP' +- + !record {model: hr.applicant, id: hr_case_marketingjob0}: + date: !eval time.strftime('%Y-%m-26 17:15:32') + type_id: degree_licenced + user_id: base.user_demo + partner_name: 'John Bruno' + state: 'done' + job_id: hr.job_jr_appli + stage_id: stage_job5 + name: 'Marketing Job' +- + !record {model: hr.applicant, id: hr_case_financejob0}: + date: !eval time.strftime('%Y-%m-26 17:39:42') + type_id: degree_licenced + priority: '4' + partner_name: 'David Armstrong' + state: 'pending' + state: open + partner_mobile: '9966332214' + job_id: hr.job_jr_appli + stage_id: stage_job2 + name: 'Finance Job' + partner_phone: '33968745' +- + !record {model: hr.applicant, id: hr_case_traineemca1}: + partner_address_id: base.res_partner_address_14 + date: !eval time.strftime('%Y-%m-12 17:49:19') + type_id: degree_bac5 + partner_name: 'Tina Augustie' + state: 'open' + partner_mobile: '9898745745' + job_id: hr.job_jr_appli + stage_id: stage_job4 + name: 'Trainee - MCA' + partner_phone: '6630125' + +- + !record {model: hr.applicant, id: hr_case_programmer}: + partner_address_id: base.res_partner_address_14 + date: !eval time.strftime('%Y-%m-12 17:49:19') + type_id: degree_bac5 + partner_name: 'Shane Williams' + state: 'open' + partner_mobile: '9812398524' + stage_id: stage_job4 + name: 'Programmer' + partner_phone: '6630125' + job_id: hr.job_jr_appli + department_id: hr.dep_it + salary_expected: 11000.0 + +- + !record {model: hr.applicant, id: hr_case_advertisement}: + date: !eval time.strftime('%Y-%m-26 17:39:42') + type_id: degree_licenced + partner_id: base.res_partner_11 + partner_name: 'David Armstrong' + job_id: hr.job_jr_appli + stage_id: stage_job2 + name: 'Advertisement' + salary_expected: 11000.0 + diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 4ccfcbe48a2..202a6c2eecb 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -17,7 +17,7 @@ <field name="view_type">form</field> <field name="view_id" ref="crm.crm_case_categ_tree-view"/> <field name="domain">[('object_id.model', '=', 'hr.applicant')]</field> - <field name="context">{'object_id':'hr.applicant'}</field> + <field name="context" eval="{'object_id': ref('model_hr_applicant')}"/> </record> # ------------------------------------------------------ # Stage @@ -338,8 +338,8 @@ <a t-if="record.survey.raw_value" name="action_print_survey" type="object" string="Print Interview" icon="gtk-print" /> </div> <div class="oe_kanban_right"> - <a name="case_open" string="Mark Won" states="pending,draft" type="object" icon="lead-stage-won" /> - <a name="case_pending" string="Mark Lost" states="draft,open" type="object" icon="lead-stage-lost" /> + <a name="case_open" string="Open" states="pending,draft" type="object" icon="kanban-apply" /> + <a name="case_pending" string="Pending" states="draft,open" type="object" icon="kanban-pause" /> </div> <br class="oe_kanban_clear"/> </div> diff --git a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py index d11a1f16775..291c16a7644 100644 --- a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py +++ b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py @@ -48,8 +48,7 @@ class hired_employee(osv.osv_memory): """ if context is None: context = {} - self.pool.get('hr.applicant').case_close_with_emp(cr, uid,context.get('active_ids', [])) - return {} + return self.pool.get('hr.applicant').case_close_with_emp(cr, uid,context.get('active_ids', [])) hired_employee() diff --git a/addons/hr_timesheet/hr_timesheet_data.xml b/addons/hr_timesheet/hr_timesheet_data.xml index 5dc95cf9ddc..e9aa56d4646 100644 --- a/addons/hr_timesheet/hr_timesheet_data.xml +++ b/addons/hr_timesheet/hr_timesheet_data.xml @@ -2,9 +2,6 @@ <openerp> <data> - <record id="hr.employee" model="hr.employee"> - <field name="product_id" ref="product.product_consultant"/> - </record> <record id="analytic_journal" model="account.analytic.journal"> <field name="code">TS</field> @@ -12,5 +9,10 @@ <field name="type">general</field> </record> + <record id="hr.employee" model="hr.employee"> + <field name="product_id" ref="product.product_consultant"/> + <field name="journal_id" ref="analytic_journal"/> + </record> + </data> </openerp> diff --git a/addons/hr_timesheet/report/__init__.py b/addons/hr_timesheet/report/__init__.py index 98e34ed92d4..8304c90421d 100644 --- a/addons/hr_timesheet/report/__init__.py +++ b/addons/hr_timesheet/report/__init__.py @@ -22,3 +22,5 @@ import user_timesheet import users_timesheet + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet/report/user_timesheet.py b/addons/hr_timesheet/report/user_timesheet.py index 533989210d6..7699f94f41b 100644 --- a/addons/hr_timesheet/report/user_timesheet.py +++ b/addons/hr_timesheet/report/user_timesheet.py @@ -118,3 +118,5 @@ class report_custom(report_rml): report_custom('report.hr.analytical.timesheet', 'hr.employee', '', 'addons/hr_timesheet/report/user_timesheet.xsl') + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_invoice/board_hr_timesheet_invoice.xml b/addons/hr_timesheet_invoice/board_hr_timesheet_invoice.xml index 96d91ef3e5c..7327ca66f63 100644 --- a/addons/hr_timesheet_invoice/board_hr_timesheet_invoice.xml +++ b/addons/hr_timesheet_invoice/board_hr_timesheet_invoice.xml @@ -17,9 +17,9 @@ <field name="type">form</field> <field name="inherit_id" ref="account.board_account_form"/> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1/action[@string='Draft Customer Invoices']" position="before"> - <action colspan="4" height="160" name="%(hr_timesheet_invoice.action_analytic_account_tree)d" string="Analytic accounts to close" width="510"/> - <action colspan="4" height="160" name="%(act_my_account)d" string="Accounts to invoice" width="510"/> + <xpath expr="/form/board/column/action[@string='Draft Customer Invoices']" position="before"> + <action name="%(hr_timesheet_invoice.action_analytic_account_tree)d" string="Analytic accounts to close"/> + <action name="%(act_my_account)d" string="Accounts to invoice"/> </xpath> </field> </record> --> @@ -31,8 +31,8 @@ <field name="type">form</field> <field name="inherit_id" ref="account.board_account_form"/> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child2/action[@string='Aged income']" position="after"> - <action colspan="4" height="220" name="%(action_account_analytic_line_to_invoice)d" string="Costs to invoice"/> + <xpath expr="/form/board/column/action[@string='Aged income']" position="after"> + <action name="%(action_account_analytic_line_to_invoice)d" string="Costs to invoice"/> </xpath> </field> </record> --> @@ -67,8 +67,8 @@ <field name="type">form</field> <field name="inherit_id" ref="hr.board_hr_manager_form"/> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1" position="inside"> - <action colspan="4" height="220" name="%(action_timesheet_uninvoiced_line)d" string="Uninvoice Lines With Billing Rate" /> + <xpath expr="/form/board/column" position="inside"> + <action name="%(action_timesheet_uninvoiced_line)d" string="Uninvoice Lines With Billing Rate"/> </xpath> </field> </record> diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py index 87fb6064a04..19d08f7faf3 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py @@ -63,12 +63,12 @@ class account_analytic_account(osv.osv): _inherit = "account.analytic.account" _columns = { - 'pricelist_id': fields.many2one('product.pricelist', 'Sale Pricelist', + 'pricelist_id': fields.many2one('product.pricelist', 'Customer Pricelist', help="The product to invoice is defined on the employee form, the price will be deduced by this pricelist on the product."), 'amount_max': fields.float('Max. Invoice Price'), 'amount_invoiced': fields.function(_invoiced_calc, string='Invoiced Amount', help="Total invoiced"), - 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Reinvoice Costs', + 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Invoice on Timesheet & Costs', help="Fill this field if you plan to automatically generate invoices based " \ "on the costs in this analytic account: timesheets, expenses, ..." \ "You can configure an automatic invoice rate on analytic accounts."), @@ -76,7 +76,16 @@ class account_analytic_account(osv.osv): _defaults = { 'pricelist_id': lambda self, cr, uid, ctx: ctx.get('pricelist_id', False), } - + def on_change_partner_id(self, cr, uid, id, partner_id, context={}): + res = super(account_analytic_account, self).on_change_partner_id(cr, uid, id, partner_id, context) + if (not res.get('value', False)) or not partner_id: + return res + part = self.pool.get('res.partner').browse(cr, uid, partner_id) + pricelist = part.property_product_pricelist and part.property_product_pricelist.id or False + if pricelist: + res['value']['pricelist_id'] = pricelist + return res + def set_close(self, cr, uid, ids, context=None): return self.write(cr, uid, ids, {'state':'close'}, context=context) diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml index 2ce309e0df4..e0652355063 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml @@ -7,23 +7,27 @@ <field name="type">form</field> <field name="inherit_id" ref="account.view_account_analytic_account_form"/> <field name="arch" type="xml"> - <field name="user_id" position="after"> - <group colspan="4" col="4"> - <separator colspan="4" string="Invoicing Data"/> - <field name="pricelist_id" domain="[('type','=','sale')]" widget="selection"/> - <field name="to_invoice" widget="selection" /> + <group name="contract" position="after"> + <group colspan="2" col="2" name="invoice_data"> + <separator colspan="2" string="Invoicing Data"/> + <field name="to_invoice" widget="selection"/> + <field name="pricelist_id" domain="[('type','=','sale')]" attrs="{'required':[('to_invoice','!=',False)]}"/> <field name="amount_max"/> + </group> + <group colspan="2" col="2" name="invoice_stats"> + <separator colspan="4" string="Invoicing Statistics"/> <field name="amount_invoiced"/> - <separator colspan="4"/> - <group col="9" colspan="8"> - <field name="state" readonly="1"/> - <button name="set_cancel" string="Cancel" type="object" states="open,pending" icon="gtk-cancel"/> - <button name="set_open" string="Reactivate Account" type="object" states="pending,cancelled,close,draft" icon="gtk-ok"/> - <button name="set_pending" string="Pending" type="object" states="open" icon="gtk-media-pause"/> - <button name="set_close" string="Close" type="object" states="open,pending" icon="terp-dialog-close"/> - </group> </group> - </field> + <separator colspan="4"/> + <group col="9" colspan="8"> + <field name="state" readonly="1" widget="statusbar" + statusbar_visible="open,pending,close" statusbar_colors='{"pending":"red", "template":"blue"}'/> + <button name="set_cancel" string="Cancel" type="object" states="open,pending" icon="gtk-cancel"/> + <button name="set_open" string="Reactivate Account" type="object" states="pending,cancelled,close,draft" icon="gtk-ok"/> + <button name="set_pending" string="Pending" type="object" states="open" icon="gtk-media-pause"/> + <button name="set_close" string="Close" type="object" states="open,pending" icon="terp-dialog-close"/> + </group> + </group> </field> </record> @@ -123,7 +127,7 @@ <field name="view_mode">tree,form</field> <field name="domain">[]</field> <field name="context">{'search_default_to_invoice': 1}</field> - <field name="search_view_id" ref="account.view_account_analytic_line_filter"/> + <field name="search_view_id" ref="account.view_account_analytic_line_filter"/> <field name="help">This list shows you every task you can invoice to the customer. Select the lines and click the Action button to generate the invoices automatically.</field> </record> <menuitem diff --git a/addons/hr_timesheet_invoice/report/cost_ledger.py b/addons/hr_timesheet_invoice/report/cost_ledger.py index 614714bb396..65aaee68a22 100644 --- a/addons/hr_timesheet_invoice/report/cost_ledger.py +++ b/addons/hr_timesheet_invoice/report/cost_ledger.py @@ -87,7 +87,7 @@ class account_analytic_cost_ledger(report_sxw.rml_parse): revenue = 0.0 if lines[id].amount < 0 and lines[id].product_id and lines[id].product_uom_id and lines[id].account_id.pricelist_id: ctx = {'uom': lines[id].product_uom_id.id} - price = price_obj.price_get(self.cr, self.uid, [lines[id].account_id.pricelist_id.id], lines[id].product_id.id, lines[id].unit_amount, ctx)[lines[id].account_id.pricelist_id.id] + price = price_obj.price_get(self.cr, self.uid, [lines[id].account_id.pricelist_id.id], lines[id].product_id.id, lines[id].unit_amount, False, context=ctx)[lines[id].account_id.pricelist_id.id] revenue = round(price * lines[id].unit_amount, 2) r['revenue'] = revenue self.sum_revenue[account_id] += revenue diff --git a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report.py b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report.py index eb1437534d4..6b6dd9f6e52 100644 --- a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report.py +++ b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report.py @@ -217,3 +217,5 @@ class report_timesheet_invoice(osv.osv): """) report_timesheet_invoice() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml index e4226feb2f3..33de63ba347 100644 --- a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml +++ b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml @@ -408,11 +408,11 @@ src_model="res.users"/> <act_window - context="{'search_default_account_id': [active_id]}" - id="act_account_analytic_account_2_report_timehsheet_account" - name="Timesheets" - res_model="report_timesheet.account" - src_model="account.analytic.account"/> + context="{'search_default_account_id': [active_id]}" + id="act_account_analytic_account_2_report_timehsheet_account" + name="Timesheets" + res_model="hr.analytic.timesheet" + src_model="account.analytic.account"/> <act_window context="{'search_default_manager_id': [active_id]}" diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml index ed50ccc5d4d..334a80fde9c 100644 --- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml +++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml @@ -3,11 +3,9 @@ - I create an account analytic line. - - !record {model: account.analytic.line, id: account_analytic_line_developyamlforhrmodule0}: + !record {model: account.analytic.line, id: account_analytic_line_developyamlforhrmodule0 }: account_id: account.analytic_sednacom amount: -1.0 - company_id: base.main_company - date: !eval time.strftime('%Y-%m-%d') general_account_id: account.a_expense journal_id: hr_timesheet.analytic_journal name: develop yaml for hr module @@ -15,8 +13,6 @@ product_uom_id: product.uom_hour to_invoice: hr_timesheet_invoice.timesheet_invoice_factor2 unit_amount: 5.00 - user_id: base.user_root - - Assign partner name and price list in analytic account. - @@ -77,7 +73,6 @@ I create final invoice for this analytic account. - !record {model: hr.timesheet.invoice.create.final, id: hr_timesheet_invoice_create_final_0}: - balance_product: product.product_consultant date: 1 name: 1 price: 1 @@ -89,10 +84,3 @@ import netsvc wkf_service = netsvc.LocalService("workflow") res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_sednacom")]}) - invoice_ids = eval(res['domain'])[0][2] - for inv in invoice_ids: - wkf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_open', cr) -- - I can also make some theoretical revenue reports. -- - I can also see timesheet profit using Timesheet profit report. diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py index 0e056b81e61..4b98f7ec23f 100644 --- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py +++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py @@ -39,145 +39,21 @@ class final_invoice_create(osv.osv_memory): 'time': fields.boolean('Time spent', help='Display time in the history of works'), 'name': fields.boolean('Name of entry', help='Display detail of work in the invoice line.'), 'price': fields.boolean('Cost', help='Display cost of the item you reinvoice'), - 'balance_product': fields.many2one('product.product', 'Balance product', help='The product that will be used to invoice the remaining amount'), - } + 'product': fields.many2one('product.product', 'Product', help='The product that will be used to invoice the remaining amount'), + } def do_create(self, cr, uid, ids, context=None): + data = self.read(cr, uid, ids, [], context=context)[0] + ids = self.pool.get('account.analytic.line').search(cr, uid, [('invoice_id','=',False),('to_invoice','<>', False), ('account_id', 'in', context['active_ids'])], context=context) + invs = self.pool.get('account.analytic.line').invoice_cost_create(cr, uid, ids, data, context=context) mod_obj = self.pool.get('ir.model.data') - analytic_account_obj = self.pool.get('account.analytic.account') - res_partner_obj = self.pool.get('res.partner') - account_payment_term_obj = self.pool.get('account.payment.term') - invoice_obj = self.pool.get('account.invoice') - product_obj = self.pool.get('product.product') - fiscal_pos_obj = self.pool.get('account.fiscal.position') - invoice_line_obj = self.pool.get('account.invoice.line') - invoices = [] - - if context is None: - context = {} - result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter') - res = mod_obj.read(cr, uid, result, ['res_id'], context=context) - - data = self.browse(cr, uid, ids, context=context)[0] - balance_product = data.balance_product.id - - account_ids = 'active_ids' in context and context['active_ids'] or [] - - for account in analytic_account_obj.browse(cr, uid, account_ids, context=context): - partner = account.partner_id - amount_total=0.0 - if (not partner) or not (account.pricelist_id): - raise osv.except_osv(_('Analytic account incomplete'), - _('Please fill in the partner and pricelist field ' - 'in the analytic account:\n%s') % (account.name,)) - - date_due = False - if partner.property_payment_term: - pterm_list= account_payment_term_obj.compute(cr, uid, - partner.property_payment_term.id, value=1, - date_ref=time.strftime('%Y-%m-%d')) - if pterm_list: - pterm_list = [line[0] for line in pterm_list] - pterm_list.sort() - date_due = pterm_list[-1] - - curr_invoice = { - 'name': time.strftime('%d/%m/%Y')+' - '+account.name, - 'partner_id': account.partner_id.id, - 'address_contact_id': res_partner_obj.address_get(cr, uid, [account.partner_id.id], adr_pref=['contact'])['contact'], - 'address_invoice_id': res_partner_obj.address_get(cr, uid, [account.partner_id.id], adr_pref=['invoice'])['invoice'], - 'payment_term': partner.property_payment_term.id or False, - 'account_id': partner.property_account_receivable.id, - 'currency_id': account.pricelist_id.currency_id.id, - 'date_due': date_due, - 'fiscal_position': account.partner_id.property_account_position.id - } - last_invoice = invoice_obj.create(cr, uid, curr_invoice, context=context) - invoices.append(last_invoice) - - context2 = context.copy() - context2['lang'] = partner.lang - - cr.execute("""SELECT - line.product_id, - sum(line.amount), - line.general_account_id, - line.product_uom_id, - move_line.ref - FROM - account_analytic_line as line - LEFT JOIN account_move_line as move_line on (line.move_id=move_line.id) - LEFT JOIN account_analytic_journal as journal on (line.journal_id=journal.id) - WHERE - line.account_id = %s AND - line.move_id IS NOT NULL AND - journal.type = 'sale' - GROUP BY - line.product_id, - line.general_account_id, - line.product_uom_id, - move_line.ref""", (account.id,)) - for product_id, amount, account_id, product_uom_id, ref in cr.fetchall(): - product = product_obj.browse(cr, uid, product_id, context2) - - if product: - taxes = product.taxes_id - else: - taxes = [] - - tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes) - if not account_id: - raise osv.except_osv(_("Configuration Error"), _("No income account defined for product '%s'") % product.name) - curr_line = { - 'price_unit': -amount, - 'quantity': 1.0, - 'discount': 0.0, - 'invoice_line_tax_id': [(6,0,tax)], - 'invoice_id': last_invoice, - 'name': ref or '' +(product and ' - '+product.name or ''), - 'product_id': product_id, - 'uos_id': product_uom_id, - 'account_id': account_id, - 'account_analytic_id': account.id - } - invoice_line_obj.create(cr, uid, curr_line, context=context) - - if not balance_product: - raise osv.except_osv(_('Balance product needed'), _('Please fill a Balance product in the wizard')) - product = product_obj.browse(cr, uid, balance_product, context=context2) - taxes = product.taxes_id - tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes) - account_id = product.product_tmpl_id.property_account_income.id or product.categ_id.property_account_income_categ.id - if not account_id: - raise osv.except_osv(_("Configuration Error"), _("No income account defined for product '%s'") % product.name) - curr_line = { - 'price_unit': account.amount_max - amount_total, - 'quantity': 1.0, - 'discount': 0.0, - 'invoice_line_tax_id': [(6,0,tax)], - 'invoice_id': last_invoice, - 'name': product.name, - 'product_id': product.id, - 'uos_id': product.uom_id.id, - 'account_id': account_id, - 'account_analytic_id': account.id - } - invoice_line_obj.create(cr, uid, curr_line, context=context) - if account.amount_max < amount_total: - invoice_obj.write(cr, uid, [last_invoice], {'type': 'out_refund',}, context=context) - cr.execute('update account_analytic_line set invoice_id=%s where invoice_id is null and account_id=%s', (last_invoice, account.id)) - - return { - 'domain': "[('id','in', ["+','.join(map(str,invoices))+"])]", - 'name': 'Invoices', - 'view_type': 'form', - 'view_mode': 'tree,form', - 'res_model': 'account.invoice', - 'view_id': False, - 'context': "{'type':'out_invoice'}", - 'type': 'ir.actions.act_window', - 'search_view_id': res['res_id'] - } + act_obj = self.pool.get('ir.actions.act_window') + mod_ids = mod_obj.search(cr, uid, [('name', '=', 'action_invoice_tree1')], context=context)[0] + res_id = mod_obj.read(cr, uid, mod_ids, ['res_id'], context=context)['res_id'] + act_win = act_obj.read(cr, uid, res_id, [], context=context) + act_win['domain'] = [('id','in',invs),('type','=','out_invoice')] + act_win['name'] = _('Invoices') + return act_win final_invoice_create() diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py index 502d35ff2d1..134bde8a872 100644 --- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py +++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py @@ -27,43 +27,18 @@ from tools.translate import _ ## Create an invoice based on selected timesheet lines # -# -# TODO: check unit of measure !!! -# -class hr_timesheet_invoice_create(osv.osv_memory): - - _name = 'hr.timesheet.invoice.create' - _description = 'Create invoice from timesheet' - _columns = { - 'date': fields.boolean('Date', help='The real date of each work will be displayed on the invoice'), - 'time': fields.boolean('Time spent', help='The time of each work done will be displayed on the invoice'), - 'name': fields.boolean('Description', help='The detail of each work done will be displayed on the invoice'), - 'price': fields.boolean('Cost', help='The cost of each work done will be displayed on the invoice. You probably don\'t want to check this'), - 'product': fields.many2one('product.product', 'Product', help='Complete this field only if you want to force to use a specific product. Keep empty to use the real product that comes from the cost.'), - } - - _defaults = { - 'date': lambda *args: 1, - 'name': lambda *args: 1 - } - - def view_init(self, cr, uid, fields, context=None): - """ - This function checks for precondition before wizard executes - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param fields: List of fields for default value - @param context: A standard dictionary for contextual values - """ - analytic_obj = self.pool.get('account.analytic.line') - data = context and context.get('active_ids', []) - for analytic in analytic_obj.browse(cr, uid, data, context=context): - if analytic.invoice_id: - raise osv.except_osv(_('Warning !'), _("Invoice is already linked to some of the analytic line(s)!")) - - def do_create(self, cr, uid, ids, context=None): - mod_obj = self.pool.get('ir.model.data') +class account_analytic_line(osv.osv): + _inherit = "account.analytic.line" + + # + # data = { + # 'date': boolean + # 'time': boolean + # 'name': boolean + # 'price': boolean + # 'product': many2one id + # } + def invoice_cost_create(self, cr, uid, ids, data={}, context=None): analytic_account_obj = self.pool.get('account.analytic.account') res_partner_obj = self.pool.get('res.partner') account_payment_term_obj = self.pool.get('account.payment.term') @@ -77,11 +52,9 @@ class hr_timesheet_invoice_create(osv.osv_memory): invoices = [] if context is None: context = {} - result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter') - data = self.read(cr, uid, ids, [], context=context)[0] account_ids = {} - for line in self.pool.get('account.analytic.line').browse(cr, uid, context['active_ids'], context=context): + for line in self.pool.get('account.analytic.line').browse(cr, uid, ids, context=context): account_ids[line.account_id.id] = True account_ids = account_ids.keys() #data['accounts'] @@ -127,7 +100,7 @@ class hr_timesheet_invoice_create(osv.osv_memory): "FROM account_analytic_line as line " \ "WHERE account_id = %s " \ "AND id IN %s AND to_invoice IS NOT NULL " \ - "GROUP BY product_id,to_invoice,product_uom_id", (account.id, tuple(context['active_ids']),)) + "GROUP BY product_id,to_invoice,product_uom_id", (account.id, tuple(ids),)) for product_id, factor_id, qty, uom in cr.fetchall(): product = product_obj.browse(cr, uid, product_id, context2) @@ -135,7 +108,7 @@ class hr_timesheet_invoice_create(osv.osv_memory): raise osv.except_osv(_('Error'), _('At least one line has no product !')) factor_name = '' factor = invoice_factor_obj.browse(cr, uid, factor_id, context2) - if not data['product']: + if not data.get('product', False): if factor.customer_name: factor_name = product.name+' - '+factor.customer_name else: @@ -148,7 +121,7 @@ class hr_timesheet_invoice_create(osv.osv_memory): ctx.update({'uom':uom}) if account.pricelist_id: pl = account.pricelist_id.id - price = pro_price_obj.price_get(cr,uid,[pl], data['product'] or product_id, qty or 1.0, account.partner_id.id, context=ctx)[pl] + price = pro_price_obj.price_get(cr,uid,[pl], data.get('product', False) or product_id, qty or 1.0, account.partner_id.id, context=ctx)[pl] else: price = 0.0 @@ -164,7 +137,7 @@ class hr_timesheet_invoice_create(osv.osv_memory): 'invoice_line_tax_id': [(6,0,tax )], 'invoice_id': last_invoice, 'name': factor_name, - 'product_id': data['product'] or product_id, + 'product_id': data.get('product',product_id), 'invoice_line_tax_id': [(6,0,tax)], 'uos_id': uom, 'account_id': account_id, @@ -174,37 +147,76 @@ class hr_timesheet_invoice_create(osv.osv_memory): # # Compute for lines # - cr.execute("SELECT * FROM account_analytic_line WHERE account_id = %s and id IN %s AND product_id=%s and to_invoice=%s ORDER BY account_analytic_line.date", (account.id, tuple(context['active_ids']), product_id, factor_id)) + cr.execute("SELECT * FROM account_analytic_line WHERE account_id = %s and id IN %s AND product_id=%s and to_invoice=%s ORDER BY account_analytic_line.date", (account.id, tuple(ids), product_id, factor_id)) line_ids = cr.dictfetchall() note = [] for line in line_ids: # set invoice_line_note details = [] - if data['date']: + if data.get('date', False): details.append(line['date']) - if data['time']: + if data.get('time', False): if line['product_uom_id']: details.append("%s %s" % (line['unit_amount'], product_uom_obj.browse(cr, uid, [line['product_uom_id']],context2)[0].name)) else: details.append("%s" % (line['unit_amount'], )) - if data['name']: + if data.get('name', False): details.append(line['name']) note.append(u' - '.join(map(lambda x: unicode(x) or '',details))) curr_line['note'] = "\n".join(map(lambda x: unicode(x) or '',note)) invoice_line_obj.create(cr, uid, curr_line, context=context) - cr.execute("update account_analytic_line set invoice_id=%s WHERE account_id = %s and id IN %s", (last_invoice, account.id, tuple(context['active_ids']))) + cr.execute("update account_analytic_line set invoice_id=%s WHERE account_id = %s and id IN %s", (last_invoice, account.id, tuple(ids))) invoice_obj.button_reset_taxes(cr, uid, [last_invoice], context) + return invoices +# +# TODO: check unit of measure !!! +# + +class hr_timesheet_invoice_create(osv.osv_memory): + + _name = 'hr.timesheet.invoice.create' + _description = 'Create invoice from timesheet' + _columns = { + 'date': fields.boolean('Date', help='The real date of each work will be displayed on the invoice'), + 'time': fields.boolean('Time spent', help='The time of each work done will be displayed on the invoice'), + 'name': fields.boolean('Description', help='The detail of each work done will be displayed on the invoice'), + 'price': fields.boolean('Cost', help='The cost of each work done will be displayed on the invoice. You probably don\'t want to check this'), + 'product': fields.many2one('product.product', 'Product', help='Complete this field only if you want to force to use a specific product. Keep empty to use the real product that comes from the cost.'), + } + + _defaults = { + 'date': lambda *args: 1, + 'name': lambda *args: 1 + } + + def view_init(self, cr, uid, fields, context=None): + """ + This function checks for precondition before wizard executes + @param self: The object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param fields: List of fields for default value + @param context: A standard dictionary for contextual values + """ + analytic_obj = self.pool.get('account.analytic.line') + data = context and context.get('active_ids', []) + for analytic in analytic_obj.browse(cr, uid, data, context=context): + if analytic.invoice_id: + raise osv.except_osv(_('Warning !'), _("Invoice is already linked to some of the analytic line(s)!")) + + def do_create(self, cr, uid, ids, context=None): + data = self.read(cr, uid, ids, [], context=context)[0] + invs = self.pool.get('account.analytic.line').invoice_cost_create(cr, uid, context['active_ids'], data, context=context) mod_obj = self.pool.get('ir.model.data') act_obj = self.pool.get('ir.actions.act_window') - mod_ids = mod_obj.search(cr, uid, [('name', '=', 'action_invoice_tree1')], context=context)[0] res_id = mod_obj.read(cr, uid, mod_ids, ['res_id'], context=context)['res_id'] act_win = act_obj.read(cr, uid, res_id, [], context=context) - act_win['domain'] = [('id','in',invoices),('type','=','out_invoice')] + act_win['domain'] = [('id','in',invs),('type','=','out_invoice')] act_win['name'] = _('Invoices') return act_win diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml index b45deeae8a2..d366e795c15 100644 --- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml +++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml @@ -1,49 +1,50 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> - - <record id="view_hr_timesheet_invoice_create_final" model="ir.ui.view"> - <field name="name">hr.timesheet.invoice.create.final.form</field> - <field name="model">hr.timesheet.invoice.create.final</field> - <field name="type">form</field> - <field name="arch" type="xml"> - <form string="Final invoice for analytic account"> - <group col="4" colspan="6"> - <separator string="Do you want details for each line of the invoices ?" colspan="4"/> - <field name="date"/> - <field name="time"/> - <field name="name"/> - <field name="price"/> - <separator string="Invoice Balance amount" colspan="4"/> - <field name="balance_product" required="1"/> - </group> - <separator colspan="4"/> - <group col="2" colspan="4"> - <button special="cancel" string="Cancel" icon='gtk-cancel'/> - <button name="do_create" string="Create Invoices" colspan="1" type="object" icon="terp-gtk-go-back-rtl"/> - </group> - </form> - </field> - </record> - <record id="action_hr_timesheet_invoice_create_final" model="ir.actions.act_window"> - <field name="name">Final Invoice</field> + <field name="name">Create Invoice</field> <field name="type">ir.actions.act_window</field> <field name="res_model">hr.timesheet.invoice.create.final</field> <field name="view_type">form</field> <field name="view_mode">form</field> <field name="target">new</field> + <field name="multi" eval="1"/> </record> - <record model="ir.values" id="hr_timesheet_invoice_create_final_values"> + <record model="ir.values" id="hr_timesheet_invoice_create_final_values"> <field name="model_id" ref="model_account_analytic_account" /> <field name="object" eval="1" /> - <field name="name">Final Invoice</field> + <field name="name">Invoice</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_hr_timesheet_invoice_create_final'))" /> <field name="key">action</field> <field name="model">account.analytic.account</field> </record> - </data> + + <record id="view_hr_timesheet_invoice_create_final" model="ir.ui.view"> + <field name="name">hr.timesheet.invoice.create.final.form</field> + <field name="model">hr.timesheet.invoice.create.final</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Invoice contract"> + <group col="4" colspan="6"> + <separator string="Do you want to display work details on the invoice ?" colspan="4"/> + <field name="date"/> + <field name="time"/> + <field name="name"/> + <field name="price"/> + <separator string="Force to use a special product" colspan="4" groups="base.group_extended"/> + <field name="product" groups="base.group_extended"/> + </group> + <separator colspan="4"/> + <group col="2" colspan="4"> + <button special="cancel" string="Cancel" icon='gtk-cancel'/> + <button name="do_create" string="Create Invoice" colspan="1" type="object" icon="terp-gtk-go-back-rtl"/> + </group> + </form> + </field> + </record> + + </data> </openerp> diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml index 1696710b712..60b60e88550 100644 --- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml +++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml @@ -43,7 +43,6 @@ <record model="ir.values" id="hr_timesheet_invoice_create_values"> <field name="model_id" ref="model_account_analytic_line" /> - <field name="object" eval="1" /> <field name="name">Create Invoice</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_hr_timesheet_invoice_create'))" /> diff --git a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml b/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml index fd9b27f42aa..39ab5fe3482 100644 --- a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml +++ b/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml @@ -40,8 +40,8 @@ <field name="inherit_id" ref="hr.board_hr_form"/> <field name="type">form</field> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child2" position="inside"> - <action colspan="4" height="220" name="%(action_week_attendance_graph)d" string="My Total Attendance By Week" /> + <xpath expr="/form/board/column" position="inside"> + <action name="%(action_week_attendance_graph)d" string="My Total Attendance By Week"/> </xpath> </field> </record> diff --git a/addons/hr_timesheet_sheet/report/hr_timesheet_report.py b/addons/hr_timesheet_sheet/report/hr_timesheet_report.py index d20ad3a5f4c..49b18f75e4b 100644 --- a/addons/hr_timesheet_sheet/report/hr_timesheet_report.py +++ b/addons/hr_timesheet_sheet/report/hr_timesheet_report.py @@ -80,3 +80,5 @@ class hr_timesheet_report(osv.osv): ) """) hr_timesheet_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet_sheet/report/timesheet_report.py b/addons/hr_timesheet_sheet/report/timesheet_report.py index a8c0440a053..986beb453eb 100644 --- a/addons/hr_timesheet_sheet/report/timesheet_report.py +++ b/addons/hr_timesheet_sheet/report/timesheet_report.py @@ -120,3 +120,5 @@ class timesheet_report(osv.osv): ) """) timesheet_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/html_view/__init__.py b/addons/html_view/__init__.py index 465ad75ffe0..12bd1af21b1 100644 --- a/addons/html_view/__init__.py +++ b/addons/html_view/__init__.py @@ -1 +1,3 @@ -import html_view
\ No newline at end of file +import html_view + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/html_view/html_view.py b/addons/html_view/html_view.py index 79f4bd7d0b9..09201b23121 100644 --- a/addons/html_view/html_view.py +++ b/addons/html_view/html_view.py @@ -10,4 +10,6 @@ class html_view(osv.osv): 'bank_ids': fields.one2many('res.partner.bank', 'partner_id', 'Banks'), } -html_view()
\ No newline at end of file +html_view() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml index bf94ecb2350..23667069b79 100644 --- a/addons/idea/idea_view.xml +++ b/addons/idea/idea_view.xml @@ -107,7 +107,6 @@ <field name="model" eval="'idea.category'" /> <field name="name">Ideas</field> <field name="value" eval="'ir.actions.act_window,'+str(action_idea_idea_categ_open)" /> - <field name="object" eval="True" /> </record> <!-- Idea statistics Form View --> diff --git a/addons/import_base/__init__.py b/addons/import_base/__init__.py index 0a5d7fb20b7..52366e5128a 100644 --- a/addons/import_base/__init__.py +++ b/addons/import_base/__init__.py @@ -20,4 +20,6 @@ ############################################################################## import import_framework -import mapper
\ No newline at end of file +import mapper + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_base/__openerp__.py b/addons/import_base/__openerp__.py index 6d4f4374dfe..0f65cf166b6 100644 --- a/addons/import_base/__openerp__.py +++ b/addons/import_base/__openerp__.py @@ -37,3 +37,5 @@ 'installable': True, 'active': False, } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_base/import_framework.py b/addons/import_base/import_framework.py index 1f627d2ad58..ecc5f54e461 100644 --- a/addons/import_base/import_framework.py +++ b/addons/import_base/import_framework.py @@ -498,3 +498,5 @@ class import_framework(Thread): def intialize_test(self): pass + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_base/mapper.py b/addons/import_base/mapper.py index 0827509ffab..d68447ad3dd 100644 --- a/addons/import_base/mapper.py +++ b/addons/import_base/mapper.py @@ -167,3 +167,5 @@ class call(mapper): else: args.append(arg) return self.fun(external_values, *args) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_google/wizard/google_import_message.py b/addons/import_google/wizard/google_import_message.py index 5e2b2b6f4b1..bba58cd2250 100644 --- a/addons/import_google/wizard/google_import_message.py +++ b/addons/import_google/wizard/google_import_message.py @@ -40,3 +40,5 @@ class google_import_message(osv.osv): return res google_import_message() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_google/wizard/import_google.py b/addons/import_google/wizard/import_google.py index 87155c806c6..936a6d17649 100644 --- a/addons/import_google/wizard/import_google.py +++ b/addons/import_google/wizard/import_google.py @@ -353,3 +353,5 @@ class google_import(import_framework): } } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_sugarcrm/__init__.py b/addons/import_sugarcrm/__init__.py index 250589105b0..8fdd9aec302 100644 --- a/addons/import_sugarcrm/__init__.py +++ b/addons/import_sugarcrm/__init__.py @@ -23,3 +23,5 @@ import import_sugarcrm import sugar import wizard + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py index d5f487c5377..b3908be0050 100644 --- a/addons/import_sugarcrm/import_sugarcrm.py +++ b/addons/import_sugarcrm/import_sugarcrm.py @@ -1147,3 +1147,5 @@ class import_sugarcrm(osv.osv): } import_sugarcrm() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_sugarcrm/sugar.py b/addons/import_sugarcrm/sugar.py index 4ce5e0048ea..35103a41173 100644 --- a/addons/import_sugarcrm/sugar.py +++ b/addons/import_sugarcrm/sugar.py @@ -176,3 +176,5 @@ def search(portType, sessionid, module_name, offset, max_results, query=None, or ans_list.append(ans_dir) #end for return ans_list + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_sugarcrm/sugarsoap_services.py b/addons/import_sugarcrm/sugarsoap_services.py index a80102e5081..b42eb4041c1 100644 --- a/addons/import_sugarcrm/sugarsoap_services.py +++ b/addons/import_sugarcrm/sugarsoap_services.py @@ -1418,3 +1418,5 @@ class get_attendee_listResponse: self._return = None return get_attendee_listResponse.typecode.pyclass = get_attendee_listResponse + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_sugarcrm/sugarsoap_services_types.py b/addons/import_sugarcrm/sugarsoap_services_types.py index acd22bbb97f..182e9ce4c37 100644 --- a/addons/import_sugarcrm/sugarsoap_services_types.py +++ b/addons/import_sugarcrm/sugarsoap_services_types.py @@ -644,3 +644,5 @@ class ns0: self.pyclass = Holder # end class ns0 (tns: http://www.sugarcrm.com/sugarcrm) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_sugarcrm/wizard/__init__.py b/addons/import_sugarcrm/wizard/__init__.py index 6910c3981bd..08b611401b1 100644 --- a/addons/import_sugarcrm/wizard/__init__.py +++ b/addons/import_sugarcrm/wizard/__init__.py @@ -20,3 +20,5 @@ ############################################################################## import import_message + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/import_sugarcrm/wizard/import_message.py b/addons/import_sugarcrm/wizard/import_message.py index 7c9f1703282..1d2e765580b 100644 --- a/addons/import_sugarcrm/wizard/import_message.py +++ b/addons/import_sugarcrm/wizard/import_message.py @@ -27,3 +27,5 @@ class import_message(osv.osv): _description = __doc__ import_message() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_at/__init__.py b/addons/l10n_at/__init__.py index b3516a699d9..a295fe1bd73 100644 --- a/addons/l10n_at/__init__.py +++ b/addons/l10n_at/__init__.py @@ -19,4 +19,6 @@ # ############################################################################## -import account_wizard
\ No newline at end of file +import account_wizard + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_at/__openerp__.py b/addons/l10n_at/__openerp__.py index d28598c1ed2..570841374d8 100644 --- a/addons/l10n_at/__openerp__.py +++ b/addons/l10n_at/__openerp__.py @@ -33,3 +33,5 @@ "installable": True } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_at/account_wizard.py b/addons/l10n_at/account_wizard.py index cf63b2c5dc3..15b0735b9ca 100644 --- a/addons/l10n_at/account_wizard.py +++ b/addons/l10n_at/account_wizard.py @@ -32,3 +32,5 @@ class AccountWizard_cd(osv.osv_memory): AccountWizard_cd() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be/__openerp__.py b/addons/l10n_be/__openerp__.py index 26c9837a8bf..d4300186660 100644 --- a/addons/l10n_be/__openerp__.py +++ b/addons/l10n_be/__openerp__.py @@ -42,27 +42,27 @@ Wizards provided by this module: """, 'author': 'OpenERP SA', 'depends': [ - 'account', - 'base_vat', - 'base_iban', - 'account_chart', - 'account_coda', - ], + 'account', + 'base_vat', + 'base_iban', + 'account_chart', + 'account_coda', + ], 'init_xml': [], 'update_xml': [ - 'account_pcmn_belgium.xml', - 'account_tax_code_template.xml', - 'account_chart_template.xml', - 'account_tax_template.xml', - 'l10n_be_wizard.xml', - 'wizard/l10n_be_account_vat_declaration_view.xml', - 'wizard/l10n_be_vat_intra_view.xml', - 'wizard/l10n_be_partner_vat_listing.xml', - 'l10n_be_sequence.xml', - 'fiscal_templates.xml', - 'account_fiscal_position_tax_template.xml', - 'security/ir.model.access.csv' - ], + 'account_pcmn_belgium.xml', + 'account_tax_code_template.xml', + 'account_chart_template.xml', + 'account_tax_template.xml', + 'wizard/l10n_be_account_vat_declaration_view.xml', + 'wizard/l10n_be_vat_intra_view.xml', + 'wizard/l10n_be_partner_vat_listing.xml', + 'l10n_be_sequence.xml', + 'fiscal_templates.xml', + 'account_fiscal_position_tax_template.xml', + 'security/ir.model.access.csv', + 'l10n_be_wizard.yml' + ], 'demo_xml': [], 'installable': True, 'certificate': '0031977724637', diff --git a/addons/l10n_be/l10n_be_wizard.xml b/addons/l10n_be/l10n_be_wizard.xml deleted file mode 100644 index 194e2881d1b..00000000000 --- a/addons/l10n_be/l10n_be_wizard.xml +++ /dev/null @@ -1,11 +0,0 @@ -<openerp> - <data> - - <record id="config_call_account_template" model="ir.actions.todo"> - <field name="action_id" ref="account.action_wizard_multi_chart"/> - <field name="category_id" ref="account.category_accounting_configuration"/> - <field name="type">automatic</field> - </record> - - </data> -</openerp> diff --git a/addons/l10n_be/l10n_be_wizard.yml b/addons/l10n_be/l10n_be_wizard.yml new file mode 100644 index 00000000000..a51d1d55244 --- /dev/null +++ b/addons/l10n_be/l10n_be_wizard.yml @@ -0,0 +1,16 @@ +- + !record {model: ir.actions.todo, id: config_call_account_template}: + action_id: account.action_wizard_multi_chart + category_id: account.category_accounting_configuration + type: automatic +- + !python {model: ir.actions.todo}: | + if self.browse(cr, uid, ref('l10n_be.config_call_account_template')).state=='open': + wiz = self.pool.get('wizard.multi.charts.accounts') + wiz_id = wiz.create(cr, uid, { + 'chart_template_id': ref('l10n_be.l10nbe_chart_template') + }) + wiz.execute(cr, uid, [wiz_id]) + self.write(cr, uid, [ref('l10n_be.config_call_account_template')], { + 'state': 'done' + }) diff --git a/addons/l10n_be_invoice_bba/__init__.py b/addons/l10n_be_invoice_bba/__init__.py index 176d1b9a904..48cd4bc0347 100644 --- a/addons/l10n_be_invoice_bba/__init__.py +++ b/addons/l10n_be_invoice_bba/__init__.py @@ -22,3 +22,5 @@ import partner import invoice + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be_invoice_bba/__openerp__.py b/addons/l10n_be_invoice_bba/__openerp__.py index e4b209317d0..c18f49817b5 100644 --- a/addons/l10n_be_invoice_bba/__openerp__.py +++ b/addons/l10n_be_invoice_bba/__openerp__.py @@ -53,3 +53,5 @@ A 'random' Structured Communication will generated if no algorithm is specified ], 'active': False, 'installable': True,} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be_invoice_bba/invoice.py b/addons/l10n_be_invoice_bba/invoice.py index 947ccb6f71c..997036c0cec 100644 --- a/addons/l10n_be_invoice_bba/invoice.py +++ b/addons/l10n_be_invoice_bba/invoice.py @@ -215,3 +215,5 @@ class account_invoice(osv.osv): ]
account_invoice()
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be_invoice_bba/partner.py b/addons/l10n_be_invoice_bba/partner.py index 194ae39ed86..04a51c3a6ab 100644 --- a/addons/l10n_be_invoice_bba/partner.py +++ b/addons/l10n_be_invoice_bba/partner.py @@ -50,3 +50,5 @@ class res_partner(osv.osv): 'out_inv_comm_type': 'none', } res_partner() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_br/account.py b/addons/l10n_br/account.py index 965ff500829..92f724a7762 100644 --- a/addons/l10n_br/account.py +++ b/addons/l10n_br/account.py @@ -174,4 +174,6 @@ class wizard_multi_charts_accounts(osv.osv_memory): if tax.tax_code_id: obj_acc_tax.write(cr, uid, tax.id, {'domain': tax.tax_code_id.domain,'tax_discount': tax.tax_code_id.tax_discount}) -wizard_multi_charts_accounts()
\ No newline at end of file +wizard_multi_charts_accounts() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_br/i18n/oc.po b/addons/l10n_br/i18n/oc.po new file mode 100644 index 00000000000..371c4f5adeb --- /dev/null +++ b/addons/l10n_br/i18n/oc.po @@ -0,0 +1,36 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-07 06:40+0000\n" +"PO-Revision-Date: 2011-11-20 09:22+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\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 "Localizacion brasilièra" diff --git a/addons/l10n_ch/__openerp__.py b/addons/l10n_ch/__openerp__.py index 1c6bb5688d7..cabd15e42de 100644 --- a/addons/l10n_ch/__openerp__.py +++ b/addons/l10n_ch/__openerp__.py @@ -63,7 +63,7 @@ TODO : """, "version" : "6.1", "author" : "Camptocamp", - "category" : "Finance", + 'category': 'Localization/Account Charts', "website": "http://www.camptocamp.com", "depends" : [ diff --git a/addons/l10n_ch/account_wizard.py b/addons/l10n_ch/account_wizard.py index f9b2600adca..7b80e3697ee 100644 --- a/addons/l10n_ch/account_wizard.py +++ b/addons/l10n_ch/account_wizard.py @@ -42,3 +42,5 @@ class WizardMultiChartsAccounts(osv.osv_memory): WizardMultiChartsAccounts() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_ch/bank.py b/addons/l10n_ch/bank.py index 6b9294bea13..fd69dec625f 100644 --- a/addons/l10n_ch/bank.py +++ b/addons/l10n_ch/bank.py @@ -77,3 +77,5 @@ class ResPartnerBank(osv.osv): 'The BVR adherent number must be unique !')] ResPartnerBank() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_ch/report/__init__.py b/addons/l10n_ch/report/__init__.py index 04cc14f1d80..e8703f10d03 100644 --- a/addons/l10n_ch/report/__init__.py +++ b/addons/l10n_ch/report/__init__.py @@ -29,4 +29,6 @@ # ############################################################################## -import report_webkit_html
\ No newline at end of file +import report_webkit_html + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_ch/report/report_webkit_html.py b/addons/l10n_ch/report/report_webkit_html.py index b551845322f..8b179e7ae58 100644 --- a/addons/l10n_ch/report/report_webkit_html.py +++ b/addons/l10n_ch/report/report_webkit_html.py @@ -322,3 +322,5 @@ BVRWebKitParser('report.invoice_web_bvr', 'account.invoice', 'addons/l10n_ch/report/report_webkit_html.mako', parser=l10n_ch_report_webkit_html) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_ch/wizard/create_dta_view.xml b/addons/l10n_ch/wizard/create_dta_view.xml index 53d0cdc42d8..11cd2095e28 100644 --- a/addons/l10n_ch/wizard/create_dta_view.xml +++ b/addons/l10n_ch/wizard/create_dta_view.xml @@ -32,7 +32,6 @@ <record model="ir.values" id="action_account_dtr_create_values"> <field name="model_id" ref="model_create_dta_wizard" /> - <field name="object" eval="1" /> <field name="name">Create DTA</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' +str(ref('action_dta_create'))" /> @@ -40,4 +39,4 @@ <field name="model">payment.order</field> </record> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/l10n_ch/wizard/unicode2ascii.py b/addons/l10n_ch/wizard/unicode2ascii.py index 7d95a4ab714..1cec519420c 100644 --- a/addons/l10n_ch/wizard/unicode2ascii.py +++ b/addons/l10n_ch/wizard/unicode2ascii.py @@ -590,3 +590,5 @@ if __name__ == '__main__': if argz: parser.error('Only stdin -> stdout conversion suported') uc_filter(sys.stdin, sys.stdout, bs=optz.bs, in_enc=optz.src_enc, out_enc=optz.dst_enc) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_cr/__init__.py b/addons/l10n_cr/__init__.py index c4c6ee3e380..88b86329a8d 100644 --- a/addons/l10n_cr/__init__.py +++ b/addons/l10n_cr/__init__.py @@ -32,3 +32,5 @@ # ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_de/__openerp__.py b/addons/l10n_de/__openerp__.py index 8cbdaa3b6ee..646836eba2a 100644 --- a/addons/l10n_de/__openerp__.py +++ b/addons/l10n_de/__openerp__.py @@ -152,3 +152,5 @@ German accounting chart and localization. "certificate": "00517849017945584893", 'images': ['images/config_chart_l10n_de.jpeg','images/l10n_de_chart.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_ec/__init__.py b/addons/l10n_ec/__init__.py index e59e7efc423..d9537494d6e 100644 --- a/addons/l10n_ec/__init__.py +++ b/addons/l10n_ec/__init__.py @@ -18,3 +18,5 @@ # ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_ec/__openerp__.py b/addons/l10n_ec/__openerp__.py index 0e93a3ac57b..f3dbf88289b 100644 --- a/addons/l10n_ec/__openerp__.py +++ b/addons/l10n_ec/__openerp__.py @@ -47,3 +47,5 @@ Accounting chart and localization for Ecuador. 'certificate' : '001226484516187330589', 'images': ['images/config_chart_l10n_ec.jpeg','images/l10n_ec_chart.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_es/__init__.py b/addons/l10n_es/__init__.py index 297d923f6bb..bec854aac95 100644 --- a/addons/l10n_es/__init__.py +++ b/addons/l10n_es/__init__.py @@ -24,3 +24,5 @@ ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_es/__openerp__.py b/addons/l10n_es/__openerp__.py index 3cdc521ad60..e2f5ad3402d 100644 --- a/addons/l10n_es/__openerp__.py +++ b/addons/l10n_es/__openerp__.py @@ -59,3 +59,5 @@ for yearly account reporting (balance, profit & losses). "certificate" : "00408828172062583229", 'images': ['images/config_chart_l10n_es.jpeg','images/l10n_es_chart.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_es/i18n/oc.po b/addons/l10n_es/i18n/oc.po new file mode 100644 index 00000000000..3abe8d9ae4a --- /dev/null +++ b/addons/l10n_es/i18n/oc.po @@ -0,0 +1,39 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:22+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: l10n_es +#: model:ir.module.module,shortdesc:l10n_es.module_meta_information +msgid "Spanish Charts of Accounts (PGCE 2008)" +msgstr "Plan comptable espanhòl (PGCE 2008)" + +#. module: l10n_es +#: model:ir.module.module,description:l10n_es.module_meta_information +msgid "" +"Spanish Charts of Accounts (PGCE 2008)\n" +"\n" +"* Defines the following chart of account templates:\n" +" * Spanish General Chart of Accounts 2008.\n" +" * Spanish General Chart of Accounts 2008 for small and medium " +"companies.\n" +"* Defines templates for sale and purchase VAT.\n" +"* Defines tax code templates.\n" +"\n" +"Note: You should install the l10n_ES_account_balance_report module\n" +"for yearly account reporting (balance, profit & losses).\n" +msgstr "" diff --git a/addons/l10n_fr/wizard/fr_report_bilan_view.xml b/addons/l10n_fr/wizard/fr_report_bilan_view.xml index e8615935b8c..eb66de9f012 100644 --- a/addons/l10n_fr/wizard/fr_report_bilan_view.xml +++ b/addons/l10n_fr/wizard/fr_report_bilan_view.xml @@ -31,7 +31,6 @@ <record model="ir.values" id="action_account_bilan_report_values"> <field name="model_id" ref="model_account_bilan_report" /> - <field name="object" eval="1" /> <field name="name">Bilan Report</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' +str(ref('action_account_bilan_report'))" /> @@ -40,4 +39,4 @@ </record> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/l10n_fr/wizard/fr_report_compute_resultant_view.xml b/addons/l10n_fr/wizard/fr_report_compute_resultant_view.xml index f50ec1ef308..5499e2fe1cf 100644 --- a/addons/l10n_fr/wizard/fr_report_compute_resultant_view.xml +++ b/addons/l10n_fr/wizard/fr_report_compute_resultant_view.xml @@ -30,7 +30,6 @@ <record model="ir.values" id="action_account_cdr_report_values"> <field name="model_id" ref="model_account_cdr_report" /> - <field name="object" eval="1" /> <field name="name">Compte de resultat Report</field> <field name="key2">client_print_multi</field> <field name="value" eval="'ir.actions.act_window,' +str(ref('action_account_cdr_report'))" /> @@ -39,4 +38,4 @@ </record> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/l10n_gt/i18n/oc.po b/addons/l10n_gt/i18n/oc.po new file mode 100644 index 00000000000..e077ec6c3c0 --- /dev/null +++ b/addons/l10n_gt/i18n/oc.po @@ -0,0 +1,39 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:23+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: l10n_gt +#: model:ir.module.module,shortdesc:l10n_gt.module_meta_information +msgid "Guatemala - Plan contable general" +msgstr "Guatemala - Plan comptable general" + +#. module: l10n_gt +#: model:ir.actions.todo,note:l10n_gt.config_call_account_template_gt_minimal +msgid "" +"Generar la nomenclatura contable a partir de un modelo. Deberá seleccionar " +"una compañía, el modelo a utilizar, el número de digitos a usar en la " +"nomenclatura, la moneda para crear los diarios." +msgstr "" + +#. module: l10n_gt +#: model:ir.module.module,description:l10n_gt.module_meta_information +msgid "" +"Agrega una nomenclatura contable para Guatemala. También icluye impuestos y " +"la moneda del Quetzal. -- Adds accounting chart for Guatemala. It also " +"includes taxes and the Quetzal currency" +msgstr "" diff --git a/addons/l10n_in/i18n/oc.po b/addons/l10n_in/i18n/oc.po new file mode 100644 index 00000000000..f52b722a33a --- /dev/null +++ b/addons/l10n_in/i18n/oc.po @@ -0,0 +1,46 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:23+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: l10n_in +#: model:ir.module.module,description:l10n_in.module_meta_information +msgid "" +"\n" +" Indian Accounting : chart of Account\n" +" " +msgstr "" +"\n" +" Comptabilitat indiana : plan de comptes\n" +" " + +#. module: l10n_in +#: model:ir.module.module,shortdesc:l10n_in.module_meta_information +msgid "Indian Chart of Account" +msgstr "Plan comptable indian" + +#. module: l10n_in +#: model:ir.actions.todo,note:l10n_in.config_call_account_template_in_minimal +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" +"\tThis is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" diff --git a/addons/l10n_it/__init__.py b/addons/l10n_it/__init__.py index 026004bfa0f..491d2cc7b66 100644 --- a/addons/l10n_it/__init__.py +++ b/addons/l10n_it/__init__.py @@ -1,13 +1,15 @@ -# -*- encoding: utf-8 -*- ############################################################################## # # OpenERP, Open Source Management Solution # Copyright (C) 2010 -# Italian OpenERP Community (<http://www.openerp-italia.com>) +# OpenERP Italian Community (<http://www.openerp-italia.org>) # Servabit srl # Agile Business Group sagl # Domsense srl -# Albatos srl +# Albatos srl +# +# Copyright (C) 2011 +# Associazione OpenERP Italia (<http://www.openerp-italia.org>) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -23,6 +25,3 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## - -import libroIVA -import report diff --git a/addons/l10n_it/__openerp__.py b/addons/l10n_it/__openerp__.py index d6138608aa2..2c5811a6915 100644 --- a/addons/l10n_it/__openerp__.py +++ b/addons/l10n_it/__openerp__.py @@ -3,12 +3,15 @@ # # OpenERP, Open Source Management Solution # Copyright (C) 2010 -# Italian OpenERP Community (<http://www.openerp-italia.org>) +# OpenERP Italian Community (<http://www.openerp-italia.org>) # Servabit srl # Agile Business Group sagl # Domsense srl # Albatos srl # +# Copyright (C) 2011 +# Associazione OpenERP Italia (<http://www.openerp-italia.org>) +# # 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 @@ -39,9 +42,6 @@ Italian accounting chart and localization. "category" : "Localization/Account Charts", 'website': 'http://www.openerp-italia.org/', 'init_xml': [ - 'report.xml', - 'libroIVA_view.xml', - 'libroIVA_menu.xml', ], 'update_xml': [ 'data/account.account.type.csv', @@ -51,7 +51,6 @@ Italian accounting chart and localization. 'data/account.tax.template.csv', 'data/account.fiscal.position.template.csv', 'l10n_chart_it_generic.xml', - 'security/ir.model.access.csv', ], 'demo_xml': [ ], diff --git a/addons/l10n_it/data/account.account.template.csv b/addons/l10n_it/data/account.account.template.csv index 388d037ad4e..a1db05a3da9 100644 --- a/addons/l10n_it/data/account.account.template.csv +++ b/addons/l10n_it/data/account.account.template.csv @@ -1,234 +1,235 @@ "id","code","name","parent_id:id","user_type:id","type","reconcile" -0,0,"Azienda",,"account_type_view","view",FALSE -1,1,"ATTIVO ",0,"account_type_view","view",TRUE -11,11,"IMMOBILIZZAZIONI IMMATERIALI ",1,"account_type_view","view",TRUE -1101,1101,"costi di impianto ",11,"account_type_view","other",TRUE -1106,1106,"software ",11,"account_type_view","other",TRUE -1108,1108,"avviamento ",11,"account_type_view","other",TRUE -1111,1111,"fondo ammortamento costi di impianto ",11,"account_type_view","other",TRUE -1116,1116,"fondo ammortamento software ",11,"account_type_view","other",TRUE -1118,1118,"fondo ammortamento avviamento ",11,"account_type_view","other",TRUE -12,12,"IMMOBILIZZAZIONI MATERIALI ",1,"account_type_view","view",TRUE -1201,1201,"fabbricati ",12,"account_type_view","other",TRUE -1202,1202,"impianti e macchinari ",12,"account_type_view","other",TRUE -1204,1204,"attrezzature commerciali ",12,"account_type_view","other",TRUE -1205,1205,"macchine d'ufficio ",12,"account_type_view","other",TRUE -1206,1206,"arredamento ",12,"account_type_view","other",TRUE -1207,1207,"automezzi ",12,"account_type_view","other",TRUE -1208,1208,"imballaggi durevoli ",12,"account_type_view","other",TRUE -1211,1211,"fondo ammortamento fabbricati ",12,"account_type_view","other",TRUE -1212,1212,"fondo ammortamento impianti e macchinari ",12,"account_type_view","other",TRUE -1214,1214,"fondo ammortamento attrezzature commerciali ",12,"account_type_view","other",TRUE -1215,1215,"fondo ammortamento macchine d'ufficio ",12,"account_type_view","other",TRUE -1216,1216,"fondo ammortamento arredamento ",12,"account_type_view","other",TRUE -1217,1217,"fondo ammortamento automezzi ",12,"account_type_view","other",TRUE -1218,1218,"fondo ammortamento imballaggi durevoli ",12,"account_type_view","other",TRUE -1220,1220,"fornitori immobilizzazioni c/acconti ",12,"account_type_view","other",TRUE -13,13,"IMMOBILIZZAZIONI FINANZIARIE ",1,"account_type_view","view",TRUE -1301,1301,"mutui attivi ",13,"account_type_view","other",TRUE -14,14,"RIMANENZE ",1,"account_type_view","view",TRUE -1401,1401,"materie di consumo ",14,"account_type_view","other",TRUE -1404,1404,"merci ",14,"account_type_view","other",TRUE -1410,1410,"fornitori c/acconti ",14,"account_type_view","other",TRUE -15,15,"CREDITI COMMERCIALI ",1,"account_type_view","view",TRUE -1501,1501,"crediti v/clienti ",15,"account_type_receivable","receivable",TRUE -1502,1502,"crediti commerciali diversi ",15,"account_type_receivable","other",TRUE -1503,1503,"clienti c/spese anticipate ",15,"account_type_receivable","receivable",TRUE -1505,1505,"cambiali attive ",15,"account_type_receivable","other",TRUE -1506,1506,"cambiali allo sconto ",15,"account_type_receivable","other",TRUE -1507,1507,"cambiali all'incasso ",15,"account_type_receivable","other",TRUE -1509,1509,"fatture da emettere ",15,"account_type_receivable","other",TRUE -1510,1510,"crediti insoluti ",15,"account_type_receivable","other",TRUE -1511,1511,"cambiali insolute ",15,"account_type_receivable","other",TRUE -1531,1531,"crediti da liquidare ",15,"account_type_receivable","other",TRUE -1540,1540,"fondo svalutazione crediti ",15,"account_type_receivable","other",TRUE -1541,1541,"fondo rischi su crediti ",15,"account_type_receivable","other",TRUE -16,16,"CREDITI DIVERSI ",1,"account_type_view","view",TRUE -1601,1601,"IVA n/credito ",16,"account_type_receivable","other",TRUE -1602,1602,"IVA c/acconto ",16,"account_type_receivable","other",TRUE -1605,1605,"crediti per IVA ",16,"account_type_receivable","other",TRUE -1607,1607,"imposte c/acconto ",16,"account_type_receivable","other",TRUE -1608,1608,"crediti per imposte ",16,"account_type_receivable","other",TRUE -1609,1609,"crediti per ritenute subite ",16,"account_type_receivable","other",TRUE -1610,1610,"crediti per cauzioni ",16,"account_type_receivable","other",TRUE -1620,1620,"personale c/acconti ",16,"account_type_receivable","other",TRUE -1630,1630,"crediti v/istituti previdenziali ",16,"account_type_receivable","other",TRUE -1640,1640,"debitori diversi ",16,"account_type_receivable","receivable",TRUE -18,18,"DISPONIBILITÀ LIQUIDE ",1,"account_type_view","view",TRUE -1801,1801,"banche c/c ",18,"account_type_bank","liquidity",TRUE -1810,1810,"c/c postali ",18,"account_type_cash","liquidity",TRUE -1820,1820,"denaro in cassa ",18,"account_type_cash","liquidity",TRUE -1821,1821,"assegni ",18,"account_type_cash","liquidity",TRUE -1822,1822,"valori bollati ",18,"account_type_cash","liquidity",TRUE -19,19,"RATEI E RISCONTI ATTIVI ",1,"account_type_view","view",TRUE -1901,1901,"ratei attivi ",19,"account_type_view","other",TRUE -1902,1902,"risconti attivi ",19,"account_type_view","other",TRUE -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_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 -2201,2201,"fondo per imposte ",22,"account_type_view","other",TRUE -2204,2204,"fondo responsabilità civile ",22,"account_type_view","other",TRUE -2205,2205,"fondo spese future ",22,"account_type_view","other",TRUE -2211,2211,"fondo manutenzioni programmate ",22,"account_type_view","other",TRUE -23,23,"TRATTAMENTO FINE RAPPORTO DI LAVORO ",2,"account_type_view","view",TRUE -2301,2301,"debiti per TFRL ",23,"account_type_view","other",TRUE -24,24,"DEBITI FINANZIARI ",2,"account_type_view","view",TRUE -2410,2410,"mutui passivi ",24,"account_type_payable","other",TRUE -2411,2411,"banche c/sovvenzioni ",24,"account_type_payable","other",TRUE -2420,2420,"banche c/c passivi ",24,"account_type_payable","other",TRUE -2421,2421,"banche c/RIBA all'incasso ",24,"account_type_payable","other",TRUE -2422,2422,"banche c/cambiali all'incasso ",24,"account_type_payable","other",TRUE -2423,2423,"banche c/anticipi su fatture ",24,"account_type_payable","other",TRUE -2440,2440,"debiti v/altri finanziatori ",24,"account_type_payable","other",TRUE -25,25,"DEBITI COMMERCIALI ",2,"account_type_view","view",TRUE -2501,2501,"debiti v/fornitori ",25,"account_type_payable","payable",TRUE -2503,2503,"cambiali passive ",25,"account_type_payable","other",TRUE -2520,2520,"fatture da ricevere ",25,"account_type_payable","other",TRUE -2521,2521,"debiti da liquidare ",25,"account_type_payable","other",TRUE -2530,2530,"clienti c/acconti ",25,"account_type_payable","payable",TRUE -26,26,"DEBITI DIVERSI ",2,"account_type_view","view",TRUE -2601,2601,"IVA n/debito ",26,"account_type_payable","other",TRUE -2602,2602,"debiti per ritenute da versare ",26,"account_type_payable","other",TRUE -2605,2605,"erario c/IVA ",26,"account_type_payable","other",TRUE -2606,2606,"debiti per imposte ",26,"account_type_payable","other",TRUE -2619,2619,"debiti per cauzioni ",26,"account_type_payable","other",TRUE -2620,2620,"personale c/retribuzioni ",26,"account_type_payable","other",TRUE -2621,2621,"personale c/liquidazioni ",26,"account_type_payable","other",TRUE -2622,2622,"clienti c/cessione ",26,"account_type_payable","other",TRUE -2630,2630,"debiti v/istituti previdenziali ",26,"account_type_payable","other",TRUE -2640,2640,"creditori diversi ",26,"account_type_payable","payable",TRUE -27,27,"RATEI E RISCONTI PASSIVI ",2,"account_type_view","view",TRUE -2701,2701,"ratei passivi ",27,"account_type_view","other",TRUE -2702,2702,"risconti passivi ",27,"account_type_view","other",TRUE -28,28,"CONTI TRANSITORI E DIVERSI ",2,"account_type_view","view",TRUE -2801,2801,"bilancio di apertura ",28,"account_type_view","other",TRUE -2802,2802,"bilancio di chiusura ",28,"account_type_view","other",TRUE -2810,2810,"IVA c/liquidazioni ",28,"account_type_view","other",TRUE -2811,2811,"istituti previdenziali ",28,"account_type_view","other",TRUE -2820,2820,"banca ... c/c ",28,"account_type_view","other",TRUE -2821,2821,"banca ... c/c ",28,"account_type_view","other",TRUE -2822,2822,"banca ... c/c ",28,"account_type_view","other",TRUE -29,29,"CONTI DEI SISTEMI SUPPLEMENTARI ",2,"account_type_view","view",TRUE -2901,2901,"beni di terzi ",29,"account_type_view","other",TRUE -2902,2902,"depositanti beni ",29,"account_type_view","other",TRUE -2911,2911,"merci da ricevere ",29,"account_type_view","other",TRUE -2912,2912,"fornitori c/impegni ",29,"account_type_view","other",TRUE -2913,2913,"impegni per beni in leasing ",29,"account_type_view","other",TRUE -2914,2914,"creditori c/leasing ",29,"account_type_view","other",TRUE -2916,2916,"clienti c/impegni ",29,"account_type_view","other",TRUE -2917,2917,"merci da consegnare ",29,"account_type_view","other",TRUE -2921,2921,"rischi per effetti scontati ",29,"account_type_view","other",TRUE -2922,2922,"banche c/effetti scontati ",29,"account_type_view","other",TRUE -2926,2926,"rischi per fideiussioni ",29,"account_type_view","other",TRUE -2927,2927,"creditori per fideiussioni ",29,"account_type_view","other",TRUE -2931,2931,"rischi per avalli ",29,"account_type_view","other",TRUE -2932,2932,"creditori per avalli ",29,"account_type_view","other",TRUE -3,3,"VALORE DELLA PRODUZIONE ",0,"account_type_view","view",TRUE -31,31,"VENDITE E PRESTAZIONI ",3,"account_type_view","view",TRUE -3101,3101,"merci c/vendite ",31,"account_type_income","other",TRUE -3103,3103,"rimborsi spese di vendita ",31,"account_type_income","other",TRUE -3110,3110,"resi su vendite ",31,"account_type_income","other",TRUE -3111,3111,"ribassi e abbuoni passivi ",31,"account_type_income","other",TRUE -3112,3112,"premi su vendite ",31,"account_type_income","other",TRUE -32,32,"RICAVI E PROVENTI DIVERSI ",3,"account_type_view","view",TRUE -3201,3201,"fitti attivi ",32,"account_type_income","other",TRUE -3202,3202,"proventi vari ",32,"account_type_income","other",TRUE -3210,3210,"arrotondamenti attivi ",32,"account_type_income","other",TRUE -3220,3220,"plusvalenze ordinarie diverse ",32,"account_type_income","other",TRUE -3230,3230,"sopravvenienze attive ordinarie diverse ",32,"account_type_income","other",TRUE -3240,3240,"insussistenze attive ordinarie diverse ",32,"account_type_income","other",TRUE -4,4,"COSTI DELLA PRODUZIONE ",0,"account_type_view","view",TRUE -41,41,"COSTO DEL VENDUTO ",4,"account_type_view","view",TRUE -4101,4101,"merci c/acquisti ",41,"account_type_expense","other",TRUE -4102,4102,"materie di consumo c/acquisti ",41,"account_type_expense","other",TRUE -4105,4105,"merci c/apporti ",41,"account_type_expense","other",TRUE -4110,4110,"resi su acquisti ",41,"account_type_expense","other",TRUE -4111,4111,"ribassi e abbuoni attivi ",41,"account_type_expense","other",TRUE -4112,4112,"premi su acquisti ",41,"account_type_expense","other",TRUE -4121,4121,"merci c/esistenze iniziali ",41,"account_type_expense","other",TRUE -4122,4122,"materie di consumo c/esistenze iniziali ",41,"account_type_expense","other",TRUE -4131,4131,"merci c/rimanenze finali ",41,"account_type_expense","other",TRUE -4132,4132,"materie di consumo c/rimanenze finali ",41,"account_type_expense","other",TRUE -42,42,"COSTI PER SERVIZI ",4,"account_type_view","view",TRUE -4201,4201,"costi di trasporto ",42,"account_type_expense","other",TRUE -4202,4202,"costi per energia ",42,"account_type_expense","other",TRUE -4203,4203,"costi di pubblicità ",42,"account_type_expense","other",TRUE -4204,4204,"costi di consulenze ",42,"account_type_expense","other",TRUE -4205,4205,"costi postali ",42,"account_type_expense","other",TRUE -4206,4206,"costi telefonici ",42,"account_type_expense","other",TRUE -4207,4207,"costi di assicurazione ",42,"account_type_expense","other",TRUE -4208,4208,"costi di vigilanza ",42,"account_type_expense","other",TRUE -4209,4209,"costi per i locali ",42,"account_type_expense","other",TRUE -4210,4210,"costi di esercizio automezzi ",42,"account_type_expense","other",TRUE -4211,4211,"costi di manutenzione e riparazione ",42,"account_type_expense","other",TRUE -4212,4212,"provvigioni passive ",42,"account_type_expense","other",TRUE -4213,4213,"spese di incasso ",42,"account_type_expense","other",TRUE -43,43,"COSTI PER GODIMENTO BENI DI TERZI ",4,"account_type_view","view",TRUE -4301,4301,"fitti passivi ",43,"account_type_expense","other",TRUE -4302,4302,"canoni di leasing ",43,"account_type_expense","other",TRUE -44,44,"COSTI PER IL PERSONALE ",4,"account_type_view","view",TRUE -4401,4401,"salari e stipendi ",44,"account_type_expense","other",TRUE -4402,4402,"oneri sociali ",44,"account_type_expense","other",TRUE -4403,4403,"TFRL ",44,"account_type_expense","other",TRUE -4404,4404,"altri costi per il personale ",44,"account_type_expense","other",TRUE -45,45,"AMMORTAMENTI IMMOBILIZZAZIONI IMMATERIALI ",4,"account_type_view","view",TRUE -4501,4501,"ammortamento costi di impianto ",45,"account_type_view","other",TRUE -4506,4506,"ammortamento software ",45,"account_type_view","other",TRUE -4508,4508,"ammortamento avviamento ",45,"account_type_view","other",TRUE -46,46,"AMMORTAMENTI IMMOBILIZZAZIONI MATERIALI ",4,"account_type_view","view",TRUE -4601,4601,"ammortamento fabbricati ",46,"account_type_view","other",TRUE -4602,4602,"ammortamento impianti e macchinari ",46,"account_type_view","other",TRUE -4604,4604,"ammortamento attrezzature commerciali ",46,"account_type_view","other",TRUE -4605,4605,"ammortamento macchine d'ufficio ",46,"account_type_view","other",TRUE -4606,4606,"ammortamento arredamento ",46,"account_type_view","other",TRUE -4607,4607,"ammortamento automezzi ",46,"account_type_view","other",TRUE -4608,4608,"ammortamento imballaggi durevoli ",46,"account_type_view","other",TRUE -47,47,"SVALUTAZIONI ",4,"account_type_view","view",TRUE -4701,4701,"svalutazioni immobilizzazioni immateriali ",47,"account_type_view","other",TRUE -4702,4702,"svalutazioni immobilizzazioni materiali ",47,"account_type_view","other",TRUE -4706,4706,"svalutazione crediti ",47,"account_type_view","other",TRUE -48,48,"ACCANTONAMENTI ",4,"account_type_view","view",TRUE -481,481,"ACCANTONAMENTI PER RISCHI ",48,"account_type_view","view",TRUE -4814,4814,"accantonamento per responsabilità civile ",481,"account_type_view","other",TRUE -482,482,"ALTRI ACCANTONAMENTI ",48,"account_type_view","view",TRUE -4821,4821,"accantonamento per spese future ",482,"account_type_view","other",TRUE -4823,4823,"accantonamento per manutenzioni programmate ",482,"account_type_view","other",TRUE -49,49,"ONERI DIVERSI ",4,"account_type_view","view",TRUE -4901,4901,"oneri fiscali diversi ",49,"account_type_view","other",TRUE -4903,4903,"oneri vari ",49,"account_type_view","other",TRUE -4905,4905,"perdite su crediti ",49,"account_type_view","other",TRUE -4910,4910,"arrotondamenti passivi ",49,"account_type_view","other",TRUE -4920,4920,"minusvalenze ordinarie diverse ",49,"account_type_view","other",TRUE -4930,4930,"sopravvenienze passive ordinarie diverse ",49,"account_type_view","other",TRUE -4940,4940,"insussistenze passive ordinarie diverse ",49,"account_type_view","other",TRUE -5,5,"PROVENTI E ONERI FINANZIARI ",0,"account_type_view","view",TRUE -51,51,"PROVENTI FINANZIARI ",5,"account_type_view","view",TRUE -5110,5110,"interessi attivi v/clienti ",51,"account_type_view","other",TRUE -5115,5115,"interessi attivi bancari ",51,"account_type_view","other",TRUE -5116,5116,"interessi attivi postali ",51,"account_type_view","other",TRUE -5140,5140,"proventi finanziari diversi ",51,"account_type_view","other",TRUE -52,52,"ONERI FINANZIARI ",5,"account_type_view","view",TRUE -5201,5201,"interessi passivi v/fornitori ",52,"account_type_view","other",TRUE -5202,5202,"interessi passivi bancari ",52,"account_type_view","other",TRUE -5203,5203,"sconti passivi bancari ",52,"account_type_view","other",TRUE -5210,5210,"interessi passivi su mutui ",52,"account_type_view","other",TRUE -5240,5240,"oneri finanziari diversi ",52,"account_type_view","other",TRUE -7,7,"PROVENTI E ONERI STRAORDINARI ",0,"account_type_view","view",TRUE -71,71,"PROVENTI STRAORDINARI ",7,"account_type_view","view",TRUE -7101,7101,"plusvalenze straordinarie ",71,"account_type_view","other",TRUE -7102,7102,"sopravvenienze attive straordinarie ",71,"account_type_view","other",TRUE -7103,7103,"insussistenze attive straordinarie ",71,"account_type_view","other",TRUE -72,72,"ONERI STRAORDINARI ",7,"account_type_view","view",TRUE -7201,7201,"minusvalenze straordinarie ",72,"account_type_view","other",TRUE -7202,7202,"sopravvenienze passive straordinarie ",72,"account_type_view","other",TRUE -7203,7203,"insussistenze passive straordinarie ",72,"account_type_view","other",TRUE -7204,7204,"imposte esercizi precedenti ",72,"account_type_view","other",TRUE -81,81,"IMPOSTE DELL'ESERCIZIO ",7,"account_type_view","view",TRUE -8101,8101,"imposte dell'esercizio ",81,"account_type_view","other",TRUE -91,91,"CONTI DI RISULTATO ",7,"account_type_view","view",TRUE -9101,9101,"conto di risultato economico ",91,"account_type_view","other",TRUE +"0","0","Azienda",,"account_type_view","view","FALSE" +"1","1","ATTIVO ","0","account_type_view","view","TRUE" +"11","11","IMMOBILIZZAZIONI IMMATERIALI ","1","account_type_view","view","TRUE" +"1101","1101","costi di impianto ","11","account_type_asset","other","TRUE" +"1106","1106","software ","11","account_type_asset","other","TRUE" +"1108","1108","avviamento ","11","account_type_asset","other","TRUE" +"1111","1111","fondo ammortamento costi di impianto ","11","account_type_asset","other","TRUE" +"1116","1116","fondo ammortamento software ","11","account_type_asset","other","TRUE" +"1118","1118","fondo ammortamento avviamento ","11","account_type_asset","other","TRUE" +"12","12","IMMOBILIZZAZIONI MATERIALI ","1","account_type_view","view","TRUE" +"1201","1201","fabbricati ","12","account_type_asset","other","TRUE" +"1202","1202","impianti e macchinari ","12","account_type_asset","other","TRUE" +"1204","1204","attrezzature commerciali ","12","account_type_asset","other","TRUE" +"1205","1205","macchine d'ufficio ","12","account_type_asset","other","TRUE" +"1206","1206","arredamento ","12","account_type_asset","other","TRUE" +"1207","1207","automezzi ","12","account_type_asset","other","TRUE" +"1208","1208","imballaggi durevoli ","12","account_type_asset","other","TRUE" +"1211","1211","fondo ammortamento fabbricati ","12","account_type_asset","other","TRUE" +"1212","1212","fondo ammortamento impianti e macchinari ","12","account_type_asset","other","TRUE" +"1214","1214","fondo ammortamento attrezzature commerciali ","12","account_type_asset","other","TRUE" +"1215","1215","fondo ammortamento macchine d'ufficio ","12","account_type_asset","other","TRUE" +"1216","1216","fondo ammortamento arredamento ","12","account_type_asset","other","TRUE" +"1217","1217","fondo ammortamento automezzi ","12","account_type_asset","other","TRUE" +"1218","1218","fondo ammortamento imballaggi durevoli ","12","account_type_asset","other","TRUE" +"1220","1220","fornitori immobilizzazioni c/acconti ","12","account_type_asset","other","TRUE" +"13","13","IMMOBILIZZAZIONI FINANZIARIE ","1","account_type_view","view","TRUE" +"1301","1301","mutui attivi ","13","account_type_asset","other","TRUE" +"14","14","RIMANENZE ","1","account_type_view","view","TRUE" +"1401","1401","materie di consumo ","14","account_type_asset","other","TRUE" +"1404","1404","merci ","14","account_type_asset","other","TRUE" +"1410","1410","fornitori c/acconti ","14","account_type_asset","other","TRUE" +"15","15","CREDITI COMMERCIALI ","1","account_type_view","view","TRUE" +"1501","1501","crediti v/clienti ","15","account_type_receivable","receivable","TRUE" +"1502","1502","crediti commerciali diversi ","15","account_type_receivable","other","TRUE" +"1503","1503","clienti c/spese anticipate ","15","account_type_receivable","receivable","TRUE" +"1505","1505","cambiali attive ","15","account_type_receivable","other","TRUE" +"1506","1506","cambiali allo sconto ","15","account_type_receivable","other","TRUE" +"1507","1507","cambiali all'incasso ","15","account_type_receivable","other","TRUE" +"1509","1509","fatture da emettere ","15","account_type_receivable","other","TRUE" +"1510","1510","crediti insoluti ","15","account_type_receivable","other","TRUE" +"1511","1511","cambiali insolute ","15","account_type_receivable","other","TRUE" +"1531","1531","crediti da liquidare ","15","account_type_receivable","other","TRUE" +"1540","1540","fondo svalutazione crediti ","15","account_type_receivable","other","TRUE" +"1541","1541","fondo rischi su crediti ","15","account_type_receivable","other","TRUE" +"16","16","CREDITI DIVERSI ","1","account_type_view","view","TRUE" +"1601","1601","IVA n/credito ","16","account_type_tax","other","TRUE" +"1602","1602","IVA c/acconto ","16","account_type_tax","other","TRUE" +"1605","1605","crediti per IVA ","16","account_type_tax","other","TRUE" +"1607","1607","imposte c/acconto ","16","account_type_tax","other","TRUE" +"1608","1608","crediti per imposte ","16","account_type_tax","other","TRUE" +"1609","1609","crediti per ritenute subite ","16","account_type_asset","other","TRUE" +"1610","1610","crediti per cauzioni ","16","account_type_asset","other","TRUE" +"1620","1620","personale c/acconti ","16","account_type_asset","other","TRUE" +"1630","1630","crediti v/istituti previdenziali ","16","account_type_asset","other","TRUE" +"1640","1640","debitori diversi ","16","account_type_receivable","receivable","TRUE" +"18","18","DISPONIBILITÀ LIQUIDE ","1","account_type_view","view","TRUE" +"1801","1801","banche c/c ","18","account_type_bank","liquidity","TRUE" +"1810","1810","c/c postali ","18","account_type_cash","liquidity","TRUE" +"1820","1820","denaro in cassa ","18","account_type_cash","liquidity","TRUE" +"1821","1821","assegni ","18","account_type_cash","liquidity","TRUE" +"1822","1822","valori bollati ","18","account_type_cash","liquidity","TRUE" +"19","19","RATEI E RISCONTI ATTIVI ","1","account_type_view","view","TRUE" +"1901","1901","ratei attivi ","19","account_type_asset","other","TRUE" +"1902","1902","risconti attivi ","19","account_type_asset","other","TRUE" +"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_asset","other","TRUE" +"2102","2102","utile d'esercizio ","20","account_type_asset","other","TRUE" +"2103","2103","perdita d'esercizio ","20","account_type_asset","other","TRUE" +"2104","2104","prelevamenti extra gestione ","20","account_type_asset","other","TRUE" +"2105","2105","titolare c/ritenute subite ","20","account_type_asset","other","TRUE" +"22","22","FONDI PER RISCHI E ONERI ","2","account_type_view","view","TRUE" +"2201","2201","fondo per imposte ","22","account_type_asset","other","TRUE" +"2204","2204","fondo responsabilità civile ","22","account_type_asset","other","TRUE" +"2205","2205","fondo spese future ","22","account_type_asset","other","TRUE" +"2211","2211","fondo manutenzioni programmate ","22","account_type_asset","other","TRUE" +"23","23","TRATTAMENTO FINE RAPPORTO DI LAVORO ","2","account_type_view","view","TRUE" +"2301","2301","debiti per TFRL ","23","account_type_asset","other","TRUE" +"24","24","DEBITI FINANZIARI ","2","account_type_view","view","TRUE" +"2410","2410","mutui passivi ","24","account_type_asset","other","TRUE" +"2411","2411","banche c/sovvenzioni ","24","account_type_asset","other","TRUE" +"2420","2420","banche c/c passivi ","24","account_type_asset","other","TRUE" +"2421","2421","banche c/RIBA all'incasso ","24","account_type_asset","other","TRUE" +"2422","2422","banche c/cambiali all'incasso ","24","account_type_asset","other","TRUE" +"2423","2423","banche c/anticipi su fatture ","24","account_type_asset","other","TRUE" +"2440","2440","debiti v/altri finanziatori ","24","account_type_asset","other","TRUE" +"25","25","DEBITI COMMERCIALI ","2","account_type_view","view","TRUE" +"2501","2501","debiti v/fornitori ","25","account_type_payable","payable","TRUE" +"2503","2503","cambiali passive ","25","account_type_asset","other","TRUE" +"2520","2520","fatture da ricevere ","25","account_type_asset","other","TRUE" +"2521","2521","debiti da liquidare ","25","account_type_asset","other","TRUE" +"2530","2530","clienti c/acconti ","25","account_type_payable","payable","TRUE" +"26","26","DEBITI DIVERSI ","2","account_type_view","view","TRUE" +"2601","2601","IVA n/debito ","26","account_type_tax","other","TRUE" +"2602","2602","debiti per ritenute da versare ","26","account_type_tax","other","TRUE" +"2605","2605","erario c/IVA ","26","account_type_tax","other","TRUE" +"2606","2606","debiti per imposte ","26","account_type_tax","other","TRUE" +"2619","2619","debiti per cauzioni ","26","account_type_asset","other","TRUE" +"2620","2620","personale c/retribuzioni ","26","account_type_asset","other","TRUE" +"2621","2621","personale c/liquidazioni ","26","account_type_asset","other","TRUE" +"2622","2622","clienti c/cessione ","26","account_type_asset","other","TRUE" +"2630","2630","debiti v/istituti previdenziali ","26","account_type_asset","other","TRUE" +"2640","2640","creditori diversi ","26","account_type_payable","payable","TRUE" +"27","27","RATEI E RISCONTI PASSIVI ","2","account_type_view","view","TRUE" +"2701","2701","ratei passivi ","27","account_type_asset","other","TRUE" +"2702","2702","risconti passivi ","27","account_type_asset","other","TRUE" +"28","28","CONTI TRANSITORI E DIVERSI ","2","account_type_view","view","TRUE" +"2801","2801","bilancio di apertura ","28","account_type_asset","other","TRUE" +"2802","2802","bilancio di chiusura ","28","account_type_asset","other","TRUE" +"2810","2810","IVA c/liquidazioni ","28","account_type_asset","other","TRUE" +"2811","2811","istituti previdenziali ","28","account_type_asset","other","TRUE" +"2820","2820","banca ... c/c ","28","account_type_asset","other","TRUE" +"2821","2821","banca ... c/c ","28","account_type_asset","other","TRUE" +"2822","2822","banca ... c/c ","28","account_type_asset","other","TRUE" +"29","29","CONTI DEI SISTEMI SUPPLEMENTARI ","2","account_type_view","view","TRUE" +"2901","2901","beni di terzi ","29","account_type_asset","other","TRUE" +"2902","2902","depositanti beni ","29","account_type_asset","other","TRUE" +"2911","2911","merci da ricevere ","29","account_type_asset","other","TRUE" +"2912","2912","fornitori c/impegni ","29","account_type_asset","other","TRUE" +"2913","2913","impegni per beni in leasing ","29","account_type_asset","other","TRUE" +"2914","2914","creditori c/leasing ","29","account_type_asset","other","TRUE" +"2916","2916","clienti c/impegni ","29","account_type_asset","other","TRUE" +"2917","2917","merci da consegnare ","29","account_type_asset","other","TRUE" +"2921","2921","rischi per effetti scontati ","29","account_type_asset","other","TRUE" +"2922","2922","banche c/effetti scontati ","29","account_type_asset","other","TRUE" +"2926","2926","rischi per fideiussioni ","29","account_type_asset","other","TRUE" +"2927","2927","creditori per fideiussioni ","29","account_type_asset","other","TRUE" +"2931","2931","rischi per avalli ","29","account_type_asset","other","TRUE" +"2932","2932","creditori per avalli ","29","account_type_asset","other","TRUE" +"3","3","VALORE DELLA PRODUZIONE ","0","account_type_view","view","TRUE" +"31","31","VENDITE E PRESTAZIONI ","3","account_type_view","view","TRUE" +"3101","3101","merci c/vendite ","31","account_type_income","other","TRUE" +"3103","3103","rimborsi spese di vendita ","31","account_type_income","other","TRUE" +"3110","3110","resi su vendite ","31","account_type_income","other","TRUE" +"3111","3111","ribassi e abbuoni passivi ","31","account_type_income","other","TRUE" +"3112","3112","premi su vendite ","31","account_type_income","other","TRUE" +"32","32","RICAVI E PROVENTI DIVERSI ","3","account_type_view","view","TRUE" +"3201","3201","fitti attivi ","32","account_type_income","other","TRUE" +"3202","3202","proventi vari ","32","account_type_income","other","TRUE" +"3210","3210","arrotondamenti attivi ","32","account_type_income","other","TRUE" +"3220","3220","plusvalenze ordinarie diverse ","32","account_type_income","other","TRUE" +"3230","3230","sopravvenienze attive ordinarie diverse ","32","account_type_income","other","TRUE" +"3240","3240","insussistenze attive ordinarie diverse ","32","account_type_income","other","TRUE" +"4","4","COSTI DELLA PRODUZIONE ","0","account_type_view","view","TRUE" +"41","41","COSTO DEL VENDUTO ","4","account_type_view","view","TRUE" +"4101","4101","merci c/acquisti ","41","account_type_expense","other","TRUE" +"4102","4102","materie di consumo c/acquisti ","41","account_type_expense","other","TRUE" +"4105","4105","merci c/apporti ","41","account_type_expense","other","TRUE" +"4110","4110","resi su acquisti ","41","account_type_expense","other","TRUE" +"4111","4111","ribassi e abbuoni attivi ","41","account_type_expense","other","TRUE" +"4112","4112","premi su acquisti ","41","account_type_expense","other","TRUE" +"4121","4121","merci c/esistenze iniziali ","41","account_type_expense","other","TRUE" +"4122","4122","materie di consumo c/esistenze iniziali ","41","account_type_expense","other","TRUE" +"4131","4131","merci c/rimanenze finali ","41","account_type_expense","other","TRUE" +"4132","4132","materie di consumo c/rimanenze finali ","41","account_type_expense","other","TRUE" +"42","42","COSTI PER SERVIZI ","4","account_type_view","view","TRUE" +"4201","4201","costi di trasporto ","42","account_type_expense","other","TRUE" +"4202","4202","costi per energia ","42","account_type_expense","other","TRUE" +"4203","4203","costi di pubblicità ","42","account_type_expense","other","TRUE" +"4204","4204","costi di consulenze ","42","account_type_expense","other","TRUE" +"4205","4205","costi postali ","42","account_type_expense","other","TRUE" +"4206","4206","costi telefonici ","42","account_type_expense","other","TRUE" +"4207","4207","costi di assicurazione ","42","account_type_expense","other","TRUE" +"4208","4208","costi di vigilanza ","42","account_type_expense","other","TRUE" +"4209","4209","costi per i locali ","42","account_type_expense","other","TRUE" +"4210","4210","costi di esercizio automezzi ","42","account_type_expense","other","TRUE" +"4211","4211","costi di manutenzione e riparazione ","42","account_type_expense","other","TRUE" +"4212","4212","provvigioni passive ","42","account_type_expense","other","TRUE" +"4213","4213","spese di incasso ","42","account_type_expense","other","TRUE" +"43","43","COSTI PER GODIMENTO BENI DI TERZI ","4","account_type_view","view","TRUE" +"4301","4301","fitti passivi ","43","account_type_expense","other","TRUE" +"4302","4302","canoni di leasing ","43","account_type_expense","other","TRUE" +"44","44","COSTI PER IL PERSONALE ","4","account_type_view","view","TRUE" +"4401","4401","salari e stipendi ","44","account_type_expense","other","TRUE" +"4402","4402","oneri sociali ","44","account_type_expense","other","TRUE" +"4403","4403","TFRL ","44","account_type_expense","other","TRUE" +"4404","4404","altri costi per il personale ","44","account_type_expense","other","TRUE" +"45","45","AMMORTAMENTI IMMOBILIZZAZIONI IMMATERIALI ","4","account_type_view","view","TRUE" +"4501","4501","ammortamento costi di impianto ","45","account_type_p_l","other","TRUE" +"4506","4506","ammortamento software ","45","account_type_p_l","other","TRUE" +"4508","4508","ammortamento avviamento ","45","account_type_p_l","other","TRUE" +"46","46","AMMORTAMENTI IMMOBILIZZAZIONI MATERIALI ","4","account_type_view","view","TRUE" +"4601","4601","ammortamento fabbricati ","46","account_type_p_l","other","TRUE" +"4602","4602","ammortamento impianti e macchinari ","46","account_type_p_l","other","TRUE" +"4604","4604","ammortamento attrezzature commerciali ","46","account_type_p_l","other","TRUE" +"4605","4605","ammortamento macchine d'ufficio ","46","account_type_p_l","other","TRUE" +"4606","4606","ammortamento arredamento ","46","account_type_p_l","other","TRUE" +"4607","4607","ammortamento automezzi ","46","account_type_p_l","other","TRUE" +"4608","4608","ammortamento imballaggi durevoli ","46","account_type_p_l","other","TRUE" +"47","47","SVALUTAZIONI ","4","account_type_view","view","TRUE" +"4701","4701","svalutazioni immobilizzazioni immateriali ","47","account_type_p_l","other","TRUE" +"4702","4702","svalutazioni immobilizzazioni materiali ","47","account_type_p_l","other","TRUE" +"4706","4706","svalutazione crediti ","47","account_type_p_l","other","TRUE" +"48","48","ACCANTONAMENTI ","4","account_type_view","view","TRUE" +"481","481","ACCANTONAMENTI PER RISCHI ","48","account_type_view","view","TRUE" +"4814","4814","accantonamento per responsabilità civile ","481","account_type_p_l","other","TRUE" +"482","482","ALTRI ACCANTONAMENTI ","48","account_type_view","view","TRUE" +"4821","4821","accantonamento per spese future ","482","account_type_p_l","other","TRUE" +"4823","4823","accantonamento per manutenzioni programmate ","482","account_type_p_l","other","TRUE" +"49","49","ONERI DIVERSI ","4","account_type_view","view","TRUE" +"4901","4901","oneri fiscali diversi ","49","account_type_p_l","other","TRUE" +"4903","4903","oneri vari ","49","account_type_p_l","other","TRUE" +"4905","4905","perdite su crediti ","49","account_type_p_l","other","TRUE" +"4910","4910","arrotondamenti passivi ","49","account_type_p_l","other","TRUE" +"4920","4920","minusvalenze ordinarie diverse ","49","account_type_p_l","other","TRUE" +"4930","4930","sopravvenienze passive ordinarie diverse ","49","account_type_p_l","other","TRUE" +"4940","4940","insussistenze passive ordinarie diverse ","49","account_type_p_l","other","TRUE" +"5","5","PROVENTI E ONERI FINANZIARI ","0","account_type_view","view","TRUE" +"51","51","PROVENTI FINANZIARI ","5","account_type_view","view","TRUE" +"5110","5110","interessi attivi v/clienti ","51","account_type_p_l","other","TRUE" +"5115","5115","interessi attivi bancari ","51","account_type_p_l","other","TRUE" +"5116","5116","interessi attivi postali ","51","account_type_p_l","other","TRUE" +"5140","5140","proventi finanziari diversi ","51","account_type_p_l","other","TRUE" +"52","52","ONERI FINANZIARI ","5","account_type_view","view","TRUE" +"5201","5201","interessi passivi v/fornitori ","52","account_type_p_l","other","TRUE" +"5202","5202","interessi passivi bancari ","52","account_type_p_l","other","TRUE" +"5203","5203","sconti passivi bancari ","52","account_type_p_l","other","TRUE" +"5210","5210","interessi passivi su mutui ","52","account_type_p_l","other","TRUE" +"5240","5240","oneri finanziari diversi ","52","account_type_p_l","other","TRUE" +"7","7","PROVENTI E ONERI STRAORDINARI ","0","account_type_view","view","TRUE" +"71","71","PROVENTI STRAORDINARI ","7","account_type_view","view","TRUE" +"7101","7101","plusvalenze straordinarie ","71","account_type_p_l","other","TRUE" +"7102","7102","sopravvenienze attive straordinarie ","71","account_type_p_l","other","TRUE" +"7103","7103","insussistenze attive straordinarie ","71","account_type_p_l","other","TRUE" +"72","72","ONERI STRAORDINARI ","7","account_type_view","view","TRUE" +"7201","7201","minusvalenze straordinarie ","72","account_type_p_l","other","TRUE" +"7202","7202","sopravvenienze passive straordinarie ","72","account_type_p_l","other","TRUE" +"7203","7203","insussistenze passive straordinarie ","72","account_type_p_l","other","TRUE" +"7204","7204","imposte esercizi precedenti ","72","account_type_p_l","other","TRUE" +"8","8","IMPOSTE DELL'ESERCIZIO ","0","account_type_view","view","TRUE" +"8101","8101","imposte dell'esercizio ","8","account_type_p_l","other","TRUE" +"9","9","CONTI DI RISULTATO ","0","account_type_view","view","TRUE" +"9101","9101","conto di risultato economico ","9","account_type_p_l","other","TRUE" +"9102","9102","stato patrimoniale","9","account_type_p_l","other","TRUE" diff --git a/addons/l10n_it/data/account.account.type.csv b/addons/l10n_it/data/account.account.type.csv index 273ff71eb05..36eeebbbe89 100644 --- a/addons/l10n_it/data/account.account.type.csv +++ b/addons/l10n_it/data/account.account.type.csv @@ -1,11 +1,11 @@ "id","code","name","close_method","report_type" -"account_type_receivable","receivable","Debiti","unreconciled","liability" -"account_type_payable","payable","Crediti","unreconciled","asset" +"account_type_receivable","receivable","Crediti","unreconciled","asset" +"account_type_payable","payable","Debiti","unreconciled","liability" "account_type_view","view","Gerarchia","none", "account_type_income","income","Entrate","none","income" "account_type_expense","expense","Uscite","none","expense" -"account_type_tax","tax","Tasse","none", +"account_type_tax","tax","Tasse","balance", "account_type_cash","cash","Liquidità","balance","asset" -"account_type_asset","asset","Beni","none","asset" +"account_type_asset","asset","Beni","balance","asset" "account_type_bank","bank","Banca","balance","asset" -"account_type_equity","equity","Capitale","none","asset" +"account_type_p_l","p_l","Conto Economico","none", diff --git a/addons/l10n_it/data/account.tax.code.template.csv b/addons/l10n_it/data/account.tax.code.template.csv index 288f169f4ab..40f0545aff9 100644 --- a/addons/l10n_it/data/account.tax.code.template.csv +++ b/addons/l10n_it/data/account.tax.code.template.csv @@ -26,6 +26,8 @@ "IVC4Idet50","template_impcode_pagata_4det50","IVA a credito 4% detraibile 50% (imponibile)","template_impcode_pagata" "IVC20","template_ivacode_pagata_20","IVA a credito 20%","template_ivacode_pagata" "IVC20I","template_impcode_pagata_20","IVA a credito 20% (imponibile)","template_impcode_pagata" +"IVC21","template_ivacode_pagata_21","IVA a credito 21%","template_ivacode_pagata" +"IVC21I","template_impcode_pagata_21","IVA a credito 21% (imponibile)","template_impcode_pagata" "IVC4","template_ivacode_pagata_4","IVA a credito 4%","template_ivacode_pagata" "IVC4I","template_impcode_pagata_4","IVA a credito 4% (imponibile)","template_impcode_pagata" "IVC12","template_ivacode_pagata_12","IVA a credito 12%","template_ivacode_pagata" @@ -40,9 +42,21 @@ "IVD10I","template_impcode_riscossa_10","IVA a debito 10% (imponibile)","template_impcode_riscossa" "IVD20","template_ivacode_riscossa_20","IVA a debito 20%","template_ivacode_riscossa" "IVD20I","template_impcode_riscossa_20","IVA a debito 20% (imponibile)","template_impcode_riscossa" +"IVD21","template_ivacode_riscossa_21","IVA a debito 21%","template_ivacode_riscossa" +"IVD21I","template_impcode_riscossa_21","IVA a debito 21% (imponibile)","template_impcode_riscossa" "IVD4","template_ivacode_riscossa_4","IVA a debito 4%","template_ivacode_riscossa" "IVD4I","template_impcode_riscossa_4","IVA a debito 4% (imponibile)","template_impcode_riscossa" "IVD12","template_ivacode_riscossa_12","IVA a debito 12%","template_ivacode_riscossa" "IVD12I","template_impcode_riscossa_12","IVA a debito 12% (imponibile)","template_impcode_riscossa" "IVD2","template_ivacode_riscossa_2","IVA a debito 2%","template_ivacode_riscossa" "IVD2I","template_impcode_riscossa_2","IVA a debito 2% (imponibile)","template_impcode_riscossa" +"IVC21ind","template_ivacode_pagata_21ind","IVA a credito 21% indetraibile","template_ivacode_pagata" +"IVC21Iind","template_impcode_pagata_21ind","IVA a credito 21% indetraibile (imponibile)","template_impcode_pagata" +"IVC21det10","template_ivacode_pagata_21det10","IVA a credito 21% detraibile 10%","template_ivacode_pagata" +"IVC21Idet10","template_impcode_pagata_21det10","IVA a credito 21% detraibile 10% (imponibile)","template_impcode_pagata" +"IVC21det15","template_ivacode_pagata_21det15","IVA a credito 21% detraibile 15%","template_ivacode_pagata" +"IVC21Idet15","template_impcode_pagata_21det15","IVA a credito 21% detraibile 15% (imponibile)","template_impcode_pagata" +"IVC21det40","template_ivacode_pagata_21det40","IVA a credito 21% detraibile 40%","template_ivacode_pagata" +"IVC21Idet40","template_impcode_pagata_21det40","IVA a credito 21% detraibile 40% (imponibile)","template_impcode_pagata" +"IVC21det50","template_ivacode_pagata_21det50","IVA a credito 21% detraibile 50%","template_ivacode_pagata" +"IVC21Idet50","template_impcode_pagata_21det50","IVA a credito 21% detraibile 50% (imponibile)","template_impcode_pagata" diff --git a/addons/l10n_it/data/account.tax.template.csv b/addons/l10n_it/data/account.tax.template.csv index cf9caeeb0d4..641f495dd72 100644 --- a/addons/l10n_it/data/account.tax.template.csv +++ b/addons/l10n_it/data/account.tax.template.csv @@ -1,40 +1,64 @@ -"id","description","chart_template_id:id","name","amount","parent_id:id","child_depend","type","account_collected_id:id","account_paid_id:id","type_tax_use","base_code_id:id","tax_code_id:id","ref_base_code_id:id","ref_tax_code_id:id" -"20a","20a","l10n_it_chart_template_generic","Iva al 20% (debito)","0.2",,"False","percent","2601","2601","sale","template_impcode_riscossa_20","template_ivacode_riscossa_20","template_impcode_riscossa_20","template_ivacode_riscossa_20" -"20b","20b","l10n_it_chart_template_generic","Iva al 20% (credito)","0.2",,"False","percent","1601","1601","purchase","template_impcode_pagata_20","template_ivacode_pagata_20","template_impcode_pagata_20","template_ivacode_pagata_20" -"10a","10a","l10n_it_chart_template_generic","Iva al 10% (debito)","0.1",,"False","percent","2601","2601","sale","template_impcode_riscossa_10","template_ivacode_riscossa_10","template_impcode_riscossa_10","template_ivacode_riscossa_10" -"10b","10b","l10n_it_chart_template_generic","Iva al 10% (credito)","0.1",,"False","percent","1601","1601","purchase","template_impcode_pagata_10","template_ivacode_pagata_10","template_impcode_pagata_10","template_ivacode_pagata_10" -"10AO","10AO","l10n_it_chart_template_generic","Iva al 10% indetraibile","1",,"True","percent",,,"purchase",,,, -"10AOa","10AOa","l10n_it_chart_template_generic","Iva al 10% indetraibile (1)","0","10AO","False","percent","1601","1601","purchase","template_impcode_pagata_10ind","template_ivacode_pagata_10ind","template_impcode_pagata_10ind","template_ivacode_pagata_10ind" -"10AOb","10AOb","l10n_it_chart_template_generic","Iva al 10% indetraibile (2)","0.1","10AO","False","percent",,,"purchase",,,, -"12a","12a","l10n_it_chart_template_generic","Iva 12% (debito)","0.12",,"False","percent","2601","2601","sale","template_impcode_riscossa_12","template_ivacode_riscossa_12","template_impcode_riscossa_12","template_ivacode_riscossa_12" -"12b","12b","l10n_it_chart_template_generic","Iva 12% (credito)","0.12",,"False","percent","1601","1601","purchase","template_impcode_pagata_12","template_ivacode_pagata_12","template_impcode_pagata_12","template_ivacode_pagata_12" -"2010","2010","l10n_it_chart_template_generic","Iva al 20% detraibile 10%","1",,"True","percent",,,"purchase",,,, -"2010a","2010a","l10n_it_chart_template_generic","Iva al 20% detraibile 10% (1)","0.02","2010","False","percent","1601","1601","purchase","template_impcode_pagata_20det10","template_ivacode_pagata_20det10","template_impcode_pagata_20det10","template_ivacode_pagata_20det10" -"2010b","2010b","l10n_it_chart_template_generic","Iva al 20% detraibile 10% (2)","0.18","2010","False","percent",,,"purchase",,,, -"2015","2015","l10n_it_chart_template_generic","Iva al 20% detraibile 15%","1",,"True","percent",,,"purchase",,,, -"2015a","2015a","l10n_it_chart_template_generic","Iva al 20% detraibile 15% (1)","0.03","2015","False","percent","1601","1601","purchase","template_impcode_pagata_20det15","template_ivacode_pagata_20det15","template_impcode_pagata_20det15","template_ivacode_pagata_20det15" -"2015b","2015b","l10n_it_chart_template_generic","Iva al 20% detraibile 15% (2)","0.17","2015","False","percent",,,"purchase",,,, -"2040","2040","l10n_it_chart_template_generic","Iva al 20% detraibile 40%","1",,"True","percent",,,"purchase",,,, -"2040a","2040a","l10n_it_chart_template_generic","Iva al 20% detraibile 40% (1)","0.08","2040","False","percent","1601","1601","purchase","template_impcode_pagata_20det40","template_ivacode_pagata_20det40","template_impcode_pagata_20det40","template_ivacode_pagata_20det40" -"2040b","2040b","l10n_it_chart_template_generic","Iva al 20% detraibile 40% (2)","0.12","2040","False","percent",,,"purchase",,,, -"20AO","20AO","l10n_it_chart_template_generic","Iva al 20% indetraibile","1",,"True","percent",,,"purchase",,,, -"20AOa","20AOa","l10n_it_chart_template_generic","Iva al 20% indetraibile (1)","0","20AO","False","percent","1601","1601","purchase","template_impcode_pagata_20ind","template_ivacode_pagata_20ind","template_impcode_pagata_20ind","template_ivacode_pagata_20ind" -"20AOb","20AOb","l10n_it_chart_template_generic","Iva al 20% indetraibile (2)","0.2","20AO","False","percent",,,"purchase",,,, -"20I5","20I5","l10n_it_chart_template_generic","IVA al 20% detraibile al 50%","1",,"True","percent",,,"purchase",,,, -"20I5a","20I5a","l10n_it_chart_template_generic","IVA al 20% detraibile al 50% (1)","0.1","20I5","False","percent","1601","1601","purchase","template_impcode_pagata_20det50","template_ivacode_pagata_20det50","template_impcode_pagata_20det50","template_ivacode_pagata_20det50" -"20I5b","20I5b","l10n_it_chart_template_generic","IVA al 20% detraibile al 50% (2)","0.1","20I5","False","percent",,,"purchase",,,, -"22a","22a","l10n_it_chart_template_generic","Iva 2% (debito)","0.02",,"False","percent","2601","2601","sale","template_impcode_riscossa_2","template_ivacode_riscossa_2","template_impcode_riscossa_2","template_ivacode_riscossa_2" -"22b","22b","l10n_it_chart_template_generic","Iva 2% (credito)","0.02",,"False","percent","1601","1601","purchase","template_impcode_pagata_2","template_ivacode_pagata_2","template_impcode_pagata_2","template_ivacode_pagata_2" -"4a","4a","l10n_it_chart_template_generic","Iva 4% (debito)","0.04",,"False","percent","2601","2601","sale","template_impcode_riscossa_4","template_ivacode_riscossa_4","template_impcode_riscossa_4","template_ivacode_riscossa_4" -"4b","4b","l10n_it_chart_template_generic","Iva 4% (credito)","0.04",,"False","percent","1601","1601","purchase","template_impcode_pagata_4","template_ivacode_pagata_4","template_impcode_pagata_4","template_ivacode_pagata_4" -"4AO","4AO","l10n_it_chart_template_generic","Iva al 4% indetraibile","1",,"True","percent",,,"purchase",,,, -"4AOa","4AOa","l10n_it_chart_template_generic","Iva al 4% indetraibile (1)","0","4AO","False","percent","1601","1601","purchase","template_impcode_pagata_4ind","template_ivacode_pagata_4ind","template_impcode_pagata_4ind","template_ivacode_pagata_4ind" -"4AOb","4AOb","l10n_it_chart_template_generic","Iva al 4% indetraibile (2)","0.04","4AO","False","percent",,,"purchase",,,, -"10I5","10I5","l10n_it_chart_template_generic","IVA al 10% detraibile al 50%","1",,"True","percent",,,"purchase",,,, -"10I5a","10I5a","l10n_it_chart_template_generic","IVA al 10% detraibile al 50% (1)","0.05","10I5","False","percent","1601","1601","purchase","template_impcode_pagata_10det50","template_ivacode_pagata_10det50","template_impcode_pagata_10det50","template_ivacode_pagata_10det50" -"10I5b","10I5b","l10n_it_chart_template_generic","IVA al 10% detraibile al 50% (2)","0.05","10I5","False","percent",,,"purchase",,,, -"4I5","4I5","l10n_it_chart_template_generic","IVA al 4% detraibile al 50%","1",,"True","percent",,,"purchase",,,, -"4I5a","4I5a","l10n_it_chart_template_generic","IVA al 4% detraibile al 50% (1)","0.02","4I5","False","percent","1601","1601","purchase","template_impcode_pagata_4det50","template_ivacode_pagata_4det50","template_impcode_pagata_4det50","template_ivacode_pagata_4det50" -"4I5b","4I5b","l10n_it_chart_template_generic","IVA al 4% detraibile al 50% (2)","0.02","4I5","False","percent",,,"purchase",,,, -"00a","00a","l10n_it_chart_template_generic","Esente IVA (debito)","0",,"False","percent","2601","2601","sale","template_impcode_riscossa_0","template_ivacode_riscossa_0","template_impcode_riscossa_0","template_ivacode_riscossa_0" -"00b","00b","l10n_it_chart_template_generic","Esente IVA (credito)","0",,"False","percent","1601","1601","purchase","template_impcode_pagata_0","template_ivacode_pagata_0","template_impcode_pagata_0","template_ivacode_pagata_0" +id,description,chart_template_id:id,name,sequence,amount,parent_id:id,child_depend,type,account_collected_id:id,account_paid_id:id,type_tax_use,base_code_id:id,tax_code_id:id,ref_base_code_id:id,ref_tax_code_id:id,ref_base_sign,ref_tax_sign,price_include,base_sign,tax_sign +21a,21a,l10n_it_chart_template_generic,Iva al 21% (debito),,0.21,,False,percent,2601,2601,sale,template_impcode_riscossa_21,template_ivacode_riscossa_21,template_impcode_riscossa_21,template_ivacode_riscossa_21,-1,-1,False,, +21b,21b,l10n_it_chart_template_generic,Iva al 21% (credito),,0.21,,False,percent,1601,1601,purchase,template_impcode_pagata_21,template_ivacode_pagata_21,template_impcode_pagata_21,template_ivacode_pagata_21,,,False,-1,-1 +20a,20a,l10n_it_chart_template_generic,Iva al 20% (debito),,0.2,,False,percent,2601,2601,sale,template_impcode_riscossa_20,template_ivacode_riscossa_20,template_impcode_riscossa_20,template_ivacode_riscossa_20,-1,-1,False,, +20b,20b,l10n_it_chart_template_generic,Iva al 20% (credito),,0.2,,False,percent,1601,1601,purchase,template_impcode_pagata_20,template_ivacode_pagata_20,template_impcode_pagata_20,template_ivacode_pagata_20,,,False,-1,-1 +10a,10a,l10n_it_chart_template_generic,Iva al 10% (debito),,0.1,,False,percent,2601,2601,sale,template_impcode_riscossa_10,template_ivacode_riscossa_10,template_impcode_riscossa_10,template_ivacode_riscossa_10,-1,-1,False,, +10b,10b,l10n_it_chart_template_generic,Iva al 10% (credito),,0.1,,False,percent,1601,1601,purchase,template_impcode_pagata_10,template_ivacode_pagata_10,template_impcode_pagata_10,template_ivacode_pagata_10,,,False,-1,-1 +10AO,10AO,l10n_it_chart_template_generic,Iva al 10% indetraibile,,0.1,,True,percent,,,purchase,template_impcode_pagata_10ind,,template_impcode_pagata_10ind,,,,False,-1,-1 +10AOa,10AOa,l10n_it_chart_template_generic,Iva al 10% indetraibile (D),2,0,10AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_10ind,,template_ivacode_pagata_10ind,,,False,, +10AOb,10AOb,l10n_it_chart_template_generic,Iva al 10% indetraibile (I),1,1,10AO,False,percent,,,purchase,,,,,,,False,, +12a,12a,l10n_it_chart_template_generic,Iva 12% (debito),,0.12,,False,percent,2601,2601,sale,template_impcode_riscossa_12,template_ivacode_riscossa_12,template_impcode_riscossa_12,template_ivacode_riscossa_12,-1,-1,False,, +12b,12b,l10n_it_chart_template_generic,Iva 12% (credito),,0.12,,False,percent,1601,1601,purchase,template_impcode_pagata_12,template_ivacode_pagata_12,template_impcode_pagata_12,template_ivacode_pagata_12,,,False,-1,-1 +2010,2010,l10n_it_chart_template_generic,Iva al 20% detraibile 10%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det10,,template_impcode_pagata_20det10,,,,False,-1,-1 +2010a,2010a,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (D),2,0,2010,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det10,,template_ivacode_pagata_20det10,,,False,, +2010b,2010b,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (I),1,0.9,2010,False,percent,,,purchase,,,,,,,False,, +2015,2015,l10n_it_chart_template_generic,Iva al 20% detraibile 15%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det15,,template_impcode_pagata_20det15,,,,False,-1,-1 +2015a,2015a,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (D),2,0,2015,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det15,,template_ivacode_pagata_20det15,,,False,, +2015b,2015b,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (I),1,0.85,2015,False,percent,,,purchase,,,,,,,False,, +2040,2040,l10n_it_chart_template_generic,Iva al 20% detraibile 40%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det40,,template_impcode_pagata_20det40,,,,False,-1,-1 +2040a,2040a,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (D),2,0,2040,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det40,,template_ivacode_pagata_20det40,,,False,, +2040b,2040b,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (I),1,0.6,2040,False,percent,,,purchase,,,,,,,False,, +20AO,20AO,l10n_it_chart_template_generic,Iva al 20% indetraibile,,0.2,,True,percent,,,purchase,template_impcode_pagata_20ind,,template_impcode_pagata_20ind,,,,False,-1,-1 +20AOa,20AOa,l10n_it_chart_template_generic,Iva al 20% indetraibile (D),2,0,20AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_20ind,,template_ivacode_pagata_20ind,,,False,, +20AOb,20AOb,l10n_it_chart_template_generic,Iva al 20% indetraibile (I),1,1,20AO,False,percent,,,purchase,,,,,,,False,, +20I5,20I5,l10n_it_chart_template_generic,IVA al 20% detraibile al 50%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det50,,template_impcode_pagata_20det50,,,,False,-1,-1 +20I5b,20I5b,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (I),1,0.5,20I5,False,percent,,,purchase,,,,,,,False,, +20I5a,20I5a,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (D),2,0,20I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det50,,template_ivacode_pagata_20det50,,,False,, +22a,22a,l10n_it_chart_template_generic,Iva 2% (debito),,0.02,,False,percent,2601,2601,sale,template_impcode_riscossa_2,template_ivacode_riscossa_2,template_impcode_riscossa_2,template_ivacode_riscossa_2,-1,-1,False,, +22b,22b,l10n_it_chart_template_generic,Iva 2% (credito),,0.02,,False,percent,1601,1601,purchase,template_impcode_pagata_2,template_ivacode_pagata_2,template_impcode_pagata_2,template_ivacode_pagata_2,,,False,-1,-1 +4a,4a,l10n_it_chart_template_generic,Iva 4% (debito),,0.04,,False,percent,2601,2601,sale,template_impcode_riscossa_4,template_ivacode_riscossa_4,template_impcode_riscossa_4,template_ivacode_riscossa_4,-1,-1,False,, +4b,4b,l10n_it_chart_template_generic,Iva 4% (credito),,0.04,,False,percent,1601,1601,purchase,template_impcode_pagata_4,template_ivacode_pagata_4,template_impcode_pagata_4,template_ivacode_pagata_4,,,False,-1,-1 +4AO,4AO,l10n_it_chart_template_generic,Iva al 4% indetraibile,,0.04,,True,percent,,,purchase,template_impcode_pagata_4ind,,template_impcode_pagata_4ind,,,,False,-1,-1 +4AOa,4AOa,l10n_it_chart_template_generic,Iva al 4% indetraibile (D),2,0,4AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_4ind,,template_ivacode_pagata_4ind,,,False,, +4AOb,4AOb,l10n_it_chart_template_generic,Iva al 4% indetraibile (I),1,1,4AO,False,percent,,,purchase,,,,,,,False,, +10I5,10I5,l10n_it_chart_template_generic,IVA al 10% detraibile al 50%,,0.1,,True,percent,,,purchase,template_impcode_pagata_10det50,,template_impcode_pagata_10det50,,,,False,-1,-1 +10I5a,10I5a,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (D),2,0,10I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_10det50,,template_ivacode_pagata_10det50,,,False,, +10I5b,10I5b,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (I),1,0.5,10I5,False,percent,,,purchase,,,,,,,False,, +4I5,4I5,l10n_it_chart_template_generic,IVA al 4% detraibile al 50%,,0.04,,True,percent,,,purchase,template_impcode_pagata_4det50,,template_impcode_pagata_4det50,,,,False,-1,-1 +4I5a,4I5a,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (D),2,0,4I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_4det50,,template_ivacode_pagata_4det50,,,False,, +4I5b,4I5b,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (I),1,0.5,4I5,False,percent,,,purchase,,,,,,,False,, +00a,00a,l10n_it_chart_template_generic,Esente IVA (debito),,0,,False,percent,2601,2601,sale,template_impcode_riscossa_0,template_ivacode_riscossa_0,template_impcode_riscossa_0,template_ivacode_riscossa_0,-1,-1,False,, +00b,00b,l10n_it_chart_template_generic,Esente IVA (credito),,0,,False,percent,1601,1601,purchase,template_impcode_pagata_0,template_ivacode_pagata_0,template_impcode_pagata_0,template_ivacode_pagata_0,,,False,-1,-1 +21a INC,21a INC,l10n_it_chart_template_generic,Iva al 21% (debito) INC,,0.21,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,-1,-1,True,, +20a INC,20a INC,l10n_it_chart_template_generic,Iva al 20% (debito) INC,,0.2,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,-1,-1,True,, +10a INC,10a INC,l10n_it_chart_template_generic,Iva al 10% (debito) INC,,0.1,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,-1,-1,True,, +12a INC,12a INC,l10n_it_chart_template_generic,Iva 12% (debito) INC,,0.12,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,-1,-1,True,, +22a INC,22a INC,l10n_it_chart_template_generic,Iva 2% (debito) INC,,0.02,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,-1,-1,True,, +4a INC,4a INC,l10n_it_chart_template_generic,Iva 4% (debito) INC,,0.04,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,-1,-1,True,, +00a INC,00a INC,l10n_it_chart_template_generic,Esente IVA (debito) INC,,0,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,-1,-1,True,, +2110,2110,l10n_it_chart_template_generic,Iva al 21% detraibile 10%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det10,,template_impcode_pagata_21det10,,,,False,-1,-1 +2110a,2110a,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (D),2,0,2110,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det10,,template_ivacode_pagata_21det10,,,False,, +2110b,2110b,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (I),1,0.9,2110,False,percent,,,purchase,,,,,,,False,, +2115,2115,l10n_it_chart_template_generic,Iva al 21% detraibile 15%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det15,,template_impcode_pagata_21det15,,,,False,-1,-1 +2115a,2115a,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (D),2,0,2115,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det15,,template_ivacode_pagata_21det15,,,False,, +2115b,2115b,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (I),1,0.85,2115,False,percent,,,purchase,,,,,,,False,, +2140,2140,l10n_it_chart_template_generic,Iva al 21% detraibile 40%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det40,,template_impcode_pagata_21det40,,,,False,-1,-1 +2140a,2140a,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (D),2,0,2140,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det40,,template_ivacode_pagata_21det40,,,False,, +2140b,2140b,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (I),1,0.6,2140,False,percent,,,purchase,,,,,,,False,, +21AO,21AO,l10n_it_chart_template_generic,Iva al 21% indetraibile,,0.21,,True,percent,,,purchase,template_impcode_pagata_21ind,,template_impcode_pagata_21ind,,,,False,-1,-1 +21AOa,21AOa,l10n_it_chart_template_generic,Iva al 21% indetraibile (D),2,0,21AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_21ind,,template_ivacode_pagata_21ind,,,False,, +21AOb,21AOb,l10n_it_chart_template_generic,Iva al 21% indetraibile (I),1,1,21AO,False,percent,,,purchase,,,,,,,False,, +21I5,21I5,l10n_it_chart_template_generic,IVA al 21% detraibile al 50%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det50,,template_impcode_pagata_21det50,,,,False,-1,-1 +21I5b,21I5b,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (I),1,0.5,21I5,False,percent,,,purchase,,,,,,,False,, +21I5a,21I5a,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (D),2,0,21I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det50,,template_ivacode_pagata_21det50,,,False,, diff --git a/addons/l10n_it/i18n/ca.po b/addons/l10n_it/i18n/ca.po index 67dff86ef1b..13ba50a2b99 100644 --- a/addons/l10n_it/i18n/ca.po +++ b/addons/l10n_it/i18n/ca.po @@ -7,20 +7,31 @@ msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2011-01-07 06:04+0000\n" +"POT-Creation-Date: 2011-08-11 20:06+0000\n" "PO-Revision-Date: 2011-02-15 15:37+0000\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: Catalan <ca@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:57+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-25 05:22+0000\n" +"X-Generator: Launchpad (build 14376)\n" #. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_debit -msgid "Registro acquisti" -msgstr "Resgistre de compres" +#: model:ir.module.module,description:l10n_it.module_meta_information +msgid "" +"\n" +" Piano dei conti italiano di un'impresa generica\n" +" " +msgstr "" +"\n" +" Pla comptable italià d'una empresa genèrica\n" +" " + +#. module: l10n_it +#: model:ir.module.module,shortdesc:l10n_it.module_meta_information +msgid "Italy - Generic Chart of Accounts" +msgstr "Itàlia - Pla general comptable" #. module: l10n_it #: model:ir.actions.todo,note:l10n_it.config_call_account_template_generic @@ -43,132 +54,63 @@ msgstr "" "pla comptable des d'una plantilla de pla comptable." #. module: l10n_it -#: view:account.report_libroiva:0 -msgid "Anno Fiscale" -msgstr "Exercici fiscal" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.it -msgid "Italia" -msgstr "Itàlia" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "REGISTRO IVA" -msgstr "REGISTRE D'IVA" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Protocollo" -msgstr "Protocol" +#: model:ir.model,name:l10n_it.model_account_tax +msgid "account.tax" +msgstr "" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.extra -msgid "Regime Extra comunitario" -msgstr "Règim extra comunitari" +#~ msgid "VENDITE" +#~ msgstr "VENDES" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "VENDITE" -msgstr "VENDES" +#~ msgid "Aliquota" +#~ msgstr "Taxa" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Aliquota" -msgstr "Taxa" +#~ msgid "Registro acquisti" +#~ msgstr "Resgistre de compres" -#. module: l10n_it -#: field:account.report_libroiva,company_id:0 -msgid "Company" -msgstr "Companyia" +#~ msgid "Protocollo" +#~ msgstr "Protocol" -#. module: l10n_it -#: field:account.report_libroiva,name:0 -msgid "Fiscal year" -msgstr "Exercici fiscal" +#~ msgid "REGISTRO IVA" +#~ msgstr "REGISTRE D'IVA" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Numero" -msgstr "Número" +#~ msgid "Fornitore" +#~ msgstr "Proveïdor" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Fornitore" -msgstr "Proveïdor" +#~ msgid "Numero" +#~ msgstr "Número" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "ACQUISTI" -msgstr "COMPRA" +#~ msgid "Cliente" +#~ msgstr "Client" -#. module: l10n_it -#: model:ir.module.module,description:l10n_it.module_meta_information -msgid "" -"\n" -" Piano dei conti italiano di un'impresa generica\n" -" " -msgstr "" -"\n" -" Pla comptable italià d'una empresa genèrica\n" -" " +#~ msgid "Periodo" +#~ msgstr "Període" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "Cliente" -msgstr "Client" +#~ msgid "Registro vendite" +#~ msgstr "Registre de vendes" -#. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_credit -msgid "Registro vendite" -msgstr "Registre de vendes" +#~ msgid "Imposta" +#~ msgstr "Impost" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Periodo" -msgstr "Període" +#~ msgid "Data fattura" +#~ msgstr "Data de la factura" -#. module: l10n_it -#: view:account.report_libroiva:0 -#: model:ir.actions.act_window,name:l10n_it.l10n_chart_it_report_libroIVA_action -#: model:ir.ui.menu,name:l10n_it.menu_report_l10n_chart_it_libroIVA -msgid "Registri IVA" -msgstr "Registre d'IVA" +#~ msgid "Imponibile" +#~ msgstr "Imponible" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imposta" -msgstr "Impost" +#~ msgid "SQL view for libro IVA" +#~ msgstr "Vista SQL pel llibre d'IVA" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.intra -msgid "Regime Intra comunitario" -msgstr "Règim intra comunitari" +#~ msgid "Company" +#~ msgstr "Companyia" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Data fattura" -msgstr "Data de la factura" +#~ msgid "Anno Fiscale" +#~ msgstr "Exercici fiscal" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imponibile" -msgstr "Imponible" +#~ msgid "ACQUISTI" +#~ msgstr "COMPRA" -#. module: l10n_it -#: model:ir.module.module,shortdesc:l10n_it.module_meta_information -msgid "Italy - Generic Chart of Accounts" -msgstr "Itàlia - Pla general comptable" +#~ msgid "Fiscal year" +#~ msgstr "Exercici fiscal" -#. module: l10n_it -#: model:ir.model,name:l10n_it.model_account_report_libroiva -msgid "SQL view for libro IVA" -msgstr "Vista SQL pel llibre d'IVA" +#~ msgid "Registri IVA" +#~ msgstr "Registre d'IVA" diff --git a/addons/l10n_it/i18n/es.po b/addons/l10n_it/i18n/es.po index aac5be72b68..ec8abd28572 100644 --- a/addons/l10n_it/i18n/es.po +++ b/addons/l10n_it/i18n/es.po @@ -7,20 +7,31 @@ msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2011-01-07 06:04+0000\n" +"POT-Creation-Date: 2011-08-11 20:06+0000\n" "PO-Revision-Date: 2011-02-15 15:37+0000\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: Spanish <es@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:57+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-25 05:22+0000\n" +"X-Generator: Launchpad (build 14376)\n" #. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_debit -msgid "Registro acquisti" -msgstr "Registro de compras" +#: model:ir.module.module,description:l10n_it.module_meta_information +msgid "" +"\n" +" Piano dei conti italiano di un'impresa generica\n" +" " +msgstr "" +"\n" +" Plan contable italiano de una empresa genérica\n" +" " + +#. module: l10n_it +#: model:ir.module.module,shortdesc:l10n_it.module_meta_information +msgid "Italy - Generic Chart of Accounts" +msgstr "Italia - Plan General Contable" #. module: l10n_it #: model:ir.actions.todo,note:l10n_it.config_call_account_template_generic @@ -43,132 +54,63 @@ msgstr "" "Financiera/Generar Plan Contable a partir de una Plantilla de Plan." #. module: l10n_it -#: view:account.report_libroiva:0 -msgid "Anno Fiscale" -msgstr "Año Fiscal" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.it -msgid "Italia" -msgstr "Italia" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "REGISTRO IVA" -msgstr "REGISTRO IVA" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Protocollo" -msgstr "Protocolo" +#: model:ir.model,name:l10n_it.model_account_tax +msgid "account.tax" +msgstr "" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.extra -msgid "Regime Extra comunitario" -msgstr "Régimen Extra comunitario" +#~ msgid "Company" +#~ msgstr "Compañía" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "VENDITE" -msgstr "VENTAS" +#~ msgid "Aliquota" +#~ msgstr "Tasa" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Aliquota" -msgstr "Tasa" +#~ msgid "VENDITE" +#~ msgstr "VENTAS" -#. module: l10n_it -#: field:account.report_libroiva,company_id:0 -msgid "Company" -msgstr "Compañía" +#~ msgid "Anno Fiscale" +#~ msgstr "Año Fiscal" -#. module: l10n_it -#: field:account.report_libroiva,name:0 -msgid "Fiscal year" -msgstr "Ejercicio fiscal" +#~ msgid "Protocollo" +#~ msgstr "Protocolo" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Numero" -msgstr "Número" +#~ msgid "REGISTRO IVA" +#~ msgstr "REGISTRO IVA" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Fornitore" -msgstr "Proveedor" +#~ msgid "Fornitore" +#~ msgstr "Proveedor" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "ACQUISTI" -msgstr "COMPRA" +#~ msgid "Numero" +#~ msgstr "Número" -#. module: l10n_it -#: model:ir.module.module,description:l10n_it.module_meta_information -msgid "" -"\n" -" Piano dei conti italiano di un'impresa generica\n" -" " -msgstr "" -"\n" -" Plan contable italiano de una empresa genérica\n" -" " +#~ msgid "Cliente" +#~ msgstr "Cliente" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "Cliente" -msgstr "Cliente" +#~ msgid "Periodo" +#~ msgstr "Período" -#. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_credit -msgid "Registro vendite" -msgstr "Registro de ventas" +#~ msgid "Registro vendite" +#~ msgstr "Registro de ventas" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Periodo" -msgstr "Período" +#~ msgid "Imposta" +#~ msgstr "Impuesto" -#. module: l10n_it -#: view:account.report_libroiva:0 -#: model:ir.actions.act_window,name:l10n_it.l10n_chart_it_report_libroIVA_action -#: model:ir.ui.menu,name:l10n_it.menu_report_l10n_chart_it_libroIVA -msgid "Registri IVA" -msgstr "Registro del IVA" +#~ msgid "Registri IVA" +#~ msgstr "Registro del IVA" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imposta" -msgstr "Impuesto" +#~ msgid "Data fattura" +#~ msgstr "Fecha de la factura" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.intra -msgid "Regime Intra comunitario" -msgstr "Régimen Intra Comunitario" +#~ msgid "Imponibile" +#~ msgstr "Imponible" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Data fattura" -msgstr "Fecha de la factura" +#~ msgid "SQL view for libro IVA" +#~ msgstr "Vista SQL para el libro del IVA" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imponibile" -msgstr "Imponible" +#~ msgid "Registro acquisti" +#~ msgstr "Registro de compras" -#. module: l10n_it -#: model:ir.module.module,shortdesc:l10n_it.module_meta_information -msgid "Italy - Generic Chart of Accounts" -msgstr "Italia - Plan General Contable" +#~ msgid "ACQUISTI" +#~ msgstr "COMPRA" -#. module: l10n_it -#: model:ir.model,name:l10n_it.model_account_report_libroiva -msgid "SQL view for libro IVA" -msgstr "Vista SQL para el libro del IVA" +#~ msgid "Fiscal year" +#~ msgstr "Ejercicio fiscal" diff --git a/addons/l10n_it/i18n/es_PY.po b/addons/l10n_it/i18n/es_PY.po index ad857a18836..d05f707c30c 100644 --- a/addons/l10n_it/i18n/es_PY.po +++ b/addons/l10n_it/i18n/es_PY.po @@ -7,20 +7,31 @@ msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2011-01-07 06:04+0000\n" +"POT-Creation-Date: 2011-08-11 20:06+0000\n" "PO-Revision-Date: 2011-03-21 16:24+0000\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: Spanish (Paraguay) <es_PY@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:57+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-25 05:22+0000\n" +"X-Generator: Launchpad (build 14376)\n" #. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_debit -msgid "Registro acquisti" -msgstr "Registro de compras" +#: model:ir.module.module,description:l10n_it.module_meta_information +msgid "" +"\n" +" Piano dei conti italiano di un'impresa generica\n" +" " +msgstr "" +"\n" +" Plan contable italiano de una empresa genérica\n" +" " + +#. module: l10n_it +#: model:ir.module.module,shortdesc:l10n_it.module_meta_information +msgid "Italy - Generic Chart of Accounts" +msgstr "Italia - Plan General Contable" #. module: l10n_it #: model:ir.actions.todo,note:l10n_it.config_call_account_template_generic @@ -43,132 +54,63 @@ msgstr "" "plan contable a partir de una plantilla de plan contable." #. module: l10n_it -#: view:account.report_libroiva:0 -msgid "Anno Fiscale" -msgstr "Año Fiscal" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.it -msgid "Italia" -msgstr "Italia" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "REGISTRO IVA" -msgstr "REGISTRO IVA" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Protocollo" -msgstr "Protocolo" +#: model:ir.model,name:l10n_it.model_account_tax +msgid "account.tax" +msgstr "" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.extra -msgid "Regime Extra comunitario" -msgstr "Régimen Extra comunitario" +#~ msgid "Aliquota" +#~ msgstr "Tasa" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "VENDITE" -msgstr "VENTAS" +#~ msgid "Company" +#~ msgstr "Compañía" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Aliquota" -msgstr "Tasa" +#~ msgid "VENDITE" +#~ msgstr "VENTAS" -#. module: l10n_it -#: field:account.report_libroiva,company_id:0 -msgid "Company" -msgstr "Compañía" +#~ msgid "Anno Fiscale" +#~ msgstr "Año Fiscal" -#. module: l10n_it -#: field:account.report_libroiva,name:0 -msgid "Fiscal year" -msgstr "Ejercicio fiscal" +#~ msgid "Registro acquisti" +#~ msgstr "Registro de compras" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Numero" -msgstr "Número" +#~ msgid "Protocollo" +#~ msgstr "Protocolo" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Fornitore" -msgstr "Proveedor" +#~ msgid "REGISTRO IVA" +#~ msgstr "REGISTRO IVA" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "ACQUISTI" -msgstr "COMPRA" +#~ msgid "Fornitore" +#~ msgstr "Proveedor" -#. module: l10n_it -#: model:ir.module.module,description:l10n_it.module_meta_information -msgid "" -"\n" -" Piano dei conti italiano di un'impresa generica\n" -" " -msgstr "" -"\n" -" Plan contable italiano de una empresa genérica\n" -" " +#~ msgid "ACQUISTI" +#~ msgstr "COMPRA" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "Cliente" -msgstr "Cliente" +#~ msgid "Fiscal year" +#~ msgstr "Ejercicio fiscal" -#. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_credit -msgid "Registro vendite" -msgstr "Registro de ventas" +#~ msgid "Numero" +#~ msgstr "Número" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Periodo" -msgstr "Período" +#~ msgid "Cliente" +#~ msgstr "Cliente" -#. module: l10n_it -#: view:account.report_libroiva:0 -#: model:ir.actions.act_window,name:l10n_it.l10n_chart_it_report_libroIVA_action -#: model:ir.ui.menu,name:l10n_it.menu_report_l10n_chart_it_libroIVA -msgid "Registri IVA" -msgstr "Registro del IVA" +#~ msgid "Periodo" +#~ msgstr "Período" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imposta" -msgstr "Impuesto" +#~ msgid "Registro vendite" +#~ msgstr "Registro de ventas" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.intra -msgid "Regime Intra comunitario" -msgstr "Régimen Intra Comunitario" +#~ msgid "Imposta" +#~ msgstr "Impuesto" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Data fattura" -msgstr "Fecha de la factura" +#~ msgid "Registri IVA" +#~ msgstr "Registro del IVA" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imponibile" -msgstr "Imponible" +#~ msgid "Data fattura" +#~ msgstr "Fecha de la factura" -#. module: l10n_it -#: model:ir.module.module,shortdesc:l10n_it.module_meta_information -msgid "Italy - Generic Chart of Accounts" -msgstr "Italia - Plan General Contable" +#~ msgid "SQL view for libro IVA" +#~ msgstr "Vista SQL para el libro del IVA" -#. module: l10n_it -#: model:ir.model,name:l10n_it.model_account_report_libroiva -msgid "SQL view for libro IVA" -msgstr "Vista SQL para el libro del IVA" +#~ msgid "Imponibile" +#~ msgstr "Imponible" diff --git a/addons/l10n_it/i18n/fr.po b/addons/l10n_it/i18n/fr.po index 251c958420f..1582f87c77c 100644 --- a/addons/l10n_it/i18n/fr.po +++ b/addons/l10n_it/i18n/fr.po @@ -7,19 +7,27 @@ msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2011-01-07 06:04+0000\n" +"POT-Creation-Date: 2011-08-11 20:06+0000\n" "PO-Revision-Date: 2011-05-22 17:04+0000\n" "Last-Translator: lholivier <olivier.lenoir@free.fr>\n" "Language-Team: French <fr@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:57+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-25 05:22+0000\n" +"X-Generator: Launchpad (build 14376)\n" #. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_debit -msgid "Registro acquisti" +#: model:ir.module.module,description:l10n_it.module_meta_information +msgid "" +"\n" +" Piano dei conti italiano di un'impresa generica\n" +" " +msgstr "" + +#. module: l10n_it +#: model:ir.module.module,shortdesc:l10n_it.module_meta_information +msgid "Italy - Generic Chart of Accounts" msgstr "" #. module: l10n_it @@ -35,129 +43,12 @@ msgid "" msgstr "" #. module: l10n_it -#: view:account.report_libroiva:0 -msgid "Anno Fiscale" -msgstr "" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.it -msgid "Italia" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "REGISTRO IVA" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Protocollo" -msgstr "" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.extra -msgid "Regime Extra comunitario" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "VENDITE" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Aliquota" -msgstr "" - -#. module: l10n_it -#: field:account.report_libroiva,company_id:0 -msgid "Company" -msgstr "Société" - -#. module: l10n_it -#: field:account.report_libroiva,name:0 -msgid "Fiscal year" -msgstr "Exercice fiscal" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Numero" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Fornitore" +#: model:ir.model,name:l10n_it.model_account_tax +msgid "account.tax" msgstr "" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "ACQUISTI" -msgstr "" +#~ msgid "Company" +#~ msgstr "Société" -#. module: l10n_it -#: model:ir.module.module,description:l10n_it.module_meta_information -msgid "" -"\n" -" Piano dei conti italiano di un'impresa generica\n" -" " -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "Cliente" -msgstr "" - -#. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_credit -msgid "Registro vendite" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Periodo" -msgstr "" - -#. module: l10n_it -#: view:account.report_libroiva:0 -#: model:ir.actions.act_window,name:l10n_it.l10n_chart_it_report_libroIVA_action -#: model:ir.ui.menu,name:l10n_it.menu_report_l10n_chart_it_libroIVA -msgid "Registri IVA" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imposta" -msgstr "" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.intra -msgid "Regime Intra comunitario" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Data fattura" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imponibile" -msgstr "" - -#. module: l10n_it -#: model:ir.module.module,shortdesc:l10n_it.module_meta_information -msgid "Italy - Generic Chart of Accounts" -msgstr "" - -#. module: l10n_it -#: model:ir.model,name:l10n_it.model_account_report_libroiva -msgid "SQL view for libro IVA" -msgstr "" +#~ msgid "Fiscal year" +#~ msgstr "Exercice fiscal" diff --git a/addons/l10n_it/i18n/gl.po b/addons/l10n_it/i18n/gl.po index eede14878ce..a8cf6c6609e 100644 --- a/addons/l10n_it/i18n/gl.po +++ b/addons/l10n_it/i18n/gl.po @@ -7,20 +7,31 @@ msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2011-01-07 06:04+0000\n" +"POT-Creation-Date: 2011-08-11 20:06+0000\n" "PO-Revision-Date: 2011-02-25 11:41+0000\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: Galician <gl@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:57+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-25 05:22+0000\n" +"X-Generator: Launchpad (build 14376)\n" #. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_debit -msgid "Registro acquisti" -msgstr "Rexistro de compras" +#: model:ir.module.module,description:l10n_it.module_meta_information +msgid "" +"\n" +" Piano dei conti italiano di un'impresa generica\n" +" " +msgstr "" +"\n" +" Plan contable Italiano\n" +" " + +#. module: l10n_it +#: model:ir.module.module,shortdesc:l10n_it.module_meta_information +msgid "Italy - Generic Chart of Accounts" +msgstr "Italia - Plan Xeral Contable" #. module: l10n_it #: model:ir.actions.todo,note:l10n_it.config_call_account_template_generic @@ -42,132 +53,63 @@ msgstr "" "financeira/Xerar Plan Contable a partir dun modelo de plan." #. module: l10n_it -#: view:account.report_libroiva:0 -msgid "Anno Fiscale" -msgstr "Exercicio fiscal" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.it -msgid "Italia" -msgstr "Italia" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "REGISTRO IVA" -msgstr "REXISTRO IVE" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Protocollo" -msgstr "Protocolo" +#: model:ir.model,name:l10n_it.model_account_tax +msgid "account.tax" +msgstr "" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.extra -msgid "Regime Extra comunitario" -msgstr "Rexime Extra comunitario" +#~ msgid "REGISTRO IVA" +#~ msgstr "REXISTRO IVE" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "VENDITE" -msgstr "VENDAS" +#~ msgid "Aliquota" +#~ msgstr "Taxa" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Aliquota" -msgstr "Taxa" +#~ msgid "Company" +#~ msgstr "Compañía" -#. module: l10n_it -#: field:account.report_libroiva,company_id:0 -msgid "Company" -msgstr "Compañía" +#~ msgid "VENDITE" +#~ msgstr "VENDAS" -#. module: l10n_it -#: field:account.report_libroiva,name:0 -msgid "Fiscal year" -msgstr "Exercicio fiscal" +#~ msgid "Anno Fiscale" +#~ msgstr "Exercicio fiscal" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Numero" -msgstr "Número" +#~ msgid "Registro acquisti" +#~ msgstr "Rexistro de compras" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Fornitore" -msgstr "Provedor" +#~ msgid "Protocollo" +#~ msgstr "Protocolo" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "ACQUISTI" -msgstr "Mercar" +#~ msgid "Fornitore" +#~ msgstr "Provedor" -#. module: l10n_it -#: model:ir.module.module,description:l10n_it.module_meta_information -msgid "" -"\n" -" Piano dei conti italiano di un'impresa generica\n" -" " -msgstr "" -"\n" -" Plan contable Italiano\n" -" " +#~ msgid "ACQUISTI" +#~ msgstr "Mercar" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "Cliente" -msgstr "Cliente" +#~ msgid "Fiscal year" +#~ msgstr "Exercicio fiscal" -#. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_credit -msgid "Registro vendite" -msgstr "Rexistro de vendas" +#~ msgid "Numero" +#~ msgstr "Número" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Periodo" -msgstr "Período" +#~ msgid "Periodo" +#~ msgstr "Período" -#. module: l10n_it -#: view:account.report_libroiva:0 -#: model:ir.actions.act_window,name:l10n_it.l10n_chart_it_report_libroIVA_action -#: model:ir.ui.menu,name:l10n_it.menu_report_l10n_chart_it_libroIVA -msgid "Registri IVA" -msgstr "Rexistro do IVE" +#~ msgid "Cliente" +#~ msgstr "Cliente" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imposta" -msgstr "Imposto" +#~ msgid "Registro vendite" +#~ msgstr "Rexistro de vendas" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.intra -msgid "Regime Intra comunitario" -msgstr "Rexime Intra Comunitario" +#~ msgid "Imposta" +#~ msgstr "Imposto" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Data fattura" -msgstr "Data da factura" +#~ msgid "Registri IVA" +#~ msgstr "Rexistro do IVE" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imponibile" -msgstr "Impoñible" +#~ msgid "Data fattura" +#~ msgstr "Data da factura" -#. module: l10n_it -#: model:ir.module.module,shortdesc:l10n_it.module_meta_information -msgid "Italy - Generic Chart of Accounts" -msgstr "Italia - Plan Xeral Contable" +#~ msgid "Imponibile" +#~ msgstr "Impoñible" -#. module: l10n_it -#: model:ir.model,name:l10n_it.model_account_report_libroiva -msgid "SQL view for libro IVA" -msgstr "Vista SQL para o libro do IVE" +#~ msgid "SQL view for libro IVA" +#~ msgstr "Vista SQL para o libro do IVE" diff --git a/addons/l10n_it/i18n/it.po b/addons/l10n_it/i18n/it.po index 6035a0b7306..b12fa0ca4d3 100644 --- a/addons/l10n_it/i18n/it.po +++ b/addons/l10n_it/i18n/it.po @@ -1,26 +1,36 @@ -# Italian 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 <EMAIL@ADDRESS>, 2011. +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_it # msgid "" msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2011-01-07 06:04+0000\n" -"PO-Revision-Date: 2011-02-15 15:37+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: Italian <it@li.org>\n" +"Project-Id-Version: OpenERP Server 6.0.2\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2011-08-11 20:06+0000\n" +"PO-Revision-Date: 2011-11-24 10:54+0000\n" +"Last-Translator: Olivier Dony (OpenERP) <Unknown>\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-11-05 05:57+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-25 05:22+0000\n" +"X-Generator: Launchpad (build 14376)\n" #. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_debit -msgid "Registro acquisti" -msgstr "Registro acquisti" +#: model:ir.module.module,description:l10n_it.module_meta_information +msgid "" +"\n" +" Piano dei conti italiano di un'impresa generica\n" +" " +msgstr "" +"\n" +" Piano dei conti italiano di un'impresa generica\n" +" " + +#. module: l10n_it +#: model:ir.module.module,shortdesc:l10n_it.module_meta_information +msgid "Italy - Generic Chart of Accounts" +msgstr "Italia - Piano dei conti generico" #. module: l10n_it #: model:ir.actions.todo,note:l10n_it.config_call_account_template_generic @@ -33,142 +43,72 @@ msgid "" "Management/Configuration/Financial Accounting/Financial Accounts/Generate " "Chart of Accounts from a Chart Template." msgstr "" -"Genera il Piano dei Conti da un Modello. Vi verrà richiesto di passare il " -"nome dell'azienda, il modello da seguire, il numero di decimali per generare " -"il codice dei tuoi conti e, per il conto della Banca, la valuta per creare " -"il Libro Giornale. Così una copia vergine del Piano dei Conti, derivatante " -"dal modello, viene generata.\n" -"\tQuesto è la stessa procedura automatica che viene lanciata da: Gestione " -"Finanziaria / Configurazione / Contabilità / Conti finanziari / Genera il " -"Piano dei conti da un modello." +"Genera il piano dei conti da un template. Verrà chiesto di indicare il nome " +"dell'azienda, il piano dei conti da seguire, il numero di cifre per generare " +"il codice dei conti, la valuta per creare i sezionali. Quindi, una semplice " +"copia del template verrà generata.\n" +"\tQuesto è lo stesso wizard che viene eseguito da " +"Contabilità/Configurazione/Contabilità Generale/Assetto finanziario della " +"nuova azienda" #. module: l10n_it -#: view:account.report_libroiva:0 -msgid "Anno Fiscale" -msgstr "Anno Fiscale" +#: model:ir.model,name:l10n_it.model_account_tax +msgid "account.tax" +msgstr "account.tax" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.it -msgid "Italia" -msgstr "Italia" +#~ msgid "Aliquota" +#~ msgstr "Aliquota" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "REGISTRO IVA" -msgstr "REGISTRO IVA" +#~ msgid "Company" +#~ msgstr "Azienda" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Protocollo" -msgstr "Protocollo" +#~ msgid "VENDITE" +#~ msgstr "VENDITE" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.extra -msgid "Regime Extra comunitario" -msgstr "Regime Extra comunitario" +#~ msgid "Anno Fiscale" +#~ msgstr "Anno Fiscale" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "VENDITE" -msgstr "VENDITE" +#~ msgid "Registro acquisti" +#~ msgstr "Registro acquisti" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Aliquota" -msgstr "Aliquota" +#~ msgid "Protocollo" +#~ msgstr "Protocollo" -#. module: l10n_it -#: field:account.report_libroiva,company_id:0 -msgid "Company" -msgstr "Azienda" +#~ msgid "REGISTRO IVA" +#~ msgstr "REGISTRO IVA" -#. module: l10n_it -#: field:account.report_libroiva,name:0 -msgid "Fiscal year" -msgstr "Anno fiscale" +#~ msgid "Fornitore" +#~ msgstr "Fornitore" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Numero" -msgstr "Numero" +#~ msgid "ACQUISTI" +#~ msgstr "ACQUISTI" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Fornitore" -msgstr "Fornitore" +#~ msgid "Fiscal year" +#~ msgstr "Anno fiscale" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "ACQUISTI" -msgstr "ACQUISTI" +#~ msgid "Numero" +#~ msgstr "Numero" -#. module: l10n_it -#: model:ir.module.module,description:l10n_it.module_meta_information -msgid "" -"\n" -" Piano dei conti italiano di un'impresa generica\n" -" " -msgstr "" -"\n" -" Piano dei conti italiano di un'impresa generica\n" -" " +#~ msgid "Cliente" +#~ msgstr "Cliente" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "Cliente" -msgstr "Cliente" +#~ msgid "Periodo" +#~ msgstr "Periodo" -#. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_credit -msgid "Registro vendite" -msgstr "Registro vendite" +#~ msgid "Registro vendite" +#~ msgstr "Registro vendite" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Periodo" -msgstr "Periodo" +#~ msgid "Imposta" +#~ msgstr "Imposta" -#. module: l10n_it -#: view:account.report_libroiva:0 -#: model:ir.actions.act_window,name:l10n_it.l10n_chart_it_report_libroIVA_action -#: model:ir.ui.menu,name:l10n_it.menu_report_l10n_chart_it_libroIVA -msgid "Registri IVA" -msgstr "Registri IVA" +#~ msgid "Registri IVA" +#~ msgstr "Registri IVA" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imposta" -msgstr "Imposta" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.intra -msgid "Regime Intra comunitario" -msgstr "Regime Intra comunitario" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Data fattura" -msgstr "Data fattura" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imponibile" -msgstr "Imponibile" +#~ msgid "Data fattura" +#~ msgstr "Data fattura" -#. module: l10n_it -#: model:ir.module.module,shortdesc:l10n_it.module_meta_information -msgid "Italy - Generic Chart of Accounts" -msgstr "Italia - Piano dei conti generico" +#~ msgid "Imponibile" +#~ msgstr "Imponibile" -#. module: l10n_it -#: model:ir.model,name:l10n_it.model_account_report_libroiva -msgid "SQL view for libro IVA" -msgstr "Vista SQL per registro IVA" +#~ msgid "SQL view for libro IVA" +#~ msgstr "Vista SQL per registro IVA" diff --git a/addons/l10n_it/i18n/l10n_it.pot b/addons/l10n_it/i18n/l10n_it.pot index 7f210e4cd75..1c46674bb28 100644 --- a/addons/l10n_it/i18n/l10n_it.pot +++ b/addons/l10n_it/i18n/l10n_it.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 6.0.0-rc2\n" +"Project-Id-Version: OpenERP Server 6.0.2\n" "Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2011-01-07 06:04:30+0000\n" -"PO-Revision-Date: 2011-01-07 06:04:30+0000\n" +"POT-Creation-Date: 2011-08-11 20:06+0000\n" +"PO-Revision-Date: 2011-08-11 20:06+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,81 +16,6 @@ msgstr "" "Plural-Forms: \n" #. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_debit -msgid "Registro acquisti" -msgstr "" - -#. module: l10n_it -#: model:ir.actions.todo,note:l10n_it.config_call_account_template_generic -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_it -#: view:account.report_libroiva:0 -msgid "Anno Fiscale" -msgstr "" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.it -msgid "Italia" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "REGISTRO IVA" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Protocollo" -msgstr "" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.extra -msgid "Regime Extra comunitario" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "VENDITE" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Aliquota" -msgstr "" - -#. module: l10n_it -#: field:account.report_libroiva,company_id:0 -msgid "Company" -msgstr "" - -#. module: l10n_it -#: field:account.report_libroiva,name:0 -msgid "Fiscal year" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Numero" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Fornitore" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "ACQUISTI" -msgstr "" - -#. module: l10n_it #: model:ir.module.module,description:l10n_it.module_meta_information msgid "\n" " Piano dei conti italiano di un'impresa generica\n" @@ -98,58 +23,18 @@ msgid "\n" msgstr "" #. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "Cliente" -msgstr "" - -#. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_credit -msgid "Registro vendite" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Periodo" -msgstr "" - -#. module: l10n_it -#: view:account.report_libroiva:0 -#: model:ir.actions.act_window,name:l10n_it.l10n_chart_it_report_libroIVA_action -#: model:ir.ui.menu,name:l10n_it.menu_report_l10n_chart_it_libroIVA -msgid "Registri IVA" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imposta" -msgstr "" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.intra -msgid "Regime Intra comunitario" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Data fattura" -msgstr "" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imponibile" +#: model:ir.module.module,shortdesc:l10n_it.module_meta_information +msgid "Italy - Generic Chart of Accounts" msgstr "" #. module: l10n_it -#: model:ir.module.module,shortdesc:l10n_it.module_meta_information -msgid "Italy - Generic Chart of Accounts" +#: model:ir.actions.todo,note:l10n_it.config_call_account_template_generic +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_it -#: model:ir.model,name:l10n_it.model_account_report_libroiva -msgid "SQL view for libro IVA" +#: model:ir.model,name:l10n_it.model_account_tax +msgid "account.tax" msgstr "" diff --git a/addons/l10n_it/i18n/pt_BR.po b/addons/l10n_it/i18n/pt_BR.po index 7cabe3a4653..df9315127ae 100644 --- a/addons/l10n_it/i18n/pt_BR.po +++ b/addons/l10n_it/i18n/pt_BR.po @@ -7,20 +7,31 @@ msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2011-01-07 06:04+0000\n" +"POT-Creation-Date: 2011-08-11 20:06+0000\n" "PO-Revision-Date: 2011-03-10 23:11+0000\n" "Last-Translator: Emerson <Unknown>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:57+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-25 05:22+0000\n" +"X-Generator: Launchpad (build 14376)\n" #. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_debit -msgid "Registro acquisti" -msgstr "Registro acquisti" +#: model:ir.module.module,description:l10n_it.module_meta_information +msgid "" +"\n" +" Piano dei conti italiano di un'impresa generica\n" +" " +msgstr "" +"\n" +" Piano dei conti italiano di un'impresa generica\n" +" " + +#. module: l10n_it +#: model:ir.module.module,shortdesc:l10n_it.module_meta_information +msgid "Italy - Generic Chart of Accounts" +msgstr "Italy - Generic Chart of Accounts" #. module: l10n_it #: model:ir.actions.todo,note:l10n_it.config_call_account_template_generic @@ -42,132 +53,63 @@ msgstr "" "Chart of Accounts from a Chart Template." #. module: l10n_it -#: view:account.report_libroiva:0 -msgid "Anno Fiscale" -msgstr "Anno Fiscale" - -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.it -msgid "Italia" -msgstr "Italia" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "REGISTRO IVA" -msgstr "REGISTRO IVA" - -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Protocollo" -msgstr "Protocollo" +#: model:ir.model,name:l10n_it.model_account_tax +msgid "account.tax" +msgstr "" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.extra -msgid "Regime Extra comunitario" -msgstr "Regime Extra comunitario" +#~ msgid "Aliquota" +#~ msgstr "Aliquota" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "VENDITE" -msgstr "VENDITE" +#~ msgid "VENDITE" +#~ msgstr "VENDITE" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Aliquota" -msgstr "Aliquota" +#~ msgid "Company" +#~ msgstr "Company" -#. module: l10n_it -#: field:account.report_libroiva,company_id:0 -msgid "Company" -msgstr "Company" +#~ msgid "Anno Fiscale" +#~ msgstr "Anno Fiscale" -#. module: l10n_it -#: field:account.report_libroiva,name:0 -msgid "Fiscal year" -msgstr "Fiscal year" +#~ msgid "Registro acquisti" +#~ msgstr "Registro acquisti" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Numero" -msgstr "Numero" +#~ msgid "Protocollo" +#~ msgstr "Protocollo" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Fornitore" -msgstr "Fornitore" +#~ msgid "REGISTRO IVA" +#~ msgstr "REGISTRO IVA" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_debito:0 -msgid "ACQUISTI" -msgstr "ACQUISTI" +#~ msgid "Fiscal year" +#~ msgstr "Fiscal year" -#. module: l10n_it -#: model:ir.module.module,description:l10n_it.module_meta_information -msgid "" -"\n" -" Piano dei conti italiano di un'impresa generica\n" -" " -msgstr "" -"\n" -" Piano dei conti italiano di un'impresa generica\n" -" " +#~ msgid "Fornitore" +#~ msgstr "Fornitore" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -msgid "Cliente" -msgstr "Cliente" +#~ msgid "Numero" +#~ msgstr "Numero" -#. module: l10n_it -#: model:ir.actions.report.xml,name:l10n_it.account_ita_libroIVA_credit -msgid "Registro vendite" -msgstr "Registro vendite" +#~ msgid "Cliente" +#~ msgstr "Cliente" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Periodo" -msgstr "Periodo" +#~ msgid "Imposta" +#~ msgstr "Imposta" -#. module: l10n_it -#: view:account.report_libroiva:0 -#: model:ir.actions.act_window,name:l10n_it.l10n_chart_it_report_libroIVA_action -#: model:ir.ui.menu,name:l10n_it.menu_report_l10n_chart_it_libroIVA -msgid "Registri IVA" -msgstr "Registri IVA" +#~ msgid "Periodo" +#~ msgstr "Periodo" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imposta" -msgstr "Imposta" +#~ msgid "Registri IVA" +#~ msgstr "Registri IVA" -#. module: l10n_it -#: model:account.fiscal.position.template,name:l10n_it.intra -msgid "Regime Intra comunitario" -msgstr "Regime Intra comunitario" +#~ msgid "ACQUISTI" +#~ msgstr "ACQUISTI" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Data fattura" -msgstr "Data fattura" +#~ msgid "Data fattura" +#~ msgstr "Data fattura" -#. module: l10n_it -#: report:l10n_it.report.libroIVA_credito:0 -#: report:l10n_it.report.libroIVA_debito:0 -msgid "Imponibile" -msgstr "Imponibile" +#~ msgid "Imponibile" +#~ msgstr "Imponibile" -#. module: l10n_it -#: model:ir.module.module,shortdesc:l10n_it.module_meta_information -msgid "Italy - Generic Chart of Accounts" -msgstr "Italy - Generic Chart of Accounts" +#~ msgid "Registro vendite" +#~ msgstr "Registro vendite" -#. module: l10n_it -#: model:ir.model,name:l10n_it.model_account_report_libroiva -msgid "SQL view for libro IVA" -msgstr "SQL view for libro IVA" +#~ msgid "SQL view for libro IVA" +#~ msgstr "SQL view for libro IVA" diff --git a/addons/l10n_it/libroIVA.py b/addons/l10n_it/libroIVA.py deleted file mode 100644 index a78c81ffdb3..00000000000 --- a/addons/l10n_it/libroIVA.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2010 -# Italian OpenERP Community (<http://www.openerp-italia.com>) -# Servabit srl -# Agile Business Group sagl -# Domsense srl -# -# 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 <http://www.gnu.org/licenses/>. -# -############################################################################## - - -# ################################################################################## -# Questa vista SQL viene usata solo per far scegliere l'anno di pianificazione all'utente -# Viene infatti costruita una vista XML di tipo tree che contiene solo i diversi anni per i quali stata fatta almeno una pianificazione -# ################################################################################## - -from osv import fields, osv - -class l10n_chart_it_report_libroIVA (osv.osv): - _name = "account.report_libroiva" - _description = "SQL view for libro IVA" - _auto = False - _rec_name = "name" - #_order = "fiscal_year"; - - _columns = { - 'name': fields.char('Fiscal year',size=64), - 'company_id': fields.many2one('res.company', 'Company'), - } - - def init (self, cr) : - cr.execute("""DROP VIEW IF EXISTS account_report_libroiva""") - cr.execute(""" - CREATE VIEW account_report_libroiva AS ( - SELECT id, name, company_id FROM account_fiscalyear - )""") -l10n_chart_it_report_libroIVA() - - diff --git a/addons/l10n_it/libroIVA_menu.xml b/addons/l10n_it/libroIVA_menu.xml deleted file mode 100644 index 51e581ac11c..00000000000 --- a/addons/l10n_it/libroIVA_menu.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE terp SYSTEM "openerp-view.dtd"> -<openerp> - <data> - - <!-- **************************** - MENU REPORT LIBRI IVA - **************************** --> - <menuitem name="Registri IVA" - id="menu_report_l10n_chart_it_libroIVA" - sequence="20" - parent="account.menu_finance_reporting" - action="l10n_chart_it_report_libroIVA_action" - /> - </data> -</openerp> diff --git a/addons/l10n_it/libroIVA_view.xml b/addons/l10n_it/libroIVA_view.xml deleted file mode 100644 index bbc905e6da0..00000000000 --- a/addons/l10n_it/libroIVA_view.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - - <!-- **************************** - REGISTRI IVA TREE VIEW - ****************************--> - <record model="ir.ui.view" id="l10n_chart_it_report_libroIVA_tree"> - <field name="name">l10n_chart_it_report_libroIVA_tree</field> - <field name="model">account.report_libroiva</field> - <field name="type">tree</field> - <field name="arch" type="xml"> - <tree string="Registri IVA" limit="80"> - <field name="name" string="Anno Fiscale" readonly="True" select="1" /> - </tree> - </field> - </record> - - - <!-- **************************** - REGISTRI IVA FORM VIEW - ****************************--> - <record model="ir.ui.view" id="l10n_chart_it_report_libroIVA_form"> - <field name="name">l10n_chart_it_report_libroIVA_form</field> - <field name="model">account.report_libroiva</field> - <field name="type">form</field> - <field name="arch" type="xml"> - <form string="Registri IVA" > - <field name="name" string="Anno Fiscale" readonly="True" /> - </form> - </field> - </record> - - <!-- **************************** - REGISTRI IVA ACTION - ****************************--> - <record model="ir.actions.act_window" id="l10n_chart_it_report_libroIVA_action"> - <field name="name">Registri IVA</field> - <field name="res_model">account.report_libroiva</field> - <field name="view_id" ref="l10n_chart_it_report_libroIVA_tree"/> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - </record> - - - </data> -</openerp> diff --git a/addons/l10n_it/report.xml b/addons/l10n_it/report.xml deleted file mode 100644 index e0ba4a33daf..00000000000 --- a/addons/l10n_it/report.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - - <report name="l10n_it.report.libroIVA_credito" - id="account_ita_libroIVA_credit" - string="Registro vendite" - model="account.report_libroiva" - rml="addons/l10n_it/report/libroIVA_credito.rml" - auto="False" - header="False" - /> - - <report name="l10n_it.report.libroIVA_debito" - id="account_ita_libroIVA_debit" - string="Registro acquisti" - model="account.report_libroiva" - rml="addons/l10n_it/report/libroIVA_debito.rml" - auto="False" - header="False" - /> - - </data> -</openerp> diff --git a/addons/l10n_it/report/__init__.py b/addons/l10n_it/report/__init__.py deleted file mode 100644 index be32155c675..00000000000 --- a/addons/l10n_it/report/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -import libroIVA_credito -import libroIVA_debito
\ No newline at end of file diff --git a/addons/l10n_it/report/libroIVA_credito.py b/addons/l10n_it/report/libroIVA_credito.py deleted file mode 100644 index b48c81d2475..00000000000 --- a/addons/l10n_it/report/libroIVA_credito.py +++ /dev/null @@ -1,79 +0,0 @@ -import datetime -import time -from report import report_sxw -from osv import osv -import pooler - - -class l10n_chart_it_report_libroIVA_credito(report_sxw.rml_parse): - - def __init__(self, cr, uid, name, context): - super(l10n_chart_it_report_libroIVA_credito,self).__init__(cr,uid,name,context) - self.localcontext.update({ - 'time' : time, - 'get_company' : self.get_company, - 'get_periods' : self.get_periods, - 'get_lines' : self.get_lines, - }) - - - def get_company(self,fiscal_year): - #print 'COMP = ',fiscal_year - return "" - - def get_periods(self,fiscal_year): - #print 'Fiscal year id:',fiscal_year.id - obj=pooler.get_pool(self.cr.dbname).get('account.fiscalyear') - fy=obj.browse(self.cr,self.uid,fiscal_year.id) - #print 'Periods = ',fy.period_ids - res=[rec for rec in fy.period_ids] - #return fy.periods => non funziona?!? bool object !?!? - return res - - def get_invoices(self,period): - #print 'PERIOD = ',period.name - obj=pooler.get_pool(self.cr.dbname).get('account.invoice') - # Selezione tutte le fatture emesse nel periodo - self.cr.execute( """ - SELECT id FROM account_invoice - WHERE (state='open' OR state='paid') AND - period_id="""+str(period.id)+""" - AND (type='out_invoice' OR type='out_refund') - """) - ids=self.cr.fetchall() - #print 'IDS = ', - if ids: - ids=[id[0] for id in ids ] - invoices=obj.browse(self.cr,self.uid,ids) - #print 'INVOICES = ',invoices - return invoices - - def get_lines(self,fiscal_year): - res=[] - obj_fy=pooler.get_pool(self.cr.dbname).get('account.fiscalyear') - fy=obj_fy.browse(self.cr,self.uid,fiscal_year.id) - for period in fy.period_ids: - invoices=self.get_invoices(period) - for invoice in invoices: - d={'periodo': period.name} - d['protocollo']=invoice.number - #print 'PARTNER ',invoice.partner_id.name - causale=invoice.partner_id.name - #print 'CAUSALE = ',causale - d['causale']=causale - d['numero']=invoice.reference - d['data_doc']=invoice.date_invoice - for tax in invoice.tax_line: - #print '\tTAX: ',tax - d['aliquota']=tax.tax_code_id.name - d['imponibile']=tax.base - d['imposta']=tax.amount - res.append(d) - d={'periodo':'', 'protocollo':'', 'causale':'', 'numero':'', 'data_doc':'', } - return res - - - -report_sxw.report_sxw('report.l10n_it.report.libroIVA_credito','account.report_libroiva', - 'l10n_it/report/libroIVA_credito.rml', - parser=l10n_chart_it_report_libroIVA_credito,header=False) diff --git a/addons/l10n_it/report/libroIVA_credito.rml b/addons/l10n_it/report/libroIVA_credito.rml deleted file mode 100644 index 2b282f760b4..00000000000 --- a/addons/l10n_it/report/libroIVA_credito.rml +++ /dev/null @@ -1,203 +0,0 @@ -<?xml version="1.0"?> -<document filename="test.pdf"> - <template pageSize="(612.0,792.0)" title="Test" author="Martin Simon" allowSplitting="20"> - <pageTemplate id="first"> - <frame id="first" x1="57.0" y1="57.0" width="498" height="678"/> - </pageTemplate> - </template> - <stylesheet> - <blockTableStyle id="Standard_Outline"> - <blockAlignment value="LEFT"/> - <blockValign value="TOP"/> - </blockTableStyle> - <blockTableStyle id="Table1"> - <blockAlignment value="LEFT"/> - <blockValign value="TOP"/> - </blockTableStyle> - <blockTableStyle id="Table2"> - <blockAlignment value="LEFT"/> - <blockValign value="TOP"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="1,0" stop="1,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,0" stop="2,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="3,0" stop="3,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="4,0" stop="4,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="5,0" stop="5,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="6,0" stop="6,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="6,0" stop="6,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="7,0" stop="7,-1"/> - <lineStyle kind="LINEAFTER" colorName="#000000" start="7,0" stop="7,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="7,0" stop="7,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="7,-1" stop="7,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,1" stop="0,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="1,1" stop="1,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,1" stop="2,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="3,1" stop="3,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="4,1" stop="4,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="5,1" stop="5,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="6,1" stop="6,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="7,1" stop="7,-1"/> - <lineStyle kind="LINEAFTER" colorName="#000000" start="7,1" stop="7,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="7,-1" stop="7,-1"/> - <blockBackground colorName="#ffcc99" start="0,0" stop="0,-1"/> - <blockBackground colorName="#ffcc99" start="1,0" stop="1,-1"/> - <blockBackground colorName="#ffcc99" start="2,0" stop="2,-1"/> - <blockBackground colorName="#ffcc99" start="3,0" stop="3,-1"/> - <blockBackground colorName="#ffcc99" start="4,0" stop="4,-1"/> - <blockBackground colorName="#ffcc99" start="5,0" stop="5,-1"/> - <blockBackground colorName="#ffcc99" start="6,0" stop="6,-1"/> - <blockBackground colorName="#ffcc99" start="7,0" stop="7,-1"/> - <blockBackground colorName="#ffffff" start="0,1" stop="0,-1"/> - <blockBackground colorName="#ffffff" start="1,1" stop="1,-1"/> - <blockBackground colorName="#ffffff" start="2,1" stop="2,-1"/> - <blockBackground colorName="#ffffff" start="3,1" stop="3,-1"/> - <blockBackground colorName="#ffffff" start="4,1" stop="4,-1"/> - <blockBackground colorName="#ffffff" start="5,1" stop="5,-1"/> - <blockBackground colorName="#ffffff" start="6,1" stop="6,-1"/> - <blockBackground colorName="#ffffff" start="7,1" stop="7,-1"/> - </blockTableStyle> - <initialize> - <paraStyle name="all" alignment="justify"/> - </initialize> - <paraStyle name="P1" fontName="Times-Roman" alignment="RIGHT"/> - <paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT"/> - <paraStyle name="P3" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER"/> - <paraStyle name="P4" fontName="Helvetica" fontSize="12.0" leading="15" alignment="CENTER"/> - <paraStyle name="P5" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT"/> - <paraStyle name="P6" rightIndent="0.0" leftIndent="71.0" fontName="Helvetica" fontSize="10.0" leading="13" alignment="RIGHT"/> - <paraStyle name="P7" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER"/> - <paraStyle name="P8" fontName="Helvetica" fontSize="12.0" leading="15" alignment="CENTER"/> - <paraStyle name="P9" fontName="Helvetica" fontSize="12.0" leading="15" alignment="LEFT"/> - <paraStyle name="P10" fontName="Helvetica" fontSize="12.0" leading="15" alignment="LEFT"/> - <paraStyle name="P11" fontName="Helvetica" fontSize="12.0" leading="15" alignment="CENTER"/> - <paraStyle name="P12" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT"/> - <paraStyle name="P13" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER"/> - <paraStyle name="P14" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT"/> - <paraStyle name="P15" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT"/> - <paraStyle name="P16" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="10.0" leading="13" alignment="RIGHT"/> - <paraStyle name="P17" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER"/> - <paraStyle name="Standard" fontName="Times-Roman"/> - <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/> - <paraStyle name="Text body" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/> - <paraStyle name="List" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/> - <paraStyle name="Caption" fontName="Times-Roman" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/> - <paraStyle name="Index" fontName="Times-Roman"/> - <paraStyle name="Table Contents" fontName="Times-Roman"/> - <paraStyle name="Table Heading" fontName="Times-Roman" alignment="CENTER"/> - <paraStyle name="Footer" fontName="Times-Roman"/> - <paraStyle name="MP1" fontName="Times-Roman" alignment="RIGHT"/> - </stylesheet> - <images/> - <story> - <para style="P2">[[ repeatIn(objects, 'o') ]]</para> - <blockTable colWidths="249.0,249.0" style="Table1"> - <tr> - <td> - <para style="P10"> - <font face="Times-Roman" size="10.0">[[ get_company(o) ]]</font> - </para> - </td> - <td> - <para style="P16"> - <font face="Times-Roman">REGISTRO IVA </font> - </para> - <para style="P16"> - <font face="Times-Roman">VENDITE </font> - </para> - </td> - </tr> - </blockTable> - <para style="P2"> - <font color="white"> </font> - </para> - <para style="P11">[[ o.name ]] </para> - <para style="P2"> - <font color="white"> </font> - </para> - <blockTable colWidths="39.0,50.0,92.0,45.0,54.0,76.0,69.0,74.0" repeatRows="1" style="Table2"> - <tr> - <td> - <para style="P7">Periodo</para> - </td> - <td> - <para style="P7">Protocollo</para> - </td> - <td> - <para style="P7">Cliente</para> - </td> - <td> - <para style="P7">Numero</para> - </td> - <td> - <para style="P7">Data fattura</para> - </td> - <td> - <para style="P7">Aliquota</para> - </td> - <td> - <para style="P7">Imponibile</para> - </td> - <td> - <para style="P7">Imposta</para> - </td> - </tr> - <tr> - <td> - <para style="P3">[[ repeatIn(get_lines(o), 'line') ]]</para> - <para style="P3">[[ line['periodo'] ]]</para> - </td> - <td> - <para style="P3">[[ line['protocollo'] ]]</para> - </td> - <td> - <para style="P3">[[ line['causale'] ]]</para> - </td> - <td> - <para style="P3">[[ line['numero'] ]]</para> - </td> - <td> - <para style="P3">[[ line['data_doc'] ]]</para> - </td> - <td> - <para style="P14">[[ line['aliquota'] ]]</para> - </td> - <td> - <para style="P15">[[ line['imponibile'] ]]</para> - </td> - <td> - <para style="P15">[[ line['imposta'] ]]</para> - </td> - </tr> - </blockTable> - <para style="P9"> - <font color="white"> </font> - </para> - <para style="P4"> - <font color="white"> </font> - </para> - <para style="P4"> - <font color="white"> </font> - </para> - </story> -</document> - diff --git a/addons/l10n_it/report/libroIVA_debito.py b/addons/l10n_it/report/libroIVA_debito.py deleted file mode 100644 index c7720ab69a1..00000000000 --- a/addons/l10n_it/report/libroIVA_debito.py +++ /dev/null @@ -1,80 +0,0 @@ -import datetime -import time -from report import report_sxw -from osv import osv -import pooler - - -class l10n_chart_it_report_libroIVA_debito(report_sxw.rml_parse): - - def __init__(self, cr, uid, name, context): - super(l10n_chart_it_report_libroIVA_debito,self).__init__(cr,uid,name,context) - self.localcontext.update({ - 'time' : time, - 'get_company' : self.get_company, - 'get_periods' : self.get_periods, - 'get_lines' : self.get_lines, - }) - - - def get_company(self,fiscal_year): - #print 'COMP = ',fiscal_year - return "" - - - def get_periods(self,fiscal_year): - #print 'Fiscal year id:',fiscal_year.id - obj=pooler.get_pool(self.cr.dbname).get('account.fiscalyear') - fy=obj.browse(self.cr,self.uid,fiscal_year.id) - #print 'Periods = ',fy.period_ids - res=[rec for rec in fy.period_ids] - #return fy.periods => non funziona?!? bool object !?!? - return res - - def get_invoices(self,period): - #print 'PERIOD = ',period.name - obj=pooler.get_pool(self.cr.dbname).get('account.invoice') - # Selezione tutte le fatture emesse nel periodo - self.cr.execute( """ - SELECT id FROM account_invoice - WHERE (state='open' OR state='paid') AND - period_id="""+str(period.id)+""" - AND (type='in_invoice' OR type='in_refund') - """) - ids=self.cr.fetchall() - #print 'IDS = ', - if ids: - ids=[id[0] for id in ids ] - invoices=obj.browse(self.cr,self.uid,ids) - #print 'INVOICES = ',invoices - return invoices - - def get_lines(self,fiscal_year): - res=[] - obj_fy=pooler.get_pool(self.cr.dbname).get('account.fiscalyear') - fy=obj_fy.browse(self.cr,self.uid,fiscal_year.id) - for period in fy.period_ids: - invoices=self.get_invoices(period) - for invoice in invoices: - d={'periodo': period.name} - d['protocollo']=invoice.number - #print 'PARTNER ',invoice.partner_id.name - causale=invoice.partner_id.name - #print 'CAUSALE = ',causale - d['causale']=causale - d['numero']=invoice.reference - d['data_doc']=invoice.date_invoice - for tax in invoice.tax_line: - #print '\tTAX: ',tax - d['aliquota']=tax.tax_code_id.name - d['imponibile']=tax.base - d['imposta']=tax.amount - res.append(d) - d={'periodo':'', 'protocollo':'', 'causale':'', 'numero':'', 'data_doc':'', } - return res - - - -report_sxw.report_sxw('report.l10n_it.report.libroIVA_debito','account.report_libroiva', - 'l10n_it/report/libroIVA_debito.rml', - parser=l10n_chart_it_report_libroIVA_debito,header=False) diff --git a/addons/l10n_it/report/libroIVA_debito.rml b/addons/l10n_it/report/libroIVA_debito.rml deleted file mode 100644 index ced847722af..00000000000 --- a/addons/l10n_it/report/libroIVA_debito.rml +++ /dev/null @@ -1,195 +0,0 @@ -<?xml version="1.0"?> -<document filename="test.pdf"> - <template pageSize="(612.0,792.0)" title="Test" author="Martin Simon" allowSplitting="20"> - <pageTemplate id="first"> - <frame id="first" x1="57.0" y1="57.0" width="498" height="678"/> - </pageTemplate> - </template> - <stylesheet> - <blockTableStyle id="Standard_Outline"> - <blockAlignment value="LEFT"/> - <blockValign value="TOP"/> - </blockTableStyle> - <blockTableStyle id="Table2"> - <blockAlignment value="LEFT"/> - <blockValign value="TOP"/> - </blockTableStyle> - <blockTableStyle id="Table1"> - <blockAlignment value="LEFT"/> - <blockValign value="TOP"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,0" stop="0,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="1,0" stop="1,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,0" stop="2,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="3,0" stop="3,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="4,0" stop="4,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="5,0" stop="5,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="6,0" stop="6,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="6,0" stop="6,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="7,0" stop="7,-1"/> - <lineStyle kind="LINEAFTER" colorName="#000000" start="7,0" stop="7,-1"/> - <lineStyle kind="LINEABOVE" colorName="#000000" start="7,0" stop="7,0"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="7,-1" stop="7,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="0,1" stop="0,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="1,1" stop="1,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="2,1" stop="2,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="3,1" stop="3,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="4,1" stop="4,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="5,1" stop="5,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="6,1" stop="6,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/> - <lineStyle kind="LINEBEFORE" colorName="#000000" start="7,1" stop="7,-1"/> - <lineStyle kind="LINEAFTER" colorName="#000000" start="7,1" stop="7,-1"/> - <lineStyle kind="LINEBELOW" colorName="#000000" start="7,-1" stop="7,-1"/> - <blockBackground colorName="#ffcc99" start="0,0" stop="0,-1"/> - <blockBackground colorName="#ffcc99" start="1,0" stop="1,-1"/> - <blockBackground colorName="#ffcc99" start="2,0" stop="2,-1"/> - <blockBackground colorName="#ffcc99" start="3,0" stop="3,-1"/> - <blockBackground colorName="#ffcc99" start="4,0" stop="4,-1"/> - <blockBackground colorName="#ffcc99" start="5,0" stop="5,-1"/> - <blockBackground colorName="#ffcc99" start="6,0" stop="6,-1"/> - <blockBackground colorName="#ffcc99" start="7,0" stop="7,-1"/> - <blockBackground colorName="#ffffff" start="0,1" stop="0,-1"/> - <blockBackground colorName="#ffffff" start="1,1" stop="1,-1"/> - <blockBackground colorName="#ffffff" start="2,1" stop="2,-1"/> - <blockBackground colorName="#ffffff" start="3,1" stop="3,-1"/> - <blockBackground colorName="#ffffff" start="4,1" stop="4,-1"/> - <blockBackground colorName="#ffffff" start="5,1" stop="5,-1"/> - <blockBackground colorName="#ffffff" start="6,1" stop="6,-1"/> - <blockBackground colorName="#ffffff" start="7,1" stop="7,-1"/> - </blockTableStyle> - <initialize> - <paraStyle name="all" alignment="justify"/> - </initialize> - <paraStyle name="P1" fontName="Times-Roman" alignment="RIGHT"/> - <paraStyle name="P2" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER"/> - <paraStyle name="P3" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT"/> - <paraStyle name="P4" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT"/> - <paraStyle name="P5" fontName="Helvetica" fontSize="12.0" leading="15" alignment="LEFT"/> - <paraStyle name="P6" fontName="Helvetica" fontSize="12.0" leading="15" alignment="CENTER"/> - <paraStyle name="P7" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT"/> - <paraStyle name="P8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER"/> - <paraStyle name="P9" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT"/> - <paraStyle name="P10" fontName="Helvetica" fontSize="12.0" leading="15" alignment="LEFT"/> - <paraStyle name="P11" fontName="Helvetica" fontSize="12.0" leading="15" alignment="CENTER"/> - <paraStyle name="P12" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="10.0" leading="13" alignment="RIGHT"/> - <paraStyle name="Standard" fontName="Times-Roman"/> - <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/> - <paraStyle name="Text body" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/> - <paraStyle name="List" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/> - <paraStyle name="Caption" fontName="Times-Roman" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/> - <paraStyle name="Index" fontName="Times-Roman"/> - <paraStyle name="Table Contents" fontName="Times-Roman"/> - <paraStyle name="Table Heading" fontName="Times-Roman" alignment="CENTER"/> - <paraStyle name="Footer" fontName="Times-Roman"/> - <paraStyle name="MP1" fontName="Times-Roman" alignment="RIGHT"/> - </stylesheet> - <images/> - <story> - <para style="P7">[[ repeatIn(objects, 'o') ]]</para> - <blockTable colWidths="249.0,249.0" style="Table2"> - <tr> - <td> - <para style="P10"> - <font face="Times-Roman" size="10.0">[[ get_company(o) ]]</font> - </para> - </td> - <td> - <para style="P12"> - <font face="Times-Roman">REGISTRO IVA</font> - </para> - <para style="P12"> - <font face="Times-Roman">ACQUISTI</font> - </para> - </td> - </tr> - </blockTable> - <para style="P7"> - <font color="white"> </font> - </para> - <para style="P11">[[ o.name ]] </para> - <para style="P7"> - <font color="white"> </font> - </para> - <blockTable colWidths="39.0,50.0,92.0,45.0,54.0,76.0,69.0,74.0" repeatRows="1" style="Table1"> - <tr> - <td> - <para style="P8">Periodo</para> - </td> - <td> - <para style="P8">Protocollo</para> - </td> - <td> - <para style="P8">Fornitore</para> - </td> - <td> - <para style="P8">Numero</para> - </td> - <td> - <para style="P8">Data fattura</para> - </td> - <td> - <para style="P8">Aliquota</para> - </td> - <td> - <para style="P8">Imponibile</para> - </td> - <td> - <para style="P8">Imposta</para> - </td> - </tr> - <tr> - <td> - <para style="P2">[[ repeatIn(get_lines(o), 'line') ]]</para> - <para style="P2">[[ line['periodo'] ]]</para> - </td> - <td> - <para style="P2">[[ line['protocollo'] ]]</para> - </td> - <td> - <para style="P2">[[ line['causale'] ]]</para> - </td> - <td> - <para style="P2">[[ line['numero'] ]]</para> - </td> - <td> - <para style="P2">[[ line['data_doc'] ]]</para> - </td> - <td> - <para style="P3">[[ line['aliquota'] ]]</para> - </td> - <td> - <para style="P4">[[ line['imponibile'] ]]</para> - </td> - <td> - <para style="P4">[[ line['imposta'] ]]</para> - </td> - </tr> - </blockTable> - <para style="P5"> - <font color="white"> </font> - </para> - <para style="P6"> - <font color="white"> </font> - </para> - </story> -</document> - diff --git a/addons/l10n_it/report/normalized_oo2rml.xsl b/addons/l10n_it/report/normalized_oo2rml.xsl deleted file mode 100644 index 14fcf598e54..00000000000 --- a/addons/l10n_it/report/normalized_oo2rml.xsl +++ /dev/null @@ -1,696 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<xsl:stylesheet - version="1.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:fo="http://www.w3.org/1999/XSL/Format" - xmlns:office="http://openoffice.org/2000/office" - xmlns:style="http://openoffice.org/2000/style" - xmlns:text="http://openoffice.org/2000/text" - xmlns:table="http://openoffice.org/2000/table" - xmlns:draw="http://openoffice.org/2000/drawing" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:number="http://openoffice.org/2000/datastyle" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns:chart="http://openoffice.org/2000/chart" - xmlns:dr3d="http://openoffice.org/2000/dr3d" - xmlns:math="http://www.w3.org/1998/Math/MathML" - xmlns:form="http://openoffice.org/2000/form" - xmlns:script="http://openoffice.org/2000/script" - office:class="text" office:version="1.0" - exclude-result-prefixes = "xsl fo office style text table draw xlink number svg chart dr3d math form script"> - - <!--TODO's: indent, picture cache (trml2pdf) --> - -<xsl:output method="xml" indent="yes" /> -<xsl:strip-space elements="*"/> - -<xsl:key name="text_style" match="style:style[@style:family='text']" use="@style:name" /> -<xsl:key name="page_break_before" match="style:style[@style:family='paragraph' and ./style:properties/@fo:break-before='page']" use="@style:name" /> -<xsl:key name="page_break_after" match="style:style[@style:family='paragraph' and ./style:properties/@fo:break-after='page']" use="@style:name" /> -<xsl:key name="table_column_style" match="style:style[@style:family='table-column']" use="@style:name" /> -<xsl:key name="table_cell_style" match="style:style[@style:family='table-cell']" use="@style:name" /> -<xsl:key name="paragraph_style" match="style:style[@style:family='paragraph']" use="@style:name" /> - -<xsl:template match="office:document-content"> - <document filename="test.pdf"> - <xsl:apply-templates select="office:automatic-styles" /> - <xsl:apply-templates select="office:body" /> - </document> -</xsl:template> - -<xsl:template name="page_size"> - <xsl:attribute name="pageSize"> - <xsl:text>(</xsl:text> - <xsl:value-of select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:page-width" /> - <xsl:text>,</xsl:text> - <xsl:value-of select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:page-height" /> - <xsl:text>)</xsl:text> - </xsl:attribute> -</xsl:template> - -<xsl:template name="fixed_frame"> - <xsl:for-each select="//draw:text-box"> - <frame> - <xsl:attribute name="id"><xsl:value-of select="./@draw:name" /></xsl:attribute> - <xsl:attribute name="x1"><xsl:value-of select="./@svg:x" /></xsl:attribute> - <xsl:attribute name="y1"> - <xsl:value-of - select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:page-height - ./@svg:y - ./@fo:min-height" /> - </xsl:attribute> - <xsl:attribute name="width"> - <xsl:value-of select="./@svg:width" /> - </xsl:attribute> - <xsl:attribute name="height"> - <xsl:value-of select="./@fo:min-height" /> - </xsl:attribute> - </frame> - </xsl:for-each> -</xsl:template> - -<xsl:template name="margin_sizes"> - <xsl:variable name="margin_left" select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:margin-left" /> - <xsl:variable name="margin_right" select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:margin-right" /> - <xsl:variable name="margin_top" select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:margin-top" /> - <xsl:variable name="margin_bottom" select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:margin-bottom" /> - <xsl:variable name="page_width" select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:page-width" /> - <xsl:variable name="page_height" select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:page-height" /> - <xsl:attribute name="x1"><xsl:value-of select="$margin_left" /></xsl:attribute> - <xsl:attribute name="y1"><xsl:value-of select="$margin_bottom" /></xsl:attribute> - <xsl:attribute name="width"><xsl:value-of select="$page_width - $margin_left - $margin_right"/></xsl:attribute> - <xsl:attribute name="height"><xsl:value-of select="$page_height - $margin_bottom - $margin_top"/></xsl:attribute> -</xsl:template> - -<xsl:template name="text_width"> - <!-- You need this for the workaround to make primitive outlines--> - <xsl:variable name="margin_left" select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:margin-left" /> - <xsl:variable name="margin_right" select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:margin-right" /> - <xsl:variable name="page_width" select="//transferredfromstylesxml/style:page-master[1]/style:properties/@fo:page-width" /> - <xsl:value-of select="$page_width - $margin_left - $margin_right - 18"/> -</xsl:template> - - - -<xsl:template match="office:automatic-styles"> - <!--<template pageSize="(21cm, 29.7cm)" leftMargin="1.0cm" rightMargin="2.0cm" topMargin="1.0cm" bottomMargin="1.0cm" title="Test" author="Martin Simon" allowSplitting="20">--> - <template pageSize="(21cm, 29.7cm)" title="Test" author="Martin Simon" allowSplitting="20"> - <xsl:call-template name="page_size" /> - <pageTemplate id="first"> - <xsl:call-template name="fixed_frame" /> - <frame id="first" x1="2cm" y1="2cm" width="17cm" height="26cm"> - <xsl:call-template name="margin_sizes" /> - </frame> - </pageTemplate> - </template> - <stylesheet> - <!--A table style to simulate primitive outlines -till the <addOutline> tag is implemented in trml2pdf --> - <blockTableStyle id="Standard_Outline"> - <blockAlignment value="LEFT"/> - <blockValign value="TOP"/> - </blockTableStyle> - <!--use two standard table grid styles like PyOpenOffice "Old Way": with and without a grid--> - <!--TODO insert table cell colors here, not within the <td> tag - otherwise - it will not work with flowables as cell content--> - <xsl:call-template name="make_blocktablestyle" /> - <initialize> - <paraStyle name="all" alignment="justify" /> - </initialize> - <xsl:apply-templates select="style:style" /> - </stylesheet> -</xsl:template> - -<xsl:template name="make_blocktablestyle"> - <xsl:for-each select="//table:table"> - <xsl:variable name="test"> - <xsl:value-of select="./@table:name" /> - </xsl:variable> - <xsl:if test="not(boolean(count(preceding-sibling::table:table[@table:name=$test])))"> - <!--Test if this is the first table with this style, nested tables not counted--> - <blockTableStyle id="{@table:name}"> - <xsl:if test=".//draw:image"> - <blockTopPadding value="0"/> - <blockBottomPadding value="0"/> - </xsl:if> - <blockAlignment value="LEFT" /> - <blockValign value="TOP" /> - <xsl:call-template name="make_linestyle" /> - <xsl:call-template name="make_tablebackground" /> - </blockTableStyle> - </xsl:if> - </xsl:for-each> -</xsl:template> - -<xsl:template name="make_linestyle"> - <xsl:for-each select=".//table:table-row"> - <xsl:variable name="row" select="position() - 1"/> - <xsl:for-each select=".//table:table-cell"> - <xsl:variable name="col" select="position() - 1"/> - <xsl:variable name="linebefore"> - <xsl:value-of select="key('table_cell_style',@table:style-name)/style:properties/@fo:border-left"/> - </xsl:variable> - <xsl:if test="not($linebefore='') and not($linebefore='none')"> - <xsl:variable name="colorname"> - <xsl:value-of select="substring-after($linebefore,'#')"/> - </xsl:variable> - <lineStyle kind="LINEBEFORE" colorName="#{$colorname}" start="{$col},{$row}" stop="{$col},-1"/> - </xsl:if> - <xsl:variable name="lineafter"> - <xsl:value-of select="key('table_cell_style',@table:style-name)/style:properties/@fo:border-right"/> - </xsl:variable> - <xsl:if test="not($lineafter='') and not($lineafter='none')"> - <xsl:variable name="colorname"> - <xsl:value-of select="substring-after($lineafter,'#')"/> - </xsl:variable> - <lineStyle kind="LINEAFTER" colorName="#{$colorname}" start="{$col},{$row}" stop="{$col},-1"/> - </xsl:if> - <xsl:variable name="lineabove"> - <xsl:value-of select="key('table_cell_style',@table:style-name)/style:properties/@fo:border-top"/> - </xsl:variable> - <xsl:if test="not($lineabove='') and not($lineabove='none')"> - <xsl:variable name="colorname"> - <xsl:value-of select="substring-after($lineabove,'#')"/> - </xsl:variable> - <lineStyle kind="LINEABOVE" colorName="#{$colorname}" start="{$col},{$row}" stop="{$col},{$row}"/> - </xsl:if> - <xsl:variable name="linebelow"> - <xsl:value-of select="key('table_cell_style',@table:style-name)/style:properties/@fo:border-bottom"/> - </xsl:variable> - <xsl:if test="not($linebelow='') and not($linebelow='none')"> - <xsl:variable name="colorname"> - <xsl:value-of select="substring-after($linebelow,'#')"/> - </xsl:variable> - <lineStyle kind="LINEBELOW" colorName="#{$colorname}" start="{$col},{-1}" stop="{$col},{-1}"/> - </xsl:if> - <xsl:variable name="grid"> - <xsl:value-of select="key('table_cell_style',@table:style-name)/style:properties/@fo:border"/> - </xsl:variable> - <xsl:if test="not($grid='') and not($grid='none')"> - <xsl:variable name="colorname"> - <xsl:value-of select="substring-after($grid,'#')"/> - </xsl:variable> - <!-- Don't use grid because we don't need a line between each rows --> - <lineStyle kind="LINEBEFORE" colorName="#{$colorname}" start="{$col},{$row}" stop="{$col},-1"/> - <lineStyle kind="LINEAFTER" colorName="#{$colorname}" start="{$col},{$row}" stop="{$col},-1"/> - <lineStyle kind="LINEABOVE" colorName="#{$colorname}" start="{$col},{$row}" stop="{$col},{$row}"/> - <lineStyle kind="LINEBELOW" colorName="#{$colorname}" start="{$col},{-1}" stop="{$col},{-1}"/> - </xsl:if> - </xsl:for-each> - </xsl:for-each> -</xsl:template> - -<!-- Was needed to simulate bulleted lists: -<xsl:template match="text:ordered-list|text:unordered-list"> - <xsl:variable name = "text_width"> - <xsl:call-template name="text_width" /> - </xsl:variable> - <blockTable style="Standard_Outline" colWidths="18,{$text_width}"> - <xsl:apply-templates match="text:list-item" /> -</blockTable> -</xsl:template> - -<xsl:template match="text:list-item"> - <tr> - <td><para><font face="Helvetica-Bold" size="10">*</font></para></td> - <td> - <xsl:apply-templates /> - </td> - </tr> -</xsl:template> - ---> - - -<xsl:template match="office:body"> - <story> - <xsl:apply-templates /> - <xsl:for-each select="//draw:text-box"> - <currentFrame> - <xsl:attribute name="name"> - <xsl:value-of select="./@draw:name" /> - </xsl:attribute> - </currentFrame> - <xsl:apply-templates> - <xsl:with-param name="skip_draw" select="0" /> - </xsl:apply-templates> - <frameEnd /> - </xsl:for-each> - <xsl:for-each select="//text:ordered-list"> - <para><seqReset id="{//text:ordered-list/@text:style-name}"/></para> - </xsl:for-each> - </story> -</xsl:template> - -<xsl:template match="table:table"> - <blockTable> - <xsl:attribute name="colWidths"> - <xsl:call-template name="make_columns" /> - </xsl:attribute> - <xsl:call-template name="make_tableheaders" /> - <xsl:attribute name="style"> - <xsl:value-of select="@table:name" /> - </xsl:attribute> - <xsl:apply-templates /> - </blockTable> -</xsl:template> - -<xsl:template name="make_tableheaders"> - <xsl:if test="boolean(count(table:table-header-rows))"> - <xsl:attribute name="repeatRows">1</xsl:attribute> - </xsl:if> -</xsl:template> - -<xsl:template name="make_tablebackground"> - <xsl:for-each select=".//table:table-row"> - <!--Be careful when there are table:table-header-rows as - parent node of table:table-row --> - <xsl:variable name="row" select="position() - 1" /> - <xsl:for-each select="./table:table-cell"> - <xsl:variable name="col" select="position() - 1" /> - <xsl:variable name="background"> - <xsl:value-of select="key('table_cell_style',@table:style-name)/style:properties/@fo:background-color" /> - </xsl:variable> - <xsl:if test="not($background='') and boolean(key('table_cell_style',@table:style-name)/style:properties/@fo:background-color) and starts-with($background,'#')"> - <!--only RGB hexcolors are accepted --> - <blockBackground colorName="{$background}" start="{$col},{$row}" stop="{$col},-1" /> - </xsl:if> - </xsl:for-each> - </xsl:for-each> -</xsl:template> - -<xsl:template name="make_columns"> - <xsl:variable name="columns" > - <xsl:for-each select="table:table-column"> - <xsl:value-of select="key('table_column_style',@table:style-name)/style:properties/@style:column-width" /> - <xsl:text>,</xsl:text> - </xsl:for-each> - </xsl:variable> - <xsl:value-of select="substring($columns,1,string-length($columns) - 1)" /> - <!--strip the last comma--> -</xsl:template> - -<xsl:template match="table:table-row"> - <tr> - <xsl:apply-templates /> - </tr> -</xsl:template> - -<xsl:template match="table:table-cell"> - <td> - <xsl:apply-templates /> - </td> -</xsl:template> - -<xsl:template match="text:section"> - <section> - <xsl:apply-templates /> - </section> -</xsl:template> - - -<xsl:template match="text:span"> - <font> - <xsl:call-template name="make_fontnames_span" /> - <xsl:call-template name="make_fontsize_span" /> - <xsl:apply-templates /> - </font> -</xsl:template> - -<xsl:template name="make_fontsize_span"> - <xsl:variable name ="fontsize"> - <xsl:value-of select="key('text_style',@text:style-name)/style:properties/@fo:font-size" /> - </xsl:variable> - <xsl:if test="not($fontsize='') and boolean(key('text_style',@text:style-name)/style:properties/@fo:font-size)" > - <xsl:attribute name="size"> - <xsl:value-of select="$fontsize" /> - </xsl:attribute> - </xsl:if> -</xsl:template> - -<xsl:template name="make_fontnames_span"> - <xsl:attribute name="face"> - <xsl:call-template name="make_fontnames"> - <xsl:with-param name="fontName" select="key('text_style',@text:style-name)/style:properties/@style:font-name" /> - <xsl:with-param name="fontWeight" select="key('text_style',@text:style-name)/style:properties/@fo:font-weight" /> - <xsl:with-param name="fontStyle" select="key('text_style',@text:style-name)/style:properties/@fo:font-style" /> - </xsl:call-template> - </xsl:attribute> -</xsl:template> - -<xsl:template name="make_image"> - <illustration height="{.//draw:image/@svg:height}" width="{.//draw:image/@svg:width}"> - <image x="0" y="0" file="{substring-after(.//draw:image/@xlink:href,'#Pictures/')}" height="{.//draw:image/@svg:height}" width="{.//draw:image/@svg:width}" /> - </illustration> -</xsl:template> - -<xsl:template name="empty_paragraph"> - <xsl:if test="not(boolean(count(descendant::node())))"> - <xsl:call-template name="distance_point"> - <xsl:with-param name="background" select="key('paragraph_style',@text:style-name)/style:properties/@fo:background-color" /> - </xsl:call-template> - </xsl:if> -</xsl:template> - -<xsl:template name="distance_point"> - <xsl:param name="background" /> - <xsl:param name="tab_stop"></xsl:param> - <xsl:variable name="local_back"> - <xsl:choose> - <xsl:when test="not(boolean($background)) or not(contains($background,'#'))"> - <!-- Do not accept OO colors like "transparent", only hex-colors --> - <xsl:text>white</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$background" /> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <font color="{$local_back}"> - <xsl:text> </xsl:text> - <xsl:if test="boolean($tab_stop)"> - <!-- simulate a tabstop with white/background-color points --> - <xsl:text>.........</xsl:text> - </xsl:if> - </font> -</xsl:template> - -<xsl:template match="text:ordered-list"> - <xsl:apply-templates /> - - <!-- Reset the counter. seqreset is not a trml2pdf tag, but a Platypus Intra Paragraph Markup, - so it needs a dummy paragraph to enclose it --> -</xsl:template> - -<xsl:template name="make_listitem"> - <xsl:if test="(name(..)='text:list-item')"> - <xsl:attribute name="leftIndent">15</xsl:attribute> - <xsl:attribute name="bulletIndent">0</xsl:attribute> - <xsl:choose> - <xsl:when test="(name(../..)='text:unordered-list')"> - <xsl:variable name="fontsize"> - <xsl:value-of select="number(key('paragraph_style',@text:style-name)/style:properties/@fo:font-size)" /> - </xsl:variable> - <xsl:choose> - <xsl:when test="$fontsize='NaN'"> - <!-- you should exclude non-numerical values for bulletFontSize. <== Sometimes the preprocessing went wrong.--> - <!--use a default bullet font size--> - <xsl:attribute name="bulletFontSize">6</xsl:attribute> - </xsl:when> - <xsl:otherwise> - <xsl:attribute name="bulletFontSize"><xsl:value-of select="floor(($fontsize div 2) + 1)" /></xsl:attribute> - </xsl:otherwise> - </xsl:choose> - <xsl:attribute name="bulletFontName">ZapfDingbats</xsl:attribute> - <xsl:attribute name="bulletText">l</xsl:attribute> - </xsl:when> - <xsl:otherwise> - <!-- Generate the numbers for an ordered list --> - <xsl:variable name="size"> - <xsl:value-of select="key('paragraph_style',@text:style-name)/style:properties/@fo:font-size" /> - </xsl:variable> - <!-- For ordered lists we use the bullet tag from Platypus Intra Paragraph Markup --> - <bullet> - <xsl:if test="not($size='') and boolean(key('paragraph_style',@text:style-name)/style:properties/@fo:font-size)"> - <xsl:attribute name="size"> - <!-- adapt the fontsize to the fontsize of the current paragraph --> - <xsl:value-of select="$size" /> - </xsl:attribute> - </xsl:if> - <seq id="{../../@text:style-name}"/>.</bullet> - - </xsl:otherwise> - </xsl:choose> - </xsl:if> -</xsl:template> - -<xsl:template match="text:drop-down"> - <xsl:value-of select="text:label[2]/@text:value" /> -</xsl:template> - - -<xsl:template match="text:p|text:h"> - <xsl:param name="skip_draw" select="1" /> - <xsl:if test="boolean(key('page_break_before',@text:style-name))" > - <pageBreak /> - </xsl:if> - <xsl:choose> - <xsl:when test="boolean(.//draw:image)"> - <xsl:call-template name="make_image" /> - </xsl:when> - <xsl:when test="boolean(name(..) = 'draw:text-box') and boolean($skip_draw)"> - </xsl:when> - <xsl:otherwise> - <para> - <xsl:attribute name="style"> - <xsl:value-of select="@text:style-name" /> - </xsl:attribute> - <xsl:call-template name="make_listitem" /> - <xsl:apply-templates /> - <xsl:call-template name="empty_paragraph" /> - </para> - </xsl:otherwise> - </xsl:choose> - <xsl:if test="boolean(key('page_break_after',@text:style-name))" > - <pageBreak /> - </xsl:if> -</xsl:template> - -<xsl:template match="text:p/text:tab-stop"> - <!-- simulate a tabstop --> - <xsl:call-template name="distance_point"> - <xsl:with-param name="background" select="key('paragraph_style',@text:style-name)/style:properties/@fo:background-color" /> - <xsl:with-param name="tab_stop">yes</xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- experimental - switched off -<xsl:template match="text:h"> - <para> - <xsl:attribute name="style"> - <xsl:value-of select="@text:style-name" /> - </xsl:attribute> - <xsl:call-template name="make_number" /> - <xsl:apply-templates /> - <xsl:call-template name="empty_paragraph" /> - </para> -</xsl:template> - -<xsl:template name="make_number"> - <xsl:choose> - <xsl:when test="@text:level='1'"> - <xsl:number format="1. " /> - </xsl:when> - <xsl:when test="@text:level='2'"> - <xsl:number count="text:h[@text:level='1']|text:h[text:level='2']" level="any" format="1.1." /> - </xsl:when> - </xsl:choose> -</xsl:template> - ---> - -<xsl:template match="style:style[@style:family='paragraph']"> - <paraStyle> - <xsl:attribute name="name"> - <xsl:value-of select="@style:name" /> - </xsl:attribute> - <xsl:call-template name="make_indent_paragraph" /> - <xsl:call-template name="make_fontnames_paragraph" /> - <xsl:call-template name="make_fontsize" /> - <!--<xsl:call-template name="make_parent" /> not necessary - - parent styles processed by PyOpenOffice --> - <xsl:call-template name="make_alignment" /> - <xsl:call-template name="make_background" /> - <xsl:call-template name="make_space_beforeafter" /> - <xsl:call-template name="make_fontcolor" /> - </paraStyle> -</xsl:template> - -<xsl:template name="make_indent_paragraph"> - <xsl:variable name="right_indent"><xsl:value-of select="style:properties/@fo:margin-right" /></xsl:variable> - <xsl:variable name="left_indent"><xsl:value-of select="style:properties/@fo:margin-left" /></xsl:variable> - <xsl:if test="not($right_indent='') and boolean(style:properties/@fo:margin-right)"> - <xsl:attribute name="rightIndent"> - <xsl:value-of select="$right_indent" /> - </xsl:attribute> - </xsl:if> - <xsl:if test="not($left_indent='') and boolean(style:properties/@fo:margin-left)"> - <xsl:attribute name="leftIndent"> - <xsl:value-of select="$left_indent" /> - </xsl:attribute> - </xsl:if> -</xsl:template> - -<xsl:template name="make_background"> - <xsl:variable name="background"> - <xsl:value-of select="style:properties/@fo:background-color" /> - </xsl:variable> - <xsl:if test="not($background='') and boolean(style:properties/@fo:background-color) and starts-with($background,'#')" > - <xsl:attribute name="backColor"> - <xsl:value-of select="$background" /> - </xsl:attribute> - </xsl:if> -</xsl:template> - -<xsl:template name="make_space_beforeafter"> - <xsl:variable name="before"> - <xsl:value-of select="style:properties/@fo:margin-top" /> - </xsl:variable> - <xsl:variable name="after"> - <xsl:value-of select="style:properties/@fo:margin-bottom" /> - </xsl:variable> - <xsl:if test="not($before='') and boolean(style:properties/@fo:margin-top)" > - <xsl:attribute name="spaceBefore"> - <xsl:value-of select="$before" /> - </xsl:attribute> - </xsl:if> - <xsl:if test="not($after='') and boolean(style:properties/@fo:margin-bottom)" > - <xsl:attribute name="spaceAfter"> - <xsl:value-of select="$after" /> - </xsl:attribute> - </xsl:if> -</xsl:template> - -<xsl:template name="make_fontsize"> - <xsl:variable name="fontSize"> - <xsl:value-of select="style:properties/@fo:font-size" /> - </xsl:variable> - <xsl:if test="not($fontSize='') and boolean(style:properties/@fo:font-size)"> - <xsl:attribute name="fontSize"> - <xsl:value-of select="$fontSize" /> - </xsl:attribute> - <xsl:attribute name="leading"> - <xsl:value-of select="$fontSize + floor($fontSize div 5) + 1" /> - <!--use a standard leading related to the font size --> - </xsl:attribute> - </xsl:if> -</xsl:template> - -<!--this template is not needed anymore for "normalized" sxw files --> -<xsl:template name="make_parent"> - <xsl:variable name="parent"> - <xsl:value-of select="@style:parent-style-name" /> - </xsl:variable> - <xsl:if test="not($parent='') and boolean(@style:parent-style-name)"> - <xsl:attribute name="parent"> - <xsl:value-of select="$parent" /> - </xsl:attribute> - </xsl:if> -</xsl:template> - -<xsl:template name="make_alignment"> - <xsl:variable name="alignment"> - <xsl:value-of select="style:properties/@fo:text-align" /> - </xsl:variable> - <xsl:if test="not($alignment='') and boolean(style:properties/@fo:text-align)"> - <xsl:choose> - <xsl:when test="$alignment='start'"> - <xsl:attribute name="alignment">LEFT</xsl:attribute> - </xsl:when> - <xsl:when test="$alignment='center'"> - <xsl:attribute name="alignment">CENTER</xsl:attribute> - </xsl:when> - <xsl:when test="$alignment='end'"> - <xsl:attribute name="alignment">RIGHT</xsl:attribute> - </xsl:when> - <xsl:when test="$alignment='justify'"> - <xsl:attribute name="alignment">JUSTIFY</xsl:attribute> - </xsl:when> - </xsl:choose> - </xsl:if> -</xsl:template> - -<xsl:template name="make_fontnames_paragraph"> - <xsl:attribute name="fontName"> - <xsl:call-template name="make_fontnames"> - <xsl:with-param name="fontName" select="style:properties/@style:font-name" /> - <xsl:with-param name="fontWeight" select="style:properties/@fo:font-weight" /> - <xsl:with-param name="fontStyle" select="style:properties/@fo:font-style" /> - </xsl:call-template> - </xsl:attribute> -</xsl:template> - -<xsl:template name="make_fontnames"> - <!--much too verbose, needs improvement--> -<xsl:param name="fontName" /> -<xsl:param name="fontWeight" /> -<xsl:param name="fontStyle" /> -<xsl:choose> -<xsl:when test="not($fontName='') and boolean($fontName)"> - <xsl:choose> - <xsl:when test="contains($fontName,'Courier')"> - <xsl:choose> - <xsl:when test="($fontWeight='bold') and ($fontStyle='italic')"> - <xsl:text>Courier-BoldOblique</xsl:text> - </xsl:when> - <xsl:when test="($fontWeight='bold') and not ($fontStyle='italic')"> - <xsl:text>Courier-Bold</xsl:text> - </xsl:when> - <xsl:when test="not($fontWeight='bold') and ($fontStyle='italic')"> - <xsl:text>Courier-Oblique</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>Courier</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:when> - <xsl:when test="contains($fontName,'Helvetica') or contains($fontName,'Arial') or contains($fontName,'Sans')"> - <xsl:choose> - <xsl:when test="($fontWeight='bold') and ($fontStyle='italic')"> - <xsl:text>Helvetica-BoldOblique</xsl:text> - </xsl:when> - <xsl:when test="($fontWeight='bold') and not ($fontStyle='italic')"> - <xsl:text>Helvetica-Bold</xsl:text> - </xsl:when> - <xsl:when test="not($fontWeight='bold') and ($fontStyle='italic')"> - <xsl:text>Helvetica-Oblique</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>Helvetica</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:when> - <xsl:otherwise> - <xsl:choose> - <xsl:when test="($fontWeight='bold') and ($fontStyle='italic')"> - <xsl:text>Times-BoldItalic</xsl:text> - </xsl:when> - <xsl:when test="($fontWeight='bold') and not ($fontStyle='italic')"> - <xsl:text>Times-Bold</xsl:text> - </xsl:when> - <xsl:when test="not($fontWeight='bold') and ($fontStyle='italic')"> - <xsl:text>Times-Italic</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>Times-Roman</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:otherwise> - </xsl:choose> -</xsl:when> -<xsl:otherwise> - <!--Use this as default --> - <xsl:text>Times-Roman</xsl:text> -</xsl:otherwise> -</xsl:choose> -</xsl:template> -<xsl:template name="make_fontcolor"> - <xsl:variable name="textColor"> - <xsl:value-of select="style:properties/@fo:color"/> - </xsl:variable> - <xsl:if test="not($textColor='') and boolean(style:properties/@fo:color)"> - <xsl:attribute name="textColor"> - <xsl:value-of select="$textColor" /> - </xsl:attribute> - </xsl:if> -</xsl:template> - -<!-- -This stylesheet is part of: -PyOpenOffice Version 0.4 -Copyright (C) 2005: Martin Simon -Homepage: www.bezirksreiter.de - -GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 ---> - -</xsl:stylesheet> - - diff --git a/addons/l10n_it/security/ir.model.access.csv b/addons/l10n_it/security/ir.model.access.csv deleted file mode 100644 index 8a8908511db..00000000000 --- a/addons/l10n_it/security/ir.model.access.csv +++ /dev/null @@ -1,3 +0,0 @@ -"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_l10n_it_report_manager","l10n_it.report account manager","model_account_report_libroiva","account.group_account_manager",1,1,1,1 -"access_l10n_it_report_user","l10n_it_report account user","model_account_report_libroiva","account.group_account_user",1,1,1,1 diff --git a/addons/l10n_ma/__init__.py b/addons/l10n_ma/__init__.py index 35aef5a2c44..070b09bdf33 100644 --- a/addons/l10n_ma/__init__.py +++ b/addons/l10n_ma/__init__.py @@ -21,3 +21,5 @@ import l10n_ma import report import wizard + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_ro/res_partner.py b/addons/l10n_ro/res_partner.py index f5521844a49..009aa76b62f 100644 --- a/addons/l10n_ro/res_partner.py +++ b/addons/l10n_ro/res_partner.py @@ -30,3 +30,5 @@ class res_partner(osv.osv): 'nrc' : fields.char('NRC', size=16, help='Registration number at the Registry of Commerce'), } res_partner() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_th/__init__.py b/addons/l10n_th/__init__.py index 45de899ed49..a4a5d907c6b 100644 --- a/addons/l10n_th/__init__.py +++ b/addons/l10n_th/__init__.py @@ -18,3 +18,5 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_th/__openerp__.py b/addons/l10n_th/__openerp__.py index 1b2c4771aee..4ab8f7d355c 100644 --- a/addons/l10n_th/__openerp__.py +++ b/addons/l10n_th/__openerp__.py @@ -38,3 +38,5 @@ Thai accounting chart and localization. 'certificate' : '00722263103978957725', 'images': ['images/config_chart_l10n_th.jpeg','images/l10n_th_chart.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_th/i18n/th.po b/addons/l10n_th/i18n/th.po new file mode 100644 index 00000000000..d9b675d399b --- /dev/null +++ b/addons/l10n_th/i18n/th.po @@ -0,0 +1,43 @@ +# Thai 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-07 06:19+0000\n" +"PO-Revision-Date: 2011-11-17 01:32+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-18 05:13+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: l10n_th +#: model:ir.actions.todo,note:l10n_th.config_call_account_template_th +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_th +#: model:ir.module.module,shortdesc:l10n_th.module_meta_information +msgid "Thailand - Thai Chart of Accounts" +msgstr "" + +#. module: l10n_th +#: model:ir.module.module,description:l10n_th.module_meta_information +msgid "" +"\n" +"Chart of accounts for Thailand.\n" +" " +msgstr "" diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml index 50932a03437..f695d994acd 100644 --- a/addons/lunch/lunch_view.xml +++ b/addons/lunch/lunch_view.xml @@ -371,9 +371,11 @@ <field name="arch" type="xml"> <search string="Box Amount by User"> <group> - <filter icon="terp-go-year" string=" Year " + <filter icon="terp-go-year" string=" Year " name="year" domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>=',time.strftime('%%Y-01-01'))]" help="Box amount in current year"/> + <separator orientation="vertical"/> + <filter icon="terp-go-month" string=" Month " name="month" domain="[('date','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]" @@ -402,6 +404,7 @@ <field name="res_model">report.lunch.amount</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> + <field name="context">{'search_default_year': 1,"search_default_month":1}</field> <field name="search_view_id" ref="view_report_lunch_amount_search"/> </record> diff --git a/addons/lunch/report/report_lunch_order.py b/addons/lunch/report/report_lunch_order.py index 05f730db740..7e2b8de9f49 100644 --- a/addons/lunch/report/report_lunch_order.py +++ b/addons/lunch/report/report_lunch_order.py @@ -64,3 +64,5 @@ class report_lunch_order(osv.osv): ) """) report_lunch_order() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 9c535966e17..159259f151d 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -479,11 +479,22 @@ class mail_message(osv.osv): attachments = [] for attach in message.attachment_ids: attachments.append((attach.datas_fname, base64.b64decode(attach.datas))) + + body = message.body_html if message.subtype == 'html' else message.body_text + body_alternative = None + subtype_alternative = None + if message.subtype == 'html' and message.body_text: + # we have a plain text alternative prepared, pass it to + # build_message instead of letting it build one + body_alternative = message.body_text + subtype_alternative = 'plain' + msg = ir_mail_server.build_email( email_from=message.email_from, email_to=to_email(message.email_to), subject=message.subject, - body=message.body_html if message.subtype == 'html' else message.body_text, + body=body, + body_alternative=body_alternative, email_cc=to_email(message.email_cc), email_bcc=to_email(message.email_bcc), reply_to=message.reply_to, @@ -491,6 +502,7 @@ class mail_message(osv.osv): references = message.references, object_id=message.res_id and ('%s-%s' % (message.res_id,message.model)), subtype=message.subtype, + subtype_alternative=subtype_alternative, headers=message.headers and literal_eval(message.headers)) res = ir_mail_server.send_email(cr, uid, msg, mail_server_id=message.mail_server_id.id, diff --git a/addons/mail/mail_message_view.xml b/addons/mail/mail_message_view.xml index 96268435810..2bf2756869e 100644 --- a/addons/mail/mail_message_view.xml +++ b/addons/mail/mail_message_view.xml @@ -1,9 +1,6 @@ <?xml version="1.0"?> <openerp> <data> - - <menuitem name="Configuration" parent="base.menu_tools" id="base.menu_lunch_survey_root" sequence="20"/> - <record model="ir.ui.view" id="view_email_message_form"> <field name="name">mail.message.form</field> <field name="model">mail.message</field> @@ -139,19 +136,16 @@ </record> <act_window domain="[('partner_id', '=', active_id), ('email_from', '!=', False)]" + context="{'default_partner_id': active_id}" id="act_res_partner_emails" name="Emails" res_model="mail.message" src_model="res.partner" view_id="view_email_message_tree"/> - <menuitem name="Emails" id="menu_email_message_tools" parent="base.menu_tools" /> - <menuitem name="Messages" id="menu_email_message" - parent="menu_email_message_tools" + parent="base.menu_email" action="action_view_mail_message" /> - <menuitem name="Emails" id="menu_config_email" parent="base.menu_lunch_survey_root" sequence="20"/> - </data> </openerp> diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py index 547281911c4..82832134c27 100644 --- a/addons/marketing_campaign/marketing_campaign.py +++ b/addons/marketing_campaign/marketing_campaign.py @@ -844,3 +844,5 @@ class report_xml(osv.osv): report_xml() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/marketing_campaign/report/campaign_analysis.py b/addons/marketing_campaign/report/campaign_analysis.py index af04a7e6dff..ebbb6034a1a 100644 --- a/addons/marketing_campaign/report/campaign_analysis.py +++ b/addons/marketing_campaign/report/campaign_analysis.py @@ -99,3 +99,5 @@ class campaign_analysis(osv.osv): ) """) campaign_analysis() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/marketing_campaign_crm_demo/__init__.py b/addons/marketing_campaign_crm_demo/__init__.py index 50a14119520..4c241b72be9 100644 --- a/addons/marketing_campaign_crm_demo/__init__.py +++ b/addons/marketing_campaign_crm_demo/__init__.py @@ -1 +1,3 @@ # Debian packaging removes blank files, so this comment is added. + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/membership/i18n/cs.po b/addons/membership/i18n/cs.po index c8e38a4a997..14aad66209a 100644 --- a/addons/membership/i18n/cs.po +++ b/addons/membership/i18n/cs.po @@ -4,77 +4,78 @@ # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" +"Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2009-09-30 08:29+0000\n" -"Last-Translator: Kuvaly [LCT] <kuvaly@seznam.cz>\n" -"Language-Team: \n" +"PO-Revision-Date: 2011-11-25 12:33+0000\n" +"Last-Translator: Jiří Hajda <robie@centrum.cz>\n" +"Language-Team: Czech <openerp-i18n-czech@lists.launchpad.net >\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 04:59+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:49+0000\n" +"X-Generator: Launchpad (build 14381)\n" +"X-Poedit-Language: Czech\n" #. module: membership #: model:process.transition,name:membership.process_transition_invoicetoassociate0 msgid "invoice to associate" -msgstr "" +msgstr "faktura k přidružení" #. module: membership #: model:process.process,name:membership.process_process_membershipprocess0 msgid "Membership Process" -msgstr "" +msgstr "Proces členství" #. module: membership #: selection:membership.membership_line,state:0 #: selection:report.membership,membership_state:0 #: selection:res.partner,membership_state:0 msgid "Paid Member" -msgstr "" +msgstr "Zaplacený člen" #. module: membership #: view:report.membership:0 #: view:res.partner:0 msgid "Group By..." -msgstr "" +msgstr "Seskupit podle..." #. module: membership #: field:report.membership,num_paid:0 msgid "# Paid" -msgstr "" +msgstr "# Zaplaceno" #. module: membership #: field:report.membership,tot_earned:0 msgid "Earned Amount" -msgstr "" +msgstr "Vydělaná částka" #. module: membership #: model:ir.model,name:membership.model_report_membership msgid "Membership Analysis" -msgstr "" +msgstr "Analýza členství" #. module: membership #: selection:report.membership,month:0 msgid "March" -msgstr "" +msgstr "Březen" #. module: membership #: model:process.node,note:membership.process_node_setassociation0 msgid "Set an associate member of partner." -msgstr "" +msgstr "Nastavit přidruženého člena k partnerovi" #. module: membership #: model:process.transition,note:membership.process_transition_invoicetopaid0 msgid "Invoice is be paid." -msgstr "" +msgstr "Faktura je zaplacena" #. module: membership #: field:membership.membership_line,company_id:0 #: view:report.membership:0 #: field:report.membership,company_id:0 msgid "Company" -msgstr "" +msgstr "Společnost" #. module: membership #: field:product.product,membership_date_to:0 @@ -84,84 +85,84 @@ msgstr "Datum do" #. module: membership #: model:process.transition,name:membership.process_transition_waitingtoinvoice0 msgid "Waiting to invoice" -msgstr "" +msgstr "Čekající na fakturu" #. module: membership #: help:report.membership,date_to:0 msgid "End membership date" -msgstr "" +msgstr "Datum ukončení členství" #. module: membership #: view:res.partner:0 msgid "Suppliers" -msgstr "" +msgstr "Dodavatelé" #. module: membership #: view:res.partner:0 msgid "All Members" -msgstr "" +msgstr "Všichni členové" #. module: membership #: field:res.partner,membership_stop:0 msgid "Stop membership date" -msgstr "" +msgstr "Datum pozastavení členství" #. module: membership #: model:process.transition,name:membership.process_transition_producttomember0 msgid "Product to member" -msgstr "" +msgstr "Výrobek pro člena" #. module: membership #: model:ir.actions.act_window,name:membership.action_membership_invoice_view #: view:res.partner:0 msgid "Join Membership" -msgstr "" +msgstr "Připojit členství" #. module: membership #: field:res.partner,associate_member:0 msgid "Associate member" -msgstr "" +msgstr "Přidružený člen" #. module: membership #: model:process.node,note:membership.process_node_associatedmember0 msgid "Member is associated." -msgstr "" +msgstr "Člen je přidružený." #. module: membership #: field:report.membership,tot_pending:0 msgid "Pending Amount" -msgstr "" +msgstr "Čekající částka" #. module: membership #: model:process.transition,note:membership.process_transition_associationpartner0 msgid "Associated partner." -msgstr "" +msgstr "Přidruženého partnera" #. module: membership #: field:report.membership,num_invoiced:0 msgid "# Invoiced" -msgstr "" +msgstr "# Fakturováno" #. module: membership #: model:ir.ui.menu,name:membership.menu_report_membership msgid "Members Analysis" -msgstr "" +msgstr "Analýza členů" #. module: membership #: view:res.partner:0 msgid "End Membership Date" -msgstr "" +msgstr "Datum ukončení členství" #. module: membership #: field:product.product,membership_date_from:0 msgid "Date from" -msgstr "" +msgstr "Počáteční datum" #. module: membership #: code:addons/membership/membership.py:414 #, python-format msgid "Partner doesn't have an address to make the invoice." -msgstr "" +msgstr "Partner nemá adresu pro vytvoření faktury." #. module: membership #: model:ir.model,name:membership.model_res_partner @@ -172,7 +173,7 @@ msgstr "Partner" #. module: membership #: model:process.transition,name:membership.process_transition_invoicetopaid0 msgid "Invoice to paid" -msgstr "" +msgstr "Faktura k zaplacení" #. module: membership #: view:res.partner:0 @@ -182,12 +183,12 @@ msgstr "Partneři" #. module: membership #: field:membership.membership_line,date_from:0 msgid "From" -msgstr "" +msgstr "Od" #. module: membership #: constraint:membership.membership_line:0 msgid "Error, this membership product is out of date" -msgstr "" +msgstr "Chyba, tento výrobek členství je zastaralý" #. module: membership #: help:res.partner,membership_state:0 @@ -206,6 +207,15 @@ msgid "" " -Paid Member: A member who has paid the membership " "amount." msgstr "" +"Označuje stav členství.\n" +" -Nečlen: Člen, který nepožádál o žádné členství.\n" +" -Zrušené členství: Člen, který má zrušené své členství.\n" +" -Starý člen: Člen, kterému vypršelo členství.\n" +" -Čekající člen: Člen, který požádal o členství, a " +"kterému bude vytvořena faktura.\n" +" -Fakturovaný člen: Člen, kterému byla vytvořena " +"faktura.\n" +" -Placený člen: Člen, který zaplatil částku za členství." #. module: membership #: model:process.transition.action,name:membership.process_transition_action_create0 @@ -215,30 +225,30 @@ msgstr "Vytvořit" #. module: membership #: model:ir.model,name:membership.model_membership_membership_line msgid "Member line" -msgstr "" +msgstr "Řádek člena" #. module: membership #: help:report.membership,date_from:0 #: field:res.partner,membership_start:0 msgid "Start membership date" -msgstr "" +msgstr "Počáteční datum členství" #. module: membership #: code:addons/membership/membership.py:410 #: code:addons/membership/membership.py:413 #, python-format msgid "Error !" -msgstr "" +msgstr "Chyba !" #. module: membership #: model:process.node,name:membership.process_node_paidmember0 msgid "Paid member" -msgstr "" +msgstr "Zaplacený člen" #. module: membership #: field:report.membership,num_waiting:0 msgid "# Waiting" -msgstr "" +msgstr "# Čekající" #. module: membership #: model:ir.actions.act_window,name:membership.action_membership_members @@ -252,22 +262,22 @@ msgstr "Členové" #: selection:report.membership,membership_state:0 #: selection:res.partner,membership_state:0 msgid "Non Member" -msgstr "" +msgstr "Nečlen" #. module: membership #: model:process.node,note:membership.process_node_invoicedmember0 msgid "Open invoice." -msgstr "" +msgstr "Otevřít fakturu" #. module: membership #: selection:report.membership,month:0 msgid "July" -msgstr "" +msgstr "Červenec" #. module: membership #: model:product.template,name:membership.membership_0_product_template msgid "Golden Membership" -msgstr "" +msgstr "Zlaté členství" #. module: membership #: help:res.partner,associate_member:0 @@ -275,79 +285,81 @@ msgid "" "A member with whom you want to associate your membership.It will consider " "the membership state of the associated member." msgstr "" +"Člen, s kterým chcete asociovat vaše členství. Vezme v úvahu stav členství " +"asociovaného člena." #. module: membership #: field:membership.membership_line,membership_id:0 #: view:report.membership:0 #: field:report.membership,membership_id:0 msgid "Membership Product" -msgstr "" +msgstr "Výrobek členství" #. module: membership #: model:process.transition,note:membership.process_transition_producttomember0 msgid "Define product for membership." -msgstr "" +msgstr "Určit výrobek pro členství." #. module: membership #: model:process.transition,note:membership.process_transition_invoicetoassociate0 msgid "Invoiced member may be Associated member." -msgstr "" +msgstr "Fakturovaný člen může být přidružený člen." #. module: membership #: view:membership.invoice:0 msgid "Join" -msgstr "" +msgstr "Připojit" #. module: membership #: help:product.product,membership_date_to:0 #: help:res.partner,membership_stop:0 msgid "Date until which membership remains active." -msgstr "" +msgstr "Datum, do kterého členství zůstává aktivní." #. module: membership #: view:product.product:0 msgid "Membership products" -msgstr "" +msgstr "Výrobky členství" #. module: membership #: field:membership.membership_line,date:0 msgid "Join Date" -msgstr "" +msgstr "Datum připojení" #. module: membership #: help:res.partner,free_member:0 msgid "Select if you want to give membership free of cost." -msgstr "" +msgstr "Vyberte, pokud chcete dát členovi cenu zdarma." #. module: membership #: model:process.node,name:membership.process_node_setassociation0 msgid "Set association" -msgstr "" +msgstr "Nastavit přiřazení" #. module: membership #: view:res.partner:0 msgid " Membership State" -msgstr "" +msgstr " Stav členství" #. module: membership #: view:res.partner:0 msgid "Memberships" -msgstr "" +msgstr "Členství" #. module: membership #: model:process.node,note:membership.process_node_paidmember0 msgid "Membership invoice paid." -msgstr "" +msgstr "Faktura členství zaplacena." #. module: membership #: model:ir.model,name:membership.model_product_template msgid "Product Template" -msgstr "" +msgstr "Šablona výrobku" #. module: membership #: selection:report.membership,month:0 msgid "September" -msgstr "" +msgstr "Září" #. module: membership #: model:ir.module.module,description:membership.module_meta_information @@ -365,11 +377,23 @@ msgid "" "invoice and send propositions for membership renewal.\n" " " msgstr "" +"\n" +"Tento modul vám umožňuje spravovat všechny operace pro správu členství.\n" +"Podporuje různé druhy členství:\n" +"* volné členství\n" +"* Přidružený člen (ex: skupinové zapsání pro členství pro všechnyl\n" +" pobočjy)\n" +"* Zaplacený člen,\n" +"* Speciální ceny členů, ...\n" +"\n" +"Je integrován s prodejem a účetnictvím, aby vám umožnil automaticky\n" +"fakturovat a odesílat návrhy pro obnovení členství.\n" +" " #. module: membership #: model:ir.model,name:membership.model_account_invoice_line msgid "Invoice Line" -msgstr "" +msgstr "Řádek faktury" #. module: membership #: help:membership.membership_line,state:0 @@ -388,74 +412,85 @@ msgid "" " -Paid Member: A member who has paid the membership " "amount." msgstr "" +"Označuje stav členství.\n" +" -Nečlen: Člen, který nepožádál o žádné členství.\n" +" -Zrušené členství: Člen, který má zrušené své " +"členství.\n" +" -Starý člen: Člen, kterému vypršelo členství.\n" +" -Čekající člen: Člen, který požádal o členství, a " +"kterému bude vytvořena faktura.\n" +" -Fakturovaný člen: Člen, kterému byla vytvořena " +"faktura.\n" +" -Placený člen: Člen, který zaplatil částku za " +"členství." #. module: membership #: view:report.membership:0 #: field:report.membership,month:0 msgid "Month" -msgstr "" +msgstr "Měsíc" #. module: membership #: view:product.product:0 msgid "Group by..." -msgstr "" +msgstr "Seskupit podle..." #. module: membership #: code:addons/membership/membership.py:411 #, python-format msgid "Partner is a free Member." -msgstr "" +msgstr "Partner je volný člen." #. module: membership #: model:product.pricelist,name:membership.list1m msgid "Member Sale Pricelist" -msgstr "" +msgstr "Prodejní ceník člena" #. module: membership #: field:report.membership,associate_member_id:0 #: view:res.partner:0 msgid "Associate Member" -msgstr "" +msgstr "Přiřadit člena" #. module: membership #: help:product.product,membership_date_from:0 #: help:res.partner,membership_start:0 msgid "Date from which membership becomes active." -msgstr "" +msgstr "Datum, od kterého se stává členství aktivním." #. module: membership #: view:report.membership:0 msgid "Associated Partner" -msgstr "" +msgstr "Přidruženého partnera" #. module: membership #: model:ir.model,name:membership.model_membership_invoice #: view:membership.invoice:0 msgid "Membership Invoice" -msgstr "" +msgstr "Členská faktura" #. module: membership #: view:report.membership:0 #: field:report.membership,user_id:0 #: view:res.partner:0 msgid "Salesman" -msgstr "" +msgstr "Obchodník" #. module: membership #: model:process.node,note:membership.process_node_membershipproduct0 msgid "Define membership product." -msgstr "" +msgstr "Určit výrobek členství." #. module: membership #: view:product.product:0 msgid "Category" -msgstr "" +msgstr "Kategorie" #. module: membership #: model:ir.model,name:membership.model_account_invoice #: field:membership.membership_line,account_invoice_id:0 msgid "Invoice" -msgstr "" +msgstr "Faktura" #. module: membership #: selection:membership.membership_line,state:0 @@ -467,70 +502,70 @@ msgstr "Volný člen" #. module: membership #: model:product.pricelist.version,name:membership.ver1m msgid "Member Sale Pricelist Version" -msgstr "" +msgstr "Verze prodejního ceníku člena" #. module: membership #: constraint:product.template:0 msgid "" "Error: The default UOM and the purchase UOM must be in the same category." -msgstr "" +msgstr "Chyba: Výchozí MJ a nákupní MJ musí být ve stejné kategorii." #. module: membership #: view:report.membership:0 msgid "Forecast" -msgstr "" +msgstr "Předpověď" #. module: membership #: field:report.membership,partner_id:0 msgid "Member" -msgstr "" +msgstr "Člen" #. module: membership #: constraint:res.partner:0 msgid "Error ! You can not create recursive associated members." -msgstr "" +msgstr "Chyba ! Nemůžete vytvořit rekurzivní asociované členy." #. module: membership #: view:product.product:0 msgid "Date From" -msgstr "" +msgstr "Datum od" #. module: membership #: model:process.node,name:membership.process_node_associatedmember0 msgid "Associated member" -msgstr "" +msgstr "Přiřazený člen" #. module: membership #: view:product.product:0 msgid "Accounting Info" -msgstr "" +msgstr "Účetní informace" #. module: membership #: field:res.partner,membership_cancel:0 msgid "Cancel membership date" -msgstr "" +msgstr "Datum zrušení členství" #. module: membership #: view:res.partner:0 msgid "Customers" -msgstr "" +msgstr "Zákazníci" #. module: membership #: selection:report.membership,month:0 msgid "August" -msgstr "" +msgstr "Srpen" #. module: membership #: model:ir.actions.act_window,name:membership.action_membership_products #: model:ir.ui.menu,name:membership.menu_membership_products #: view:product.product:0 msgid "Membership Products" -msgstr "" +msgstr "Výrobky členství" #. module: membership #: selection:report.membership,month:0 msgid "June" -msgstr "" +msgstr "Červen" #. module: membership #: model:ir.module.module,shortdesc:membership.module_meta_information @@ -542,145 +577,145 @@ msgstr "" #: view:res.partner:0 #: field:res.partner,member_lines:0 msgid "Membership" -msgstr "" +msgstr "Členství" #. module: membership #: selection:membership.membership_line,state:0 #: selection:report.membership,membership_state:0 #: selection:res.partner,membership_state:0 msgid "Invoiced Member" -msgstr "" +msgstr "Fakturovaný člen" #. module: membership #: help:membership.membership_line,date:0 msgid "Date on which member has joined the membership" -msgstr "" +msgstr "Datum, kdy se člen připojil k členství" #. module: membership #: selection:membership.membership_line,state:0 #: selection:report.membership,membership_state:0 #: selection:res.partner,membership_state:0 msgid "Waiting Member" -msgstr "" +msgstr "Čekající člen" #. module: membership #: model:process.transition,name:membership.process_transition_associationpartner0 msgid "Association Partner" -msgstr "" +msgstr "Přiřazený partner" #. module: membership #: selection:report.membership,month:0 msgid "November" -msgstr "" +msgstr "Listopad" #. module: membership #: view:product.product:0 msgid "Extended Filters..." -msgstr "" +msgstr "Rozšířené filtry..." #. module: membership #: field:membership.membership_line,state:0 msgid "Membership State" -msgstr "" +msgstr "Stav členství" #. module: membership #: selection:report.membership,month:0 msgid "October" -msgstr "" +msgstr "Říjen" #. module: membership #: view:product.product:0 msgid "Sale Description" -msgstr "" +msgstr "Popis prodeje" #. module: membership #: selection:report.membership,month:0 msgid "January" -msgstr "" +msgstr "Leden" #. module: membership #: view:product.product:0 msgid "Membership Fee" -msgstr "" +msgstr "Členský poplatek" #. module: membership #: field:res.partner,membership_amount:0 msgid "Membership amount" -msgstr "" +msgstr "Částka členství" #. module: membership #: help:res.partner,membership_amount:0 msgid "The price negotiated by the partner" -msgstr "" +msgstr "Cena vyjednaná partnerem" #. module: membership #: model:product.template,name:membership.membership_2_product_template msgid "Basic Membership" -msgstr "" +msgstr "Základní členství" #. module: membership #: help:product.product,membership:0 msgid "Select if a product is a membership product." -msgstr "" +msgstr "Vyberte, pokud výrobek je výrobek členství." #. module: membership #: selection:membership.membership_line,state:0 #: selection:report.membership,membership_state:0 #: selection:res.partner,membership_state:0 msgid "Old Member" -msgstr "" +msgstr "Starý člen" #. module: membership #: field:membership.membership_line,date_to:0 msgid "To" -msgstr "" +msgstr "Do" #. module: membership #: view:report.membership:0 #: field:report.membership,membership_state:0 #: field:res.partner,membership_state:0 msgid "Current Membership State" -msgstr "" +msgstr "Aktuální stav členství" #. module: membership #: view:report.membership:0 msgid "Last 365 Days" -msgstr "" +msgstr "Posledních 365 dní" #. module: membership #: view:product.product:0 msgid "General" -msgstr "" +msgstr "Obecný" #. module: membership #: model:process.transition,note:membership.process_transition_waitingtoinvoice0 msgid "Draft invoice is now open." -msgstr "" +msgstr "Koncept faktury je nyní otevřen." #. module: membership #: view:product.product:0 msgid "Inactive" -msgstr "" +msgstr "Neaktivní" #. module: membership #: view:report.membership:0 msgid "Last 30 Days" -msgstr "" +msgstr "Posledních 30 dní" #. module: membership #: selection:report.membership,month:0 msgid "December" -msgstr "" +msgstr "Prosinec" #. module: membership #: view:membership.invoice:0 msgid "Close" -msgstr "" +msgstr "Uzavřít" #. module: membership #: view:res.partner:0 msgid "All non Members" -msgstr "" +msgstr "Všichni nečlenové" #. module: membership #: view:product.product:0 @@ -690,17 +725,17 @@ msgstr "Informace" #. module: membership #: field:membership.membership_line,account_invoice_line:0 msgid "Account Invoice line" -msgstr "" +msgstr "Účetní řádek faktury" #. module: membership #: view:product.product:0 msgid "Categorization" -msgstr "" +msgstr "Členění" #. module: membership #: model:process.node,note:membership.process_node_waitingmember0 msgid "Draft invoice for membership." -msgstr "" +msgstr "Koncept faktury pro členství." #. module: membership #: field:membership.invoice,member_price:0 @@ -708,117 +743,117 @@ msgstr "" #: model:product.price.type,name:membership.product_price_type_memberprice #: field:product.template,member_price:0 msgid "Member Price" -msgstr "" +msgstr "Cena člena" #. module: membership #: view:product.product:0 msgid "Purchase Description" -msgstr "" +msgstr "Popis nákupu" #. module: membership #: model:ir.model,name:membership.model_product_product msgid "Product" -msgstr "" +msgstr "Výrobek" #. module: membership #: view:product.product:0 msgid "Description" -msgstr "" +msgstr "Popis" #. module: membership #: field:res.partner,free_member:0 msgid "Free member" -msgstr "" +msgstr "Volný člen" #. module: membership #: selection:report.membership,month:0 msgid "May" -msgstr "" +msgstr "Květen" #. module: membership #: model:product.template,name:membership.membership_1_product_template msgid "Silver Membership" -msgstr "" +msgstr "Stříbrné členství" #. module: membership #: view:product.product:0 msgid "Sale Taxes" -msgstr "" +msgstr "Prodejní daně" #. module: membership #: field:report.membership,date_to:0 #: view:res.partner:0 msgid "End Date" -msgstr "" +msgstr "Datum ukončení" #. module: membership #: selection:report.membership,month:0 msgid "February" -msgstr "" +msgstr "Únor" #. module: membership #: model:process.node,name:membership.process_node_invoicedmember0 msgid "Invoiced member" -msgstr "" +msgstr "Fakturovaný člen" #. module: membership #: selection:report.membership,month:0 msgid "April" -msgstr "" +msgstr "Duben" #. module: membership #: help:res.partner,membership_cancel:0 msgid "Date on which membership has been cancelled" -msgstr "" +msgstr "Datum, kdy bylo zrušeno členství" #. module: membership #: field:membership.membership_line,date_cancel:0 msgid "Cancel date" -msgstr "" +msgstr "Datum zrušení" #. module: membership #: model:process.node,name:membership.process_node_waitingmember0 msgid "Waiting member" -msgstr "" +msgstr "Čekající člen" #. module: membership #: field:report.membership,date_from:0 #: view:res.partner:0 msgid "Start Date" -msgstr "" +msgstr "Počáteční datum" #. module: membership #: model:process.node,name:membership.process_node_membershipproduct0 msgid "Membership product" -msgstr "" +msgstr "Výrobek členství" #. module: membership #: help:membership.membership_line,member_price:0 msgid "Amount for the membership" -msgstr "" +msgstr "Částka pro členství" #. module: membership #: selection:membership.membership_line,state:0 #: selection:report.membership,membership_state:0 #: selection:res.partner,membership_state:0 msgid "Cancelled Member" -msgstr "" +msgstr "Zrušený člen" #. module: membership #: constraint:product.product:0 msgid "Error: Invalid ean code" -msgstr "" +msgstr "Chyba: Neplatný kód ean" #. module: membership #: view:report.membership:0 #: field:report.membership,year:0 msgid "Year" -msgstr "" +msgstr "Rok" #. module: membership #: view:report.membership:0 msgid "Revenue Done" -msgstr "" +msgstr "Příjem proveden" #~ msgid "Configuration" #~ msgstr "Konfigurace" diff --git a/addons/membership/i18n/pt.po b/addons/membership/i18n/pt.po index 4e956c14e09..8d6d58052ec 100644 --- a/addons/membership/i18n/pt.po +++ b/addons/membership/i18n/pt.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: 2010-12-12 07:51+0000\n" -"Last-Translator: Madalena_prime <madalena.barreto@prime.cv>\n" +"PO-Revision-Date: 2011-11-23 12:23+0000\n" +"Last-Translator: Stephane Wirtel (OpenERP) <Unknown>\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-11-05 04:59+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-24 05:00+0000\n" +"X-Generator: Launchpad (build 14336)\n" #. module: membership #: model:process.transition,name:membership.process_transition_invoicetoassociate0 @@ -474,7 +474,7 @@ msgstr "Versão da Lista de Preço de Venda do Membro" msgid "" "Error: The default UOM and the purchase UOM must be in the same category." msgstr "" -"Erro: O UOM por defeito e o UOM de compra devem estar na mesma categoria." +"Erro: A UdM pré-defenida e a UdM de compra devem ser da mesma categoria." #. module: membership #: view:report.membership:0 diff --git a/addons/membership/membership_view.xml b/addons/membership/membership_view.xml index b14a72b278e..a1c39165c82 100644 --- a/addons/membership/membership_view.xml +++ b/addons/membership/membership_view.xml @@ -107,7 +107,7 @@ <field name="name">Membership Products</field> <field name="res_model">product.product</field> <field name="domain">[('membership','=',True), ('type', '=', 'service')]</field> - <field name="context">{'membership':True, 'type':'service'}</field> + <field name="context">{'membership':True, 'type':'service', 'default_membership': True, 'default_type': 'service'}</field> <field name="search_view_id" ref="membership_product_search_form_view"/> </record> diff --git a/addons/membership/report/report_membership_view.xml b/addons/membership/report/report_membership_view.xml index 27ccfae0e12..b0ac01ac89f 100644 --- a/addons/membership/report/report_membership_view.xml +++ b/addons/membership/report/report_membership_view.xml @@ -36,9 +36,10 @@ <field name="arch" type="xml"> <search string="Membership"> <group> - <filter string=" Year " icon="terp-go-year" - domain="[('date_from','<=', time.strftime('%%Y-%%m-%%d')),('date_from','>=',time.strftime('%%Y-01-01'))]" - help="Events created in current year"/> + <filter string="Year" icon="terp-go-year" name="year" + domain="[('date_from','<=', time.strftime('%%Y-%%m-%%d')),('date_from','>=',time.strftime('%%Y-01-01'))]" + help="Events created in current year"/> + <separator orientation="vertical"/> <filter string=" Month " icon="terp-go-month" name="this_month" domain="[('date_from','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date_from','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]" help="Events created in current month"/> @@ -96,7 +97,7 @@ <field name="res_model">report.membership</field> <field name="view_type">form</field> <field name="search_view_id" ref="view_report_membership_search"/> - <field name="context">{"search_default_member":1, 'search_default_Revenue':1, 'search_default_this_month':1, 'search_default_salesman':1,'group_by_no_leaf':1}</field> + <field name="context">{"search_default_year":1,"search_default_member":1, 'search_default_Revenue':1, 'search_default_this_month':1, 'search_default_salesman':1,'group_by_no_leaf':1}</field> </record> <record model="ir.actions.act_window.view" id="action_report_membership_tree_view1"> diff --git a/addons/membership/test/test_membership.yml b/addons/membership/test/test_membership.yml index 75e0f887cfe..27b755f156b 100644 --- a/addons/membership/test/test_membership.yml +++ b/addons/membership/test/test_membership.yml @@ -13,36 +13,22 @@ list_price: 80.00 - | - "Mark Johnson" want to join "Gold Membership". -- | - I'm creating new member "Mark Johnson". -- - !record {model: res.partner, id: res_partner_markjohnson0}: - address: - - city: paris - country_id: base.fr - name: Mark Johnson - street: 1 rue Rockfeller - type: invoice - zip: '75016' - name: Mark Johnson -- | - I'm checking "Current Membership State" of "Mark Johnson". It is an "Non Member" or not. + "Seagate" want to join "Gold Membership", so I'm checking "Current Membership State" of "Seagate". It is an "Non Member" or not. - - !assert {model: res.partner, id: res_partner_markjohnson0}: + !assert {model: res.partner, id: base.res_partner_seagate}: - membership_state == 'none', 'Member should be has "Current Membership State" in "Non Member".' - | - I'm doing to make membership invoice for "Mark Johnson" on joining "Gold Membership". + I'm doing to make membership invoice for "Seagate" on joining "Gold Membership". - !python {model: res.partner}: | - self.create_membership_invoice(cr, uid, [ref("res_partner_markjohnson0")], product_id=ref("product_product_membershipproduct0"), datas={"amount":80.00}) + self.create_membership_invoice(cr, uid, [ref("base.res_partner_seagate")], product_id=ref("product_product_membershipproduct0"), datas={"amount":80.00}) - | - I'm checking "Current Membership State" of "Mark Johnson". It is an "Waiting Member" or not. + I'm checking "Current Membership State" of "Seagate". It is an "Waiting Member" or not. - - !assert {model: res.partner, id: res_partner_markjohnson0}: + !assert {model: res.partner, id: base.res_partner_seagate}: - membership_state == 'waiting', 'Member should be has "Current Membership State" in "Waiting Member".' - | - I'm Opening that Invoice which is created for "Mark Johnson". + I'm Opening that Invoice which is created for "Seagate". - !python {model: res.partner}: | import netsvc @@ -52,16 +38,16 @@ membership_line_pool = self.pool.get('membership.membership_line') membership_pool = self.pool.get('product.product') - membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('res_partner_markjohnson0'))]) + membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('base.res_partner_seagate'))]) membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids) assert membership_lines, _('Membership is not registrated.') membership_line = membership_lines[0] wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.invoice', membership_line.account_invoice_id.id, 'invoice_open', cr) - | - I'm checking "Current membership state" of "Mark Johnson". It is an "Invoiced Member" or not. + I'm checking "Current membership state" of "Seagate". It is an "Invoiced Member" or not. - - !assert {model: res.partner, id: res_partner_markjohnson0}: + !assert {model: res.partner, id: base.res_partner_seagate}: - membership_state == 'invoiced', 'Member should be has "Current Membership State" in "Invoiced Member".' - | @@ -85,10 +71,10 @@ - membership_state == 'free', 'Member should be has "Current Membership State" in "Free Member".' - | - I'm set "Mark Johnson" as a associated member of "Ms. Johnson" and also set Non free member. + I'm set "Seagate" as a associated member of "Ms. Johnson" and also set Non free member. - !python {model: res.partner}: | - self.write(cr, uid, [ref("res_partner_msjohnson0")], {'free_member': False, 'associate_member': ref("res_partner_markjohnson0")}) + self.write(cr, uid, [ref("res_partner_msjohnson0")], {'free_member': False, 'associate_member': ref("base.res_partner_seagate")}) - | I'm checking "Current membership state" of "Ms. Johnson". It is an "Paid Member" or not. @@ -108,17 +94,17 @@ type: service list_price: 50.00 - | - I'm making invoice of "Mark Johnson" member on joining new membership "Regular Membership". + I'm making invoice of "Seagate" member on joining new membership "Regular Membership". - !python {model: res.partner}: | - self.create_membership_invoice(cr, uid, [ref("res_partner_markjohnson0")], product_id=ref("product_product_membershipproduct1"), datas={"amount":50.00}) + self.create_membership_invoice(cr, uid, [ref("base.res_partner_seagate")], product_id=ref("product_product_membershipproduct1"), datas={"amount":50.00}) - | - I'm checking "Current membership state" of "Mark Johnson". It is an "Old Member" or not. + I'm checking "Current membership state" of "Seagate". It is an "Old Member" or not. - - !assert {model: res.partner, id: res_partner_markjohnson0}: + !assert {model: res.partner, id: base.res_partner_seagate}: - membership_state == 'old', 'Member should be has "Current Membership State" in "Old Member".' - | - I'm doing to make credit note of invoice which is paid by "Mark Johnson" to cancel membership. + I'm doing to make credit note of invoice which is paid by "Seagate" to cancel membership. - !python {model: account.invoice}: | from tools.translate import _ @@ -128,15 +114,15 @@ membership_pool = self.pool.get('product.product') invoice_refund_pool = self.pool.get('account.invoice.refund') - membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('res_partner_markjohnson0'))]) + membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('base.res_partner_seagate'))]) membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids) assert membership_lines, _('Membership is not registrated.') membership_line = membership_lines[0] refund_id = invoice_refund_pool.create(cr, uid, {'description': 'Refund of Membership', 'filter_refund': 'refund'}, {'active_id': membership_line.account_invoice_id.id}) invoice_refund_pool.invoice_refund(cr, uid, [refund_id], {'active_id': membership_line.account_invoice_id.id, 'active_ids': [membership_line.account_invoice_id.id]}) - | - I'm checking "Current membership state" of "Mark Johnson". It is an "Cancelled Member" or not. + I'm checking "Current membership state" of "Seagate". It is an "Cancelled Member" or not. - - !assert {model: res.partner, id: res_partner_markjohnson0}: + !assert {model: res.partner, id: base.res_partner_seagate}: - membership_state == 'canceled', 'Member should be has "Current Membership State" in "Cancelled Member".' diff --git a/addons/mrp/board_manufacturing_view.xml b/addons/mrp/board_manufacturing_view.xml index 03d6947d215..427780f344c 100644 --- a/addons/mrp/board_manufacturing_view.xml +++ b/addons/mrp/board_manufacturing_view.xml @@ -7,17 +7,16 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Manufacturing board"> - <hpaned position="100"> - <child1> - <action colspan="4" height="200" name="%(mrp.mrp_production_action2)d" string="Next Production Orders" width="510"/> - <action colspan="4" name="%(procurement.procurement_exceptions)d" string="Procurements in Exception" domain="[('state','=','exception')]"/> - </child1> - <child2> - <action colspan="4" name="%(mrp.action_report_workcenter_load_tree)d" string="Work Center Future Load" groups="base.group_extended"/> - - <action colspan="4" name="%(mrp.action_report_in_out_picking_tree)d" string="Stock Value Variation"/> - </child2> - </hpaned> + <board style="1-2"> + <column> + <action name="%(mrp.mrp_production_action2)d" string="Next Production Orders"/> + <action name="%(procurement.procurement_exceptions)d" string="Procurements in Exception" domain="[('state','=','exception')]"/> + </column> + <column> + <action name="%(mrp.action_report_workcenter_load_tree)d" string="Work Center Future Load"/> <!--groups="base.group_extended"--> + <action name="%(mrp.action_report_in_out_picking_tree)d" string="Stock Value Variation"/> + </column> + </board> </form> </field> </record> diff --git a/addons/mrp/i18n/pt.po b/addons/mrp/i18n/pt.po index f67b9afca9c..9574e9dc573 100644 --- a/addons/mrp/i18n/pt.po +++ b/addons/mrp/i18n/pt.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-11-09 17:38+0000\n" -"Last-Translator: DReis <Unknown>\n" +"PO-Revision-Date: 2011-11-23 11:53+0000\n" +"Last-Translator: Daniel Reis <Unknown>\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-11-10 04:57+0000\n" -"X-Generator: Launchpad (build 14263)\n" +"X-Launchpad-Export-Date: 2011-11-24 05:00+0000\n" +"X-Generator: Launchpad (build 14336)\n" #. module: mrp #: field:mrp.production,move_created_ids:0 @@ -1801,7 +1801,7 @@ msgstr "Empresa" #. module: mrp #: field:mrp.workcenter,time_cycle:0 msgid "Time for 1 cycle (hour)" -msgstr "Tempo de um ciclo" +msgstr "Tempo por ciclo (horas)" #. module: mrp #: model:ir.actions.report.xml,name:mrp.report_mrp_production_report diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 0fd75d7ca7a..356a762c0c5 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -491,6 +491,9 @@ class mrp_production(osv.osv): 'name': lambda x, y, z, c: x.pool.get('ir.sequence').get(y, z, 'mrp.production') or '/', 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.production', context=c), } + _sql_constraints = [ + ('name_uniq', 'unique(name, company_id)', 'Reference must be unique per Company!'), + ] _order = 'priority desc, date_planned asc'; def _check_qty(self, cr, uid, ids, context=None): diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index 13ac6287e52..dafe399b583 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -529,7 +529,6 @@ <field eval="'mrp.bom'" name="model"/> <field name="name">Bill of Materials Structure</field> <field eval="'ir.actions.act_window,'+str(action2)" name="value"/> - <field eval="True" name="object"/> </record> <record id="mrp_bom_revision_tree" model="ir.ui.view"> @@ -986,6 +985,7 @@ id="action_product_bom_structure" name="Product BoM Structure" domain="[('product_id', '=', active_id),('bom_id','=',False)]" + context="{'default_product_id': active_id}" view_type="tree" view_id="mrp_bom_tree_view" res_model="mrp.bom" diff --git a/addons/mrp/product.py b/addons/mrp/product.py index 9731d93f84b..c3f9ee855df 100644 --- a/addons/mrp/product.py +++ b/addons/mrp/product.py @@ -66,3 +66,5 @@ class product_product(osv.osv): product_product() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/report/mrp_production_order.py b/addons/mrp/report/mrp_production_order.py index 4bb525db1ff..d0ff7ba7970 100644 --- a/addons/mrp/report/mrp_production_order.py +++ b/addons/mrp/report/mrp_production_order.py @@ -20,3 +20,5 @@ ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/report/price.py b/addons/mrp/report/price.py index a12c580e378..c072b821196 100644 --- a/addons/mrp/report/price.py +++ b/addons/mrp/report/price.py @@ -219,3 +219,5 @@ class report_custom(report_rml): return xml report_custom('report.product.price', 'product.product', '', 'addons/mrp/report/price.xsl') + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp/test/mrp_phantom_bom.yml b/addons/mrp/test/mrp_phantom_bom.yml index 41f1920dc2d..ca29b24ea23 100644 --- a/addons/mrp/test/mrp_phantom_bom.yml +++ b/addons/mrp/test/mrp_phantom_bom.yml @@ -179,11 +179,9 @@ - !record {model: mrp.production, id: mrp_production_mo0}: bom_id: mrp.mrp_bom_orangejuice0 - company_id: base.main_company date_planned: !eval datetime.today().strftime("%Y-%m-%d %H:%M:%S") location_dest_id: stock.stock_location_output location_src_id: stock.stock_location_stock - name: MO/00002 product_id: mrp.product_product_orangejuice0 product_lines: - name: Orange diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml index 2484345de9a..377a57d6121 100644 --- a/addons/mrp_operations/mrp_operations_view.xml +++ b/addons/mrp_operations/mrp_operations_view.xml @@ -268,8 +268,6 @@ <field name="model" eval="'mrp.production.workcenter.line'"/> <field name="name">Work Orders</field> <field name="value" eval="'ir.actions.act_window,'+str(mrp_production_wc_action_form)"/> - <field name="object" eval="True"/> - </record> <menuitem name="Work Orders" parent="mrp.menu_mrp_manufacturing" diff --git a/addons/mrp_subproduct/test/mrp_subproduct.yml b/addons/mrp_subproduct/test/mrp_subproduct.yml index 43bb6e7247e..2d05a448cde 100644 --- a/addons/mrp_subproduct/test/mrp_subproduct.yml +++ b/addons/mrp_subproduct/test/mrp_subproduct.yml @@ -106,14 +106,11 @@ - !record {model: mrp.production, id: mrp_production_mo0}: bom_id: mrp_bom_woodenchair0 - company_id: base.main_company date_planned: !eval datetime.today().strftime("%Y-%m-%d %H:%M:%S") location_dest_id: stock.stock_location_stock location_src_id: stock.stock_location_stock - name: MO/00004 product_id: product_product_woodenchair0 product_qty: 10.0 - product_uom: product.product_uom_unit product_uos_qty: 0.0 - I compute the data of production order. diff --git a/addons/outlook/__init__.py b/addons/outlook/__init__.py index 0190f2f396f..7f5a7a9a9f1 100644 --- a/addons/outlook/__init__.py +++ b/addons/outlook/__init__.py @@ -20,3 +20,5 @@ ############################################################################## import installer + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/installer.py b/addons/outlook/installer.py index 2be0c243037..061c27da5e5 100644 --- a/addons/outlook/installer.py +++ b/addons/outlook/installer.py @@ -65,3 +65,5 @@ Please refer to the README file for dependencies (external link: openobject-addo """ } outlook_installer() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/addin.py b/addons/outlook/plugin/openerp-outlook-plugin/addin.py index 5872ed0291a..c720c5e417d 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/addin.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/addin.py @@ -297,3 +297,5 @@ if __name__ == '__main__': #mngr = manager.GetManager()
#mngr.ShowManager("IDD_MANAGER")
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py b/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py index 1afd9f85fdd..3aa329807ef 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/chilkat.py @@ -5605,3 +5605,5 @@ CkDirTree_swigregister(CkDirTree) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/__init__.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/__init__.py index 3b3d8973497..a19f2d59cff 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/__init__.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/__init__.py @@ -79,3 +79,5 @@ def MakePropertyPage(parent, manager, config, idd, yoffset=24): import dlgutils
SetWaitCursor = dlgutils.SetWaitCursor
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py index 87138554e16..8576a3526ff 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dialog_map.py @@ -1806,3 +1806,5 @@ dialog_map = { (CommandButtonProcessor, "IDPB_SELECT_STATE IDC_LIST_STATE IDD_SELECT_STATE" , SelectStateFromList,()),
),
}
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dlgcore.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dlgcore.py index efccf4f494e..bce802b5ed1 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dlgcore.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dlgcore.py @@ -321,3 +321,5 @@ class ProcessorPage(ProcessorDialog): self.template[0][2] = self.template[0][2] & ~(win32con.DS_MODALFRAME|win32con.WS_POPUP|win32con.WS_OVERLAPPED|win32con.WS_CAPTION)
self.template[0][2] = self.template[0][2] | win32con.WS_CHILD
return win32gui.CreateDialogIndirect(self.hinst, self.template, self.parent, message_map)
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dlgutils.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dlgutils.py index 8ffc4e62d22..bede3cd63c2 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dlgutils.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/dlgutils.py @@ -16,3 +16,5 @@ def SetWaitCursor(wait): else:
hCursor = win32gui.LoadCursor(0, 0)
win32gui.SetCursor(hCursor)
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/opt_processors.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/opt_processors.py index 7a4970491b0..0a129423e29 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/opt_processors.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/opt_processors.py @@ -316,3 +316,5 @@ class ProtocolComboProcessor(ComboProcessor): if sel == -1:
win32gui.SendMessage(combo, win32con.CB_SETCURSEL, 1, 0)
self.active_control_id = self.control_id
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/processors.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/processors.py index 0b427852c89..34af9e073a4 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/processors.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/processors.py @@ -143,3 +143,5 @@ class CommandButtonProcessor(ButtonProcessor): if doc is None:
return ""
return " ".join(doc.split())
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/__init__.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/__init__.py index abeff9ae69b..cf3e416c209 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/__init__.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/__init__.py @@ -28,3 +28,5 @@ def GetImageParamsFromBitmapID(rc_parser, bmpid): filename = os.path.join( os.path.dirname( __file__ ), filename)
return 0, filename, win32con.LR_LOADFROMFILE
assert 0, "not reached"
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py index aa417b2cd59..e1e8bac21d7 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/dialogs.py @@ -9,3 +9,5 @@ class FakeParser: bitmaps = {'IDB_OPENERPLOGO': 'OpenERP_Logo.bmp'}
def ParseDialogs(s):
return FakeParser()
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/rc2py.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/rc2py.py index d944fc2dd99..68d62fc7060 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/rc2py.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/rc2py.py @@ -37,3 +37,5 @@ if __name__=="__main__": convert(sys.argv[1], sys.argv[2])
else:
convert()
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/rcparser.py b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/rcparser.py index 0b05af3f0be..ed20f80e3d4 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/rcparser.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/dialogs/resources/rcparser.py @@ -375,3 +375,5 @@ if __name__=='__main__': print "Dialog %s (%d controls)" % (id, len(ddef))
pprint.pprint(ddef)
print
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/eml.py b/addons/outlook/plugin/openerp-outlook-plugin/eml.py index fe455c91117..47e66689c71 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/eml.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/eml.py @@ -90,4 +90,6 @@ def generateEML(mail): if (success == False):
print cemail.lastErrorText()
sys.exit()
- return new_mail, eml_path
\ No newline at end of file + return new_mail, eml_path + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/manager.py b/addons/outlook/plugin/openerp-outlook-plugin/manager.py index 0c7e0e640fe..643a5c40e58 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/manager.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/manager.py @@ -191,3 +191,5 @@ if __name__=='__main__': else:
usage()
sys.exit(main(verbose))
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py index 41346fe7cf9..9cbcb14d40e 100644 --- a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py +++ b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py @@ -569,3 +569,5 @@ class XMLRpcConn(object): name = ustr(rec['name'])
res.append((obj,rec['id'],name,obj))
return res
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/pad/__init__.py b/addons/pad/__init__.py index 445f0f9dd9f..663cac2cbf0 100644 --- a/addons/pad/__init__.py +++ b/addons/pad/__init__.py @@ -1,3 +1,5 @@ # -*- coding: utf-8 -*- import res_company import ir_attachment + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/pad/__openerp__.py b/addons/pad/__openerp__.py index 1abf8f0ebfa..9630e74c27a 100644 --- a/addons/pad/__openerp__.py +++ b/addons/pad/__openerp__.py @@ -27,3 +27,5 @@ Lets the company customize which Pad installation should be used to link to new ], 'images': ['static/src/img/pad_link_companies.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/pad/ir_attachment.py b/addons/pad/ir_attachment.py index efcf1817289..ba8c88632dd 100644 --- a/addons/pad/ir_attachment.py +++ b/addons/pad/ir_attachment.py @@ -33,3 +33,5 @@ class ir_attachment(osv.osv): 'url' : url, }) return url + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/pad/res_company.py b/addons/pad/res_company.py index fe822e213c2..0c1dc7c4929 100644 --- a/addons/pad/res_company.py +++ b/addons/pad/res_company.py @@ -11,3 +11,5 @@ class company_pad(osv.osv): 'pad_url_template': 'http://ietherpad.com/%(db)s-%(model)s-%(id)d-%(salt)s-%(name)s' } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/pad/static/src/img/pad-icon.png b/addons/pad/static/src/img/pad-icon.png Binary files differdeleted file mode 100644 index ad64c5aea0e..00000000000 --- a/addons/pad/static/src/img/pad-icon.png +++ /dev/null diff --git a/addons/pad_project/models/project_task.xml b/addons/pad_project/models/project_task.xml index de944b603b5..5fa113e9b54 100644 --- a/addons/pad_project/models/project_task.xml +++ b/addons/pad_project/models/project_task.xml @@ -6,10 +6,8 @@ <field name="type">kanban</field> <field name="inherit_id" ref="project.view_task_kanban"/> <field name="arch" type="xml"> - <xpath expr="//a[@type='color']" position="after"> - <a name="pad_get" string="Pad" type="object"> - <img src="/pad/static/src/img/pad-icon.png" border="0" width="16" height="16"/> - </a> + <xpath expr="//span[@class='oe_kanban_project_times']/t" position="before"> + <a name="pad_get" string="Pad" type="object" class="oe_kanban_button"><b>PAD</b></a> </xpath> </field> </record> diff --git a/addons/plugin/__init__.py b/addons/plugin/__init__.py new file mode 100644 index 00000000000..1844c42011c --- /dev/null +++ b/addons/plugin/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +import plugin_handler + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/plugin/__openerp__.py b/addons/plugin/__openerp__.py new file mode 100644 index 00000000000..b598690cbf2 --- /dev/null +++ b/addons/plugin/__openerp__.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + + +{ + 'name': 'Common interface for CRM plugin (Thunderbird and Outlook)', + 'version': '1.0', + 'category': 'Hidden', + 'complexity': "easy", + 'description': """ +The common interface for pugin. +===================================================== + +""", + 'author': 'OpenERP SA', + 'website': 'http://www.openerp.com', + 'depends': [ + 'base', + ], + 'data': [], + 'demo': [], + 'test': [], + 'installable': True, + 'active': False, + 'images': [], +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/plugin/plugin_handler.py b/addons/plugin/plugin_handler.py new file mode 100644 index 00000000000..c4859771e35 --- /dev/null +++ b/addons/plugin/plugin_handler.py @@ -0,0 +1,153 @@ +''' +Created on 18 oct. 2011 + +@author: openerp +''' + +from osv import osv, fields + + +class plugin_handler(osv.osv_memory): + _name = 'plugin.handler' + + def _make_url(self, cr, uid, res_id, model, context=None): + """ + @param id: on which document the message is pushed + @param model: name of the document linked with the mail + @return url + """ + base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='http://localhost:8069', context=context) + if base_url: + base_url += '/?id=%s&model=%s'%(res_id,model) + return base_url + + def is_installed(self, cr, uid): + return True + + def partner_get(self, cr, uid, address_email): + ids = self.pool.get('res.partner.address').search(cr, uid, [('partner_id', '!=', False), ('email', 'like', address_email)]) + res_id = ids and self.pool.get('res.partner.address').browse(cr, uid, ids[0]).partner_id.id or 0 + url = self._make_url(cr, uid, res_id, 'res.partner') + return ('res.partner', res_id , url) + + def document_get(self, cr, uid, email): + """ + @param email: email is a standard RFC2822 email message + @return Dictionary which contain id and the model name of the document linked with the mail + if no document is found the id = 0 + (model_name, res_id, name_get, url) + """ + mail_message_obj = self.pool.get('mail.message') + model = False + res_id = 0 + url = False + name = "" + + msg = mail_message_obj.parse_message(email) + references = [msg.get('message-id')] + refs = msg.get('references',False) + if refs: + references.extend(refs.split()) + + msg_ids = mail_message_obj.search(cr, uid, [('message_id','in',references)]) + if msg_ids: + msg = mail_message_obj.browse(cr, uid, msg_ids[0]) + res_id = msg.res_id + model = msg.model + url = self._make_url(cr, uid, res_id, model) + name = self.pool.get(model).name_get(cr, uid, res_id)[1] + return (model, res_id, url, name) + + def document_type(self, cr, uid, context=None): + """ + Return the list of available model to push + res.partner is a special case + otherwise all model that inherit from mail.thread + ['res.partner', 'project.issue'] + """ + mail_thread_obj = self.pool.get('mail.thread') + doc_dict = mail_thread_obj.message_capable_models(cr, uid, context) + doc_dict['res.partner'] = "Partner" + return doc_dict.items() + + # Can be used where search record was used + def list_document_get(self, cr, uid, model, name): + """ + This function return the result of name_search on the object model + @param model: the name of the model + @param : the name of the document + @return : the result of name_search a list of tuple + [(id, 'name')] + """ + return self.pool.get(model).name_search(cr,uid,name) + + def push_message(self, cr, uid, model, email, res_id=0): + """ + @param email: email is a standard RFC2822 email message + @param model: On which model the message is pushed + @param thread_id: on which document the message is pushed, if thread_id = 0 a new document is created + @return Dictionary which contain model , url and resource id. + """ + mail_message = self.pool.get('mail.message') + model_obj = self.pool.get(model) + + msg = mail_message.parse_message(email) + message_id = msg.get('message-id') + + + mail_ids = mail_message.search(cr, uid, [('message_id','=',message_id),('res_id','=',res_id),('model','=',model)]) + if message_id and mail_ids : + mail_record = mail_message.browse(cr, uid, mail_ids)[0] + res_id = mail_record.res_id + notify = "Email already pushed" + elif res_id == 0: + if model == 'res.partner': + notify = 'User the button Partner to create a new partner' + else: + res_id = model_obj.message_new(cr, uid, msg) + notify = "Mail succefully pushed, a new %s has been created " % model + else: + model_obj.message_append_dict(cr, uid, [res_id], msg) + notify = "Mail succefully pushed" + url = self._make_url(cr, uid, res_id, model) + return (model, res_id, url, notify) + + def contact_create(self, cr, uid, data, partner_id): + """ + @param data : the data use to create the res.partner.address + [('field_name', value)], field name is required + @param partner_id : On which partner the address is attached + if partner_id = 0 then create a new partner with the same name that the address + @return : the partner_id sended or created, this allow the plugin to open the right partner page + """ + partner_obj = self.pool.get('res.partner') + dictcreate = dict(data) + if partner_id == 0: + partner_id = partner_obj.create(cr, uid, {'name':dictcreate.get('name')}) + dictcreate['partner_id'] = partner_id + self.pool.get('res.partner.address').create(cr, uid, dictcreate) + url = self._make_url(cr, uid, partner_id, 'res.partner') + return ('res.partner', partner_id, url) + + # Specific to outlook rfc822 is not available so we split in arguments headerd,body,attachemnts + def push_message_outlook(self, cr, uid, model, headers, body_text, body_html, attachments): + pass + # ---------------------------------------- + # solution 1 + # construct a fake rfc822 from the separated arguement + #m = email.asdfsadf + # use the push_message method + #self.push_message(m) + # ---------------------------------------- + # solution 2 + # use self.pushmessage only with header and body + # add attachemnt yourself after + + #ir_attachment_obj = self.pool.get('ir.attachment') + #attachment_ids = ir_attachment_obj.search(cr, uid, [('res_model', '=', data.get('res_model')), ('res_id', '=', data.get('res_id')), ('datas_fname', '=', data.get('datas_fname'))]) + #if attachment_ids: + # return attachment_ids[0] + #else: + # vals = {"res_model": data.get('res_model'), "res_id": data.get('res_id'), "name": data.get('name'), "datas" : data.get('datas'), "datas_fname" : data.get('datas_fname')} + # return ir_attachment_obj.create(cr, uid, vals) + #return (model, res_id, url, notify) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index bccb8d7fb1f..b19405bd43f 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -698,3 +698,5 @@ class product_product(osv.osv): } product_product() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 7a2dba6f1ea..1c3dceedc68 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -671,6 +671,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="domain">[('expense_pdt','=',True)]</field> + <field name="context">{'default_expense_pdt': True}</field> </record> <record model="ir.actions.act_window.view" id="action_product_input_tree_tag"> <field name="sequence" eval="1"/> @@ -697,6 +698,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="domain">[('income_pdt','=',True)]</field> + <field name="context">{'default_income_pdt': True}</field> </record> <record model="ir.actions.act_window.view" id="action_product_output_tree_tag"> <field name="sequence" eval="1"/> diff --git a/addons/point_of_sale/static/src/js/pos.js b/addons/point_of_sale/static/src/js/pos.js index 59c13e0553c..d1611cd87d8 100644 --- a/addons/point_of_sale/static/src/js/pos.js +++ b/addons/point_of_sale/static/src/js/pos.js @@ -162,11 +162,11 @@ openerp.point_of_sale = function(db) { /* global variable */ var pos; - var App, CashRegister, CashRegisterCollection, Category, CategoryCollection, CategoryView, - NumpadState, NumpadView, Order, OrderButtonView, OrderCollection, OrderView, Orderline, - OrderlineCollection, OrderlineView, PaymentButtonView, PaymentView, Paymentline, - PaymentlineCollection, PaymentlineView, PaypadView, Product, ProductCollection, - ProductListView, ProductView, ReceiptLineView, ReceiptView, Shop, ShopView, StepsView; + var App, CashRegister, CashRegisterCollection, Category, CategoryCollection, CategoryWidget, + NumpadState, NumpadWidget, Order, OrderButtonView, OrderCollection, OrderWidget, Orderline, + OrderlineCollection, OrderlineWidget, PaymentButtonWidget, PaymentWidget, Paymentline, + PaymentlineCollection, PaymentlineWidget, PaypadWidget, Product, ProductCollection, + ProductListWidget, ProductWidget, ReceiptLineWidget, ReceiptWidget, Shop, ShopView, StepsWidget; /* --- @@ -530,57 +530,48 @@ openerp.point_of_sale = function(db) { Views --- */ - NumpadView = (function() { - __extends(NumpadView, Backbone.View); - function NumpadView() { - NumpadView.__super__.constructor.apply(this, arguments); - } - - NumpadView.prototype.initialize = function(options) { - return this.state = options.state; - }; - NumpadView.prototype.events = { - 'click button#numpad-backspace': 'clickDeleteLastChar', - 'click button#numpad-minus': 'clickSwitchSign', - 'click button.number-char': 'clickAppendNewChar', - 'click button.mode-button': 'clickChangeMode' - }; - NumpadView.prototype.clickDeleteLastChar = function() { + NumpadWidget = db.web.Widget.extend({ + init: function(parent, element_id, options) { + this._super(parent, element_id); + this.state = options.state; + }, + start: function() { + this.$element.find('button#numpad-backspace').click(_.bind(this.clickDeleteLastChar, this)); + this.$element.find('button#numpad-minus').click(_.bind(this.clickSwitchSign, this)); + this.$element.find('button.number-char').click(_.bind(this.clickAppendNewChar, this)); + this.$element.find('button.mode-button').click(_.bind(this.clickChangeMode, this)); + }, + clickDeleteLastChar: function() { return this.state.deleteLastChar(); - }; - NumpadView.prototype.clickSwitchSign = function() { + }, + clickSwitchSign: function() { return this.state.switchSign(); - }; - NumpadView.prototype.clickAppendNewChar = function(event) { + }, + clickAppendNewChar: function(event) { var newChar; newChar = event.currentTarget.innerText; return this.state.appendNewChar(newChar); - }; - NumpadView.prototype.clickChangeMode = function(event) { + }, + clickChangeMode: function(event) { var newMode; $('.selected-mode').removeClass('selected-mode'); $(event.currentTarget).addClass('selected-mode'); newMode = event.currentTarget.attributes['data-mode'].nodeValue; return this.state.changeMode(newMode); - }; - return NumpadView; - })(); + } + }); /* Gives access to the payment methods (aka. 'cash registers') */ - PaypadView = (function() { - __extends(PaypadView, Backbone.View); - function PaypadView() { - PaypadView.__super__.constructor.apply(this, arguments); - } - - PaypadView.prototype.initialize = function(options) { - return this.shop = options.shop; - }; - PaypadView.prototype.events = { - 'click button': 'performPayment' - }; - PaypadView.prototype.performPayment = function(event) { + PaypadWidget = db.web.Widget.extend({ + init: function(parent, element_id, options) { + this._super(parent, element_id); + this.shop = options.shop; + }, + start: function() { + this.$element.find('button').click(_.bind(this.performPayment, this)); + }, + performPayment: function(event) { var cashRegister, cashRegisterCollection, cashRegisterId; /* set correct view */ $('.step-screen').hide(); @@ -592,32 +583,26 @@ openerp.point_of_sale = function(db) { return (item.get('id')) === parseInt(cashRegisterId, 10); }, this)); return (this.shop.get('selectedOrder')).addPaymentLine(cashRegister); - }; - PaypadView.prototype.render = function() { - $(this.el).empty(); + }, + render_element: function() { + this.$element.empty(); return (this.shop.get('cashRegisters')).each(__bind( function(cashRegister) { - return $(this.el).append((new PaymentButtonView({ - model: cashRegister - })).render()); + var button = new PaymentButtonWidget(); + button.model = cashRegister; + button.appendTo(this.$element); }, this)); - }; - return PaypadView; - })(); - PaymentButtonView = (function() { - __extends(PaymentButtonView, Backbone.View); - function PaymentButtonView() { - PaymentButtonView.__super__.constructor.apply(this, arguments); } - - PaymentButtonView.prototype.template = qweb_template('pos-payment-button-template'); - PaymentButtonView.prototype.render = function() { - return $(this.el).html(this.template({ + }); + PaymentButtonWidget = db.web.Widget.extend({ + template_fct: qweb_template('pos-payment-button-template'), + render_element: function() { + this.$element.html(this.template_fct({ id: this.model.get('id'), name: (this.model.get('journal_id'))[1] })); - }; - return PaymentButtonView; - })(); + return this; + } + }); /* There are 3 steps in a POS workflow: 1. prepare the order (i.e. chose products, quantities etc.) @@ -626,112 +611,101 @@ openerp.point_of_sale = function(db) { It should be possible to go back to any step as long as step 3 hasn't been completed. Modifying an order after validation shouldn't be allowed. */ - StepsView = (function() { - __extends(StepsView, Backbone.View); - function StepsView() { - StepsView.__super__.constructor.apply(this, arguments); - } - - StepsView.prototype.initialize = function(options) { - return this.step = "products"; - }; - StepsView.prototype.events = { - 'click input.step-button': 'clickChangeStep' - }; - StepsView.prototype.clickChangeStep = function(event) { + StepsWidget = db.web.Widget.extend({ + init: function(parent, element_id) { + this._super(parent, element_id); + this.step = "products"; + }, + start: function() { + this.$element.find('input.step-button').click(_.bind(this.clickChangeStep, this)); + }, + clickChangeStep: function(event) { var newStep; newStep = event.currentTarget.attributes['data-step'].nodeValue; $('.step-screen').hide(); $('#' + newStep + '-screen').show(); return this.step = newStep; - }; - return StepsView; - })(); + } + }); /* Shopping carts. */ - OrderlineView = (function() { - __extends(OrderlineView, Backbone.View); - function OrderlineView() { - OrderlineView.__super__.constructor.apply(this, arguments); - } - - OrderlineView.prototype.tagName = 'tr'; - OrderlineView.prototype.template = qweb_template('pos-orderline-template'); - OrderlineView.prototype.initialize = function(options) { + OrderlineWidget = db.web.Widget.extend({ + tagName: 'tr', + template_fct: qweb_template('pos-orderline-template'), + init: function(parent, element_id, options) { + this._super(parent, element_id); + this.model = options.model; this.model.bind('change', __bind( function() { - $(this.el).hide(); - return this.render(); + this.$element.hide(); + this.render_element(); }, this)); this.model.bind('remove', __bind( function() { - return $(this.el).remove(); + return this.$element.remove(); }, this)); this.order = options.order; - return this.numpadState = options.numpadState; - }; - OrderlineView.prototype.events = { - 'click': 'clickHandler' - }; - OrderlineView.prototype.clickHandler = function() { + this.numpadState = options.numpadState; + }, + start: function() { + this.$element.click(_.bind(this.clickHandler, this)); + }, + clickHandler: function() { this.numpadState.reset(); return this.select(); - }; - OrderlineView.prototype.render = function() { + }, + render_element: function() { this.select(); - return $(this.el).html(this.template(this.model.toJSON())).fadeIn(400, function() { + return this.$element.html(this.template_fct(this.model.toJSON())).fadeIn(400, function() { return $('#current-order').scrollTop($(this).offset().top); }); - }; - OrderlineView.prototype.select = function() { + }, + select: function() { $('tr.selected').removeClass('selected'); - $(this.el).addClass('selected'); + this.$element.addClass('selected'); return this.order.selected = this.model; - }; - return OrderlineView; - })(); - OrderView = (function() { - __extends(OrderView, Backbone.View); - function OrderView() { - OrderView.__super__.constructor.apply(this, arguments); - } - - OrderView.prototype.initialize = function(options) { + }, + }); + OrderWidget = db.web.Widget.extend({ + init: function(parent, element_id, options) { + this._super(parent, element_id); this.shop = options.shop; this.numpadState = options.numpadState; this.shop.bind('change:selectedOrder', this.changeSelectedOrder, this); - return this.bindOrderLineEvents(); - }; - OrderView.prototype.changeSelectedOrder = function() { + this.bindOrderLineEvents(); + }, + changeSelectedOrder: function() { this.currentOrderLines.unbind(); this.bindOrderLineEvents(); - return this.render(); - }; - OrderView.prototype.bindOrderLineEvents = function() { + return this.render_element(); + }, + bindOrderLineEvents: function() { this.currentOrderLines = (this.shop.get('selectedOrder')).get('orderLines'); this.currentOrderLines.bind('add', this.addLine, this); - this.currentOrderLines.bind('change', this.render, this); + this.currentOrderLines.bind('change', this.render_element, this); return this.currentOrderLines.bind('remove', this.render, this); - }; - OrderView.prototype.addLine = function(newLine) { - $(this.el).append((new OrderlineView({ + }, + addLine: function(newLine) { + var line = new OrderlineWidget(null, null, { model: newLine, order: this.shop.get('selectedOrder'), numpadState: this.numpadState - })).render()); + }); + line.appendTo(this.$element); return this.updateSummary(); - }; - OrderView.prototype.render = function() { - $(this.el).empty(); + }, + render_element: function() { + this.$element.empty(); this.currentOrderLines.each(__bind( function(orderLine) { - return $(this.el).append((new OrderlineView({ + var line = new OrderlineWidget(null, null, { model: orderLine, order: this.shop.get('selectedOrder'), numpadState: this.numpadState - })).render()); + }); + line.appendTo(this.$element); }, this)); return this.updateSummary(); - }; - OrderView.prototype.updateSummary = function() { + }, + updateSummary: function() { var currentOrder, tax, total, totalTaxExcluded; currentOrder = this.shop.get('selectedOrder'); total = currentOrder.getTotal(); @@ -740,31 +714,25 @@ openerp.point_of_sale = function(db) { $('#subtotal').html(totalTaxExcluded.toFixed(2)).hide().fadeIn(); $('#tax').html(tax.toFixed(2)).hide().fadeIn(); return $('#total').html(total.toFixed(2)).hide().fadeIn(); - }; - return OrderView; - })(); + }, + }); /* "Products" step. */ - CategoryView = (function() { - __extends(CategoryView, Backbone.View); - function CategoryView() { - CategoryView.__super__.constructor.apply(this, arguments); - } - - CategoryView.prototype.events = { - 'click .oe-pos-categories-list a': 'changeCategory' - }; - - CategoryView.prototype.template = qweb_template('pos-category-template'); - CategoryView.prototype.render = function(ancestors, children) { + CategoryWidget = db.web.Widget.extend({ + start: function() { + this.$element.find(".oe-pos-categories-list a").click(_.bind(this.changeCategory, this)); + }, + template_fct: qweb_template('pos-category-template'), + render_element: function() { + var self = this; var c; - return $(this.el).html(this.template({ + this.$element.html(this.template_fct({ breadcrumb: (function() { var _i, _len, _results; _results = []; - for (_i = 0, _len = ancestors.length; _i < _len; _i++) { - c = ancestors[_i]; + for (_i = 0, _len = self.ancestors.length; _i < _len; _i++) { + c = self.ancestors[_i]; _results.push(pos.categories[c]); } return _results; @@ -772,88 +740,77 @@ openerp.point_of_sale = function(db) { categories: (function() { var _i, _len, _results; _results = []; - for (_i = 0, _len = children.length; _i < _len; _i++) { - c = children[_i]; + for (_i = 0, _len = self.children.length; _i < _len; _i++) { + c = self.children[_i]; _results.push(pos.categories[c]); } return _results; })() })); - }; - CategoryView.prototype.changeCategory = function(a) { + }, + changeCategory: function(a) { var id = $(a.target).data("category-id"); - this.trigger("changeCategory", id); - }; - return CategoryView; - })(); - ProductView = (function() { - __extends(ProductView, Backbone.View); - function ProductView() { - ProductView.__super__.constructor.apply(this, arguments); - } - - ProductView.prototype.tagName = 'li'; - ProductView.prototype.className = 'product'; - ProductView.prototype.template = qweb_template('pos-product-template'); - ProductView.prototype.events = { - 'click a': 'addToOrder' - }; - ProductView.prototype.initialize = function(options) { - return this.shop = options.shop; - }; - ProductView.prototype.addToOrder = function(event) { + this.on_change_category(id); + }, + on_change_category: function(id) {}, + }); + ProductWidget = db.web.Widget.extend({ + tag_name:'li', + template_fct: qweb_template('pos-product-template'), + init: function(parent, element_id, options) { + this._super(parent, element_id); + this.model = options.model; + this.shop = options.shop; + }, + start: function(options) { + $("a", this.$element).click(_.bind(this.addToOrder, this)); + }, + addToOrder: function(event) { /* Preserve the category URL */ event.preventDefault(); return (this.shop.get('selectedOrder')).addProduct(this.model); - }; - ProductView.prototype.render = function() { - return $(this.el).html(this.template(this.model.toJSON())); - }; - return ProductView; - })(); - ProductListView = (function() { - __extends(ProductListView, Backbone.View); - function ProductListView() { - ProductListView.__super__.constructor.apply(this, arguments); - } - - ProductListView.prototype.tagName = 'ol'; - ProductListView.prototype.className = 'product-list'; - ProductListView.prototype.initialize = function(options) { + }, + render_element: function() { + this.$element.addClass("product"); + this.$element.html(this.template_fct(this.model.toJSON())); + return this; + }, + }); + ProductListWidget = db.web.Widget.extend({ + init: function(parent, element_id, options) { + this._super(parent, element_id); + this.model = options.model; this.shop = options.shop; - return (this.shop.get('products')).bind('reset', this.render, this); - }; - ProductListView.prototype.render = function() { - $(this.el).empty(); + this.shop.get('products').bind('reset', this.render_element, this); + }, + render_element: function() { + this.$element.empty(); (this.shop.get('products')).each(__bind( function(product) { - return $(this.el).append((new ProductView({ + var p = new ProductWidget(null, null, { model: product, shop: this.shop - })).render()); + }); + p.appendTo(this.$element); }, this)); - return $('#products-screen').append(this.el); - }; - return ProductListView; - })(); + return this; + }, + }); /* "Payment" step. */ - PaymentlineView = (function() { - __extends(PaymentlineView, Backbone.View); - function PaymentlineView() { - PaymentlineView.__super__.constructor.apply(this, arguments); - } - - PaymentlineView.prototype.tagName = 'tr'; - PaymentlineView.prototype.className = 'paymentline'; - PaymentlineView.prototype.template = qweb_template('pos-paymentline-template'); - PaymentlineView.prototype.initialize = function() { - return this.model.bind('change', this.render, this); - }; - PaymentlineView.prototype.events = { - 'keyup input': 'changeAmount' - }; - PaymentlineView.prototype.changeAmount = function(event) { + PaymentlineWidget = db.web.Widget.extend({ + tag_name: 'tr', + template_fct: qweb_template('pos-paymentline-template'), + init: function(parent, element_id, options) { + this._super(parent, element_id); + this.model = options.model; + this.model.bind('change', this.render_element, this); + }, + start: function () { + this.$element.addClass('paymentline'); + $('input', this.$element).keyup(_.bind(this.changeAmount, this)); + }, + changeAmount: function(event) { var newAmount; newAmount = event.currentTarget.value; if (newAmount && !isNaN(newAmount)) { @@ -861,164 +818,155 @@ openerp.point_of_sale = function(db) { amount: parseFloat(newAmount) }); } - }; - PaymentlineView.prototype.render = function() { - return $(this.el).html(this.template({ + }, + render_element: function() { + this.$element.html(this.template_fct({ name: (this.model.get('journal_id'))[1], amount: this.model.get('amount') })); - }; - return PaymentlineView; - })(); - PaymentView = (function() { - __extends(PaymentView, Backbone.View); - function PaymentView() { - PaymentView.__super__.constructor.apply(this, arguments); - } - - PaymentView.prototype.initialize = function(options) { + return this; + }, + }); + PaymentWidget = db.web.Widget.extend({ + init: function(parent, element_id, options) { + this._super(parent, element_id); + this.model = options.model; this.shop = options.shop; this.shop.bind('change:selectedOrder', this.changeSelectedOrder, this); this.bindPaymentLineEvents(); - return this.bindOrderLineEvents(); - }; - PaymentView.prototype.paymentLineList = function() { - return $(this.el).find('#paymentlines'); - }; - PaymentView.prototype.events = { - 'click button#validate-order': 'validateCurrentOrder' - }; - PaymentView.prototype.validateCurrentOrder = function() { + this.bindOrderLineEvents(); + }, + paymentLineList: function() { + return this.$element.find('#paymentlines'); + }, + start: function() { + $('button#validate-order', this.$element).click(_.bind(this.validateCurrentOrder, this)); + }, + validateCurrentOrder: function() { var callback, currentOrder; currentOrder = this.shop.get('selectedOrder'); - callback = __bind( function() { + callback = __bind(function() { return currentOrder.set({ validated: true }); }, this); - return pos.push('pos.order', currentOrder.exportAsJSON(), callback); - }; - PaymentView.prototype.bindPaymentLineEvents = function() { + pos.push('pos.order', currentOrder.exportAsJSON(), callback); + }, + bindPaymentLineEvents: function() { this.currentPaymentLines = (this.shop.get('selectedOrder')).get('paymentLines'); this.currentPaymentLines.bind('add', this.addPaymentLine, this); - this.currentPaymentLines.bind('change', this.render, this); - this.currentPaymentLines.bind('remove', this.render, this); - return this.currentPaymentLines.bind('all', this.updatePaymentSummary, this); - }; - PaymentView.prototype.bindOrderLineEvents = function() { + this.currentPaymentLines.bind('all', this.updatePaymentSummary, this); + }, + bindOrderLineEvents: function() { this.currentOrderLines = (this.shop.get('selectedOrder')).get('orderLines'); - return this.currentOrderLines.bind('all', this.updatePaymentSummary, this); - }; - PaymentView.prototype.changeSelectedOrder = function() { + this.currentOrderLines.bind('all', this.updatePaymentSummary, this); + }, + changeSelectedOrder: function() { this.currentPaymentLines.unbind(); this.bindPaymentLineEvents(); this.currentOrderLines.unbind(); this.bindOrderLineEvents(); - return this.render(); - }; - PaymentView.prototype.addPaymentLine = function(newPaymentLine) { - return this.paymentLineList().append((new PaymentlineView({ + this.render_element(); + }, + addPaymentLine: function(newPaymentLine) { + var x = new PaymentlineWidget(null, null, { model: newPaymentLine - })).render()); - }; - PaymentView.prototype.render = function() { + }); + x.appendTo(this.paymentLineList()); + }, + render_element: function() { this.paymentLineList().empty(); this.currentPaymentLines.each(__bind( function(paymentLine) { - return this.paymentLineList().append((new PaymentlineView({ - model: paymentLine - })).render()); + var x = new PaymentlineWidget(null, null, { + model: paymentLine + }); + this.paymentLineList().append(x); }, this)); - return this.updatePaymentSummary(); - }; - PaymentView.prototype.updatePaymentSummary = function() { + this.updatePaymentSummary(); + }, + updatePaymentSummary: function() { var currentOrder, dueTotal, paidTotal, remaining, remainingAmount; currentOrder = this.shop.get('selectedOrder'); paidTotal = currentOrder.getPaidTotal(); dueTotal = currentOrder.getTotal(); - $(this.el).find('#payment-due-total').html(dueTotal.toFixed(2)); - $(this.el).find('#payment-paid-total').html(paidTotal.toFixed(2)); + this.$element.find('#payment-due-total').html(dueTotal.toFixed(2)); + this.$element.find('#payment-paid-total').html(paidTotal.toFixed(2)); remainingAmount = dueTotal - paidTotal; remaining = remainingAmount > 0 ? 0 : (-remainingAmount).toFixed(2); - return $('#payment-remaining').html(remaining); - }; - return PaymentView; - })(); + $('#payment-remaining').html(remaining); + }, + }); /* "Receipt" step. */ - ReceiptLineView = (function() { - __extends(ReceiptLineView, Backbone.View); - function ReceiptLineView() { - ReceiptLineView.__super__.constructor.apply(this, arguments); - } - - ReceiptLineView.prototype.tagName = 'tr'; - ReceiptLineView.prototype.className = 'receiptline'; - ReceiptLineView.prototype.template = qweb_template('pos-receiptline-template'); - ReceiptLineView.prototype.initialize = function() { - return this.model.bind('change', this.render, this); - }; - ReceiptLineView.prototype.render = function() { - return $(this.el).html(this.template(this.model.toJSON())); - }; - return ReceiptLineView; - })(); - ReceiptView = (function() { - __extends(ReceiptView, Backbone.View); - function ReceiptView() { - ReceiptView.__super__.constructor.apply(this, arguments); - } - - ReceiptView.prototype.initialize = function(options) { + ReceiptLineWidget = db.web.Widget.extend({ + tag_name: 'tr', + template_fct: qweb_template('pos-receiptline-template'), + init: function(parent, options) { + this._super(parent); + this.model = options.model; + this.model.bind('change', this.render_element, this); + }, + render_element: function() { + this.$element.addClass('receiptline'); + this.$element.html(this.template_fct(this.model.toJSON())); + }, + }); + ReceiptWidget = db.web.Widget.extend({ + init: function(parent, options) { + this._super(parent); + this.model = options.model; this.shop = options.shop; this.shop.bind('change:selectedOrder', this.changeSelectedOrder, this); this.bindOrderLineEvents(); - return this.bindPaymentLineEvents(); - }; - ReceiptView.prototype.events = { - "click button#pos-finish-order": "finishOrder" - }; - ReceiptView.prototype.finishOrder = function() { + this.bindPaymentLineEvents(); + }, + start: function () { + $('button#pos-finish-order', this.$element).click(_.bind(this.finishOrder, this)); + }, + finishOrder: function() { $('.step-screen').hide(); $('#products-screen').show(); this.shop.get('selectedOrder').destroy(); - }; - ReceiptView.prototype.receiptLineList = function() { - return $(this.el).find('#receiptlines'); - }; - ReceiptView.prototype.bindOrderLineEvents = function() { + }, + receiptLineList: function() { + return this.$element.find('#receiptlines'); + }, + bindOrderLineEvents: function() { this.currentOrderLines = (this.shop.get('selectedOrder')).get('orderLines'); this.currentOrderLines.bind('add', this.addReceiptLine, this); - this.currentOrderLines.bind('change', this.render, this); - return this.currentOrderLines.bind('remove', this.render, this); - }; - ReceiptView.prototype.bindPaymentLineEvents = function() { + this.currentOrderLines.bind('change', this.render_element, this); + this.currentOrderLines.bind('remove', this.render_element, this); + }, + bindPaymentLineEvents: function() { this.currentPaymentLines = (this.shop.get('selectedOrder')).get('paymentLines'); - return this.currentPaymentLines.bind('all', this.updateReceiptSummary, this); - }; - ReceiptView.prototype.changeSelectedOrder = function() { + this.currentPaymentLines.bind('all', this.updateReceiptSummary, this); + }, + changeSelectedOrder: function() { this.currentOrderLines.unbind(); this.bindOrderLineEvents(); this.currentPaymentLines.unbind(); this.bindPaymentLineEvents(); - return this.render(); - }; - ReceiptView.prototype.addReceiptLine = function(newOrderItem) { - this.receiptLineList().append((new ReceiptLineView({ + this.render_element(); + }, + addReceiptLine: function(newOrderItem) { + var x = new ReceiptLineWidget(null, { model: newOrderItem - })).render()); - return this.updateReceiptSummary(); - }; - ReceiptView.prototype.render = function() { - this.receiptLineList().empty(); + }); + x.appendTo(this.receiptLineList()); + this.updateReceiptSummary(); + }, + render_element: function() { + this.$element.html(qweb_template('pos-receipt-view')); this.currentOrderLines.each(__bind( function(orderItem) { - return this.receiptLineList().append((new ReceiptLineView({ + var x = new ReceiptLineWidget(null, { model: orderItem - })).render()); + }); + x.appendTo(this.receiptLineList()); }, this)); - return this.updateReceiptSummary(); - }; - ReceiptView.prototype.updateReceiptSummary = function() { + this.updateReceiptSummary(); + }, + updateReceiptSummary: function() { var change, currentOrder, tax, total; currentOrder = this.shop.get('selectedOrder'); total = currentOrder.getTotal(); @@ -1026,10 +974,9 @@ openerp.point_of_sale = function(db) { change = currentOrder.getPaidTotal() - total; $('#receipt-summary-tax').html(tax.toFixed(2)); $('#receipt-summary-total').html(total.toFixed(2)); - return $('#receipt-summary-change').html(change.toFixed(2)); - }; - return ReceiptView; - })(); + $('#receipt-summary-change').html(change.toFixed(2)); + }, + }); OrderButtonView = (function() { __extends(OrderButtonView, Backbone.View); function OrderButtonView() { @@ -1087,38 +1034,45 @@ openerp.point_of_sale = function(db) { this.numpadState = new NumpadState({ shop: this.shop }); - this.productListView = new ProductListView({ + this.productListView = new ProductListWidget(null, "products-screen-ol", { shop: this.shop }); - this.paypadView = new PaypadView({ - shop: this.shop, - el: $('#paypad') + this.productListView.render_element(); + this.productListView.start(); + this.paypadView = new PaypadWidget(null, 'paypad', { + shop: this.shop }); - this.paypadView.render(); - this.orderView = new OrderView({ + this.paypadView.render_element(); + this.paypadView.start(); + this.orderView = new OrderWidget(null, 'current-order-content', { shop: this.shop, - numpadState: this.numpadState, - el: $('#current-order-content') + numpadState: this.numpadState }); - this.paymentView = new PaymentView({ - shop: this.shop, - el: $('#payment-screen') + this.orderView.start(); + this.paymentView = new PaymentWidget(null, 'payment-screen', { + shop: this.shop }); - this.receiptView = new ReceiptView({ + this.paymentView.render_element(); + this.paymentView.start(); + this.receiptView = new ReceiptWidget(null, { shop: this.shop, - el: $('#receipt-screen') - }); - this.numpadView = new NumpadView({ - state: this.numpadState, - el: $('#numpad') }); - return this.stepsView = new StepsView({ - el: $('#steps') + debugger; + this.receiptView.replace($('#receipt-screen')); + this.numpadView = new NumpadWidget(null, 'numpad', { + state: this.numpadState }); + this.numpadView.start(); + this.stepsView = new StepsWidget(null, 'steps'); + this.stepsView.start(); + this.start(); }; ShopView.prototype.events = { 'click button#neworder-button': 'createNewOrder' }; + ShopView.prototype.start = function() { + this.productListView.start(); + }; ShopView.prototype.createNewOrder = function() { var newOrder; newOrder = new Order; @@ -1149,10 +1103,9 @@ openerp.point_of_sale = function(db) { shop: this.shop, el: $element }); - this.categoryView = new CategoryView; - this.categoryView.bind("changeCategory", this.category, this); + this.categoryView = new CategoryWidget(null, 'products-screen-categories'); + this.categoryView.on_change_category.add_last(_.bind(this.category, this)); this.category(); - return this.categoryView; }; App.prototype.category = function(id) { var c, products; @@ -1160,8 +1113,10 @@ openerp.point_of_sale = function(db) { id = 0; } c = pos.categories[id]; - $('#products-screen').html(this.categoryView.render(c.ancestors, c.children)); - this.categoryView.delegateEvents(); + this.categoryView.ancestors = c.ancestors; + this.categoryView.children = c.children; + this.categoryView.render_element(); + this.categoryView.start(); products = pos.store.get('product.product').filter( function(p) { var _ref; return _ref = p.pos_categ_id[0], __indexOf.call(c.subtree, _ref) >= 0; diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml index b9148395cbe..74ff2229729 100644 --- a/addons/point_of_sale/static/src/xml/pos.xml +++ b/addons/point_of_sale/static/src/xml/pos.xml @@ -88,7 +88,10 @@ </footer> </div> <div id="rightpane"> - <div id="products-screen" class="step-screen selected-step"></div> + <div id="products-screen" class="step-screen selected-step"> + <div id="products-screen-categories"/> + <ol id="products-screen-ol" class="product-list"></ol> + </div> <div id="payment-screen" class="step-screen" style="display:none"> <header><h2>Payment</h2></header> <div class="pos-step-container"> @@ -114,28 +117,7 @@ </div> </div> </div> - <div id="receipt-screen" class="step-screen" style="display:none"> - <header><h2>Receipt</h2></header> - <div class="pos-step-container"> - <div class="pos-receipt-container"> - <div class="pos-sale-ticket"> - OpenERP Point of Sale<br /> - <br /> - <div class="pos-rigth-align"><t t-esc="new Date().toString(Date.CultureInfo.formatPatterns.shortDate + ' ' + - Date.CultureInfo.formatPatterns.longTime)"/></div> - <br /> - <table id="receiptlines"></table> - <br /> - <table> - <tr><td>Total:</td><td class="pos-rigth-align"><span id="receipt-summary-total"></span> €</td></tr> - <tr><td>Tax:</td><td class="pos-rigth-align"><span id="receipt-summary-tax"></span> €</td></tr> - <tr><td>Change:</td><td class="pos-rigth-align"><span id="receipt-summary-change"></span> €</td></tr> - </table> - </div> - </div> - <button id="pos-finish-order">Next Order</button> - </div> - </div> + <span id="receipt-screen"></span> </div> </div> </div> @@ -237,4 +219,28 @@ <button class="select-order">Order</button> <button class="close-order">X</button> </t> + <t t-name="pos-receipt-view"> + <div id="receipt-screen" class="step-screen" style="display:none"> + <header><h2>Receipt</h2></header> + <div class="pos-step-container"> + <div class="pos-receipt-container"> + <div class="pos-sale-ticket"> + OpenERP Point of Sale<br /> + <br /> + <div class="pos-rigth-align"><t t-esc="new Date().toString(Date.CultureInfo.formatPatterns.shortDate + ' ' + + Date.CultureInfo.formatPatterns.longTime)"/></div> + <br /> + <table id="receiptlines"></table> + <br /> + <table> + <tr><td>Total:</td><td class="pos-rigth-align"><span id="receipt-summary-total"></span> €</td></tr> + <tr><td>Tax:</td><td class="pos-rigth-align"><span id="receipt-summary-tax"></span> €</td></tr> + <tr><td>Change:</td><td class="pos-rigth-align"><span id="receipt-summary-change"></span> €</td></tr> + </table> + </div> + </div> + <button id="pos-finish-order">Next Order</button> + </div> + </div> + </t> </templates>
\ No newline at end of file diff --git a/addons/point_of_sale/test/01_order_to_payment.yml b/addons/point_of_sale/test/01_order_to_payment.yml index fd8ffbaa3e0..7c6b4817666 100644 --- a/addons/point_of_sale/test/01_order_to_payment.yml +++ b/addons/point_of_sale/test/01_order_to_payment.yml @@ -74,7 +74,7 @@ - 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')]} }: + !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. @@ -95,7 +95,7 @@ - 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')]} }: + !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 - diff --git a/addons/point_of_sale/test/02_order_to_invoice.yml b/addons/point_of_sale/test/02_order_to_invoice.yml index 3436e176678..0de4e518ebd 100644 --- a/addons/point_of_sale/test/02_order_to_invoice.yml +++ b/addons/point_of_sale/test/02_order_to_invoice.yml @@ -18,7 +18,7 @@ - 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')]} }: + !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 - diff --git a/addons/point_of_sale/wizard/pos_box_entries.py b/addons/point_of_sale/wizard/pos_box_entries.py index 0c48aff736f..8313b345834 100644 --- a/addons/point_of_sale/wizard/pos_box_entries.py +++ b/addons/point_of_sale/wizard/pos_box_entries.py @@ -125,3 +125,5 @@ class pos_box_entries(osv.osv_memory): pos_box_entries() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_box_out.py b/addons/point_of_sale/wizard/pos_box_out.py index b4298745c35..46f710c7882 100644 --- a/addons/point_of_sale/wizard/pos_box_out.py +++ b/addons/point_of_sale/wizard/pos_box_out.py @@ -110,3 +110,5 @@ class pos_box_out(osv.osv_memory): pos_box_out() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py index adf59e3cbce..3a50ac0f7c9 100644 --- a/addons/point_of_sale/wizard/pos_payment.py +++ b/addons/point_of_sale/wizard/pos_payment.py @@ -101,3 +101,5 @@ class pos_make_payment(osv.osv_memory): pos_make_payment() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_payment_report_user.py b/addons/point_of_sale/wizard/pos_payment_report_user.py index 02db921618b..05d06f4df29 100644 --- a/addons/point_of_sale/wizard/pos_payment_report_user.py +++ b/addons/point_of_sale/wizard/pos_payment_report_user.py @@ -51,3 +51,5 @@ class pos_payment_report_user(osv.osv_memory): pos_payment_report_user() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_receipt.py b/addons/point_of_sale/wizard/pos_receipt.py index 71efee85b7c..f4feee85504 100644 --- a/addons/point_of_sale/wizard/pos_receipt.py +++ b/addons/point_of_sale/wizard/pos_receipt.py @@ -56,3 +56,5 @@ class pos_receipt(osv.osv_memory): } pos_receipt() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/portal/__init__.py b/addons/portal/__init__.py index 89397d2eab5..b35d11bac45 100644 --- a/addons/portal/__init__.py +++ b/addons/portal/__init__.py @@ -24,3 +24,5 @@ import wizard import res_user import ir_ui_menu + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/portal/i18n/cs.po b/addons/portal/i18n/cs.po index ce070425f07..3be439be9b6 100644 --- a/addons/portal/i18n/cs.po +++ b/addons/portal/i18n/cs.po @@ -8,78 +8,80 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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 <EMAIL@ADDRESS>\n" -"Language-Team: Czech <cs@li.org>\n" +"PO-Revision-Date: 2011-11-25 13:27+0000\n" +"Last-Translator: Jiří Hajda <robie@centrum.cz>\n" +"Language-Team: Czech <openerp-i18n-czech@lists.launchpad.net >\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-05 05:57+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:50+0000\n" +"X-Generator: Launchpad (build 14381)\n" +"X-Poedit-Language: Czech\n" #. module: portal #: code:addons/portal/wizard/share_wizard.py:55 #, python-format msgid "Please select at least one user to share with" -msgstr "" +msgstr "Prosíme vyberte nejméně jednoho uživatele, s kterým chcete sdílet" #. module: portal #: code:addons/portal/wizard/share_wizard.py:59 #, python-format msgid "Please select at least one group to share with" -msgstr "" +msgstr "Prosíme vyberte nejméně jednu skupinu, s kterou chcete sdílet" #. module: portal #: field:res.portal,group_id:0 msgid "Group" -msgstr "" +msgstr "Skupina" #. module: portal #: help:res.portal,other_group_ids:0 msgid "Those groups are assigned to the portal's users" -msgstr "" +msgstr "Tyto skupiny jsou přiřazeny k uživatelům portálu" #. module: portal #: view:share.wizard:0 #: field:share.wizard,group_ids:0 msgid "Existing groups" -msgstr "" +msgstr "Existující skupiny" #. module: portal #: model:ir.model,name:portal.model_res_portal_wizard_user msgid "Portal User Config" -msgstr "" +msgstr "Nastavení uživatele portálu" #. module: portal #: view:res.portal.wizard.user:0 msgid "Portal User" -msgstr "" +msgstr "Uživatel portálu" #. module: portal #: help:res.portal,override_menu:0 msgid "Enable this option to override the Menu Action of portal users" -msgstr "" +msgstr "Povolte tuto volbu k přepsání Akcí nabídky uživatelů portálu" #. module: portal #: field:res.portal.wizard.user,user_email:0 msgid "E-mail" -msgstr "" +msgstr "E-mail" #. module: portal #: view:res.portal:0 msgid "Other Groups assigned to Users" -msgstr "" +msgstr "Jiné skupiny přiřazené uživatelům" #. module: portal #: constraint:res.users:0 msgid "The chosen company is not in the allowed companies for this user" msgstr "" +"Vybraná společnost není v povolených společnostech pro tohoto uživatele" #. module: portal #: view:res.portal:0 #: field:res.portal,widget_ids:0 msgid "Widgets" -msgstr "" +msgstr "Udělátka" #. module: portal #: model:ir.module.module,description:portal.module_meta_information @@ -99,71 +101,85 @@ msgid "" "module 'share'.\n" " " msgstr "" +"\n" +"Tento modul určuje 'portály' k přizpůsobení přístupu k vaší databázi " +"OpenERP\n" +"pro vnější uživatele.\n" +"\n" +"Portál určuje přizpůsobení nabídky uživatele a jeho přístupových práv pro " +"skupinu uživatelů\n" +"(těch přiřazených k portálu). Také přidružuje uživatelské skupiny k\n" +"uživatelům portálu (přidáním skupiny v portálu automaticky je přidáte k " +"uživatelům\n" +"portálu, atd.). Tato funkce je velmi užitečný v kombinaci s\n" +"modulem 'sdílení'.\n" +" " #. module: portal #: view:share.wizard:0 msgid "Who do you want to share with?" -msgstr "" +msgstr "S kým chcete sdílet?" #. module: portal #: view:res.portal.wizard:0 msgid "Send Invitations" -msgstr "" +msgstr "Poslat pozvání" #. module: portal #: help:res.portal,url:0 msgid "The url where portal users can connect to the server" -msgstr "" +msgstr "URL, kde uživatelé portálu se mohou připojit k serveru" #. module: portal #: field:res.portal.widget,widget_id:0 msgid "Widget" -msgstr "" +msgstr "Udělátko" #. module: portal #: help:res.portal.wizard,message:0 msgid "This text is included in the welcome email sent to the users" -msgstr "" +msgstr "Tento text je zahrnut v uvítacím emailu zaslatném uživatelům" #. module: portal #: help:res.portal,menu_action_id:0 msgid "If set, replaces the standard menu for the portal's users" msgstr "" +"Pokud je nastaveno, nahrazuje standardní nabídku pro uživatele portálu" #. module: portal #: field:res.portal,parent_menu_id:0 msgid "Parent Menu" -msgstr "" +msgstr "Nadřazené menu" #. module: portal #: view:res.portal:0 msgid "Portal Name" -msgstr "" +msgstr "Jméno portálu" #. module: portal #: view:res.portal.wizard.user:0 msgid "Portal Users" -msgstr "" +msgstr "Uživatelé portálu" #. module: portal #: field:res.portal,override_menu:0 msgid "Override Menu Action of Users" -msgstr "" +msgstr "Přepsat Akce nabídky pro uživatele" #. module: portal #: field:res.portal,menu_action_id:0 msgid "Menu Action" -msgstr "" +msgstr "Akce nabídky" #. module: portal #: field:res.portal.wizard.user,name:0 msgid "User Name" -msgstr "" +msgstr "Uživatelské jméno" #. module: portal #: model:ir.model,name:portal.model_res_portal_widget msgid "Portal Widgets" -msgstr "" +msgstr "Pomůcky portálu" #. module: portal #: model:ir.model,name:portal.model_res_portal @@ -172,47 +188,47 @@ msgstr "" #: field:res.portal.widget,portal_id:0 #: field:res.portal.wizard,portal_id:0 msgid "Portal" -msgstr "" +msgstr "Portál" #. module: portal #: code:addons/portal/wizard/portal_wizard.py:35 #, python-format msgid "Your OpenERP account at %(company)s" -msgstr "" +msgstr "Váš účet OpenERP v %(company)s" #. module: portal #: code:addons/portal/portal.py:110 #: code:addons/portal/portal.py:184 #, python-format msgid "%s Menu" -msgstr "" +msgstr "%s Nabídka" #. module: portal #: help:res.portal.wizard,portal_id:0 msgid "The portal in which new users must be added" -msgstr "" +msgstr "Portál, ve kterém musí být přidání noví uživatelé" #. module: portal #: help:res.portal,widget_ids:0 msgid "Widgets assigned to portal users" -msgstr "" +msgstr "Pomůcky přiřazené k těmto uživatelům portálu" #. module: portal #: code:addons/portal/wizard/portal_wizard.py:163 #, python-format msgid "(missing url)" -msgstr "" +msgstr "(chybějící url)" #. module: portal #: view:share.wizard:0 #: field:share.wizard,user_ids:0 msgid "Existing users" -msgstr "" +msgstr "Existující uživatelé" #. module: portal #: field:res.portal.wizard.user,wizard_id:0 msgid "Wizard" -msgstr "" +msgstr "Průvodce" #. module: portal #: help:res.portal.wizard.user,user_email:0 @@ -220,63 +236,66 @@ msgid "" "Will be used as user login. Also necessary to send the account information " "to new users" msgstr "" +"Bude použito jako přihlašovací jméno uživatele. Také je zapotřebí zaslat " +"informace účtu novým uživatelům" #. module: portal #: field:res.portal.wizard.user,lang:0 msgid "Language" -msgstr "" +msgstr "Jazyk" #. module: portal #: field:res.portal,url:0 msgid "URL" -msgstr "" +msgstr "URL" #. module: portal #: view:res.portal:0 msgid "Widgets assigned to Users" -msgstr "" +msgstr "Pomůcky přiřazené uživatelům" #. module: portal #: help:res.portal.wizard.user,lang:0 msgid "The language for the user's user interface" -msgstr "" +msgstr "Jazyk pro uživatelské rozhraní uživatelů" #. module: portal #: view:res.portal.wizard:0 msgid "Cancel" -msgstr "" +msgstr "Zrušit" #. module: portal #: view:res.portal:0 msgid "Website" -msgstr "" +msgstr "Webová stránka" #. module: portal #: view:res.portal:0 msgid "Create Parent Menu" -msgstr "" +msgstr "Vytvořit nadřazenou nabídku" #. module: portal #: view:res.portal.wizard:0 msgid "" "The following text will be included in the welcome email sent to users." msgstr "" +"Následující text bude zahrnut v uvítacím emailu zalsatném uživatelům." #. module: portal #: code:addons/portal/wizard/portal_wizard.py:135 #, python-format msgid "Email required" -msgstr "" +msgstr "Požadován email" #. 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 msgid "Invalid email address" -msgstr "" +msgstr "Neplatná emailová adresa" #. module: portal #: code:addons/portal/wizard/portal_wizard.py:136 @@ -284,28 +303,30 @@ msgstr "" msgid "" "You must have an email address in your User Preferences to send emails." msgstr "" +"Musíte mít emailovou adresu ve vašich uživatelských předvolbách pro zasílání " +"emailů." #. 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 msgid "The group extended by this portal" -msgstr "" +msgstr "Skupina rozšířená tímto portálem" #. module: portal #: view:res.portal:0 #: view:res.portal.wizard:0 #: field:res.portal.wizard,user_ids:0 msgid "Users" -msgstr "" +msgstr "Uživatelé" #. module: portal #: field:res.portal,other_group_ids:0 msgid "Other User Groups" -msgstr "" +msgstr "Jiné skupiny uživatelů" #. module: portal #: model:ir.actions.act_window,name:portal.portal_list_action @@ -313,38 +334,38 @@ msgstr "" #: model:ir.ui.menu,name:portal.portal_menu #: view:res.portal:0 msgid "Portals" -msgstr "" +msgstr "Portály" #. module: portal #: help:res.portal,parent_menu_id:0 msgid "The menu action opens the submenus of this menu item" -msgstr "" +msgstr "Akce nabídky otevírající podnabídku této položky nabídky" #. module: portal #: field:res.portal.widget,sequence:0 msgid "Sequence" -msgstr "" +msgstr "Posloupnost" #. module: portal #: field:res.users,partner_id:0 msgid "Related Partner" -msgstr "" +msgstr "Vztažený partner" #. module: portal #: view:res.portal:0 msgid "Portal Menu" -msgstr "" +msgstr "Nabídka portálu" #. module: portal #: sql_constraint:res.users:0 msgid "You can not have two users with the same login !" -msgstr "" +msgstr "Nemůžete mít dva uživatele se stejným přihlašovacím jménem !" #. module: portal #: view:res.portal.wizard:0 #: field:res.portal.wizard,message:0 msgid "Invitation message" -msgstr "" +msgstr "Zpráva pozvánky" #. module: portal #: code:addons/portal/wizard/portal_wizard.py:36 @@ -365,28 +386,42 @@ msgid "" "OpenERP - Open Source Business Applications\n" "http://www.openerp.com\n" msgstr "" +"Vážený %(name)s,\n" +"\n" +"Byl vám vytvořen OpenERP účet na %(url)s.\n" +"\n" +"Váše přihlašovací údaje účtu jsou:\n" +"Databáze: %(db)s\n" +"Uživatel: %(login)s\n" +"Heslo: %(password)s\n" +"\n" +"%(message)s\n" +"\n" +"--\n" +"OpenERP - Open Source Business Applications\n" +"http://www.openerp.com\n" #. module: portal #: model:ir.model,name:portal.model_res_portal_wizard msgid "Portal Wizard" -msgstr "" +msgstr "Průvodce portálu" #. module: portal #: help:res.portal.wizard.user,name:0 msgid "The user's real name" -msgstr "" +msgstr "Skutečné jméno uživatele" #. module: portal #: model:ir.actions.act_window,name:portal.address_wizard_action #: model:ir.actions.act_window,name:portal.partner_wizard_action #: view:res.portal.wizard:0 msgid "Add Portal Access" -msgstr "" +msgstr "Přidat přístup portálu" #. module: portal #: field:res.portal.wizard.user,partner_id:0 msgid "Partner" -msgstr "" +msgstr "Partner" #. module: portal #: model:ir.actions.act_window,help:portal.portal_list_action @@ -398,8 +433,14 @@ msgid "" "the portal's users.\n" " " msgstr "" +"\n" +"Portál pomáhá stanovit určité pohledy a pravidla pro skupiny uživatelů\n" +"(skupinu protálu). Nabídka portálu, pomůcky a určité skupiny mohou být " +"přiřazeny k\n" +"uživatelům portálu.\n" +" " #. module: portal #: model:ir.model,name:portal.model_share_wizard msgid "Share Wizard" -msgstr "" +msgstr "Průvodce sdílením" diff --git a/addons/portal/ir_ui_menu.py b/addons/portal/ir_ui_menu.py index a4fe364a4fd..c8f59ca8bd1 100644 --- a/addons/portal/ir_ui_menu.py +++ b/addons/portal/ir_ui_menu.py @@ -56,3 +56,5 @@ class portal_menu(osv.osv): portal_menu() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/portal/portal.py b/addons/portal/portal.py index 1c7f84c363a..de39944e69f 100644 --- a/addons/portal/portal.py +++ b/addons/portal/portal.py @@ -226,3 +226,5 @@ portal_widget() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/portal/res_user.py b/addons/portal/res_user.py index 2f32a65b761..127c3079b29 100644 --- a/addons/portal/res_user.py +++ b/addons/portal/res_user.py @@ -32,3 +32,5 @@ class res_users(osv.osv): res_users() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/portal/wizard/__init__.py b/addons/portal/wizard/__init__.py index 90b71a62c30..9d52ae0db6d 100644 --- a/addons/portal/wizard/__init__.py +++ b/addons/portal/wizard/__init__.py @@ -22,3 +22,5 @@ import portal_wizard import share_wizard + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/portal/wizard/portal_wizard.py b/addons/portal/wizard/portal_wizard.py index 7157f22f129..706d6fd4a7f 100644 --- a/addons/portal/wizard/portal_wizard.py +++ b/addons/portal/wizard/portal_wizard.py @@ -225,3 +225,5 @@ wizard_user() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/portal/wizard/share_wizard.py b/addons/portal/wizard/share_wizard.py index ab639bdeccc..b5c9d165cc6 100644 --- a/addons/portal/wizard/share_wizard.py +++ b/addons/portal/wizard/share_wizard.py @@ -184,3 +184,5 @@ class share_wizard_portal(osv.osv_memory): share_wizard_portal() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/procurement/__init__.py b/addons/procurement/__init__.py index 3420ef1f75e..4634166a9bd 100644 --- a/addons/procurement/__init__.py +++ b/addons/procurement/__init__.py @@ -22,4 +22,6 @@ import procurement import wizard import schedulers -import company
\ No newline at end of file +import company + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/procurement/board_mrp_procurement_view.xml b/addons/procurement/board_mrp_procurement_view.xml index bf11fe79166..b45edd3cbdd 100644 --- a/addons/procurement/board_mrp_procurement_view.xml +++ b/addons/procurement/board_mrp_procurement_view.xml @@ -16,8 +16,8 @@ <field name="inherit_id" ref="stock.board_warehouse_form"/> <field name="type">form</field> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1/action[@string='Incoming Product']" position="before"> - <action colspan="4" name="%(procurement_action_board)d" string="Procurements in Exception" width="510" /> + <xpath expr="/form/board/column/action[@string='Incoming Product']" position="before"> + <action name="%(procurement_action_board)d" string="Procurements in Exception"/> </xpath> </field> </record> diff --git a/addons/product/pricelist.py b/addons/product/pricelist.py index 3c22b2838ef..db953c8a319 100644 --- a/addons/product/pricelist.py +++ b/addons/product/pricelist.py @@ -202,6 +202,13 @@ class product_pricelist(osv.osv): else: categ_where = '(categ_id IS NULL)' + if partner: + partner_where = 'base <> -2 OR %s IN (SELECT name FROM product_supplierinfo WHERE product_id = %s) ' + partner_args = (partner, product_id) + else: + partner_where = 'base <> -2 ' + partner_args = () + cr.execute( 'SELECT i.*, pl.currency_id ' 'FROM product_pricelist_item AS i, ' @@ -209,11 +216,12 @@ class product_pricelist(osv.osv): 'WHERE (product_tmpl_id IS NULL OR product_tmpl_id = %s) ' 'AND (product_id IS NULL OR product_id = %s) ' 'AND (' + categ_where + ' OR (categ_id IS NULL)) ' + 'AND (' + partner_where + ') ' 'AND price_version_id = %s ' 'AND (min_quantity IS NULL OR min_quantity <= %s) ' 'AND i.price_version_id = v.id AND v.pricelist_id = pl.id ' 'ORDER BY sequence', - (tmpl_id, product_id, pricelist_version_ids[0], qty)) + (tmpl_id, product_id) + partner_args + (pricelist_version_ids[0], qty)) res1 = cr.dictfetchall() uom_price_already_computed = False for res in res1: @@ -296,148 +304,6 @@ class product_pricelist(osv.osv): res.update({'item_id': {ids[-1]: res_multi.get('item_id', ids[-1])}}) return res - def price_get_old(self, cr, uid, ids, prod_id, qty, partner=None, context=None): - ''' - context = { - 'uom': Unit of Measure (int), - 'partner': Partner ID (int), - 'date': Date of the pricelist (%Y-%m-%d), - } - ''' - price = False - item_id = 0 - if context is None: - context = {} - currency_obj = self.pool.get('res.currency') - product_obj = self.pool.get('product.product') - supplierinfo_obj = self.pool.get('product.supplierinfo') - price_type_obj = self.pool.get('product.price.type') - - if context and ('partner_id' in context): - partner = context['partner_id'] - context['partner_id'] = partner - date = time.strftime('%Y-%m-%d') - if context and ('date' in context): - date = context['date'] - result = {} - result['item_id'] = {} - for id in ids: - cr.execute('SELECT * ' \ - 'FROM product_pricelist_version ' \ - 'WHERE pricelist_id = %s AND active=True ' \ - 'AND (date_start IS NULL OR date_start <= %s) ' \ - 'AND (date_end IS NULL OR date_end >= %s) ' \ - 'ORDER BY id LIMIT 1', (id, date, date)) - plversion = cr.dictfetchone() - - if not plversion: - raise osv.except_osv(_('Warning !'), - _('No active version for the selected pricelist !\n' \ - 'Please create or activate one.')) - - cr.execute('SELECT id, categ_id ' \ - 'FROM product_template ' \ - 'WHERE id = (SELECT product_tmpl_id ' \ - 'FROM product_product ' \ - 'WHERE id = %s)', (prod_id,)) - tmpl_id, categ = cr.fetchone() - categ_ids = [] - while categ: - categ_ids.append(str(categ)) - cr.execute('SELECT parent_id ' \ - 'FROM product_category ' \ - 'WHERE id = %s', (categ,)) - categ = cr.fetchone()[0] - if str(categ) in categ_ids: - raise osv.except_osv(_('Warning !'), - _('Could not resolve product category, ' \ - 'you have defined cyclic categories ' \ - 'of products!')) - if categ_ids: - categ_where = '(categ_id IN (' + ','.join(categ_ids) + '))' - else: - categ_where = '(categ_id IS NULL)' - - cr.execute( - 'SELECT i.*, pl.currency_id ' - 'FROM product_pricelist_item AS i, ' - 'product_pricelist_version AS v, product_pricelist AS pl ' - 'WHERE (product_tmpl_id IS NULL OR product_tmpl_id = %s) ' - 'AND (product_id IS NULL OR product_id = %s) ' - 'AND (' + categ_where + ' OR (categ_id IS NULL)) ' - 'AND price_version_id = %s ' - 'AND (min_quantity IS NULL OR min_quantity <= %s) ' - 'AND i.price_version_id = v.id AND v.pricelist_id = pl.id ' - 'ORDER BY sequence', - (tmpl_id, prod_id, plversion['id'], qty)) - res1 = cr.dictfetchall() - - for res in res1: - item_id = 0 - if res: - if res['base'] == -1: - if not res['base_pricelist_id']: - price = 0.0 - else: - price_tmp = self.price_get(cr, uid, - [res['base_pricelist_id']], prod_id, - qty, context=context)[res['base_pricelist_id']] - ptype_src = self.browse(cr, uid, - res['base_pricelist_id']).currency_id.id - price = currency_obj.compute(cr, uid, ptype_src, - res['currency_id'], price_tmp, round=False) - break - elif res['base'] == -2: - where = [] - if partner: - where = [('name', '=', partner) ] - sinfo = supplierinfo_obj.search(cr, uid, - [('product_id', '=', tmpl_id)] + where) - price = 0.0 - if sinfo: - cr.execute('SELECT * ' \ - 'FROM pricelist_partnerinfo ' \ - 'WHERE suppinfo_id IN %s' \ - 'AND min_quantity <= %s ' \ - 'ORDER BY min_quantity DESC LIMIT 1', (tuple(sinfo),qty,)) - res2 = cr.dictfetchone() - if res2: - price = res2['price'] - break - else: - price_type = price_type_obj.browse(cr, uid, int(res['base'])) - price = currency_obj.compute(cr, uid, - price_type.currency_id.id, res['currency_id'], - product_obj.price_get(cr, uid, [prod_id], - price_type.field, context=context)[prod_id], round=False, context=context) - - if price: - price_limit = price - - price = price * (1.0+(res['price_discount'] or 0.0)) - price = rounding(price, res['price_round']) - price += (res['price_surcharge'] or 0.0) - if res['price_min_margin']: - price = max(price, price_limit+res['price_min_margin']) - if res['price_max_margin']: - price = min(price, price_limit+res['price_max_margin']) - item_id = res['id'] - break - - else: - # False means no valid line found ! But we may not raise an - # exception here because it breaks the search - price = False - result[id] = price - result['item_id'] = {id: item_id} - if context and ('uom' in context): - product = product_obj.browse(cr, uid, prod_id) - uom = product.uos_id or product.uom_id - result[id] = self.pool.get('product.uom')._compute_price(cr, - uid, uom.id, result[id], context['uom']) - - return result - product_pricelist() diff --git a/addons/product/pricelist_view.xml b/addons/product/pricelist_view.xml index 2f8982a1faf..d4d274da2d1 100644 --- a/addons/product/pricelist_view.xml +++ b/addons/product/pricelist_view.xml @@ -165,7 +165,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="search_view_id" ref="product_pricelist_view_search" /> - <field name="context">{"search_default_type":"sale"}</field> + <field name="context">{"default_type":"sale", "search_default_type":"sale"}</field> <field name="domain">[('type','=','sale')]</field> <field name="help">A price list contains rules to be evaluated in order to compute the purchase or sales price for all the partners assigned to a price list. Price lists have several versions (2010, 2011, Promotion of February 2010, etc.) and each version has several rules. Example: the customer price of a product category will be based on the supplier price multiplied by 1.80.</field> </record> @@ -176,7 +176,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="search_view_id" ref="product_pricelist_view_search" /> - <field name="context">{"search_default_type":"purchase"}</field> + <field name="context">{"default_type":"purchase", "search_default_type":"purchase"}</field> <field name="domain">[('type','=','purchase')]</field> <field name="help">A price list contains rules to be evaluated in order to compute the purchase or sales price for all the partners assigned to a price list. Price lists have several versions (2010, 2011, Promotion of February 2010, etc.) and each version has several rules. Example: the customer price of a product category will be based on the supplier price multiplied by 1.80.</field> </record> diff --git a/addons/product/product_data.xml b/addons/product/product_data.xml index fc085aab922..122c8594de4 100644 --- a/addons/product/product_data.xml +++ b/addons/product/product_data.xml @@ -23,8 +23,8 @@ <!-- - Resource: product.uom - --> + Resource: product.uom + --> <record id="product_uom_unit" model="product.uom"> <field name="category_id" ref="product_uom_categ_unit"/> <field name="name">PCE</field> diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml index a0669795ad5..ac9ae8c5ec3 100644 --- a/addons/product/product_view.xml +++ b/addons/product/product_view.xml @@ -376,7 +376,6 @@ <field eval="'product.category'" name="model"/> <field name="name">Products by Categories</field> <field eval="'ir.actions.act_window,%d'%product_normal_action_tree" name="value"/> - <field eval="True" name="object"/> </record> diff --git a/addons/project/board_project_manager_view.xml b/addons/project/board_project_manager_view.xml index b9ff6331db0..d9340eefb3a 100644 --- a/addons/project/board_project_manager_view.xml +++ b/addons/project/board_project_manager_view.xml @@ -2,20 +2,23 @@ <openerp> <data> - <!-- - Board for project managers - --> + <!-- Board for project managers --> + <act_window - domain="[('user_id', '=', uid)]" - id="act_my_project" name="My projects" - res_model="project.project" view_mode="tree,form" + id="act_my_project" + name="My projects" + res_model="project.project" + domain=""[('user_id', '=', uid)]"" + view_mode="tree,form" view_type="form"/> + <act_window id="act_my_account" name="My accounts to invoice" res_model="account.analytic.account" - domain="[('user_id','=',uid),('state','<>','close')]" + domain=""[('user_id','=',uid),('state','<>','close')]"" view_mode="tree,form" view_type="form"/> + </data> </openerp> diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml index f2c44fab574..a58557c94ba 100644 --- a/addons/project/board_project_view.xml +++ b/addons/project/board_project_view.xml @@ -81,16 +81,16 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="My Board"> - <hpaned> - <child1> - <action colspan="4" height="100" name="%(my_open_tasks_action)d" string="My Open Tasks" width="510"/> - <action colspan="4" height="100" name="%(action_view_delegate_task_tree)d" string="My Delegated Tasks" width="510"/> - </child1> - <child2> - <action colspan="4" height="100" name="%(project.action_project_vs_planned_total_hours_graph)d" string="My Projects: Planned vs Total Hours" /> - <action colspan="4" height="100" name="%(project.action_project_vs_remaining_hours_graph)d" string="My Remaining Hours by Project" /> - </child2> - </hpaned> + <board style="1-2"> + <column> + <action name="%(my_open_tasks_action)d" string="My Open Tasks"/> + <action name="%(action_view_delegate_task_tree)d" string="My Delegated Tasks"/> + </column> + <column> + <action name="%(project.action_project_vs_planned_total_hours_graph)d" string="My Projects: Planned vs Total Hours"/> + <action name="%(project.action_project_vs_remaining_hours_graph)d" string="My Remaining Hours by Project"/> + </column> + </board> </form> </field> </record> diff --git a/addons/project/company.py b/addons/project/company.py index 0967d130737..6400450cd3e 100644 --- a/addons/project/company.py +++ b/addons/project/company.py @@ -33,3 +33,5 @@ class res_company(osv.osv): } res_company() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/project.py b/addons/project/project.py index 5ab7af9de79..abebd2d35ff 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -78,7 +78,7 @@ class project(osv.osv): return {'value':{'contact_id': False}} addr = partner_obj.address_get(cr, uid, [part], ['contact']) val = {'contact_id': addr['contact']} - if pricelist_id in self._columns: + if 'pricelist_id' in self.fields_get(cr, uid, context=context): pricelist = partner_obj.read(cr, uid, part, ['property_product_pricelist'], context=context) pricelist_id = pricelist.get('property_product_pricelist', False) and pricelist.get('property_product_pricelist')[0] or False val['pricelist_id'] = pricelist_id @@ -424,21 +424,55 @@ class task(osv.osv): _log_create = True _date_name = "date_start" - def _read_group_type_id(self, cr, uid, ids, domain, context=None): - context = context or {} + + def _resolve_project_id_from_context(self, cr, uid, context=None): + """Return ID of project based on the value of 'project_id' + context key, or None if it cannot be resolved to a single project. + """ + if context is None: context = {} + if type(context.get('project_id')) in (int, long): + project_id = context['project_id'] + return project_id + if isinstance(context.get('project_id'), basestring): + project_name = context['project_id'] + project_ids = self.pool.get('project.project').name_search(cr, uid, name=project_name) + if len(project_ids) == 1: + return project_ids[0][0] + + def _read_group_type_id(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): stage_obj = self.pool.get('project.task.type') - stage_ids = stage_obj.search(cr, uid, ['|',('id','in',ids)] + [('project_default','=',1)], context=context) - return stage_obj.name_get(cr, uid, stage_ids, context=context) + project_id = self._resolve_project_id_from_context(cr, uid, context=context) + order = stage_obj._order + access_rights_uid = access_rights_uid or uid + if read_group_order == 'type_id desc': + # lame way to allow reverting search, should just work in the trivial case + order = '%s desc' % order + if project_id: + domain = ['|', ('id','in',ids), ('project_ids','in',project_id)] + else: + domain = ['|', ('id','in',ids), ('project_default','=',1)] + stage_ids = stage_obj._search(cr, uid, domain, order=order, access_rights_uid=access_rights_uid, context=context) + result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) + return result - def _read_group_user_id(self, cr, uid, ids, domain, context={}): - context = context or {} - if type(context.get('project_id', None)) not in (int, long): - return None - proj = self.pool.get('project.project').browse(cr, uid, context['project_id'], context=context) - ids += map(lambda x: x.id, proj.members) - stage_obj = self.pool.get('res.users') - stage_ids = stage_obj.search(cr, uid, [('id','in',ids)], context=context) - return stage_obj.name_get(cr, uid, ids, context=context) + def _read_group_user_id(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): + res_users = self.pool.get('res.users') + project_id = self._resolve_project_id_from_context(cr, uid, context=context) + access_rights_uid = access_rights_uid or uid + if project_id: + ids += self.pool.get('project.project').read(cr, access_rights_uid, project_id, ['members'], context=context)['members'] + order = res_users._order + # lame way to allow reverting search, should just work in the trivial case + if read_group_order == 'user_id desc': + order = '%s desc' % order + # de-duplicate and apply search order + ids = res_users._search(cr, uid, [('id','in',ids)], order=order, access_rights_uid=access_rights_uid, context=context) + result = res_users.name_get(cr, access_rights_uid, ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(ids.index(x[0]), ids.index(y[0]))) + return result _group_by_full = { 'type_id': _read_group_type_id, @@ -560,7 +594,12 @@ class task(osv.osv): 'state': fields.selection([('draft', 'New'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done'), ('cancelled', 'Cancelled')], '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\'.'), - 'kanban_state': fields.selection([('blocked', 'Blocked'),('normal', 'Normal'),('done', 'Done')], 'Kanban State', readonly=True, required=False), + 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready To Pull')], 'Kanban State', + help="A task's kanban state indicates special situations affecting it:\n" + " * Normal is the default situation\n" + " * Blocked indicates something is preventing the progress of this task\n" + " * Ready To Pull indicates the task is ready to be pulled to the next stage", + readonly=True, required=False), 'create_date': fields.datetime('Create Date', readonly=True,select=True), 'date_start': fields.datetime('Starting Date',select=True), 'date_end': fields.datetime('Ending Date',select=True), @@ -840,37 +879,39 @@ class task(osv.osv): self.write(cr, uid, ids, {'state': 'draft'}, context=context) return True - def do_delegate(self, cr, uid, task_id, delegate_data={}, context=None): + def do_delegate(self, cr, uid, ids, delegate_data={}, context=None): """ Delegate Task to another users. """ - task = self.browse(cr, uid, task_id, context=context) - self.copy(cr, uid, task.id, { - 'name': delegate_data['name'], - 'user_id': delegate_data['user_id'], - 'planned_hours': delegate_data['planned_hours'], - 'remaining_hours': delegate_data['planned_hours'], - 'parent_ids': [(6, 0, [task.id])], - 'state': 'draft', - 'description': delegate_data['new_task_description'] or '', - 'child_ids': [], - 'work_ids': [] - }, context=context) - newname = delegate_data['prefix'] or '' - self.write(cr, uid, [task.id], { - 'remaining_hours': delegate_data['planned_hours_me'], - 'planned_hours': delegate_data['planned_hours_me'] + (task.effective_hours or 0.0), - 'name': newname, - }, context=context) - if delegate_data['state'] == 'pending': - self.do_pending(cr, uid, [task.id], context) - else: - self.do_close(cr, uid, [task.id], context=context) - user_pool = self.pool.get('res.users') - delegate_user = user_pool.browse(cr, uid, delegate_data['user_id'], context=context) - message = _("The task '%s' has been delegated to %s.") % (delegate_data['name'], delegate_user.name) - self.log(cr, uid, task.id, message) - return True + assert delegate_data['user_id'], _("Delegated User should be specified") + delegrated_tasks = {} + for task in self.browse(cr, uid, ids, context=context): + delegrated_task_id = self.copy(cr, uid, task.id, { + 'name': delegate_data['name'], + 'project_id': delegate_data['project_id'] and delegate_data['project_id'][0] or False, + 'user_id': delegate_data['user_id'] and delegate_data['user_id'][0] or False, + 'planned_hours': delegate_data['planned_hours'] or 0.0, + 'parent_ids': [(6, 0, [task.id])], + 'state': 'draft', + 'description': delegate_data['new_task_description'] or '', + 'child_ids': [], + 'work_ids': [] + }, context=context) + newname = delegate_data['prefix'] or '' + task.write({ + 'remaining_hours': delegate_data['planned_hours_me'], + 'planned_hours': delegate_data['planned_hours_me'] + (task.effective_hours or 0.0), + 'name': newname, + }, context=context) + if delegate_data['state'] == 'pending': + self.do_pending(cr, uid, task.id, context=context) + elif delegate_data['state'] == 'done': + self.do_close(cr, uid, task.id, context=context) + + message = _("The task '%s' has been delegated to %s.") % (delegate_data['name'], delegate_data['user_id'][1]) + self.log(cr, uid, task.id, message) + delegrated_tasks[task.id] = delegrated_task_id + return delegrated_tasks def do_pending(self, cr, uid, ids, context={}): self.write(cr, uid, ids, {'state': 'pending'}, context=context) @@ -933,6 +974,20 @@ class task(osv.osv): def prev_type(self, cr, uid, ids, *args): return self._change_type(cr, uid, ids, False, *args) + # Overridden to reset the kanban_state to normal whenever + # the stage (type_id) of the task changes. + def write(self, cr, uid, ids, vals, context=None): + if isinstance(ids, (int, long)): + ids = [ids] + if vals and not 'kanban_state' in vals and 'type_id' in vals: + new_stage = vals.get('type_id') + vals_reset_kstate = dict(vals, kanban_state='normal') + for t in self.browse(cr, uid, ids, context=context): + write_vals = vals_reset_kstate if t.type_id != new_stage else vals + super(task,self).write(cr, uid, [t.id], write_vals, context=context) + return True + return super(task,self).write(cr, uid, ids, vals, context=context) + def unlink(self, cr, uid, ids, context=None): if context == None: context = {} diff --git a/addons/project/project_data.xml b/addons/project/project_data.xml index d78f208526a..a3bfe9be673 100644 --- a/addons/project/project_data.xml +++ b/addons/project/project_data.xml @@ -1,30 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> - <data> - - <!-- - Requests Links - --> - <record id="req_link_project" model="res.request.link"> - <field name="name">Project</field> - <field name="object">project.project</field> - </record> - - <record id="req_link_task" model="res.request.link"> - <field name="name">Project task</field> - <field name="object">project.task</field> - </record> - - <!-- - Resource: project.project - --> - + <data noupdate="1"> + <!-- Resource: project.project --> <record id="all_projects_account" model="account.analytic.account"> <field name="name">Projects</field> <field name="code">3</field> </record> - <function eval="('default',False,'parent_id', [('project.project', False)], all_projects_account, True, False, False, False, True)" id="parent_project_default_set" model="ir.values" name="set"/> - + <function id="parent_project_default_set" model="ir.values" name="set" eval="('default',False,'parent_id', [('project.project', False)], all_projects_account, True, False, False, False, True)"/> <!-- Task Stages --> <record id="project_tt_specification" model="project.task.type"> @@ -47,7 +29,5 @@ <field name="name">Deployment</field> <field name="project_default" eval="1"/> </record> - - </data> </openerp> diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index d85481a6e5e..50ab84c27f4 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -45,7 +45,7 @@ <newline/> <separator colspan="4"/> <group col="9" colspan="8"> - <field name="state" widget="statusbar" statusbar_visible="open,close" statusbar_colors='{"pending":"blue"}' select="1" readonly="1"/> + <field name="state" widget="statusbar" statusbar_visible="open,close" statusbar_colors='{"pending":"blue"}' select="1" readonly="1"/> <button name="set_cancel" string="Cancel" type="object" states="open,pending" icon="gtk-cancel"/> <button name="set_template" string="Set as Template" type="object" states="open" icon="gtk-convert" groups="base.group_extended"/> <button name="set_open" string="Reactivate Project" type="object" states="pending,cancelled,close" icon="gtk-ok"/> @@ -330,40 +330,48 @@ <field name="state"/> <field name="kanban_state"/> <field name="project_id"/> + <field name="remaining_hours" sum="Remaining Time"/> <templates> <t t-name="kanban-box"> - <t t-set="pad_url">http://pad.openerp.com/<t t-raw="_.underscored(_.trim(record.name.raw_value))"/></t> + <t t-set="pad_url">http://pad.openerp.com/<t t-raw="_.str.underscored(_.str.trim(record.name.raw_value))"/></t> <t t-if="record.kanban_state.raw_value === 'blocked'" t-set="border">oe_kanban_color_red</t> <t t-if="record.kanban_state.raw_value === 'done'" t-set="border">oe_kanban_color_green</t> <div t-attf-class="#{kanban_color(record.color.raw_value)} #{border || ''}"> <div class="oe_kanban_box oe_kanban_color_border"> <table class="oe_kanban_table oe_kanban_box_header oe_kanban_color_bgdark oe_kanban_color_border oe_kanban_draghandle"> - <tr> - <td class="oe_kanban_title1" align="left" valign="middle"> - <a t-if="record.priority.raw_value == 1" icon="star-on" type="object" name="set_normal_priority"/> - <a t-if="record.priority.raw_value != 1" icon="star-off" type="object" name="set_high_priority" style="opacity:0.6; filter:alpha(opacity=60);"/> - <span t-att-title="record.project_id.value"><field name="name"/></span> - </td> - <td valign="top" width="22"> - <img t-att-src="kanban_gravatar(record.user_email.value, 22)" class="oe_kanban_gravatar" t-att-title="record.user_id.value"/> - </td> - </tr> + <tr> + <td align="left" valign="middle" width="16"> + <a t-if="record.priority.raw_value == 1" icon="star-on" type="object" name="set_normal_priority"/> + <a t-if="record.priority.raw_value != 1" icon="star-off" type="object" name="set_high_priority" style="opacity:0.6; filter:alpha(opacity=60);"/> + </td> + <td align="left" valign="middle"> + <b t-att-title="record.project_id.value"><field name="name"/></b> + </td> + <td valign="top" width="22"> + <img t-att-src="kanban_gravatar(record.user_email.value, 22)" class="oe_kanban_gravatar" t-att-title="record.user_id.value"/> + </td> + </tr> </table> <div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger"> - <div> + <div class="oe_kanban_description"> <t t-esc="kanban_text_ellipsis(record.description.value, 160)"/> + <span class="oe_kanban_project_times" style="white-space: nowrap"> + <i t-if="record.date_deadline.raw_value"><field name="date_deadline"/> ,</i> + <t t-set="hours" t-value="record.remaining_hours.raw_value"/> + <t t-set="times" t-value="[ + [1, (hours gte 1 and hours lt 2)] + ,[2, (hours gte 2 and hours lt 5)] + ,[5, (hours gte 5 and hours lt 10)] + ,[10, (hours gte 10)] + ]"/> + <t t-foreach="times" t-as="time" + ><a t-if="!time[1]" t-attf-data-name="set_remaining_time_#{time[0]}" + type="object" class="oe_kanban_button"><t t-esc="time[0]"/></a + ><b t-if="time[1]" class="oe_kanban_button oe_kanban_button_active"><t t-esc="Math.round(hours)"/></b + ></t> + </span> </div> - <div> - <i t-if="record.date_deadline.raw_value"><field name="date_deadline"/> ,</i> - <field name="remaining_hours" sum="Remaining Time"/> - <t t-set="style_bold">font-weight: bold</t> - <t t-set="hours" t-value="record.remaining_hours.raw_value"/> - <a name="set_remaining_time_1" type="object" t-att-style="(hours gte 1 and hours lt 2) ? style_bold : undefined"> [1]</a> - <a name="set_remaining_time_2" type="object" t-att-style="(hours gte 2 and hours lt 5) ? style_bold : undefined"> [2]</a> - <a name="set_remaining_time_5" type="object" t-att-style="(hours gte 5 and hours lt 10) ? style_bold : undefined"> [5]</a> - <a name="set_remaining_time_10" type="object" t-att-style="hours gte 10 ? style_bold : undefined"> [10]</a> - </div> - <br class="oe_kanban_clear"/> + <div class="oe_kanban_clear"/> </div> <div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick"> <div class="oe_kanban_left"> @@ -371,11 +379,11 @@ <a string="Change Color" icon="color-picker" type="color" name="color"/> </div> <div class="oe_kanban_right"> - <a name="set_kanban_state_blocked" string="Block" kanban_states="normal,done" type="object" icon="gtk-media-pause"/> + <a name="set_kanban_state_blocked" string="Block" kanban_states="normal,done" type="object" icon="kanban-stop"/> <a name="set_kanban_state_normal" string="Normal" kanban_states="blocked,done" type="object" icon="gtk-media-play"/> - <a name="set_kanban_state_done" string="Done" kanban_states="blocked,normal" type="object" icon="gtk-apply"/> + <a name="set_kanban_state_done" string="Done" kanban_states="blocked,normal" type="object" icon="kanban-apply"/> </div> - <br class="oe_kanban_clear"/> + <div class="oe_kanban_clear"/> </div> </div> </div> @@ -440,10 +448,7 @@ <field name="type">gantt</field> <field eval="2" name="priority"/> <field name="arch" type="xml"> - <gantt color="user_id" date_start="date_start" date_stop="date_end" string="Tasks"> - <level object="project.project" link="project_id" domain="[]"> - <field name="name"/> - </level> + <gantt color="user_id" date_start="date_start" date_stop="date_end" string="Tasks" default_group_by="project_id,user_id"> </gantt> </field> </record> @@ -545,7 +550,6 @@ <field eval="'project.project'" name="model"/> <field name="name">View project's tasks</field> <field eval="'ir.actions.act_window,'+str(dblc_proj)" name="value"/> - <field eval="True" name="object"/> </record> <!-- Task types --> diff --git a/addons/project/wizard/project_task_delegate.py b/addons/project/wizard/project_task_delegate.py index eaf5dea3084..efadc3f124b 100644 --- a/addons/project/wizard/project_task_delegate.py +++ b/addons/project/wizard/project_task_delegate.py @@ -31,14 +31,23 @@ class project_task_delegate(osv.osv_memory): _columns = { 'name': fields.char('Delegated Title', size=64, required=True, help="New title of the task delegated to the user"), - 'prefix': fields.char('Your Task Title', size=64, required=True, help="Title for your validation task"), + 'prefix': fields.char('Your Task Title', size=64, help="Title for your validation task"), + 'project_id': fields.many2one('project.project', 'Project', help="User you want to delegate this task to"), 'user_id': fields.many2one('res.users', 'Assign To', required=True, help="User you want to delegate this task to"), 'new_task_description': fields.text('New Task Description', help="Reinclude the description of the task in the task of the user"), 'planned_hours': fields.float('Planned Hours', help="Estimated time to close this task by the delegated user"), - 'planned_hours_me': fields.float('Hours to Validate', required=True, help="Estimated time for you to validate the work done by the user to whom you delegate this task"), - 'state': fields.selection([('pending','Pending'), ('done','Done'), ], 'Validation State', required=True, help="New state of your own task. Pending will be reopened automatically when the delegated task is closed") + 'planned_hours_me': fields.float('Hours to Validate', help="Estimated time for you to validate the work done by the user to whom you delegate this task"), + 'state': fields.selection([('pending','Pending'), ('done','Done'), ], 'Validation State', help="New state of your own task. Pending will be reopened automatically when the delegated task is closed") } + def onchange_project_id(self, cr, uid, ids, project_id=False, context=None): + project_project = self.pool.get('project.project') + if not project_id: + return {'value':{'user_id': False}} + project = project_project.browse(cr, uid, project_id, context=context) + return {'value': {'user_id': project.user_id and project.user_id.id or False}} + + def default_get(self, cr, uid, fields, context=None): """ This function gets default values @@ -47,10 +56,15 @@ class project_task_delegate(osv.osv_memory): if context is None: context = {} record_id = context and context.get('active_id', False) or False + if not record_id: + return res task_pool = self.pool.get('project.task') task = task_pool.browse(cr, uid, record_id, context=context) task_name =tools.ustr(task.name) + if 'project_id' in fields: + res.update({'project_id': task.project_id and task.project_id.id}) + if 'name' in fields: if task_name.startswith(_('CHECK: ')): newname = tools.ustr(task_name).replace(_('CHECK: '), '') @@ -105,9 +119,19 @@ class project_task_delegate(osv.osv_memory): task_id = context.get('active_id', False) task_pool = self.pool.get('project.task') delegate_data = self.read(cr, uid, ids, context=context)[0] - delegate_data['user_id'] = delegate_data['user_id'][0] - delegate_data['name'] = tools.ustr(delegate_data['name']) - task_pool.do_delegate(cr, uid, task_id, delegate_data, context=context) - return {'type': 'ir.actions.act_window_close'} + delegated_tasks = task_pool.do_delegate(cr, uid, [task_id], delegate_data, context=context) + models_data = self.pool.get('ir.model.data') + + action_model, action_id = models_data.get_object_reference(cr, uid, 'project', 'action_view_task') + view_model, task_view_form_id = models_data.get_object_reference(cr, uid, 'project', 'view_task_form2') + view_model, task_view_tree_id = models_data.get_object_reference(cr, uid, 'project', 'view_task_tree2') + action = self.pool.get(action_model).read(cr, uid, action_id, context=context) + action['res_id'] = delegated_tasks[task_id] + action['view_id'] = False + action['views'] = [(task_view_form_id, 'form'), (task_view_tree_id, 'tree')] + action['help'] = False + return action project_task_delegate() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/wizard/project_task_delegate_view.xml b/addons/project/wizard/project_task_delegate_view.xml index f9b27af05b3..072325c2b53 100644 --- a/addons/project/wizard/project_task_delegate_view.xml +++ b/addons/project/wizard/project_task_delegate_view.xml @@ -8,18 +8,19 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Project Task Delegate"> + <field name="project_id" on_change="onchange_project_id(project_id)"/> + <field name="user_id"/> <group colspan="2" col="2"> <separator string="Delegated Task" colspan="4"/> - <field name="user_id" colspan="4"/> - <field name="planned_hours" widget="float_time" colspan="4"/> - <field name="name" colspan="4"/> + <field name="name"/> + <field name="planned_hours"/> <separator string="New Task Description" colspan="4"/> - <field name="new_task_description" colspan="4" nolabel="1"/> + <field name="new_task_description" colspan="4" nolabel="1"/> </group> <group colspan="2" col="2"> <separator string="Validation Task" colspan="4"/> - <field name="planned_hours_me" widget="float_time" colspan="4"/> - <field name="prefix" string="Validation Task Title" colspan="4"/> + <field name="prefix" string="Validation Task Title"/> + <field name="planned_hours_me"/> <field name="state" colspan="4"/> </group> <separator string="" colspan="4"/> @@ -40,7 +41,6 @@ <field name="view_type">form</field> <field name="view_mode">form</field> <field name="view_id" ref="view_project_task_delegate"/> - <field name="context">{'record_id' : active_id}</field> <field name="target">new</field> </record> diff --git a/addons/project/wizard/project_task_reevaluate.py b/addons/project/wizard/project_task_reevaluate.py index ce3e728a98e..382c9d64361 100644 --- a/addons/project/wizard/project_task_reevaluate.py +++ b/addons/project/wizard/project_task_reevaluate.py @@ -81,3 +81,5 @@ class project_task_reevaluate(osv.osv_memory): task_pool.do_reopen(cr, uid, [task_id], context=context) return {'type': 'ir.actions.act_window_close'} project_task_reevaluate() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_caldav/__openerp__.py b/addons/project_caldav/__openerp__.py index 37ecbb1c910..6e716a2e9d0 100644 --- a/addons/project_caldav/__openerp__.py +++ b/addons/project_caldav/__openerp__.py @@ -41,3 +41,5 @@ on a remote server. "certificate" : "001114200456808204637", 'images': ['images/project_tasks_caldav.jpeg','images/project_tasks_caldav_attendees.jpeg','images/project_caldav_calendars.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_gtd/project_gtd_view.xml b/addons/project_gtd/project_gtd_view.xml index b89394509ac..66e7a8a69e3 100644 --- a/addons/project_gtd/project_gtd_view.xml +++ b/addons/project_gtd/project_gtd_view.xml @@ -113,13 +113,9 @@ <separator orientation="vertical"/> <filter domain="[('timebox_id','=', False)]" - help="Undefined Timebox" string="Inbox"/> - <separator name="gtdsep"/> - <filter string="Deadlines" context="{'deadline_visible': False}" - domain="[('date_deadline','<>',False)]" help="Show only tasks having a deadline" - icon="terp-gnome-cpu-frequency-applet+" - groups="base.group_extended"/> + help="Tasks having no timebox assigned yet" string="Inbox"/> <separator orientation="vertical"/> + <separator name="gtdsep"/> <field name="name"/> <field name="context_id" widget="selection" groups="base.group_extended" context="{'context_show': True}"> @@ -128,6 +124,9 @@ context="{'context_show': True}" domain="[]" icon="terp-camera_test" help="Show the context field"/> + <filter string="Show Deadlines" context="{'deadline_visible': False}" + domain="[]" help="Show only tasks having a deadline" + icon="terp-gnome-cpu-frequency-applet+"/> </field> </search> </field> diff --git a/addons/project_gtd/wizard/project_gtd_empty_view.xml b/addons/project_gtd/wizard/project_gtd_empty_view.xml index b7ebeb1bd00..e66161b798f 100644 --- a/addons/project_gtd/wizard/project_gtd_empty_view.xml +++ b/addons/project_gtd/wizard/project_gtd_empty_view.xml @@ -31,7 +31,6 @@ <record model="ir.values" id="project_gtd_empty_values"> <field name="model_id" ref="model_project_gtd_timebox" /> - <field name="object" eval="1" /> <field name="name">Empty Timebox</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_project_gtd_empty'))" /> @@ -41,4 +40,4 @@ </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/project_gtd/wizard/project_gtd_fill_view.xml b/addons/project_gtd/wizard/project_gtd_fill_view.xml index 41b99eb1b1e..9f9e080fc4e 100644 --- a/addons/project_gtd/wizard/project_gtd_fill_view.xml +++ b/addons/project_gtd/wizard/project_gtd_fill_view.xml @@ -33,7 +33,6 @@ <record model="ir.values" id="project_gtd_fill_values"> <field name="model_id" ref="model_project_gtd_timebox" /> - <field name="object" eval="1" /> <field name="name">Plannify Timebox</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_project_gtd_fill'))" /> @@ -43,4 +42,4 @@ </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml index cfe285134a7..216f01eba9f 100644 --- a/addons/project_issue/board_project_issue_view.xml +++ b/addons/project_issue/board_project_issue_view.xml @@ -57,22 +57,16 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="My Board"> - <hpaned> - <child1> - <action colspan="4" name="%(action_view_current_project_issue_tree)d" string="Current Issues" width="510"/> - <action colspan="4" name="%(action_view_pending_project_issue_tree)d" string="Pending Issues" width="510"/> - </child1> - <child2> - <vpaned> - <child1> - <action colspan="4" name="%(action_project_issue_graph_state)d" string="Issues By State" /> - </child1> - <child2> - <action colspan="4" name="%(action_project_issue_graph_stage)d" string="Issues By Stage" /> - </child2> - </vpaned> - </child2> - </hpaned> + <board style="1-1"> + <column> + <action name="%(action_view_current_project_issue_tree)d" string="Current Issues"/> + <action name="%(action_view_pending_project_issue_tree)d" string="Pending Issues"/> + </column> + <column> + <action name="%(action_project_issue_graph_state)d" string="Issues By State" /> + <action name="%(action_project_issue_graph_stage)d" string="Issues By Stage" /> + </column> + </board> </form> </field> </record> @@ -115,6 +109,7 @@ <button name="case_escalate" string="Escalate" states="open,draft,pending" type="object" icon="gtk-go-up"/> <button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert"/> <field name="categ_id" invisible="1"/> + <field name="task_id" invisible="1"/> </tree> </field> </record> @@ -143,6 +138,7 @@ <field name="view_type">form</field> <field name="view_mode">graph,tree,form,</field> <field name="domain">[('state','=','open'),('user_id','=',uid)]</field> + <field name="context">{'default_user_id': uid}</field> <field name="view_id" ref="view_my_open_project_issue_graph"/> </record> <record id="board_my_project_issue_form" model="ir.ui.view"> @@ -151,11 +147,11 @@ <field name="type">form</field> <field name="inherit_id" ref="project.board_project_form"/> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1/action[@string='My Delegated Tasks']" position="after"> - <action colspan="4" height="100" name="%(action_view_my_project_issue_tree)d" string="My Issues" /> + <xpath expr="/form/board/column/action[@string='My Delegated Tasks']" position="after"> + <action name="%(action_view_my_project_issue_tree)d" string="My Issues"/> </xpath> - <xpath expr="/form/hpaned/child2/action[@string='My Remaining Hours by Project']" position="after"> - <action colspan="4" height="100" name="%(action_view_my_open_project_issue_tree)d" string="My Open Issues by Creation Date" /> + <xpath expr="/form/board/column/action[@string='My Remaining Hours by Project']" position="after"> + <action name="%(action_view_my_open_project_issue_tree)d" string="My Open Issues by Creation Date"/> </xpath> </field> </record> diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 0833cab7441..6973002be23 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -48,6 +48,13 @@ class project_issue(crm.crm_case, osv.osv): _order = "priority, create_date desc" _inherit = ['mail.thread'] + def write(self, cr, uid, ids, vals, context=None): + #Update last action date everytime the user change the stage, the state or send a new email + logged_fields = ['type_id', 'state', 'message_ids'] + if any([field in vals for field in logged_fields]): + vals['date_action_last'] = time.strftime('%Y-%m-%d %H:%M:%S') + return super(project_issue, self).write(cr, uid, ids, vals, context) + def case_open(self, cr, uid, ids, *args): """ @param self: The object pointer diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index a54ae14737d..6fc872580a2 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -40,7 +40,7 @@ <field name="view_type">form</field> <field name="view_id" ref="crm.crm_case_categ_tree-view"/> <field name="domain">[('object_id.model', '=', 'project.issue')]</field> - <field name="context">{'object_id':'project.issue'}</field> + <field name="context" eval="{'object_id': ref('model_project_issue')}"/> </record> <menuitem action="project_issue_categ_action" name="Categories" id="menu_project_issue_category_act" parent="menu_project_confi" /> @@ -197,6 +197,7 @@ <button name="case_escalate" string="Escalate" states="open,draft,pending" type="object" icon="gtk-go-up"/> <button name="case_reset" string="Reset to New" states="done,cancel" type="object" icon="gtk-convert"/> <field name="categ_id" invisible="1"/> + <field name="task_id" invisible="1"/> </tree> </field> </record> @@ -322,9 +323,9 @@ <a string="Convert To Task" name="convert_issue_task" icon="gtk-index" type="object"/> </div> <div class="oe_kanban_right"> - <a name="case_open" string="Open" states="draft,pending" type="object" icon="lead-stage-won" /> - <a name="case_pending" string="Pending" states="draft,open" type="object" icon="lead-stage-pending"/> - <a name="case_close" string="Close" states="open,draft,pending" type="object" icon="lead-stage-lost"/> + <a name="case_open" string="Open" states="draft,pending" type="object" icon="kanban-apply" /> + <a name="case_pending" string="Pending" states="draft,open" type="object" icon="kanban-pause"/> + <a name="case_close" string="Close" states="open,draft,pending" type="object" icon="kanban-stop"/> </div> <br class="oe_kanban_clear"/> </div> diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index f7e23c29a58..4ab1722336e 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -270,3 +270,5 @@ class project_task(osv.osv): 'phase_id': fields.many2one('project.phase', 'Project Phase'), } project_task() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_long_term/project_long_term_data.xml b/addons/project_long_term/project_long_term_data.xml index 8da591f1337..ebc084668b7 100644 --- a/addons/project_long_term/project_long_term_data.xml +++ b/addons/project_long_term/project_long_term_data.xml @@ -1,16 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> - - <!-- Requests Links --> - <record id="req_link_project" model="res.request.link"> - <field name="name">Project</field> - <field name="object">project.project</field> - </record> - <record id="req_link_task" model="res.request.link"> - <field name="name">Project task</field> - <field name="object">project.task</field> - </record> - </data> </openerp> diff --git a/addons/project_long_term/wizard/project_compute_phases.py b/addons/project_long_term/wizard/project_compute_phases.py index 57a1b3b6ed3..4a66cecf9cd 100644 --- a/addons/project_long_term/wizard/project_compute_phases.py +++ b/addons/project_long_term/wizard/project_compute_phases.py @@ -72,3 +72,5 @@ class project_compute_phases(osv.osv_memory): return result project_compute_phases() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_mrp/__init__.py b/addons/project_mrp/__init__.py index 364dec5a437..df4f0fa8a52 100644 --- a/addons/project_mrp/__init__.py +++ b/addons/project_mrp/__init__.py @@ -21,3 +21,5 @@ import project_procurement import project_mrp + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_mrp/project_mrp.py b/addons/project_mrp/project_mrp.py index ea121033b5b..3bbb0658b11 100644 --- a/addons/project_mrp/project_mrp.py +++ b/addons/project_mrp/project_mrp.py @@ -57,6 +57,12 @@ product_product() class sale_order(osv.osv): _inherit ='sale.order' + def _prepare_order_line_procurement(self, cr, uid, order, line, move_id, date_planned, *args): + proc_data = super(sale_order, self)._prepare_order_line_procurement(cr, + uid, order, line, move_id, date_planned, *args) + proc_data['sale_line_id'] = line.id + return proc_data + def _picked_rate(self, cr, uid, ids, name, arg, context=None): if not ids: return {} diff --git a/addons/project_mrp/test/project_task_procurement.yml b/addons/project_mrp/test/project_task_procurement.yml index faf99dc5419..b2cc6a68363 100644 --- a/addons/project_mrp/test/project_task_procurement.yml +++ b/addons/project_mrp/test/project_task_procurement.yml @@ -1,10 +1,11 @@ -- - In order to test project_mrp module with OpenERP I want to create sale orders - with product type 'service' so when procurement runs one task is created. +- | + In order to test project_mrp module with OpenERP I create a sale order + with product type 'service' so when procurement runs one task is created for + the project associated with my sale order. - I create record for a service type product. - - !record {model: product.product, id: product_product_partnerstraining0}: + !record {model: product.product, id: product_product_partnerstraining0, view: False}: categ_id: product.product_category_7 cost_method: standard mes_type: fixed @@ -15,8 +16,9 @@ uom_id: product.uom_day uom_po_id: product.uom_day warranty: 0.0 -- - I create a sale order for product Partners Training which has type 'Service'. +- | + I create a sale order for product Partners Training which has type 'Service', + and select the appropriate Analytic Account matching my project. - !record {model: sale.order, id: sale_order_so0}: date_order: !eval time.strftime('%Y-%m-%d') @@ -40,6 +42,13 @@ pricelist_id: product.list0 shop_id: sale.shop user_id: base.user_demo + +- I select the Analytic Account for my project on the sale order +- + !python {model: sale.order}: | + acc_id = self.pool.get('project.project').browse(cr, uid, + ref('project.project_integrate_openerp')).analytic_account_id.id + self.write(cr, uid, ref('sale_order_so0'), {'project_id': acc_id}) - I confirm this sale order. - @@ -60,11 +69,15 @@ - model: procurement.order search: "[]" - - Now I check that one task is created for my sale order. + Now I check that one task is created for my sale order, in the desired project - !python {model: project.task}: | order_obj = self.pool.get('sale.order') - order = order_obj.browse(cr, uid, ref('sale_order_so0')) - task_id = self.search(cr, uid, [('name','like', order.name)]) - assert task_id, 'No Task is created!' - + order = order_obj.browse(cr, uid, ref('sale_order_so0')) + # planned_hours == 40 because default company project UOM is hours, and + # product was sold as 5.0 days. + task_id = self.search(cr, uid, [('name', '=', order.name+":Partners Training"), + ('project_id','=', ref('project.project_integrate_openerp')), + ('planned_hours','=', 40.0), + ('state','=','draft')]) + assert task_id, 'Expected Task not found!'
\ No newline at end of file diff --git a/addons/project_planning/board_project_planning_view.xml b/addons/project_planning/board_project_planning_view.xml index 867dba5767f..db29a7f067a 100644 --- a/addons/project_planning/board_project_planning_view.xml +++ b/addons/project_planning/board_project_planning_view.xml @@ -5,11 +5,11 @@ <record id="board_project_planning_form" model="ir.ui.view"> <field name="name">board.project.planning.form</field> <field name="model">board.board</field> - <field name="inherit_id" ref="project.board_project_form"/> + <field name="inherit_id" ref="project.board_project_form"/> <field name="type">form</field> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1/action[@string='My Open Tasks']" position="after"> - <action colspan="4" name="%(project_planning.action_account_analytic_planning_stat_form)d" string="My Project's planning" domain="[('manager_id','=',uid),('planning_id.state','<>','cancel')]"/> + <xpath expr="/form/board/column/action[@string='My Open Tasks']" position="after"> + <action name="%(project_planning.action_account_analytic_planning_stat_form)d" string="My Project's planning" domain="[('manager_id','=',uid),('planning_id.state','<>','cancel')]"/> </xpath> </field> </record> diff --git a/addons/project_retro_planning/i18n/oc.po b/addons/project_retro_planning/i18n/oc.po new file mode 100644 index 00000000000..7451fd7b147 --- /dev/null +++ b/addons/project_retro_planning/i18n/oc.po @@ -0,0 +1,47 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:25+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: project_retro_planning +#: model:ir.model,name:project_retro_planning.model_project_project +msgid "Project" +msgstr "Projècte" + +#. module: project_retro_planning +#: model:ir.module.module,shortdesc:project_retro_planning.module_meta_information +msgid "Project Retro planning" +msgstr "Retroplanificacion de projèctes" + +#. module: project_retro_planning +#: model:ir.module.module,description:project_retro_planning.module_meta_information +msgid "" +"\n" +" - If end date of project is changed\n" +" then the deadline date and start date for all the tasks will " +"change accordingly " +msgstr "" + +#. module: project_retro_planning +#: constraint:project.project:0 +msgid "Error! project start-date must be lower then project end-date." +msgstr "" + +#. module: project_retro_planning +#: constraint:project.project:0 +msgid "Error! You cannot assign escalation to the same project!" +msgstr "" diff --git a/addons/project_scrum/board_project_scrum_view.xml b/addons/project_scrum/board_project_scrum_view.xml index 5620950fa5a..2a9d3532b2d 100644 --- a/addons/project_scrum/board_project_scrum_view.xml +++ b/addons/project_scrum/board_project_scrum_view.xml @@ -76,15 +76,15 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="My Board"> - <hpaned> - <child1> - <action colspan="4" height="220" name="%(action_sprint_all_dashboard_tree)d" string="Sprints" width="510"/> - </child1> - <child2> - <action colspan="4" height="220" name="%(action_view_task_progress_graph)d" string="Task Progress" width="510"/> - <action colspan="4" height="220" name="%(action_view_backlog_progress_graph)d" string="Backlog Progress" width="510"/> - </child2> - </hpaned> + <board style="1-2"> + <column> + <action name="%(action_sprint_all_dashboard_tree)d" string="Sprints"/> + </column> + <column> + <action name="%(action_view_task_progress_graph)d" string="Task Progress"/> + <action name="%(action_view_backlog_progress_graph)d" string="Backlog Progress"/> + </column> + </board> </form> </field> </record> @@ -133,8 +133,8 @@ <field name="type">form</field> <field name="inherit_id" ref="project.board_project_form"/> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1/action[@string='My Delegated Tasks']" position="after"> - <action colspan="4" height="100" name="%(action_view_my_scrum_sprint_tree)d" string="My Sprint" /> + <xpath expr="/form/board/column/action[@string='My Delegated Tasks']" position="after"> + <action name="%(action_view_my_scrum_sprint_tree)d" string="My Sprint"/> </xpath> </field> </record> diff --git a/addons/project_scrum/i18n/fr.po b/addons/project_scrum/i18n/fr.po index efac2950020..a4109b8e61e 100644 --- a/addons/project_scrum/i18n/fr.po +++ b/addons/project_scrum/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-09-26 12:11+0000\n" -"Last-Translator: Numérigraphe <Unknown>\n" +"PO-Revision-Date: 2011-11-25 14:47+0000\n" +"Last-Translator: lholivier <olivier.lenoir@free.fr>\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-11-05 04:57+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:49+0000\n" +"X-Generator: Launchpad (build 14381)\n" #. module: project_scrum #: help:project.scrum.email,scrum_master_email:0 @@ -976,6 +976,10 @@ msgid "" " \n" "I am sending you Daily Meeting Details of date %s for the Sprint %s\n" msgstr "" +"Bonjour %s,\n" +" \n" +"Je vous envoie les informations du rendez-vous quotidien du %s en vue du " +"\"sprint\" %s\n" #. module: project_scrum #: code:addons/project_scrum/project_scrum.py:325 diff --git a/addons/project_scrum/project_scrum.py b/addons/project_scrum/project_scrum.py index f0db98294e7..1ac0871de68 100644 --- a/addons/project_scrum/project_scrum.py +++ b/addons/project_scrum/project_scrum.py @@ -332,3 +332,5 @@ class project_scrum_meeting(osv.osv): project_scrum_meeting() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml index ddf74eb2e93..09d018aeb92 100644 --- a/addons/project_scrum/project_scrum_view.xml +++ b/addons/project_scrum/project_scrum_view.xml @@ -467,13 +467,13 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="domain">[('product_backlog_id', '=', active_id)]</field> + <field name="context">{'default_product_backlog_id': active_id}</field> </record> <record id="ir_scrum_sprint_open_task" model="ir.values"> <field eval=" 'tree_but_open'" name="key2"/> <field eval="'project.scrum.sprint'" name="model"/> <field name="name">View sprint tasks</field> <field eval="'ir.actions.act_window,'+str(action_sprint_task_open)" name="value"/> - <field eval="True" name="object"/> </record> <record id="action_sprint_backlog_open" model="ir.actions.act_window"> @@ -482,13 +482,13 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="domain">[('sprint_id', '=', active_id)]</field> + <field name="context">{'default_sprint_id': active_id}</field> </record> <record id="ir_scrum_sprint_open_sprint" model="ir.values"> <field eval=" 'tree_but_open'" name="key2"/> <field eval="'project.scrum.sprint'" name="model"/> <field name="name">View sprint backlog</field> <field eval="'ir.actions.act_window,'+str(action_sprint_backlog_open)" name="value"/> - <field eval="True" name="object"/> </record> <!-- @@ -507,7 +507,6 @@ <field eval="'project.scrum.project'" name="model"/> <field name="name">View project's backlog</field> <field eval="'ir.actions.act_window,'+str(dblc_proj)" name="value"/> - <field eval="True" name="object"/> </record> <record id="dblc_proj2" model="ir.actions.act_window"> <field name="res_model">project.task</field> @@ -521,7 +520,6 @@ <field eval="'project.scrum.project'" name="model"/> <field name="name">View project's tasks</field> <field eval="'ir.actions.act_window,'+str(dblc_proj2)" name="value"/> - <field eval="True" name="object"/> </record> <!-- diff --git a/addons/project_scrum/wizard/mail_compose_message.py b/addons/project_scrum/wizard/mail_compose_message.py index 777ca03fa37..7e6a326964b 100644 --- a/addons/project_scrum/wizard/mail_compose_message.py +++ b/addons/project_scrum/wizard/mail_compose_message.py @@ -44,7 +44,7 @@ class mail_compose_message(osv.osv_memory): sprint = meeting.sprint_id user_data = user_pool.browse(cr, uid, uid, context=context) - result.update({'email_from': user_data.address_id and user_data.address_id.email or False}) + result.update({'email_from': user_data.user_email or False}) if sprint.scrum_master_id and sprint.scrum_master_id.user_email: result.update({'email_to': sprint.scrum_master_id.user_email}) diff --git a/addons/project_scrum/wizard/project_scrum_backlog_create_task_view.xml b/addons/project_scrum/wizard/project_scrum_backlog_create_task_view.xml index 9ffbd3222ee..53356e7def5 100644 --- a/addons/project_scrum/wizard/project_scrum_backlog_create_task_view.xml +++ b/addons/project_scrum/wizard/project_scrum_backlog_create_task_view.xml @@ -32,7 +32,6 @@ <record model="ir.values" id="scrum_backlog_to_task_values"> <field name="model_id" ref="model_project_scrum_product_backlog" /> - <field name="object" eval="1" /> <field name="name">Convert into Tasks</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_scrum_backlog_to_task'))" /> diff --git a/addons/project_scrum/wizard/project_scrum_backlog_merger_view.xml b/addons/project_scrum/wizard/project_scrum_backlog_merger_view.xml index 9e374d9437b..dd773bf2c19 100644 --- a/addons/project_scrum/wizard/project_scrum_backlog_merger_view.xml +++ b/addons/project_scrum/wizard/project_scrum_backlog_merger_view.xml @@ -28,7 +28,6 @@ <record model="ir.values" id="scrum_backlog_merge_values"> <field name="model_id" ref="model_project_scrum_product_backlog" /> - <field name="object" eval="1" /> <field name="name">Merge Backlogs</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_scrum_backlog_merge'))" /> diff --git a/addons/project_scrum/wizard/project_scrum_backlog_sprint_view.xml b/addons/project_scrum/wizard/project_scrum_backlog_sprint_view.xml index f870ca27262..7cab0b5bf6d 100644 --- a/addons/project_scrum/wizard/project_scrum_backlog_sprint_view.xml +++ b/addons/project_scrum/wizard/project_scrum_backlog_sprint_view.xml @@ -34,7 +34,6 @@ <record model="ir.values" id="scrum_backlog_to_sprint_values"> <field name="model_id" ref="model_project_scrum_product_backlog" /> - <field name="object" eval="1" /> <field name="name">Assign Sprint</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_scrum_backlog_to_sprint'))" /> diff --git a/addons/project_scrum/wizard/project_scrum_email.py b/addons/project_scrum/wizard/project_scrum_email.py index f1d5b6665f7..c61f43e6779 100644 --- a/addons/project_scrum/wizard/project_scrum_email.py +++ b/addons/project_scrum/wizard/project_scrum_email.py @@ -105,3 +105,5 @@ class project_scrum_email(osv.osv_memory): if data.product_owner_email: mail_message.schedule_with_attach(cr, uid, user_email, [data.product_owner_email], data.subject, body, reply_to=user_email, context=context) return {'type': 'ir.actions.act_window_close'} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_timesheet/__openerp__.py b/addons/project_timesheet/__openerp__.py index 1076eb7065e..b90d3d745a1 100644 --- a/addons/project_timesheet/__openerp__.py +++ b/addons/project_timesheet/__openerp__.py @@ -34,7 +34,7 @@ the Timesheet line entries for particular date and particular user with the eff 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images': ['images/invoice_task_work.jpeg', 'images/my_timesheet.jpeg', 'images/working_hour.jpeg'], - 'depends': ['project', 'hr_timesheet_sheet', 'hr_timesheet_invoice'], + 'depends': ['project', 'hr_timesheet_sheet', 'hr_timesheet_invoice', 'account_analytic_analysis'], 'init_xml': ['project_timesheet_data.xml'], 'update_xml': ["security/ir.model.access.csv","process/project_timesheet_process.xml", "report/task_report_view.xml", "project_timesheet_view.xml"], 'demo_xml': ["project_timesheet_demo.xml"], diff --git a/addons/project_timesheet/project_timesheet_view.xml b/addons/project_timesheet/project_timesheet_view.xml index 39965618ac8..de6d77a2fd9 100644 --- a/addons/project_timesheet/project_timesheet_view.xml +++ b/addons/project_timesheet/project_timesheet_view.xml @@ -105,8 +105,9 @@ the project form.</field> <!-- Time Tracking menu in project Management --> - <menuitem icon="terp-project" id="base.menu_main_pm" name="Project" sequence="10"/> <menuitem id="menu_project_working_hours" parent="base.menu_project_management_time_tracking" action="hr_timesheet.act_hr_timesheet_line_evry1_all_form"/> + + <menuitem id="menu_invoicing" name="Billing" parent="base.menu_main_pm" sequence="4"/> </data> </openerp> diff --git a/addons/purchase/__init__.py b/addons/purchase/__init__.py index 301e32ebca9..66f92a60831 100644 --- a/addons/purchase/__init__.py +++ b/addons/purchase/__init__.py @@ -26,6 +26,7 @@ import wizard import report import stock import company +import edi # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py index 901fb6d3e98..b4f3a9adf30 100644 --- a/addons/purchase/__openerp__.py +++ b/addons/purchase/__openerp__.py @@ -40,7 +40,7 @@ Dashboard for purchase management that includes: 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images' : ['images/purchase_order.jpeg', 'images/purchase_analysis.jpeg', 'images/request_for_quotation.jpeg'], - 'depends': ['base', 'account', 'stock', 'process', 'procurement'], + 'depends': ['stock', 'process', 'procurement'], 'data': [ 'security/purchase_security.xml', 'security/ir.model.access.csv', @@ -58,15 +58,17 @@ Dashboard for purchase management that includes: 'process/purchase_process.xml', 'report/purchase_report_view.xml', 'board_purchase_view.xml', + 'edi/purchase_order_action_data.xml', ], 'test': [ - 'test/process/cancel_order.yml', + 'test/process/cancel_order.yml', 'test/process/rfq2order2done.yml', 'test/process/generate_invoice_from_reception.yml', - 'test/process/run_scheduler.yml', - 'test/process/merge_order.yml', + 'test/process/run_scheduler.yml', + 'test/process/merge_order.yml', + 'test/process/edi_purchase_order.yml', 'test/ui/print_report.yml', - 'test/ui/duplicate_order.yml', + 'test/ui/duplicate_order.yml', 'test/ui/delete_order.yml', ], 'demo': [ diff --git a/addons/purchase/board_purchase_view.xml b/addons/purchase/board_purchase_view.xml index cc972223bed..453f029aa0d 100644 --- a/addons/purchase/board_purchase_view.xml +++ b/addons/purchase/board_purchase_view.xml @@ -129,25 +129,25 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="My Board"> - <hpaned> - <child1> + <board style="1-1"> + <column> <!-- - <action colspan="4" height="220" name="%(purchase.action_current_purchases)d" string="Current purchases" width="510"/> - <action colspan="4" height="220" name="%(purchase.action_po_per_month_tree)d" string="Purchase order per month" width="510"/> + <action name="%(purchase.action_current_purchases)d" string="Current purchases"/> + <action name="%(purchase.action_po_per_month_tree)d" string="Purchase order per month"/> --> - <action colspan="4" height="220" name="%(purchase_draft)d" string="Request for Quotations" width="510"/> - <action colspan="4" height="220" name="%(purchase_waiting)d" string="Purchase Order Waiting Approval" width="510"/> - </child1> - <child2> - <action colspan="4" height="220" name="%(action_purchase_order_monthly_categ_graph)d" string="Monthly Purchase by Category" /> + <action name="%(purchase_draft)d" string="Request for Quotations"/> + <action name="%(purchase_waiting)d" string="Purchase Order Waiting Approval"/> + </column> + <column> + <action name="%(action_purchase_order_monthly_categ_graph)d" string="Monthly Purchase by Category"/> <!-- - <action colspan="4" height="220" name="%(purchase.action_purchase_by_supplier)d" string="Purchase by supplier" /> - <action colspan="4" height="220" name="%(purchase.action_total_price_by_product_by_state)d" string="Total price by product by state" /> - <action colspan="4" height="220" name="%(purchase.action_qty_per_product)d" string="Total Quantity per product" /> + <action name="%(purchase.action_purchase_by_supplier)d" string="Purchase by supplier"/> + <action name="%(purchase.action_total_price_by_product_by_state)d" string="Total price by product by state"/> + <action name="%(purchase.action_qty_per_product)d" string="Total Quantity per product"/> --> - </child2> - </hpaned> + </column> + </board> </form> </field> </record> diff --git a/addons/purchase/edi/__init__.py b/addons/purchase/edi/__init__.py new file mode 100644 index 00000000000..be599e9736c --- /dev/null +++ b/addons/purchase/edi/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +import purchase_order + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase/edi/purchase_order.py b/addons/purchase/edi/purchase_order.py new file mode 100644 index 00000000000..235b02645ed --- /dev/null +++ b/addons/purchase/edi/purchase_order.py @@ -0,0 +1,202 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +from datetime import datetime, timedelta +from dateutil.relativedelta import relativedelta + +from osv import fields, osv, orm +from edi import EDIMixin +from tools import DEFAULT_SERVER_DATE_FORMAT +from tools.translate import _ + +PURCHASE_ORDER_LINE_EDI_STRUCT = { + 'name': True, + 'date_planned': True, + 'product_id': True, + 'product_uom': True, + 'price_unit': True, + 'product_qty': True, + 'notes': True, + + # fields used for web preview only - discarded on import + 'price_subtotal': True, +} + +PURCHASE_ORDER_EDI_STRUCT = { + 'company_id': True, # -> to be changed into partner + 'name': True, + 'partner_ref': True, + 'origin': True, + 'date_order': True, + 'partner_id': True, + #custom: 'partner_address', + 'notes': True, + 'order_line': PURCHASE_ORDER_LINE_EDI_STRUCT, + #custom: currency_id + + # fields used for web preview only - discarded on import + 'amount_total': True, + 'amount_untaxed': True, + 'amount_tax': True, +} + +class purchase_order(osv.osv, EDIMixin): + _inherit = 'purchase.order' + + def edi_export(self, cr, uid, records, edi_struct=None, context=None): + """Exports a purchase order""" + edi_struct = dict(edi_struct or PURCHASE_ORDER_EDI_STRUCT) + res_company = self.pool.get('res.company') + res_partner_address = self.pool.get('res.partner.address') + edi_doc_list = [] + for order in records: + # generate the main report + self._edi_generate_report_attachment(cr, uid, order, context=context) + + # Get EDI doc based on struct. The result will also contain all metadata fields and attachments. + edi_doc = super(purchase_order,self).edi_export(cr, uid, [order], edi_struct, context)[0] + edi_doc.update({ + # force trans-typing to purchase.order upon import + '__import_model': 'sale.order', + '__import_module': 'sale', + + 'company_address': res_company.edi_export_address(cr, uid, order.company_id, context=context), + 'partner_address': res_partner_address.edi_export(cr, uid, [order.partner_address_id], context=context)[0], + 'currency': self.pool.get('res.currency').edi_export(cr, uid, [order.pricelist_id.currency_id], + context=context)[0], + }) + if edi_doc.get('order_line'): + for line in edi_doc['order_line']: + line['__import_model'] = 'sale.order.line' + edi_doc_list.append(edi_doc) + return edi_doc_list + + def edi_import_company(self, cr, uid, edi_document, context=None): + # TODO: for multi-company setups, we currently import the document in the + # user's current company, but we should perhaps foresee a way to select + # the desired company among the user's allowed companies + + self._edi_requires_attributes(('company_id','company_address'), edi_document) + res_partner_address = self.pool.get('res.partner.address') + res_partner = self.pool.get('res.partner') + + # imported company = as a new partner + src_company_id, src_company_name = edi_document.pop('company_id') + partner_id = self.edi_import_relation(cr, uid, 'res.partner', src_company_name, + src_company_id, context=context) + partner_value = {'customer': True} + res_partner.write(cr, uid, [partner_id], partner_value, context=context) + + # imported company_address = new partner address + address_info = edi_document.pop('company_address') + address_info['partner_id'] = (src_company_id, src_company_name) + address_info['type'] = 'default' + address_id = res_partner_address.edi_import(cr, uid, address_info, context=context) + + # modify edi_document to refer to new partner/address + partner_address = res_partner_address.browse(cr, uid, address_id, context=context) + edi_document['partner_id'] = (src_company_id, src_company_name) + edi_document.pop('partner_address', False) # ignored + edi_document['partner_address_id'] = self.edi_m2o(cr, uid, partner_address, context=context) + + return partner_id + + def _edi_get_pricelist(self, cr, uid, partner_id, currency, context=None): + # TODO: refactor into common place for purchase/sale, e.g. into product module + partner_model = self.pool.get('res.partner') + partner = partner_model.browse(cr, uid, partner_id, context=context) + pricelist = partner.property_product_pricelist_purchase + if not pricelist: + pricelist = self.pool.get('ir.model.data').get_object(cr, uid, 'purchase', 'list0', context=context) + + if not pricelist.currency_id == currency: + # look for a pricelist with the right type and currency, or make a new one + pricelist_type = 'purchase' + product_pricelist = self.pool.get('product.pricelist') + match_pricelist_ids = product_pricelist.search(cr, uid,[('type','=',pricelist_type), + ('currency_id','=',currency.id)]) + if match_pricelist_ids: + pricelist_id = match_pricelist_ids[0] + else: + pricelist_name = _('EDI Pricelist (%s)') % (currency.name,) + pricelist_id = product_pricelist.create(cr, uid, {'name': pricelist_name, + 'type': pricelist_type, + 'currency_id': currency.id, + }) + self.pool.get('product.pricelist.version').create(cr, uid, {'name': pricelist_name, + 'pricelist_id': pricelist_id}) + pricelist = product_pricelist.browse(cr, uid, pricelist_id) + + return self.edi_m2o(cr, uid, pricelist, context=context) + + def _edi_get_location(self, cr, uid, partner_id, context=None): + partner_model = self.pool.get('res.partner') + partner = partner_model.browse(cr, uid, partner_id, context=context) + location = partner.property_stock_customer + if not location: + location = self.pool.get('ir.model.data').get_object(cr, uid, 'stock', 'stock_location_stock', context=context) + return self.edi_m2o(cr, uid, location, context=context) + + def edi_import(self, cr, uid, edi_document, context=None): + self._edi_requires_attributes(('company_id','company_address','order_line','date_order','currency'), edi_document) + + #import company as a new partner + partner_id = self.edi_import_company(cr, uid, edi_document, context=context) + + # currency for rounding the discount calculations and for the pricelist + res_currency = self.pool.get('res.currency') + currency_info = edi_document.pop('currency') + currency_id = res_currency.edi_import(cr, uid, currency_info, context=context) + order_currency = res_currency.browse(cr, uid, currency_id) + + partner_ref = edi_document.pop('partner_ref', False) + edi_document['partner_ref'] = edi_document['name'] + edi_document['name'] = partner_ref or edi_document['name'] + edi_document['pricelist_id'] = self._edi_get_pricelist(cr, uid, partner_id, order_currency, context=context) + edi_document['location_id'] = self._edi_get_location(cr, uid, partner_id, context=context) + + # discard web preview fields, if present + edi_document.pop('amount_total', None) + edi_document.pop('amount_tax', None) + edi_document.pop('amount_untaxed', None) + edi_document.pop('payment_term', None) + edi_document.pop('order_policy', None) + edi_document.pop('user_id', None) + + for order_line in edi_document['order_line']: + self._edi_requires_attributes(('date_planned', 'product_id', 'product_uom', 'product_qty', 'price_unit'), order_line) + # original sale order contains unit price and discount, but not final line price + discount = order_line.pop('discount', 0.0) + if discount: + order_line['price_unit'] = res_currency.round(cr, uid, order_currency, + (order_line['price_unit'] * (1 - (discount or 0.0) / 100.0))) + # sale order lines have sequence numbers, not purchase order lines + order_line.pop('sequence', None) + + # discard web preview fields, if present + order_line.pop('price_subtotal', None) + return super(purchase_order,self).edi_import(cr, uid, edi_document, context=context) + +class purchase_order_line(osv.osv, EDIMixin): + _inherit='purchase.order.line' + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/purchase/edi/purchase_order_action_data.xml b/addons/purchase/edi/purchase_order_action_data.xml new file mode 100644 index 00000000000..f3f610b8e75 --- /dev/null +++ b/addons/purchase/edi/purchase_order_action_data.xml @@ -0,0 +1,156 @@ +<?xml version="1.0" ?> +<openerp> + <data> + <!--Export edi document --> + <record id="ir_actions_server_edi_purchase" model="ir.actions.server"> + <field name="code">if not object.partner_id.opt_out: object.edi_export_and_email(template_ext_id='purchase.email_template_edi_purchase', context=context)</field> + <field name="state">code</field> + <field name="type">ir.actions.server</field> + <field name="model_id" ref="purchase.model_purchase_order"/> + <field name="condition">True</field> + <field name="name">Auto-email confirmed purchase orders</field> + </record> + + <!-- EDI related Email Templates menu --> + <record model="ir.actions.act_window" id="action_email_templates"> + <field name="name">Email Templates</field> + <field name="res_model">email.template</field> + <field name="view_type">form</field> + <field name="view_mode">form,tree</field> + <field name="view_id" ref="email_template.email_template_tree" /> + <field name="search_view_id" ref="email_template.view_email_template_search"/> + <field name="context" eval="{'search_default_model_id': ref('purchase.model_purchase_order')}"/> + </record> + <menuitem id="menu_configuration_misc" name="Miscellaneous" parent="menu_purchase_config_purchase" sequence="30"/> + <menuitem id="menu_email_templates" parent="menu_configuration_misc" action="action_email_templates" sequence="30"/> + </data> + + <!-- Mail template and workflow bindings are done in a NOUPDATE block + so users can freely customize/delete them --> + <data noupdate="1"> + <!-- bind the mailing server action to purchase.order confirmed activity --> + <record id="purchase.act_confirmed" model="workflow.activity"> + <field name="action_id" ref="ir_actions_server_edi_purchase"/> + </record> + + <!--Email template --> + <record id="email_template_edi_purchase" model="email.template"> + <field name="name">Automated Purchase Order Notification Mail</field> + <field name="email_from">${object.validator.user_email or ''}</field> + <field name="subject">${object.company_id.name} Order (Ref ${object.name or 'n/a' })</field> + <field name="email_to">${object.partner_address_id.email}</field> + <field name="model_id" ref="purchase.model_purchase_order"/> + <field name="auto_delete" eval="True"/> + <field name="body_html"><![CDATA[ +<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); "> + + <p>Hello${object.partner_address_id.name and ' ' or ''}${object.partner_address_id.name or ''},</p> + + <p>Here is a purchase order confirmation from ${object.company_id.name}: </p> + + <p style="border-left: 1px solid #8e0000; margin-left: 30px;"> + <strong>REFERENCES</strong><br /> + Order number: <strong>${object.name}</strong><br /> + Order total: <strong>${object.amount_total} ${object.pricelist_id.currency_id.name}</strong><br /> + Order date: ${object.date_order}<br /> + % if object.origin: + Order reference: ${object.origin}<br /> + % endif + % if object.partner_ref: + Your reference: ${object.partner_ref}<br /> + % endif + Your contact: <a href="mailto:${object.validator.user_email or ''}?subject=Order%20${object.name}">${object.validator.name}</a> + </p> + + <p> + You can view the order confirmation document and download it using the following link: + </p> + <a style="display:block; width: 150px; height:20px; margin-left: 120px; color: #FFF; font-family: 'Lucida Grande', Helvetica, Arial, sans-serif; font-size: 13px; font-weight: bold; text-align: center; text-decoration: none !important; line-height: 1; padding: 5px 0px 0px 0px; background-color: #8E0000; border-radius: 5px 5px; background-repeat: repeat no-repeat;" + href="${ctx.get('edi_web_url_view') or ''}">View Order</a> + + <br/> + <p>If you have any question, do not hesitate to contact us.</p> + <p>Thank you!</p> + <br/> + <br/> + <div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;"> + <h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #FFF;"> + <strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3> + </div> + <div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;"> + <span style="color: #222; margin-bottom: 5px; display: block; "> + % if object.company_id.street: + ${object.company_id.street}<br/> + % endif + % if object.company_id.street2: + ${object.company_id.street2}<br/> + % endif + % if object.company_id.city or object.company_id.zip: + ${object.company_id.zip} ${object.company_id.city}<br/> + % endif + % if object.company_id.country_id: + ${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}<br/> + % endif + </span> + % if object.company_id.phone: + <div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> + Phone: ${object.company_id.phone} + </div> + % endif + % if object.company_id.website: + <div> + Web : <a href="${object.company_id.website}">${object.company_id.website}</a> + </div> + %endif + <p></p> + </div> +</div> + ]]></field> + <field name="body_text"><![CDATA[ +Hello${object.partner_address_id.name and ' ' or ''}${object.partner_address_id.name or ''}, + +Here is a purchase order confirmation from ${object.company_id.name}: + | Order number: *${object.name}* + | Order total: *${object.amount_total} ${object.pricelist_id.currency_id.name}* + | Order date: ${object.date_order} + % if object.origin: + | Order reference: ${object.origin} + % endif + % if object.partner_ref: + | Your reference: ${object.partner_ref}<br /> + % endif + | Your contact: ${object.validator.name} ${object.validator.user_email and '<%s>'%(object.validator.user_email) or ''} + +You can view the order confirmation and download it using the following link: + ${ctx.get('edi_web_url_view') or 'n/a'} + +If you have any question, do not hesitate to contact us. + +Thank you! + + +-- +${object.validator.name} ${object.validator.user_email and '<%s>'%(object.validator.user_email) or ''} +${object.company_id.name} +% if object.company_id.street: +${object.company_id.street or ''} +% endif +% if object.company_id.street2: +${object.company_id.street2} +% endif +% if object.company_id.city or object.company_id.zip: +${object.company_id.zip or ''} ${object.company_id.city or ''} +% endif +% if object.company_id.country_id: +${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''} +% endif +% if object.company_id.phone: +Phone: ${object.company_id.phone} +% endif +% if object.company_id.website: +${object.company_id.website or ''} +% endif + ]]></field> + </record> + </data> +</openerp>
\ No newline at end of file diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index bdb0758525d..0dc015834a0 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -227,7 +227,7 @@ class purchase_order(osv.osv): 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'purchase.order', context=c), } _sql_constraints = [ - ('name_uniq', 'unique(name)', 'Order Reference must be unique !'), + ('name_uniq', 'unique(name, company_id)', 'Order Reference must be unique per Company!'), ] _name = "purchase.order" _description = "Purchase Order" @@ -319,17 +319,25 @@ class purchase_order(osv.osv): 'ref_partner_id': po.partner_id.id, 'ref_doc1': 'purchase.order,%d' % (po.id,), }) - def inv_line_create(self, cr, uid, a, ol): - return (0, False, { - 'name': ol.name, - 'account_id': a, - 'price_unit': ol.price_unit or 0.0, - 'quantity': ol.product_qty, - 'product_id': ol.product_id.id or False, - 'uos_id': ol.product_uom.id or False, - 'invoice_line_tax_id': [(6, 0, [x.id for x in ol.taxes_id])], - 'account_analytic_id': ol.account_analytic_id.id or False, - }) + + def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None): + """Collects require data from purchase order line that is used to create invoice line + for that purchase order line + :param account_id: Expense account of the product of PO line if any. + :param browse_record order_line: Purchase order line browse record + :return: Value for fields of invoice lines. + :rtype: dict + """ + return { + 'name': order_line.name, + 'account_id': account_id, + 'price_unit': order_line.price_unit or 0.0, + 'quantity': order_line.product_qty, + 'product_id': order_line.product_id.id or False, + 'uos_id': order_line.product_uom.id or False, + 'invoice_line_tax_id': [(6, 0, [x.id for x in order_line.taxes_id])], + 'account_analytic_id': order_line.account_analytic_id.id or False, + } def action_cancel_draft(self, cr, uid, ids, *args): if not len(ids): @@ -345,55 +353,71 @@ class purchase_order(osv.osv): self.log(cr, uid, id, message) return True - #TOFIX - # - implement hook method on create invoice and invoice line - # - doc string - def action_invoice_create(self, cr, uid, ids, *args): + def action_invoice_create(self, cr, uid, ids, context=None): + """Generates invoice for given ids of purchase orders and links that invoice ID to purchase order. + :param ids: list of ids of purchase orders. + :return: ID of created invoice. + :rtype: int + """ res = False journal_obj = self.pool.get('account.journal') - for o in self.browse(cr, uid, ids): - il = [] - todo = [] - for ol in o.order_line: - todo.append(ol.id) - if ol.product_id: - a = ol.product_id.product_tmpl_id.property_account_expense.id - if not a: - a = ol.product_id.categ_id.property_account_expense_categ.id - if not a: - raise osv.except_osv(_('Error !'), _('There is no expense account defined for this product: "%s" (id:%d)') % (ol.product_id.name, ol.product_id.id,)) - else: - a = self.pool.get('ir.property').get(cr, uid, 'property_account_expense_categ', 'product.category').id - fpos = o.fiscal_position or False - a = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, a) - il.append(self.inv_line_create(cr, uid, a, ol)) + inv_obj = self.pool.get('account.invoice') + inv_line_obj = self.pool.get('account.invoice.line') + fiscal_obj = self.pool.get('account.fiscal.position') + property_obj = self.pool.get('ir.property') - a = o.partner_id.property_account_payable.id - journal_ids = journal_obj.search(cr, uid, [('type', '=','purchase'),('company_id', '=', o.company_id.id)], limit=1) + for order in self.browse(cr, uid, ids, context=context): + pay_acc_id = order.partner_id.property_account_payable.id + journal_ids = journal_obj.search(cr, uid, [('type', '=','purchase'),('company_id', '=', order.company_id.id)], limit=1) if not journal_ids: raise osv.except_osv(_('Error !'), - _('There is no purchase journal defined for this company: "%s" (id:%d)') % (o.company_id.name, o.company_id.id)) - inv = { - 'name': o.partner_ref or o.name, - 'reference': o.partner_ref or o.name, - 'account_id': a, + _('There is no purchase journal defined for this company: "%s" (id:%d)') % (order.company_id.name, order.company_id.id)) + + # generate invoice line correspond to PO line and link that to created invoice (inv_id) and PO line + inv_lines = [] + for po_line in order.order_line: + if po_line.product_id: + acc_id = po_line.product_id.product_tmpl_id.property_account_expense.id + if not acc_id: + acc_id = po_line.product_id.categ_id.property_account_expense_categ.id + if not acc_id: + raise osv.except_osv(_('Error !'), _('There is no expense account defined for this product: "%s" (id:%d)') % (po_line.product_id.name, po_line.product_id.id,)) + else: + acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id + fpos = order.fiscal_position or False + acc_id = fiscal_obj.map_account(cr, uid, fpos, acc_id) + + inv_line_data = self._prepare_inv_line(cr, uid, acc_id, po_line, context=context) + inv_line_id = inv_line_obj.create(cr, uid, inv_line_data, context=context) + inv_lines.append(inv_line_id) + + po_line.write({'invoiced':True, 'invoice_lines': [(4, inv_line_id)]}, context=context) + + # get invoice data and create invoice + inv_data = { + 'name': order.partner_ref or order.name, + 'reference': order.partner_ref or order.name, + 'account_id': pay_acc_id, 'type': 'in_invoice', - 'partner_id': o.partner_id.id, - 'currency_id': o.pricelist_id.currency_id.id, - 'address_invoice_id': o.partner_address_id.id, - 'address_contact_id': o.partner_address_id.id, + 'partner_id': order.partner_id.id, + 'currency_id': order.pricelist_id.currency_id.id, + 'address_invoice_id': order.partner_address_id.id, + 'address_contact_id': order.partner_address_id.id, 'journal_id': len(journal_ids) and journal_ids[0] or False, - 'origin': o.name, - 'invoice_line': il, - 'fiscal_position': o.fiscal_position.id or o.partner_id.property_account_position.id, - 'payment_term': o.partner_id.property_payment_term and o.partner_id.property_payment_term.id or False, - 'company_id': o.company_id.id, + 'invoice_line': [(6, 0, inv_lines)], + 'origin': order.name, + 'fiscal_position': order.fiscal_position.id or order.partner_id.property_account_position.id, + 'payment_term': order.partner_id.property_payment_term and order.partner_id.property_payment_term.id or False, + 'company_id': order.company_id.id, } - inv_id = self.pool.get('account.invoice').create(cr, uid, inv, {'type':'in_invoice'}) - self.pool.get('account.invoice').button_compute(cr, uid, [inv_id], {'type':'in_invoice'}, set_total=True) - self.pool.get('purchase.order.line').write(cr, uid, todo, {'invoiced':True}) - self.write(cr, uid, [o.id], {'invoice_ids': [(4, inv_id)]}) + inv_id = inv_obj.create(cr, uid, inv_data, context=context) + + # compute the invoice + inv_obj.button_compute(cr, uid, [inv_id], context=context, set_total=True) + + # Link this new invoice to related purchase order + order.write({'invoice_ids': [(4, inv_id)]}, context=context) res = inv_id return res diff --git a/addons/purchase/purchase_report.xml b/addons/purchase/purchase_report.xml index e13ca9911b0..a3a4a6a70b6 100644 --- a/addons/purchase/purchase_report.xml +++ b/addons/purchase/purchase_report.xml @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> - <report auto="False" id="report_purchase_quotation" model="purchase.order" name="purchase.quotation" rml="purchase/report/request_quotation.rml" string="Request for Quotation"/> - <report auto="False" id="report_purchase_order" model="purchase.order" name="purchase.order" rml="purchase/report/order.rml" string="Purchase Order"/> + <report auto="False" id="report_purchase_quotation" model="purchase.order" + name="purchase.quotation" rml="purchase/report/request_quotation.rml" + string="Request for Quotation"/> + <report auto="False" id="report_purchase_order" model="purchase.order" + name="purchase.order" rml="purchase/report/order.rml" + usage="default" string="Purchase Order"/> </data> </openerp> diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 2b1ba34b8e1..6f6b5975de7 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -108,7 +108,7 @@ <field name="view_mode">tree,form,calendar,graph</field> <field eval="False" name="view_id"/> <field name="domain">[('type','=','in_invoice')]</field> - <field name="context">{'type':'in_invoice', 'journal_type': 'purchase', 'search_default_draft': 1}</field> + <field name="context">{'default_type':'in_invoice', 'type':'in_invoice', 'journal_type': 'purchase', 'search_default_draft': 1}</field> <field name="search_view_id" ref="account.view_account_invoice_filter"/> <field name="help">Use this menu to control the invoices to be received from your supplier. OpenERP pregenerates draft invoices from your purchase orders or receptions, according to your settings. Once you receive a supplier invoice, you can match it with the draft invoice and validate it.</field> </record> diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py index 4c59f9ea002..e3a4a651b7f 100644 --- a/addons/purchase/report/purchase_report.py +++ b/addons/purchase/report/purchase_report.py @@ -143,3 +143,5 @@ class purchase_report(osv.osv): """) purchase_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase/stock_view.xml b/addons/purchase/stock_view.xml index 0e2a1852eca..7afcc96767f 100644 --- a/addons/purchase/stock_view.xml +++ b/addons/purchase/stock_view.xml @@ -31,7 +31,7 @@ res_model="stock.picking" groups="base.group_extended" src_model="purchase.order" - context="{'contact_display': 'partner'}" /> + context="{'default_purchase_id': active_id, 'contact_display': 'partner'}" /> <record id="action_picking_in_tree_view" model="ir.actions.act_window.view"> <field eval="1" name="sequence"/> @@ -110,7 +110,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form,calendar</field> <field name="domain">[('type','=','in')]</field> - <field name="context">{'contact_display': 'partner_address',"search_default_done":1, "search_default_to_invoice":1}</field> + <field name="context">{"default_type": "in", "contact_display": "partner_address", "search_default_done": 1, "search_default_to_invoice": 1}</field> <field name="search_view_id" ref="view_picking_in_search_picking_to_invoice"/> <field name="help">If you set the Invoicing Control on a purchase order as "Based on receptions", you can track here all the product receptions and create invoices for those receptions.</field> </record> diff --git a/addons/purchase/test/process/edi_purchase_order.yml b/addons/purchase/test/process/edi_purchase_order.yml new file mode 100644 index 00000000000..ff49b41157b --- /dev/null +++ b/addons/purchase/test/process/edi_purchase_order.yml @@ -0,0 +1,136 @@ +- + I create a draft Purchase Order +- + !record {model: purchase.order, id: purchase_order_edi_1}: + partner_id: base.res_partner_agrolait + partner_address_id: base.res_partner_address_8invoice + location_id: stock.stock_location_3 + pricelist_id: 1 + order_line: + - product_id: product.product_product_pc1 + product_qty: 1.0 + product_uom: 1 + price_unit: 150.0 + name: 'Basic PC' + date_planned: '2011-08-31' + order_line: + - product_id: product.product_product_pc3 + product_qty: 10.0 + product_uom: 1 + price_unit: 20.0 + name: 'Medium PC' + date_planned: '2011-08-31' + +- + I confirm the purchase order +- + !workflow {model: purchase.order, ref: purchase_order_edi_1, action: purchase_confirm} +- + Then I export the purchase order via EDI +- + !python {model: edi.document}: | + order_pool = self.pool.get('purchase.order') + order = order_pool.browse(cr, uid, ref("purchase_order_edi_1")) + token = self.export_edi(cr, uid, [order]) + assert token, 'Invalid EDI Token' + +- + Then I import a sample EDI document of a sale order +- + !python {model: edi.document}: | + purchase_order_pool = self.pool.get('purchase.order') + edi_document = { + "__id": "sale:724f93ec-ddd0-11e0-88ec-701a04e25543.sale_order_test", + "__module": "sale", + "__model": "sale.order", + "__import_module": "purchase", + "__import_model": "purchase.order", + "__version": [6,1,0], + "name": "SO008", + "currency": { + "__id": "base:724f93ec-ddd0-11e0-88ec-701a04e25543.EUR", + "__module": "base", + "__model": "res.currency", + "code": "EUR", + "symbol": "€", + }, + "date_order": "2011-09-13", + "partner_id": ["sale:724f93ec-ddd0-11e0-88ec-701a04e25543.res_partner_test22", "Junjun wala"], + "partner_address": { + "__id": "base:724f93ec-ddd0-11e0-88ec-701a04e25543.res_partner_address_7wdsjasdjh", + "__module": "base", + "__model": "res.partner.address", + "phone": "(+32).81.81.37.00", + "street": "Chaussee de Namur 40", + "city": "Gerompont", + "zip": "1367", + "country_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.be", "Belgium"], + }, + "company_id": ["base:724f93ec-ddd0-11e0-88ec-701a04e25543.main_company", "Supplier S.A."], + "company_address": { + "__id": "base:724f93ec-ddd0-11e0-88ec-701a04e25543.main_address", + "__module": "base", + "__model": "res.partner.address", + "city": "Gerompont", + "zip": "1367", + "country_id": ["base:724f93ec-ddd0-11e0-88ec-701a04e25543.be", "Belgium"], + "phone": "(+32).81.81.37.00", + "street": "Chaussee de Namur 40", + "street2": "mailbox 34", + "bank_ids": [ + ["base:724f93ec-ddd0-11e0-88ec-701a04e25543.res_partner_bank-XiwqnxKWzGbp","Guys bank: 123477777-156113"] + ], + }, + "order_line": [{ + "__id": "sale:724f93ec-ddd0-11e0-88ec-701a04e25543.sale_order_line-LXEqeuI-SSP0", + "__module": "sale", + "__model": "sale.order.line", + "__import_module": "purchase", + "__import_model": "purchase.order.line", + "name": "Basic PC", + "product_uom": ["product:724f93ec-ddd0-11e0-88ec-701a04e25543.product_uom_unit", "PCE"], + "product_qty": 1.0, + "date_planned": "2011-09-30", + "sequence": 10, + "price_unit": 150.0, + "product_id": ["product:724f93ec-ddd0-11e0-88ec-701a04e25543.product_product_pc1", "[PC1] Basic PC"], + }, + { + "__id": "sale:724f93ec-ddd0-11e0-88ec-701a04e25543.sale_order_line-LXEqeadasdad", + "__module": "sale", + "__model": "sale.order.line", + "__import_module": "purchase", + "__import_model": "purchase.order.line", + "name": "Medium PC", + "product_uom": ["product:724f93ec-ddd0-11e0-88ec-701a04e25543.product_uom_unit", "PCE"], + "product_qty": 10.0, + "sequence": 11, + "date_planned": "2011-09-15", + "price_unit": 20.0, + "product_id": ["product:724f93ec-ddd0-11e0-88ec-701a04e25543.product_product_pc3", "[PC3] Medium PC"], + }], + } + new_purchase_order_id = purchase_order_pool.edi_import(cr, uid, edi_document, context=context) + assert new_purchase_order_id, 'Purchase order import failed' + order_new = purchase_order_pool.browse(cr, uid, new_purchase_order_id) + + # check bank info on partner + assert len(order_new.partner_id.bank_ids) == 1, "Expected 1 bank entry related to partner" + bank_info = order_new.partner_id.bank_ids[0] + assert bank_info.acc_number == "Guys bank: 123477777-156113", 'Expected "Guys bank: 123477777-156113", got %s' % bank_info.acc_number + + assert order_new.pricelist_id.name == 'Default Purchase Pricelist' , "Default Purchase Pricelist was not automatically assigned" + assert order_new.amount_total == 350, "Amount total is not same" + assert order_new.amount_untaxed == 350, "untaxed amount is not same" + assert len(order_new.order_line) == 2, "Purchase order lines number mismatch" + for purchase_line in order_new.order_line: + if purchase_line.name == 'Basic PC': + assert purchase_line.product_uom.name == "PCE" , "uom is not same" + assert purchase_line.price_unit == 150 , "unit price is not same, got %s, expected 150"%(purchase_line.price_unit,) + assert purchase_line.product_qty == 1 , "product qty is not same" + elif purchase_line.name == 'Medium PC': + assert purchase_line.product_uom.name == "PCE" , "uom is not same" + assert purchase_line.price_unit == 20 , "unit price is not same, got %s, expected 20"%(purchase_line.price_unit,) + assert purchase_line.product_qty == 10 , "product qty is not same" + else: + raise AssertionError('unknown order line: %s' % purchase_line) diff --git a/addons/purchase_analytic_plans/purchase_analytic_plans.py b/addons/purchase_analytic_plans/purchase_analytic_plans.py index 46594033603..9be9e828d22 100644 --- a/addons/purchase_analytic_plans/purchase_analytic_plans.py +++ b/addons/purchase_analytic_plans/purchase_analytic_plans.py @@ -35,9 +35,9 @@ class purchase_order(osv.osv): _name='purchase.order' _inherit='purchase.order' - def inv_line_create(self, cr, uid, a, ol): - res=super(purchase_order,self).inv_line_create(cr, uid, a, ol) - res[2]['analytics_id']=ol.analytics_id.id + def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None): + res = super(purchase_order, self)._prepare_inv_line(cr, uid, account_id, order_line, context=context) + res['analytics_id'] = order_line.analytics_id.id return res purchase_order() diff --git a/addons/purchase_double_validation/__openerp__.py b/addons/purchase_double_validation/__openerp__.py index c02da2fc9d7..7bd9df87c8b 100644 --- a/addons/purchase_double_validation/__openerp__.py +++ b/addons/purchase_double_validation/__openerp__.py @@ -47,3 +47,5 @@ that exceeds minimum amount set by configuration wizard. 'certificate' : '00436592682510544157', } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml index fdddb4b7fee..e0f09f6f7d6 100644 --- a/addons/purchase_requisition/purchase_requisition_view.xml +++ b/addons/purchase_requisition/purchase_requisition_view.xml @@ -205,6 +205,7 @@ </record> <act_window domain="[('requisition_id', '=', active_id)]" + context="{'default_requisition_id': active_id}" id="act_res_partner_2_purchase_order" name="Purchase orders" res_model="purchase.order" diff --git a/addons/report_designer/i18n/th.po b/addons/report_designer/i18n/th.po new file mode 100644 index 00000000000..1625e20012d --- /dev/null +++ b/addons/report_designer/i18n/th.po @@ -0,0 +1,98 @@ +# Thai 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-11-17 07:34+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-18 05:13+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: report_designer +#: model:ir.actions.act_window,name:report_designer.action_report_designer_installer +#: view:report_designer.installer:0 +msgid "Reporting Tools Configuration" +msgstr "" + +#. module: report_designer +#: field:report_designer.installer,base_report_creator:0 +msgid "Query Builder" +msgstr "" + +#. module: report_designer +#: view:report_designer.installer:0 +msgid "Configure" +msgstr "" + +#. module: report_designer +#: view:report_designer.installer:0 +msgid "title" +msgstr "" + +#. module: report_designer +#: model:ir.model,name:report_designer.model_report_designer_installer +msgid "report_designer.installer" +msgstr "" + +#. module: report_designer +#: field:report_designer.installer,config_logo:0 +msgid "Image" +msgstr "" + +#. module: report_designer +#: field:report_designer.installer,base_report_designer:0 +msgid "OpenOffice Report Designer" +msgstr "" + +#. module: report_designer +#: model:ir.module.module,shortdesc:report_designer.module_meta_information +msgid "Reporting Tools" +msgstr "" + +#. module: report_designer +#: view:report_designer.installer:0 +msgid "" +"OpenERP's built-in reporting abilities can be improved even further with " +"some of the following applications" +msgstr "" + +#. module: report_designer +#: view:report_designer.installer:0 +msgid "Configure Reporting Tools" +msgstr "" + +#. module: report_designer +#: help:report_designer.installer,base_report_creator:0 +msgid "" +"Allows you to create any statistic reports on several objects. It's a SQL " +"query builder and browser for end users." +msgstr "" + +#. module: report_designer +#: help:report_designer.installer,base_report_designer:0 +msgid "" +"Adds wizards to Import/Export .SXW report which you can modify in " +"OpenOffice.Once you have modified it you can upload the report using the " +"same wizard." +msgstr "" + +#. module: report_designer +#: model:ir.module.module,description:report_designer.module_meta_information +msgid "" +"Installer for reporting tools selection\n" +" " +msgstr "" + +#. module: report_designer +#: field:report_designer.installer,progress:0 +msgid "Configuration Progress" +msgstr "" diff --git a/addons/report_intrastat/report_intrastat.py b/addons/report_intrastat/report_intrastat.py index a77c4f5d389..ffe90b54d4f 100644 --- a/addons/report_intrastat/report_intrastat.py +++ b/addons/report_intrastat/report_intrastat.py @@ -124,3 +124,5 @@ class report_intrastat(osv.osv): )""") report_intrastat() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/__init__.py b/addons/report_webkit/__init__.py index a97025f4896..e09f929ad56 100644 --- a/addons/report_webkit/__init__.py +++ b/addons/report_webkit/__init__.py @@ -34,4 +34,6 @@ import company import report_helper import webkit_report import ir_report -import wizard
\ No newline at end of file +import wizard + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/__openerp__.py b/addons/report_webkit/__openerp__.py index 52f03efaff7..56496a2d130 100644 --- a/addons/report_webkit/__openerp__.py +++ b/addons/report_webkit/__openerp__.py @@ -98,3 +98,5 @@ TODO "certificate" : "001159699313338995949", 'images': ['images/companies_webkit.jpeg','images/header_html.jpeg','images/header_img.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/company.py b/addons/report_webkit/company.py index 5b826617417..eaf3c02b50f 100644 --- a/addons/report_webkit/company.py +++ b/addons/report_webkit/company.py @@ -58,3 +58,5 @@ class ResCompany(osv.osv): } ResCompany() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/header.py b/addons/report_webkit/header.py index 53252c5e245..b052c612445 100644 --- a/addons/report_webkit/header.py +++ b/addons/report_webkit/header.py @@ -99,3 +99,5 @@ class HeaderImage(osv.osv): 'type' : fields.char('Type', size=32, required =True, help="Image type(png,gif,jpeg)") } HeaderImage() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/ir_report.py b/addons/report_webkit/ir_report.py index bca10b0d1d8..d2709ea6fc2 100644 --- a/addons/report_webkit/ir_report.py +++ b/addons/report_webkit/ir_report.py @@ -136,3 +136,5 @@ class ReportXML(osv.osv): } ReportXML() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/report_helper.py b/addons/report_webkit/report_helper.py index 2b9d8c93256..12651f308dc 100644 --- a/addons/report_webkit/report_helper.py +++ b/addons/report_webkit/report_helper.py @@ -79,4 +79,6 @@ class WebKitHelper(object): """Return HTML embedded logo by name""" img, type = self.get_logo_by_name(name) return self.embed_image(type, img, width, height) -
\ No newline at end of file + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/webkit_report.py b/addons/report_webkit/webkit_report.py index 8d6373e412b..7e828403437 100644 --- a/addons/report_webkit/webkit_report.py +++ b/addons/report_webkit/webkit_report.py @@ -329,3 +329,5 @@ class WebKitParser(report_sxw): if not result: return (False,False) return result + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/wizard/__init__.py b/addons/report_webkit/wizard/__init__.py index f6f7b3c8019..e8ae8b79fc0 100644 --- a/addons/report_webkit/wizard/__init__.py +++ b/addons/report_webkit/wizard/__init__.py @@ -29,4 +29,6 @@ # ############################################################################## -import report_webkit_actions
\ No newline at end of file +import report_webkit_actions + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit/wizard/report_webkit_actions.py b/addons/report_webkit/wizard/report_webkit_actions.py index 79426f8d159..bb2c5312441 100644 --- a/addons/report_webkit/wizard/report_webkit_actions.py +++ b/addons/report_webkit/wizard/report_webkit_actions.py @@ -144,3 +144,5 @@ class report_webkit_actions(osv.osv_memory): } report_webkit_actions() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit_sample/__init__.py b/addons/report_webkit_sample/__init__.py index 9b406f754d8..c1d68d587bf 100644 --- a/addons/report_webkit_sample/__init__.py +++ b/addons/report_webkit_sample/__init__.py @@ -29,4 +29,6 @@ # ############################################################################## import wizard -import report
\ No newline at end of file +import report + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit_sample/__openerp__.py b/addons/report_webkit_sample/__openerp__.py index d485692c164..4e144736c24 100644 --- a/addons/report_webkit_sample/__openerp__.py +++ b/addons/report_webkit_sample/__openerp__.py @@ -54,3 +54,5 @@ You have to create the print buttons by calling the wizard. For more details see "certificate" : "00436592682591421981", 'images': ['images/webkit_invoice_report.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit_sample/report/__init__.py b/addons/report_webkit_sample/report/__init__.py index 04cc14f1d80..e8703f10d03 100644 --- a/addons/report_webkit_sample/report/__init__.py +++ b/addons/report_webkit_sample/report/__init__.py @@ -29,4 +29,6 @@ # ############################################################################## -import report_webkit_html
\ No newline at end of file +import report_webkit_html + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report_webkit_sample/report/report_webkit_html.py b/addons/report_webkit_sample/report/report_webkit_html.py index 3e7f70c4154..5da7f008569 100644 --- a/addons/report_webkit_sample/report/report_webkit_html.py +++ b/addons/report_webkit_sample/report/report_webkit_html.py @@ -15,3 +15,5 @@ report_sxw.report_sxw('report.webkitaccount.invoice', 'account.invoice', 'addons/report_webkit_sample/report/report_webkit_html.mako', parser=report_webkit_html) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/faces/observer.py b/addons/resource/faces/observer.py index 411b2c5395b..894345230ea 100644 --- a/addons/resource/faces/observer.py +++ b/addons/resource/faces/observer.py @@ -77,3 +77,5 @@ factories = { } clear_cache_funcs = {} #@-node:@file observer.py #@-leo + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/faces/pcalendar.py b/addons/resource/faces/pcalendar.py index aba9635fc4b..c82c49d4816 100644 --- a/addons/resource/faces/pcalendar.py +++ b/addons/resource/faces/pcalendar.py @@ -949,3 +949,5 @@ if __name__ == '__main__': start3 = cal.StartDate("10.1.2005") #@-node:@file pcalendar.py #@-leo + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/faces/plocale.py b/addons/resource/faces/plocale.py index a9de390b255..61bfa91917b 100644 --- a/addons/resource/faces/plocale.py +++ b/addons/resource/faces/plocale.py @@ -52,3 +52,5 @@ def get_encoding(): if trans: return trans.charset() return locale.getpreferredencoding() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/faces/resource.py b/addons/resource/faces/resource.py index 7cc2741fc8e..3451806444e 100644 --- a/addons/resource/faces/resource.py +++ b/addons/resource/faces/resource.py @@ -864,3 +864,5 @@ class _AndResourceGroup(_ResourceGroup): #@-others #@-node:@file resource.py #@-leo + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/faces/task.py b/addons/resource/faces/task.py index fe90c42d806..f5240112277 100644 --- a/addons/resource/faces/task.py +++ b/addons/resource/faces/task.py @@ -3851,3 +3851,5 @@ class AdjustedProject(_AllocationPoject): """ #@-node:@file task.py #@-leo + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/faces/timescale.py b/addons/resource/faces/timescale.py index 215766eb958..3e7c3c1dc89 100644 --- a/addons/resource/faces/timescale.py +++ b/addons/resource/faces/timescale.py @@ -111,3 +111,5 @@ class TimeScale(object): _default_scale = TimeScale(pcal._default_calendar) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/faces/utils.py b/addons/resource/faces/utils.py index f7d61fb1dc9..54985767613 100644 --- a/addons/resource/faces/utils.py +++ b/addons/resource/faces/utils.py @@ -122,3 +122,5 @@ def progress_end(): + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/resource/resource_view.xml b/addons/resource/resource_view.xml index 2190fbd9156..c98dac80757 100644 --- a/addons/resource/resource_view.xml +++ b/addons/resource/resource_view.xml @@ -155,6 +155,7 @@ res_model="resource.calendar.leaves" src_model="resource.calendar" view_mode="calendar,tree,form" + context="{'default_calendar_id': active_id}" domain="[('calendar_id','=',active_id), ('resource_id','=',False)]"/> <act_window @@ -163,6 +164,7 @@ res_model="resource.calendar.leaves" src_model="resource.calendar" view_mode="calendar,tree,form" + context="{'default_calendar_id': active_id}" domain="[('calendar_id','=',active_id), ('resource_id','!=',False)]"/> <record id="resource_resource_form" model="ir.ui.view"> diff --git a/addons/sale/__init__.py b/addons/sale/__init__.py index c7be8e7e14b..b26486e1425 100644 --- a/addons/sale/__init__.py +++ b/addons/sale/__init__.py @@ -28,5 +28,6 @@ import stock import wizard import report import company +import edi # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index 76f99024fba..8b5ae108f72 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -83,9 +83,11 @@ Dashboard for Sales Manager that includes: 'stock_view.xml', 'process/sale_process.xml', 'board_sale_view.xml', + 'edi/sale_order_action_data.xml', ], 'demo_xml': ['sale_demo.xml'], 'test': [ + 'test/edi_sale_order.yml', 'test/data_test.yml', 'test/manual_order_policy.yml', 'test/prepaid_order_policy.yml', diff --git a/addons/sale/board_sale_view.xml b/addons/sale/board_sale_view.xml index b35a663d1a4..c57ed5c6144 100644 --- a/addons/sale/board_sale_view.xml +++ b/addons/sale/board_sale_view.xml @@ -7,17 +7,17 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Sales Manager Dashboard"> - <hpaned position="100"> - <child1> - <action name="%(sale.action_quotation_for_sale)d" string="Quotations"/> - <action width="510" name="%(sale.action_view_sales_by_month)d" string="Sales by Month"/> - </child1> - <child2> - <action name="%(sale.action_sales_by_salesman)d" string="Sales by Salesman in last 90 days"/> - <action name="%(sale.action_sales_by_partner)d" string="Sales per Customer in last 90 days"/> - <action name="%(sale.action_sales_product_total_price)d" string="Sales by Product's Category in last 90 days"/> - </child2> - </hpaned> + <board style="1-2"> + <column> + <action name="%(sale.action_quotation_for_sale)d" string="Quotations"/> + <action name="%(sale.action_view_sales_by_month)d" string="Sales by Month"/> + </column> + <column> + <action name="%(sale.action_sales_by_salesman)d" string="Sales by Salesman in last 90 days"/> + <action name="%(sale.action_sales_by_partner)d" string="Sales per Customer in last 90 days"/> + <action name="%(sale.action_sales_product_total_price)d" string="Sales by Product's Category in last 90 days"/> + </column> + </board> </form> </field> </record> @@ -100,23 +100,18 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Sales Dashboard"> - <hpaned position="100"> - <child1> - <action - name="%(action_quotation_for_sale)d" - string="My Quotations" - height="150" - width="510" - groups="base.group_sale_salesman,base.group_sale_manager,account.group_account_user,stock.group_stock_user"/> - </child1> - <child2> - <action - string="Monthly Turnover" - name="%(action_turnover_by_month)d" - groups="base.group_sale_salesman,account.group_account_manager" - colspan="4"/> - </child2> - </hpaned> + <board style="1-2"> + <column> + <action name="%(action_quotation_for_sale)d" + string="My Quotations"/> + <!--groups="base.group_sale_salesman,base.group_sale_manager,account.group_account_user,stock.group_stock_user"--> + </column> + <column> + <action name="%(action_turnover_by_month)d" + string="Monthly Turnover"/> + <!--groups="base.group_sale_salesman,account.group_account_manager"--> + </column> + </board> </form> </field> </record> diff --git a/addons/sale/edi/__init__.py b/addons/sale/edi/__init__.py new file mode 100644 index 00000000000..40789b6448b --- /dev/null +++ b/addons/sale/edi/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +import sale_order + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/edi/sale_order.py b/addons/sale/edi/sale_order.py new file mode 100644 index 00000000000..d40d0b613ed --- /dev/null +++ b/addons/sale/edi/sale_order.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2011 OpenERP S.A. <http://openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +from datetime import datetime, timedelta +from dateutil.relativedelta import relativedelta + +from osv import fields, osv, orm +from edi import EDIMixin +from tools import DEFAULT_SERVER_DATE_FORMAT + +SALE_ORDER_LINE_EDI_STRUCT = { + 'sequence': True, + 'name': True, + #custom: 'date_planned' + 'product_id': True, + 'product_uom': True, + 'price_unit': True, + #custom: 'product_qty' + 'discount': True, + 'notes': True, + + # fields used for web preview only - discarded on import + 'price_subtotal': True, +} + +SALE_ORDER_EDI_STRUCT = { + 'name': True, + 'origin': True, + 'company_id': True, # -> to be changed into partner + #custom: 'partner_ref' + 'date_order': True, + 'partner_id': True, + #custom: 'partner_address' + #custom: 'notes' + 'order_line': SALE_ORDER_LINE_EDI_STRUCT, + + # fields used for web preview only - discarded on import + 'amount_total': True, + 'amount_untaxed': True, + 'amount_tax': True, + 'payment_term': True, + 'order_policy': True, + 'user_id': True, +} + +class sale_order(osv.osv, EDIMixin): + _inherit = 'sale.order' + + def edi_export(self, cr, uid, records, edi_struct=None, context=None): + """Exports a Sale order""" + edi_struct = dict(edi_struct or SALE_ORDER_EDI_STRUCT) + res_company = self.pool.get('res.company') + res_partner_address = self.pool.get('res.partner.address') + edi_doc_list = [] + for order in records: + # generate the main report + self._edi_generate_report_attachment(cr, uid, order, context=context) + + # Get EDI doc based on struct. The result will also contain all metadata fields and attachments. + edi_doc = super(sale_order,self).edi_export(cr, uid, [order], edi_struct, context)[0] + edi_doc.update({ + # force trans-typing to purchase.order upon import + '__import_model': 'purchase.order', + '__import_module': 'purchase', + + 'company_address': res_company.edi_export_address(cr, uid, order.company_id, context=context), + 'partner_address': res_partner_address.edi_export(cr, uid, [order.partner_order_id], context=context)[0], + + 'currency': self.pool.get('res.currency').edi_export(cr, uid, [order.pricelist_id.currency_id], + context=context)[0], + 'partner_ref': order.client_order_ref or False, + 'notes': order.note or False, + }) + edi_doc_list.append(edi_doc) + return edi_doc_list + + + def _edi_import_company(self, cr, uid, edi_document, context=None): + # TODO: for multi-company setups, we currently import the document in the + # user's current company, but we should perhaps foresee a way to select + # the desired company among the user's allowed companies + + self._edi_requires_attributes(('company_id','company_address'), edi_document) + res_partner_address = self.pool.get('res.partner.address') + res_partner = self.pool.get('res.partner') + + # imported company = as a new partner + src_company_id, src_company_name = edi_document.pop('company_id') + partner_id = self.edi_import_relation(cr, uid, 'res.partner', src_company_name, + src_company_id, context=context) + partner_value = {'supplier': True} + res_partner.write(cr, uid, [partner_id], partner_value, context=context) + + # imported company_address = new partner address + address_info = edi_document.pop('company_address') + address_info['partner_id'] = (src_company_id, src_company_name) + address_info['type'] = 'default' + address_id = res_partner_address.edi_import(cr, uid, address_info, context=context) + + # modify edi_document to refer to new partner/address + partner_address = res_partner_address.browse(cr, uid, address_id, context=context) + edi_document['partner_id'] = (src_company_id, src_company_name) + edi_document.pop('partner_address', False) # ignored + address_edi_m2o = self.edi_m2o(cr, uid, partner_address, context=context) + edi_document['partner_order_id'] = address_edi_m2o + edi_document['partner_invoice_id'] = address_edi_m2o + edi_document['partner_shipping_id'] = address_edi_m2o + + return partner_id + + def _edi_get_pricelist(self, cr, uid, partner_id, currency, context=None): + # TODO: refactor into common place for purchase/sale, e.g. into product module + partner_model = self.pool.get('res.partner') + partner = partner_model.browse(cr, uid, partner_id, context=context) + pricelist = partner.property_product_pricelist + if not pricelist: + pricelist = self.pool.get('ir.model.data').get_object(cr, uid, 'product', 'list0', context=context) + + if not pricelist.currency_id == currency: + # look for a pricelist with the right type and currency, or make a new one + pricelist_type = 'sale' + product_pricelist = self.pool.get('product.pricelist') + match_pricelist_ids = product_pricelist.search(cr, uid,[('type','=',pricelist_type), + ('currency_id','=',currency.id)]) + if match_pricelist_ids: + pricelist_id = match_pricelist_ids[0] + else: + pricelist_name = _('EDI Pricelist (%s)') % (currency.name,) + pricelist_id = product_pricelist.create(cr, uid, {'name': pricelist_name, + 'type': pricelist_type, + 'currency_id': currency.id, + }) + self.pool.get('product.pricelist.version').create(cr, uid, {'name': pricelist_name, + 'pricelist_id': pricelist_id}) + pricelist = product_pricelist.browse(cr, uid, pricelist_id) + + return self.edi_m2o(cr, uid, pricelist, context=context) + + def edi_import(self, cr, uid, edi_document, context=None): + self._edi_requires_attributes(('company_id','company_address','order_line','date_order','currency'), edi_document) + + #import company as a new partner + partner_id = self._edi_import_company(cr, uid, edi_document, context=context) + + # currency for rounding the discount calculations and for the pricelist + res_currency = self.pool.get('res.currency') + currency_info = edi_document.pop('currency') + currency_id = res_currency.edi_import(cr, uid, currency_info, context=context) + order_currency = res_currency.browse(cr, uid, currency_id) + + date_order = edi_document['date_order'] + partner_ref = edi_document.pop('partner_ref', False) + edi_document['client_order_ref'] = edi_document['name'] + edi_document['name'] = partner_ref or edi_document['name'] + edi_document['note'] = edi_document.pop('notes', False) + edi_document['pricelist_id'] = self._edi_get_pricelist(cr, uid, partner_id, order_currency, context=context) + + # discard web preview fields, if present + edi_document.pop('amount_total', None) + edi_document.pop('amount_tax', None) + edi_document.pop('amount_untaxed', None) + + order_lines = edi_document['order_line'] + for order_line in order_lines: + self._edi_requires_attributes(('date_planned', 'product_id', 'product_uom', 'product_qty', 'price_unit'), order_line) + order_line['product_uom_qty'] = order_line['product_qty'] + del order_line['product_qty'] + date_planned = order_line.pop('date_planned') + delay = 0 + if date_order and date_planned: + # no security_days buffer, this is the promised date given by supplier + delay = (datetime.strptime(date_planned, DEFAULT_SERVER_DATE_FORMAT) - \ + datetime.strptime(date_order, DEFAULT_SERVER_DATE_FORMAT)).days + order_line['delay'] = delay + + # discard web preview fields, if present + order_line.pop('price_subtotal', None) + return super(sale_order,self).edi_import(cr, uid, edi_document, context=context) + +class sale_order_line(osv.osv, EDIMixin): + _inherit='sale.order.line' + + def edi_export(self, cr, uid, records, edi_struct=None, context=None): + """Overridden to provide sale order line fields with the expected names + (sale and purchase orders have different column names)""" + edi_struct = dict(edi_struct or SALE_ORDER_LINE_EDI_STRUCT) + edi_doc_list = [] + for line in records: + edi_doc = super(sale_order_line,self).edi_export(cr, uid, [line], edi_struct, context)[0] + edi_doc['__import_model'] = 'purchase.order.line' + edi_doc['product_qty'] = line.product_uom_qty + if line.product_uos: + edi_doc.update(product_uom=line.product_uos, + product_qty=line.product_uos_qty) + + # company.security_days is for internal use, so customer should only + # see the expected date_planned based on line.delay + date_planned = datetime.strptime(line.order_id.date_order, DEFAULT_SERVER_DATE_FORMAT) + \ + relativedelta(days=line.delay or 0.0) + edi_doc['date_planned'] = date_planned.strftime(DEFAULT_SERVER_DATE_FORMAT) + edi_doc_list.append(edi_doc) + return edi_doc_list + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/sale/edi/sale_order_action_data.xml b/addons/sale/edi/sale_order_action_data.xml new file mode 100644 index 00000000000..3d7a554ff4a --- /dev/null +++ b/addons/sale/edi/sale_order_action_data.xml @@ -0,0 +1,193 @@ +<?xml version="1.0" ?> +<openerp> + <data> + <!-- EDI Export + Send email Action --> + <record id="ir_actions_server_edi_sale" model="ir.actions.server"> + <field name="code">if not object.partner_id.opt_out: object.edi_export_and_email(template_ext_id='sale.email_template_edi_sale', context=context)</field> + <field name="state">code</field> + <field name="type">ir.actions.server</field> + <field name="model_id" ref="sale.model_sale_order"/> + <field name="condition">True</field> + <field name="name">Auto-email confirmed sale orders</field> + </record> + + <!-- EDI related Email Templates menu --> + <record model="ir.actions.act_window" id="action_email_templates"> + <field name="name">Email Templates</field> + <field name="res_model">email.template</field> + <field name="view_type">form</field> + <field name="view_mode">form,tree</field> + <field name="view_id" ref="email_template.email_template_tree" /> + <field name="search_view_id" ref="email_template.view_email_template_search"/> + <field name="context" eval="{'search_default_model_id': ref('sale.model_sale_order')}"/> + </record> + <menuitem id="menu_sales_configuration_misc" name="Miscellaneous" parent="base.menu_base_config" sequence="30"/> + <menuitem id="menu_email_templates" parent="menu_sales_configuration_misc" action="action_email_templates" sequence="30"/> + </data> + + + <!-- Mail template and workflow bindings are done in a NOUPDATE block + so users can freely customize/delete them --> + <data noupdate="1"> + <!-- bind the mailing server action to sale.order confirmed activity --> + <record id="sale.act_wait_ship" model="workflow.activity"> + <field name="action_id" ref="ir_actions_server_edi_sale"/> + </record> + + + <!--Email template --> + <record id="email_template_edi_sale" model="email.template"> + <field name="name">Automated Sale Order Notification Mail</field> + <field name="email_from">${object.user_id.user_email or ''}</field> + <field name="subject">${object.company_id.name} Order (Ref ${object.name or 'n/a' })</field> + <field name="email_to">${object.partner_invoice_id.email}</field> + <field name="model_id" ref="sale.model_sale_order"/> + <field name="auto_delete" eval="True"/> + <field name="body_html"><![CDATA[ +<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); "> + + <p>Hello${object.partner_order_id.name and ' ' or ''}${object.partner_order_id.name or ''},</p> + + <p>Here is your order confirmation for ${object.partner_id.name}: </p> + + <p style="border-left: 1px solid #8e0000; margin-left: 30px;"> + <strong>REFERENCES</strong><br /> + Order number: <strong>${object.name}</strong><br /> + Order total: <strong>${object.amount_total} ${object.pricelist_id.currency_id.name}</strong><br /> + Order date: ${object.date_order}<br /> + % if object.origin: + Order reference: ${object.origin}<br /> + % endif + % if object.client_order_ref: + Your reference: ${object.client_order_ref}<br /> + % endif + Your contact: <a href="mailto:${object.user_id.user_email or ''}?subject=Order%20${object.name}">${object.user_id.name}</a> + </p> + + <p> + You can view the order confirmation document, download it and pay online using the following link: + </p> + <a style="display:block; width: 150px; height:20px; margin-left: 120px; color: #FFF; font-family: 'Lucida Grande', Helvetica, Arial, sans-serif; font-size: 13px; font-weight: bold; text-align: center; text-decoration: none !important; line-height: 1; padding: 5px 0px 0px 0px; background-color: #8E0000; border-radius: 5px 5px; background-repeat: repeat no-repeat;" + href="${ctx.get('edi_web_url_view') or ''}">View Order</a> + + % if object.order_policy in ('prepaid','manual') and object.company_id.paypal_account: + <% + comp_name = quote(object.company_id.name) + order_name = quote(object.name) + paypal_account = quote(object.company_id.paypal_account) + order_amount = quote(str(object.amount_total)) + cur_name = quote(object.pricelist_id.currency_id.name) + paypal_url = "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=%s&item_name=%s%%20Order%%20%s" \ + "&invoice=%s&amount=%s&currency_code=%s&button_subtype=services&no_note=1" \ + "&bn=OpenERP_Order_PayNow_%s" % \ + (paypal_account,comp_name,order_name,order_name,order_amount,cur_name,cur_name) + %> + <br/> + <p>It is also possible to directly pay with Paypal:</p> + <a style="margin-left: 120px;" href="${paypal_url}"> + <img class="oe_edi_paypal_button" src="https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif"/> + </a> + % endif + + <br/> + <p>If you have any question, do not hesitate to contact us.</p> + <p>Thank you for choosing ${object.company_id.name or 'us'}!</p> + <br/> + <br/> + <div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;"> + <h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #FFF;"> + <strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3> + </div> + <div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;"> + <span style="color: #222; margin-bottom: 5px; display: block; "> + % if object.company_id.street: + ${object.company_id.street}<br/> + % endif + % if object.company_id.street2: + ${object.company_id.street2}<br/> + % endif + % if object.company_id.city or object.company_id.zip: + ${object.company_id.zip} ${object.company_id.city}<br/> + % endif + % if object.company_id.country_id: + ${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}<br/> + % endif + </span> + % if object.company_id.phone: + <div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> + Phone: ${object.company_id.phone} + </div> + % endif + % if object.company_id.website: + <div> + Web : <a href="${object.company_id.website}">${object.company_id.website}</a> + </div> + %endif + <p></p> + </div> +</div> + ]]></field> + <field name="body_text"><![CDATA[ +Hello${object.partner_order_id.name and ' ' or ''}${object.partner_order_id.name or ''}, + +Here is your order confirmation for ${object.partner_id.name}: + | Order number: *${object.name}* + | Order total: *${object.amount_total} ${object.pricelist_id.currency_id.name}* + | Order date: ${object.date_order} + % if object.origin: + | Order reference: ${object.origin} + % endif + % if object.client_order_ref: + | Your reference: ${object.client_order_ref}<br /> + % endif + | Your contact: ${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''} + +You can view the order confirmation, download it and even pay online using the following link: + ${ctx.get('edi_web_url_view') or 'n/a'} + +% if object.order_policy in ('prepaid','manual') and object.company_id.paypal_account: +<% +comp_name = quote(object.company_id.name) +order_name = quote(object.name) +paypal_account = quote(object.company_id.paypal_account) +order_amount = quote(str(object.amount_total)) +cur_name = quote(object.pricelist_id.currency_id.name) +paypal_url = "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=%s&item_name=%s%%20Order%%20%s&invoice=%s&amount=%s" \ + "¤cy_code=%s&button_subtype=services&no_note=1&bn=OpenERP_Order_PayNow_%s" % \ + (paypal_account,comp_name,order_name,order_name,order_amount,cur_name,cur_name) +%> +It is also possible to directly pay with Paypal: + ${paypal_url} +% endif + +If you have any question, do not hesitate to contact us. + + +Thank you for choosing ${object.company_id.name}! + + +-- +${object.user_id.name} ${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''} +${object.company_id.name} +% if object.company_id.street: +${object.company_id.street or ''} +% endif +% if object.company_id.street2: +${object.company_id.street2} +% endif +% if object.company_id.city or object.company_id.zip: +${object.company_id.zip or ''} ${object.company_id.city or ''} +% endif +% if object.company_id.country_id: +${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''} +% endif +% if object.company_id.phone: +Phone: ${object.company_id.phone} +% endif +% if object.company_id.website: +${object.company_id.website or ''} +% endif + ]]></field> + </record> + </data> +</openerp> diff --git a/addons/sale/i18n/oc.po b/addons/sale/i18n/oc.po new file mode 100644 index 00000000000..b40a8630c3d --- /dev/null +++ b/addons/sale/i18n/oc.po @@ -0,0 +1,2059 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:33+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\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 "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: report:sale.order:0 +msgid "VAT" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: report:sale.order:0 +msgid "Invoice address :" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: report:sale.order:0 +msgid "Order N°" +msgstr "" + +#. module: sale +#: field:sale.order,order_line:0 +msgid "Order Lines" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: view:sale.order.line:0 +#: field:sale.report,shipped:0 +msgid "Shipped" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: view:sale.report:0 +msgid " Year " +msgstr "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "November" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: field:sale.order.line,procurement_id:0 +msgid "Procurement" +msgstr "" + +#. 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 "" + +#. module: sale +#: model:ir.module.module,shortdesc:sale.module_meta_information +msgid "Sales Management" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: report:sale.order:0 +#: field:sale.order.line,price_unit:0 +msgid "Unit Price" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: model:ir.ui.menu,name:sale.menu_invoiced +msgid "Invoicing" +msgstr "" + +#. 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 "" + +#. module: sale +#: field:sale.make.invoice,invoice_date:0 +msgid "Invoice Date" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. module: sale +#: field:sale.config.picking_policy,config_logo:0 +#: field:sale.installer,config_logo:0 +msgid "Image" +msgstr "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "" + +#. 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 "Relambi de pagament" + +#. 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 "Devís N°" + +#. module: sale +#: field:sale.order,picked_rate:0 +#: view:sale.report:0 +msgid "Picked" +msgstr "Liurada" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,year:0 +msgid "Year" +msgstr "Annada" + +#. module: sale +#: selection:sale.config.picking_policy,order_policy:0 +msgid "Invoice Based on Deliveries" +msgstr "Factura basada sus las liurasons" diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 8963942dbff..2188f6dee5f 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -217,7 +217,7 @@ class sale_order(osv.osv): 'partner_shipping_id': fields.many2one('res.partner.address', 'Shipping Address', readonly=True, required=True, states={'draft': [('readonly', False)]}, help="Shipping address for current sales order."), 'incoterm': fields.many2one('stock.incoterms', 'Incoterm', help="Incoterm which stands for 'International Commercial terms' implies its a series of sales terms which are used in the commercial transaction."), - 'picking_policy': fields.selection([('direct', 'Deliver each products when available'), ('one', 'Deliver all products at once')], + 'picking_policy': fields.selection([('direct', 'Deliver each product when available'), ('one', 'Deliver all products at once')], 'Picking Policy', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="""If you don't have enough stock available to deliver all at once, do you accept partial shipments or not?"""), 'order_policy': fields.selection([ ('prepaid', 'Pay before delivery'), @@ -231,7 +231,7 @@ class sale_order(osv.osv): - The 'Invoice on order after delivery' choice will generate the draft invoice based on sales order after all picking lists have been finished. - The 'Invoice based on deliveries' choice is used to create an invoice during the picking process."""), 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="Pricelist for current sales order."), - 'project_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True, states={'draft': [('readonly', False)]}, help="The analytic account related to a sales order."), + 'project_id': fields.many2one('account.analytic.account', 'Contract/Analytic Account', readonly=True, states={'draft': [('readonly', False)]}, help="The analytic account related to a sales order."), 'order_line': fields.one2many('sale.order.line', 'order_id', 'Order Lines', readonly=True, states={'draft': [('readonly', False)]}), 'invoice_ids': fields.many2many('account.invoice', 'sale_order_invoice_rel', 'order_id', 'invoice_id', 'Invoices', readonly=True, help="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)."), @@ -280,7 +280,7 @@ class sale_order(osv.osv): 'partner_shipping_id': lambda self, cr, uid, context: context.get('partner_id', False) and self.pool.get('res.partner').address_get(cr, uid, [context['partner_id']], ['delivery'])['delivery'], } _sql_constraints = [ - ('name_uniq', 'unique(name)', 'Order Reference must be unique !'), + ('name_uniq', 'unique(name, company_id)', 'Order Reference must be unique per Company!'), ] _order = 'name desc' @@ -619,6 +619,8 @@ class sale_order(osv.osv): def action_wait(self, cr, uid, ids, *args): for o in self.browse(cr, uid, ids): + if not o.order_line: + raise osv.except_osv(_('Error !'),_('You cannot confirm a sale order which has no line.')) if (o.order_policy == 'manual'): self.write(cr, uid, [o.id], {'state': 'manual', 'date_confirm': time.strftime(DEFAULT_SERVER_DATE_FORMAT)}) else: @@ -691,7 +693,6 @@ class sale_order(osv.osv): 'move_id': move_id, 'property_ids': [(6, 0, [x.id for x in line.property_ids])], 'company_id': order.company_id.id, - 'sale_line_id': line.id, } def _prepare_order_line_move(self, cr, uid, order, line, picking_id, date_planned, *args): @@ -756,6 +757,10 @@ class sale_order(osv.osv): will be added. A new picking will be created if ommitted. :return: True """ + move_obj = self.pool.get('stock.move') + picking_obj = self.pool.get('stock.picking') + procurement_obj = self.pool.get('procurement.order') + proc_ids = [] for line in order_lines: if line.state == 'done': @@ -767,13 +772,13 @@ class sale_order(osv.osv): if line.product_id: if line.product_id.product_tmpl_id.type in ('product', 'consu'): if not picking_id: - picking_id = self.pool.get('stock.picking').create(cr, uid, self._prepare_order_picking(cr, uid, order, *args)) - move_id = self.pool.get('stock.move').create(cr, uid, self._prepare_order_line_move(cr, uid, order, line, picking_id, date_planned, *args)) + picking_id = picking_obj.create(cr, uid, self._prepare_order_picking(cr, uid, order, *args)) + move_id = move_obj.create(cr, uid, self._prepare_order_line_move(cr, uid, order, line, picking_id, date_planned, *args)) else: # a service has no stock move move_id = False - proc_id = self.pool.get('procurement.order').create(cr, uid, self._prepare_order_line_procurement(cr, uid, order, line, move_id, date_planned, *args)) + proc_id = procurement_obj.create(cr, uid, self._prepare_order_line_procurement(cr, uid, order, line, move_id, date_planned, *args)) proc_ids.append(proc_id) line.write({'procurement_id': proc_id}) @@ -783,12 +788,12 @@ class sale_order(osv.osv): for pick in order.picking_ids: for move in pick.move_lines: if move.state == 'cancel': - mov_ids = self.pool.get('stock.move').search(cr, uid, [('state', '=', 'cancel'),('sale_line_id', '=', line.id),('picking_id', '=', pick.id)]) + mov_ids = move_obj.search(cr, uid, [('state', '=', 'cancel'),('sale_line_id', '=', line.id),('picking_id', '=', pick.id)]) if mov_ids: for mov in move_obj.browse(cr, uid, mov_ids): # FIXME: the following seems broken: what if move_id doesn't exist? What if there are several mov_ids? Shouldn't that be a sum? - self.pool.get('stock.move').write(cr, uid, [move_id], {'product_qty': mov.product_qty, 'product_uos_qty': mov.product_uos_qty}) - self.pool.get('procurement.order').write(cr, uid, [proc_id], {'product_qty': mov.product_qty, 'product_uos_qty': mov.product_uos_qty}) + move_obj.write(cr, uid, [move_id], {'product_qty': mov.product_qty, 'product_uos_qty': mov.product_uos_qty}) + procurement_obj.write(cr, uid, [proc_id], {'product_qty': mov.product_qty, 'product_uos_qty': mov.product_uos_qty}) wf_service = netsvc.LocalService("workflow") if picking_id: diff --git a/addons/sale/sale_report.xml b/addons/sale/sale_report.xml index 33819df0bde..0f77913a3c9 100644 --- a/addons/sale/sale_report.xml +++ b/addons/sale/sale_report.xml @@ -2,7 +2,9 @@ <openerp> <data> - <report auto="False" id="report_sale_order" model="sale.order" name="sale.order" rml="sale/report/sale_order.rml" string="Quotation / Order"/> + <report auto="False" id="report_sale_order" model="sale.order" name="sale.order" + rml="sale/report/sale_order.rml" string="Quotation / Order" + usage="default"/> </data> </openerp> diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 73a8a6cd42a..3976abb5d05 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -140,7 +140,7 @@ <field name="price_unit"/> <field groups="product.group_uos" name="product_uos_qty"/> - <field groups="product.group_uos" name="product_uos"/> + <field groups="product.group_uos" name="product_uos" nolabel="1"/> <newline/> <field name="product_packaging" context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" on_change="product_packaging_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, parent.partner_id, product_packaging, True, context)" @@ -489,8 +489,8 @@ src_model="product.product" groups="base.group_sale_salesman"/> - <menuitem id="menu_invoiced" name="Invoicing" parent="base.menu_base_partner" sequence="5" groups="-base.group_extended"/> - <menuitem id="menu_invoicing_sales_order_lines" parent="menu_invoiced" action="action_order_line_tree2" sequence="2" groups="base.group_no_one"/> + <menuitem id="base.menu_invoiced" name="Invoicing" parent="base.menu_base_partner" sequence="5" groups="-base.group_extended"/> + <menuitem id="menu_invoicing_sales_order_lines" parent="base.menu_invoiced" action="action_order_line_tree2" sequence="2" groups="base.group_no_one"/> <!-- configartion view --> diff --git a/addons/sale/stock.py b/addons/sale/stock.py index 9043bc9abe9..9e0a47b3ceb 100644 --- a/addons/sale/stock.py +++ b/addons/sale/stock.py @@ -198,3 +198,5 @@ class stock_picking(osv.osv): stock_picking() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/stock_view.xml b/addons/sale/stock_view.xml index 20ef5752471..7b9e90f6f0a 100644 --- a/addons/sale/stock_view.xml +++ b/addons/sale/stock_view.xml @@ -71,10 +71,10 @@ <field name="view_type">form</field> <field name="view_mode">tree,form,calendar</field> <field name="domain">[('type','=','out')]</field> - <field name="context">{'contact_display': 'partner_address', 'search_default_to_invoice': 1, 'search_default_done': 1}</field> + <field name="context">{'default_type': 'out', 'contact_display': 'partner_address', 'search_default_to_invoice': 1, 'search_default_done': 1}</field> <field name="search_view_id" ref="stock.view_picking_out_search"/> </record> - <menuitem action="outgoing_picking_list_to_invoice" id="menu_action_picking_list_to_invoice" parent="sale.menu_invoiced" groups="base.group_no_one" sequence="20"/> + <menuitem action="outgoing_picking_list_to_invoice" id="menu_action_picking_list_to_invoice" parent="base.menu_invoiced" groups="base.group_no_one" sequence="20"/> </data> </openerp> diff --git a/addons/sale/test/data_test.yml b/addons/sale/test/data_test.yml index 0be8474754c..8b5d32a086a 100644 --- a/addons/sale/test/data_test.yml +++ b/addons/sale/test/data_test.yml @@ -174,6 +174,7 @@ category_id: - res_partner_category_customers0 name: Cleartrail + opt_out: True - I create contact address for Cleartrail. - diff --git a/addons/sale/test/edi_sale_order.yml b/addons/sale/test/edi_sale_order.yml new file mode 100644 index 00000000000..9a207d9f44e --- /dev/null +++ b/addons/sale/test/edi_sale_order.yml @@ -0,0 +1,132 @@ +- + I create a draft Sale Order +- + !record {model: sale.order, id: sale_order_edi_1}: + partner_id: base.res_partner_agrolait + partner_invoice_id: base.res_partner_address_8invoice + partner_order_id: base.res_partner_address_8invoice + partner_shipping_id: base.res_partner_address_8invoice + pricelist_id: 1 + order_line: + - product_id: product.product_product_pc1 + product_uom_qty: 1.0 + product_uom: 1 + price_unit: 150.0 + name: 'Basic pc' + order_line: + - product_id: product.product_product_pc3 + product_uom_qty: 10.0 + product_uom: 1 + price_unit: 200.0 + name: 'Medium pc' +- + I confirm the sale order +- + !workflow {model: sale.order, ref: sale_order_edi_1, action: order_confirm} +- + Then I export the sale order via EDI +- + !python {model: edi.document}: | + sale_order = self.pool.get('sale.order') + so = sale_order.browse(cr, uid, ref("sale_order_edi_1")) + token = self.export_edi(cr, uid, [so]) + assert token, 'Invalid EDI Token' +- + Then I import a sample EDI document of a purchase order +- + !python {model: edi.document}: | + sale_order_pool = self.pool.get('sale.order') + edi_document = { + "__id": "purchase:5af1272e-dd26-11e0-b65e-701a04e25543.purchase_order_test", + "__module": "purchase", + "__model": "purchase.order", + "__import_module": "sale", + "__import_model": "sale.order", + "__version": [6,1,0], + "name": "PO00011", + "date_order": "2011-09-12", + "currency": { + "__id": "base:5af1272e-dd26-11e0-b65e-701a04e25543.EUR", + "__module": "base", + "__model": "res.currency", + "code": "EUR", + "symbol": "€", + }, + "company_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.main_company", "Client S.A."], + "company_address": { + "__id": "base:5af1272e-dd26-11e0-b65e-701a04e25543.some_address", + "__module": "base", + "__model": "res.partner.address", + "phone": "(+32).81.81.37.00", + "street": "Chaussee de Namur 40", + "city": "Gerompont", + "zip": "1367", + "country_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.be", "Belgium"], + "bank_ids": [ + ["base:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_bank-adaWadsadasdDJzGbp","Ladies bank: 032465789-156113"] + ], + }, + "partner_id": ["purchase:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_test20", "jones white"], + "partner_address": { + "__id": "base:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_address_7wdsjasdjh", + "__module": "base", + "__model": "res.partner.address", + "phone": "(+32).81.81.37.00", + "street": "Chaussee de Namur 40", + "city": "Gerompont", + "zip": "1367", + "country_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.be", "Belgium"], + }, + "order_line": [{ + "__id": "purchase:5af1272e-dd26-11e0-b65e-701a04e25543.purchase_order_line-AlhsVDZGoKvJ", + "__module": "purchase", + "__model": "purchase.order.line", + "__import_module": "sale", + "__import_model": "sale.order.line", + "name": "Basic PC", + "date_planned": "2011-09-30", + "price_unit": 150.0, + "product_id": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_product_pc1", "[PC1] Basic PC"], + "product_qty": 1.0, + "product_uom": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_uom_unit", "PCE"], + }, + { + "__id": "purchase:5af1272e-dd26-11e0-b65e-701a04e25543.purchase_order_line-Alsads33e", + "__module": "purchase", + "__model": "purchase.order.line", + "__import_module": "sale", + "__import_model": "sale.order.line", + "name": "Medium PC", + "date_planned": "2011-09-15", + "price_unit": 100.0, + "product_id": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_product_pc3", "[PC3] Medium PC"], + "product_qty": 2.0, + "product_uom": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_uom_unit", "PCE"], + }], + } + new_sale_order_id = sale_order_pool.edi_import(cr, uid, edi_document, context=context) + assert new_sale_order_id, 'Sale order import failed' + order_new = sale_order_pool.browse(cr, uid, new_sale_order_id) + + # check bank info on partner + assert len(order_new.partner_id.bank_ids) == 1, "Expected 1 bank entry related to partner" + bank_info = order_new.partner_id.bank_ids[0] + assert bank_info.acc_number == "Ladies bank: 032465789-156113", 'Expected "Ladies bank: 032465789-156113", got %s' % bank_info.acc_number + + assert order_new.pricelist_id.name == 'Public Pricelist' , "Public Price list was not automatically assigned" + assert order_new.amount_total == 350, "Amount total is wrong" + assert order_new.amount_untaxed == 350, "Untaxed amount is wrong" + assert len(order_new.order_line) == 2, "Sale order lines mismatch" + for sale_line in order_new.order_line: + if sale_line.name == 'Basic PC': + assert sale_line.delay == 18 , "incorrect delay: got %s, expected 18"%(sale_line.delay,) + assert sale_line.product_uom.name == "PCE" , "uom is not same" + assert sale_line.price_unit == 150 , "unit price is not same, got %s, expected 150"%(sale_line.price_unit,) + assert sale_line.product_uom_qty == 1 , "product qty is not same" + elif sale_line.name == 'Medium PC': + assert sale_line.delay == 3 , "incorrect delay: got %s, expected 3"%(sale_line.delay,) + assert sale_line.product_uom.name == "PCE" , "uom is not same" + assert sale_line.price_unit == 100 , "unit price is not same, got %s, expected 100"%(sale_line.price_unit,) + assert sale_line.product_uom_qty == 2 , "product qty is not same" + else: + raise AssertionError('unknown order line: %s' % sale_line)
\ No newline at end of file diff --git a/addons/sale/wizard/sale_line_invoice.xml b/addons/sale/wizard/sale_line_invoice.xml index 6562af09258..1df79f3c52d 100644 --- a/addons/sale/wizard/sale_line_invoice.xml +++ b/addons/sale/wizard/sale_line_invoice.xml @@ -26,7 +26,6 @@ <record model="ir.values" id="sale_order_line_make_invoice"> <field name="model_id" ref="sale.model_sale_order_line" /> - <field name="object" eval="1" /> <field name="name">Make Invoices</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_view_sale_order_line_make_invoice'))" /> diff --git a/addons/sale/wizard/sale_make_invoice.xml b/addons/sale/wizard/sale_make_invoice.xml index 267167237bc..d39aee3b3fa 100644 --- a/addons/sale/wizard/sale_make_invoice.xml +++ b/addons/sale/wizard/sale_make_invoice.xml @@ -31,7 +31,6 @@ <record model="ir.values" id="sale_order_make_invoice"> <field name="model_id" ref="sale.model_sale_order" /> - <field name="object" eval="1" /> <field name="name">Make Invoices</field> <field name="key2">client_action_multi</field> <field name="value" eval="'ir.actions.act_window,' + str(ref('action_sale_order_make_invoice'))" /> diff --git a/addons/sale_analytic_plans/i18n/oc.po b/addons/sale_analytic_plans/i18n/oc.po new file mode 100644 index 00000000000..e4af10e9b81 --- /dev/null +++ b/addons/sale_analytic_plans/i18n/oc.po @@ -0,0 +1,45 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-03 16:58+0000\n" +"PO-Revision-Date: 2011-11-20 09:25+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: sale_analytic_plans +#: field:sale.order.line,analytics_id:0 +msgid "Analytic Distribution" +msgstr "Distribucion analitica" + +#. module: sale_analytic_plans +#: model:ir.module.module,shortdesc:sale_analytic_plans.module_meta_information +msgid "Sales Analytic Distribution Management" +msgstr "Gestion de la Distribucion Analitica de las Vendas" + +#. module: sale_analytic_plans +#: model:ir.module.module,description:sale_analytic_plans.module_meta_information +msgid "" +"\n" +" The base module to manage analytic distribution and sales orders.\n" +" " +msgstr "" +"\n" +" Lo modul de basa per gerir la distribucion analitica e los bons de " +"comanda.\n" +" " + +#. module: sale_analytic_plans +#: model:ir.model,name:sale_analytic_plans.model_sale_order_line +msgid "Sales Order Line" +msgstr "Linha de bon de comanda" diff --git a/addons/sale_crm/board_sale_crm_view.xml b/addons/sale_crm/board_sale_crm_view.xml index cb45946aedc..9d383a4ac28 100644 --- a/addons/sale_crm/board_sale_crm_view.xml +++ b/addons/sale_crm/board_sale_crm_view.xml @@ -7,14 +7,11 @@ <field name="type">form</field> <field name="inherit_id" ref="sale.board_sales_form"/> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1/action[@string='My Quotations']" position="before"> - <action + <xpath expr="/form/board/column/action[@string='My Quotations']" position="before"> + <action name="%(crm.act_my_oppor)d" string="My Open Opportunities" - name="%(crm.act_my_oppor)d" - colspan="4" - height="150" - groups="base.group_sale_salesman,base.group_sale_manager" - width="510"/> + /> + <!--groups="base.group_sale_salesman,base.group_sale_manager"--> </xpath> </field> </record> @@ -25,12 +22,9 @@ <field name="type">form</field> <field name="inherit_id" ref="sale.board_sales_form"/> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child1/action[@string='My Quotations']" position="after"> - <action - string="My Meetings" - name="%(crm.act_my_meetings)d" - height="150" - colspan="4"/> + <xpath expr="/form/board/column/action[@string='My Quotations']" position="after"> + <action name="%(crm.act_my_meetings)d" + string="My Meetings"/> </xpath> </field> </record> @@ -41,12 +35,11 @@ <field name="type">form</field> <field name="inherit_id" ref="sale.board_sales_form"/> <field name="arch" type="xml"> - <xpath expr="/form/hpaned/child2/action[@string='Monthly Turnover']" position="before"> - <action + <xpath expr="/form/board/column/action[@string='Monthly Turnover']" position="before"> + <action name="%(crm.act_my_oppor_stage)d" string="My Planned Revenues by Stage" - name="%(crm.act_my_oppor_stage)d" - groups="base.group_sale_salesman,base.group_sale_manager" - colspan="4"/> + /> + <!--groups="base.group_sale_salesman,base.group_sale_manager"--> </xpath> </field> </record> diff --git a/addons/sale_crm/i18n/fr.po b/addons/sale_crm/i18n/fr.po index f61ff152f64..ce39c2219d5 100644 --- a/addons/sale_crm/i18n/fr.po +++ b/addons/sale_crm/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:16+0000\n" -"PO-Revision-Date: 2011-01-13 11:11+0000\n" -"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " -"<maxime.chambreuil@savoirfairelinux.com>\n" +"PO-Revision-Date: 2011-11-25 14:51+0000\n" +"Last-Translator: Numérigraphe <Unknown>\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-11-05 05:04+0000\n" -"X-Generator: Launchpad (build 14231)\n" +"X-Launchpad-Export-Date: 2011-11-26 05:49+0000\n" +"X-Generator: Launchpad (build 14381)\n" #. module: sale_crm #: field:crm.make.sale,partner_id:0 @@ -31,7 +30,7 @@ msgstr "Convertir en devis" #: code:addons/sale_crm/wizard/crm_make_sale.py:108 #, python-format msgid "Opportunity '%s' is converted to Quotation." -msgstr "" +msgstr "L'opportunité '%s' a été convertie en devis." #. module: sale_crm #: code:addons/sale_crm/wizard/crm_make_sale.py:89 diff --git a/addons/sale_crm/wizard/crm_make_sale.py b/addons/sale_crm/wizard/crm_make_sale.py index d1f6dc98edd..ae0371a15e5 100644 --- a/addons/sale_crm/wizard/crm_make_sale.py +++ b/addons/sale_crm/wizard/crm_make_sale.py @@ -154,3 +154,5 @@ class crm_make_sale(osv.osv_memory): } crm_make_sale() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_journal/__init__.py b/addons/sale_journal/__init__.py index b05803da6c6..2af863efc1b 100644 --- a/addons/sale_journal/__init__.py +++ b/addons/sale_journal/__init__.py @@ -21,3 +21,5 @@ import sale_journal + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_journal/sale_journal.py b/addons/sale_journal/sale_journal.py index 5a2004842cd..edae822e832 100644 --- a/addons/sale_journal/sale_journal.py +++ b/addons/sale_journal/sale_journal.py @@ -85,3 +85,5 @@ class sale(osv.osv): return result sale() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_order_dates/i18n/sl.po b/addons/sale_order_dates/i18n/sl.po new file mode 100644 index 00000000000..f1b7acf9d11 --- /dev/null +++ b/addons/sale_order_dates/i18n/sl.po @@ -0,0 +1,70 @@ +# Slovenian 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:16+0000\n" +"PO-Revision-Date: 2011-11-16 22:18+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Slovenian <sl@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-17 05:22+0000\n" +"X-Generator: Launchpad (build 14291)\n" + +#. module: sale_order_dates +#: sql_constraint:sale.order:0 +msgid "Order Reference must be unique !" +msgstr "Referenca naročila more biti unikatna!" + +#. module: sale_order_dates +#: help:sale.order,requested_date:0 +msgid "Date on which customer has requested for sales." +msgstr "" + +#. module: sale_order_dates +#: field:sale.order,commitment_date:0 +msgid "Commitment Date" +msgstr "" + +#. module: sale_order_dates +#: field:sale.order,effective_date:0 +msgid "Effective Date" +msgstr "" + +#. module: sale_order_dates +#: model:ir.module.module,shortdesc:sale_order_dates.module_meta_information +msgid "Sales Order Dates" +msgstr "" + +#. module: sale_order_dates +#: help:sale.order,effective_date:0 +msgid "Date on which picking is created." +msgstr "" + +#. module: sale_order_dates +#: field:sale.order,requested_date:0 +msgid "Requested Date" +msgstr "Zahtevan Datum" + +#. module: sale_order_dates +#: model:ir.model,name:sale_order_dates.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: sale_order_dates +#: model:ir.module.module,description:sale_order_dates.module_meta_information +msgid "" +"\n" +"Add commitment, requested and effective dates on the sales order.\n" +msgstr "" + +#. module: sale_order_dates +#: help:sale.order,commitment_date:0 +msgid "Date on which delivery of products is to be made." +msgstr "" diff --git a/addons/share/__init__.py b/addons/share/__init__.py index e3c3acf1bc5..0ad202a6162 100644 --- a/addons/share/__init__.py +++ b/addons/share/__init__.py @@ -22,3 +22,5 @@ import ir_model import res_users import wizard + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/share/ir_model.py b/addons/share/ir_model.py index 437a0c51095..0927462b5c3 100644 --- a/addons/share/ir_model.py +++ b/addons/share/ir_model.py @@ -43,4 +43,6 @@ class ir_model_access(osv.osv): a.perm_''' + access_mode, (model_name,)) return [x[0] for x in cr.fetchall()] -ir_model_access()
\ No newline at end of file +ir_model_access() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/share/res_users.py b/addons/share/res_users.py index 07031ab3845..f7a81a24948 100644 --- a/addons/share/res_users.py +++ b/addons/share/res_users.py @@ -37,3 +37,5 @@ class res_users(osv.osv): help="External user with limited access, created only for the purpose of sharing data.") } res_users() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/share/wizard/__init__.py b/addons/share/wizard/__init__.py index 2034dfe2fc6..1dae9e7a508 100644 --- a/addons/share/wizard/__init__.py +++ b/addons/share/wizard/__init__.py @@ -21,3 +21,5 @@ import share_wizard + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index 1cd8104100c..5f33f02f9e5 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -754,3 +754,5 @@ class share_result_line(osv.osv_memory): 'newly_created': True, } share_result_line() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/__init__.py b/addons/stock/__init__.py index 78abee6d31d..0a241209593 100644 --- a/addons/stock/__init__.py +++ b/addons/stock/__init__.py @@ -25,4 +25,4 @@ import product import report import wizard -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py index 698ac7c8546..9608aa9d8ad 100644 --- a/addons/stock/__openerp__.py +++ b/addons/stock/__openerp__.py @@ -79,7 +79,7 @@ Thanks to the double entry management, the inventory controlling is powerful and "partner_view.xml", "report/report_stock_move_view.xml", "report/report_stock_view.xml", - "board_warehouse_view.xml" + "board_warehouse_view.xml", ], 'test': [ 'test/stock_test.yml', @@ -91,3 +91,5 @@ Thanks to the double entry management, the inventory controlling is powerful and 'active': False, 'certificate': '0055421559965', } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/board_warehouse_view.xml b/addons/stock/board_warehouse_view.xml index 91245381e2f..3c645aecb5b 100644 --- a/addons/stock/board_warehouse_view.xml +++ b/addons/stock/board_warehouse_view.xml @@ -28,7 +28,7 @@ <field name="view_mode">graph,tree</field> <field name="domain">[('type','=','in'),('day','<=', time.strftime('%Y-%m-%d')),('day','>',(datetime.date.today()-datetime.timedelta(days=15)).strftime('%Y-%m-%d'))]</field> <field name="view_id" ref="stock.view_stock_graph_board"></field> - <field name="context">{'search_default_month-1':1,'search_default_in':1,'group_by':['day'], 'group_by_no_leaf':1}</field> + <field name="context">{'default_type':'in','search_default_month-1':1,'search_default_in':1,'group_by':['day'], 'group_by_no_leaf':1}</field> </record> <record model="ir.actions.act_window" id="action_stock_outgoing_product_delay"> <field name="name">Outgoing Products Delay</field> @@ -37,7 +37,7 @@ <field name="view_mode">graph,tree</field> <field name="domain">[('type','=','out'),('day','<=', time.strftime('%Y-%m-%d')),('day','>',(datetime.date.today()-datetime.timedelta(days=15)).strftime('%Y-%m-%d'))]</field> <field name="view_id" ref="stock.view_stock_graph_board"></field> - <field name="context">{'search_default_month-1':1,'search_default_out':1,'group_by':['day'], 'group_by_no_leaf':1}</field> + <field name="context">{'default_type':'out','search_default_month-1':1,'search_default_out':1,'group_by':['day'], 'group_by_no_leaf':1}</field> </record> <record id="board_warehouse_form" model="ir.ui.view"> <field name="name">board.warehouse.form</field> @@ -45,17 +45,17 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Warehouse board"> - <hpaned position="200"> - <child1> - <action colspan="4" name="%(action_incoming_product_board)d" string="Incoming Product" width="510"/> - <action colspan="4" name="%(action_outgoing_product_board)d" string="Outgoing Product" width="510"/> - </child1> + <board style="1-2"> + <column> + <action name="%(action_incoming_product_board)d" string="Incoming Product"/> + <action name="%(action_outgoing_product_board)d" string="Outgoing Product"/> + </column> - <child2> - <action colspan="4" name="%(action_stock_incoming_product_delay)d" string="Incoming Products Delay" /> - <action colspan="4" name="%(action_stock_outgoing_product_delay)d" string="Outgoing Products Delay" /> - </child2> - </hpaned> + <column> + <action name="%(action_stock_incoming_product_delay)d" string="Incoming Products Delay"/> + <action name="%(action_stock_outgoing_product_delay)d" string="Outgoing Products Delay"/> + </column> + </board> </form> </field> </record> diff --git a/addons/stock/report/__init__.py b/addons/stock/report/__init__.py index 412e77f3f17..e1e083c2a8d 100644 --- a/addons/stock/report/__init__.py +++ b/addons/stock/report/__init__.py @@ -27,3 +27,5 @@ import report_stock_move import stock_inventory_move_report import lot_overview + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/report/report_stock_move.py b/addons/stock/report/report_stock_move.py index 7bf817811c4..520efc229a0 100644 --- a/addons/stock/report/report_stock_move.py +++ b/addons/stock/report/report_stock_move.py @@ -222,3 +222,5 @@ CREATE OR REPLACE view report_stock_inventory AS ( report_stock_inventory() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 34b601a712c..292cd052d5a 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -661,6 +661,9 @@ class stock_picking(osv.osv): 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.picking', context=c) } + _sql_constraints = [ + ('name_uniq', 'unique(name, company_id)', 'Reference must be unique per Company!'), + ] def action_process(self, cr, uid, ids, context=None): if context is None: context = {} @@ -1525,7 +1528,7 @@ class stock_move(osv.osv): return True _columns = { - 'name': fields.char('Name', size=64, required=True, select=True), + 'name': fields.char('Name', size=250, required=True, select=True), 'priority': fields.selection([('0', 'Not urgent'), ('1', 'Urgent')], 'Priority'), 'create_date': fields.datetime('Creation Date', readonly=True, select=True), 'date': fields.datetime('Date', required=True, select=True, help="Move date: scheduled date until move is done, then date of actual move processing", states={'done': [('readonly', True)]}), diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index 8575fa4bd0e..6cd9d61f6c4 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -479,7 +479,6 @@ <field name="model">stock.move</field> <field name="name">Downstream traceability</field> <field eval="'ir.actions.act_window,'+str(action3)" name="value"/> - <field eval="True" name="object"/> </record> <record id="action5" model="ir.actions.act_window"> @@ -496,7 +495,6 @@ <field name="model">stock.move</field> <field name="name">Upstream traceability</field> <field eval="'ir.actions.act_window,'+str(action5)" name="value"/> - <field eval="True" name="object"/> </record> <record id="view_location_form" model="ir.ui.view"> @@ -1060,7 +1058,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form,calendar</field> <field name="domain">[('type','=','out')]</field> - <field name="context">{'contact_display': 'partner_address', 'search_default_available': 1}</field> + <field name="context">{'default_type': 'out', 'contact_display': 'partner_address', 'search_default_available': 1}</field> <field name="search_view_id" ref="view_picking_out_search"/> <field name="help">This is the list of all delivery orders that have to be prepared, according to your different sales orders and your logistics rules.</field> </record> @@ -1337,7 +1335,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form,calendar</field> <field name="domain">[('type','=','internal')]</field> - <field name="context">{'contact_display': 'partner_address',"search_default_available":1}</field> + <field name="context">{'default_type': 'internal', 'contact_display': 'partner_address', 'search_default_available': 1}</field> <field name="search_view_id" ref="view_picking_internal_search"/> <field name="help">Internal Moves display all inventory operations you have to perform in your warehouse. All operations can be categorized into stock journals, so that each worker has his own list of operations to perform in his own journal. Most operations are prepared automatically by OpenERP according to your preconfigured logistics rules, but you can also record manual stock operations.</field> </record> @@ -1827,7 +1825,6 @@ <field name="model">stock.location</field> <field name="name">Products</field> <field eval="'ir.actions.act_window,%d'%act_product_location_open" name="value"/> - <field eval="True" name="object"/> </record> @@ -1836,7 +1833,6 @@ <field name="model">stock.location</field> <field name="name">Open Products</field> <field eval="'ir.actions.act_window,%d'%action_view_stock_location_product" name="value"/> - <field eval="True" name="object"/> </record> <record id="action_picking_tree_out" model="ir.actions.act_window"> <field name="name">Customers Packings</field> @@ -1845,7 +1841,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form,calendar</field> <field name="domain">[('type','=','out')]</field> - <field name="context">{'contact_display': 'partner',"search_default_available":1}</field> + <field name="context">{'default_type': 'out', 'contact_display': 'partner',"search_default_available":1}</field> <field name="search_view_id" ref="view_picking_in_search"/> </record> <record id="action_invoice_tree5_out" model="ir.actions.act_window.view"> diff --git a/addons/stock/wizard/stock_change_standard_price.py b/addons/stock/wizard/stock_change_standard_price.py index fa36559dddc..d4ca8d1138f 100644 --- a/addons/stock/wizard/stock_change_standard_price.py +++ b/addons/stock/wizard/stock_change_standard_price.py @@ -117,3 +117,5 @@ class change_standard_price(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} change_standard_price() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_location_product.py b/addons/stock/wizard/stock_location_product.py index ba1f74ee0a1..49dc048d0ab 100644 --- a/addons/stock/wizard/stock_location_product.py +++ b/addons/stock/wizard/stock_location_product.py @@ -34,22 +34,24 @@ class stock_location_product(osv.osv_memory): @param self: The object pointer. @param cr: A database cursor @param uid: ID of the user currently logged in - @param ids: An ID or list of IDs if we want more than one + @param ids: An ID or list of IDs (but only the first ID will be processed) @param context: A standard dictionary @return: Invoice type """ - mod_obj = self.pool.get('ir.model.data') - for location_obj in self.read(cr, uid, ids, ['from_date', 'to_date'], context=context): + if context is None: + context = {} + location_products = self.read(cr, uid, ids, ['from_date', 'to_date'], context=context) + if location_products: return { - 'name': False, - 'view_type': 'form', - 'view_mode': 'tree,form', - 'res_model': 'product.product', - 'type': 'ir.actions.act_window', - 'context': {'location': context['active_id'], - 'from_date': location_obj['from_date'], - 'to_date': location_obj['to_date']}, - 'domain': [('type', '<>', 'service')], + 'name': False, + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'product.product', + 'type': 'ir.actions.act_window', + 'context': {'location': context['active_id'], + 'from_date': location_products[0]['from_date'], + 'to_date': location_products[0]['to_date']}, + 'domain': [('type', '<>', 'service')], } stock_location_product() diff --git a/addons/stock/wizard/stock_move.py b/addons/stock/wizard/stock_move.py index 9ff0c96a3b8..f8ef095fb01 100644 --- a/addons/stock/wizard/stock_move.py +++ b/addons/stock/wizard/stock_move.py @@ -268,3 +268,5 @@ class stock_move_split_lines_exist(osv.osv_memory): loc_id=False, product_id=False, uom_id=False): return self.pool.get('stock.move').onchange_lot_id(cr, uid, [], prodlot_id, product_qty, loc_id, product_id, uom_id) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_partial_move_view.xml b/addons/stock/wizard/stock_partial_move_view.xml index 2df6adcc9e7..b2b9ab69287 100644 --- a/addons/stock/wizard/stock_partial_move_view.xml +++ b/addons/stock/wizard/stock_partial_move_view.xml @@ -13,7 +13,6 @@ <field eval="'stock.move'" name="model"/> <field name="name">Deliver/Receive Products</field> <field eval="'ir.actions.server,%d'%action_partial_move_server" name="value"/> - <field eval="True" name="object"/> </record> <record id="stock_partial_move_form" model="ir.ui.view"> diff --git a/addons/stock/wizard/stock_splitinto.py b/addons/stock/wizard/stock_splitinto.py index 1f48c8cfc19..78396656389 100644 --- a/addons/stock/wizard/stock_splitinto.py +++ b/addons/stock/wizard/stock_splitinto.py @@ -82,3 +82,5 @@ class stock_split_into(osv.osv_memory): return {'type': 'ir.actions.act_window_close'} stock_split_into() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock_invoice_directly/i18n/oc.po b/addons/stock_invoice_directly/i18n/oc.po new file mode 100644 index 00000000000..e831eb21aee --- /dev/null +++ b/addons/stock_invoice_directly/i18n/oc.po @@ -0,0 +1,37 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-03 16:58+0000\n" +"PO-Revision-Date: 2011-11-20 09:30+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: stock_invoice_directly +#: model:ir.model,name:stock_invoice_directly.model_stock_partial_picking +msgid "Partial Picking" +msgstr "Tractament parcial" + +#. module: stock_invoice_directly +#: model:ir.module.module,description:stock_invoice_directly.module_meta_information +msgid "" +"\n" +" When you send or deliver goods, this module automatically launch\n" +" the invoicing wizard if the delivery is to be invoiced.\n" +" " +msgstr "" + +#. module: stock_invoice_directly +#: model:ir.module.module,shortdesc:stock_invoice_directly.module_meta_information +msgid "Invoice Picking Directly" +msgstr "Facturar la liurason dirèctament" diff --git a/addons/stock_location/__openerp__.py b/addons/stock_location/__openerp__.py index 1c4b7841a10..63d145136c5 100644 --- a/addons/stock_location/__openerp__.py +++ b/addons/stock_location/__openerp__.py @@ -102,3 +102,5 @@ You can use the demo data as follow: 'active': False, 'certificate': '0046505115101', } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock_location/procurement_pull.py b/addons/stock_location/procurement_pull.py index 7122e5ccd12..0846fe067eb 100644 --- a/addons/stock_location/procurement_pull.py +++ b/addons/stock_location/procurement_pull.py @@ -121,4 +121,6 @@ class procurement_order(osv.osv): wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr) return False -procurement_order()
\ No newline at end of file +procurement_order() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock_no_autopicking/i18n/oc.po b/addons/stock_no_autopicking/i18n/oc.po new file mode 100644 index 00000000000..2e8cda677ab --- /dev/null +++ b/addons/stock_no_autopicking/i18n/oc.po @@ -0,0 +1,70 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-03 16:58+0000\n" +"PO-Revision-Date: 2011-11-20 09:30+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: stock_no_autopicking +#: model:ir.model,name:stock_no_autopicking.model_product_product +msgid "Product" +msgstr "Produch" + +#. module: stock_no_autopicking +#: model:ir.module.module,description:stock_no_autopicking.module_meta_information +msgid "" +"\n" +" This module allows an intermediate picking process to provide raw " +"materials\n" +" to production orders.\n" +"\n" +" One example of usage of this module is to manage production made by " +"your\n" +" suppliers (sub-contracting). To achieve this, set the assembled product\n" +" which is sub-contracted to \"No Auto-Picking\" and put the location of " +"the\n" +" supplier in the routing of the assembly operation.\n" +" " +msgstr "" + +#. module: stock_no_autopicking +#: model:ir.model,name:stock_no_autopicking.model_mrp_production +msgid "Manufacturing Order" +msgstr "Òrdre de fabricacion" + +#. module: stock_no_autopicking +#: field:product.product,auto_pick:0 +msgid "Auto Picking" +msgstr "Prelevament automatic" + +#. module: stock_no_autopicking +#: help:product.product,auto_pick:0 +msgid "Auto picking for raw materials of production orders." +msgstr "" + +#. module: stock_no_autopicking +#: constraint:product.product:0 +msgid "Error: Invalid ean code" +msgstr "Error : Còde ean invalid" + +#. module: stock_no_autopicking +#: model:ir.module.module,shortdesc:stock_no_autopicking.module_meta_information +msgid "Stock No Auto-Picking" +msgstr "" + +#. module: stock_no_autopicking +#: constraint:mrp.production:0 +msgid "Order quantity cannot be negative or zero !" +msgstr "" diff --git a/addons/stock_no_autopicking/test/stock_no_autopicking.yml b/addons/stock_no_autopicking/test/stock_no_autopicking.yml index 99c2db37177..f3620ce655e 100644 --- a/addons/stock_no_autopicking/test/stock_no_autopicking.yml +++ b/addons/stock_no_autopicking/test/stock_no_autopicking.yml @@ -142,11 +142,9 @@ product_uos_qty: 0.0 bom_id: mrp_bom_cupoftea0 routing_id: mrp_routing_productionrouting0 - company_id: base.main_company date_planned: !eval time.strftime('%Y-%m-%d %H:%M:%S') location_dest_id: stock.stock_location_stock location_src_id: stock.stock_location_stock - name: MO/00002 - I compute the data of production order. - diff --git a/addons/stock_planning/wizard/__init__.py b/addons/stock_planning/wizard/__init__.py index 1e9d74d0394..876b4afdf68 100644 --- a/addons/stock_planning/wizard/__init__.py +++ b/addons/stock_planning/wizard/__init__.py @@ -22,3 +22,5 @@ import stock_planning_create_periods import stock_planning_forecast import stock_planning_createlines + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/thunderbird/__init__.py b/addons/thunderbird/__init__.py index 68afc0cccf9..33d232b3f50 100644 --- a/addons/thunderbird/__init__.py +++ b/addons/thunderbird/__init__.py @@ -21,3 +21,5 @@ import partner import installer + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/thunderbird/__openerp__.py b/addons/thunderbird/__openerp__.py index 5b124af05aa..53a704d2f1b 100644 --- a/addons/thunderbird/__openerp__.py +++ b/addons/thunderbird/__openerp__.py @@ -45,3 +45,5 @@ HR Applicant and Project Issue from selected mails. "certificate" : "00899858104035139949", 'images': ['images/config_thunderbird.jpeg','images/config_thunderbird_plugin.jpeg','images/thunderbird_document.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/thunderbird/installer.py b/addons/thunderbird/installer.py index 35d31b9d636..4cbcec9fff0 100644 --- a/addons/thunderbird/installer.py +++ b/addons/thunderbird/installer.py @@ -68,3 +68,5 @@ Configure OpenERP in Thunderbird: } thunderbird_installer() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/thunderbird/partner/__init__.py b/addons/thunderbird/partner/__init__.py index 8eee7a82e06..5583bc0e78a 100644 --- a/addons/thunderbird/partner/__init__.py +++ b/addons/thunderbird/partner/__init__.py @@ -21,3 +21,5 @@ import partner + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/thunderbird/partner/partner.py b/addons/thunderbird/partner/partner.py index 80a4bfa4d98..3ce48281de7 100644 --- a/addons/thunderbird/partner/partner.py +++ b/addons/thunderbird/partner/partner.py @@ -281,3 +281,5 @@ class thunderbird_partner(osv.osv_memory): return object
thunderbird_partner()
+ +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web_livechat/__init__.py b/addons/web_livechat/__init__.py index 9af39b2f58c..761db42923c 100644 --- a/addons/web_livechat/__init__.py +++ b/addons/web_livechat/__init__.py @@ -18,3 +18,5 @@ # ############################################################################## import publisher_warranty + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web_livechat/__openerp__.py b/addons/web_livechat/__openerp__.py index 750c4ca7ec5..66d365b5636 100644 --- a/addons/web_livechat/__openerp__.py +++ b/addons/web_livechat/__openerp__.py @@ -47,3 +47,5 @@ Add "Support" button in header from where you can access OpenERP Support. 'certificate': '0013762192410413', 'images': ['static/src/img/web_livechat_support.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web_livechat/i18n/oc.po b/addons/web_livechat/i18n/oc.po new file mode 100644 index 00000000000..5b19d5b8c77 --- /dev/null +++ b/addons/web_livechat/i18n/oc.po @@ -0,0 +1,41 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:29+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: web_livechat +#: sql_constraint:publisher_warranty.contract:0 +msgid "" +"Your publisher warranty contract is already subscribed in the system !" +msgstr "" + +#. module: web_livechat +#: model:ir.module.module,shortdesc:web_livechat.module_meta_information +msgid "Live Chat Support" +msgstr "Supòrt per messatjariá instantanèa" + +#. module: web_livechat +#: model:ir.model,name:web_livechat.model_publisher_warranty_contract +msgid "publisher_warranty.contract" +msgstr "publisher_warranty.contract" + +#. module: web_livechat +#: model:ir.module.module,description:web_livechat.module_meta_information +msgid "Enable live chat support for whom have a maintenance contract" +msgstr "" +"Validar lo supòrt per messatjariá instantanèa pels detentors d'un contracte " +"de mantenença" diff --git a/addons/web_livechat/publisher_warranty.py b/addons/web_livechat/publisher_warranty.py index 132e78d013e..b0a7e793ecf 100644 --- a/addons/web_livechat/publisher_warranty.py +++ b/addons/web_livechat/publisher_warranty.py @@ -48,3 +48,5 @@ class publisher_warranty_contract(osv.osv): publisher_warranty_contract() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web_uservoice/__init__.py b/addons/web_uservoice/__init__.py index b0c3c528f28..ac2fe14a5c1 100644 --- a/addons/web_uservoice/__init__.py +++ b/addons/web_uservoice/__init__.py @@ -18,3 +18,5 @@ # ############################################################################## + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web_uservoice/__openerp__.py b/addons/web_uservoice/__openerp__.py index 64b443be3e2..41f80d4f7d1 100644 --- a/addons/web_uservoice/__openerp__.py +++ b/addons/web_uservoice/__openerp__.py @@ -44,3 +44,5 @@ Invite OpenERP user feedback, powered by uservoice. ], 'images': ['static/src/img/submit_an_idea.jpeg', 'static/src/img/web_uservoice_feedback.jpeg'], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web_uservoice/i18n/oc.po b/addons/web_uservoice/i18n/oc.po new file mode 100644 index 00000000000..3867b8c4947 --- /dev/null +++ b/addons/web_uservoice/i18n/oc.po @@ -0,0 +1,29 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-12 16:15+0000\n" +"PO-Revision-Date: 2011-11-20 09:28+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: web_uservoice +#: model:ir.module.module,shortdesc:web_uservoice.module_meta_information +msgid "Add uservoice button in header" +msgstr "Apondre un boton \"viscut utilizaire\" dins l'entèsta" + +#. module: web_uservoice +#: code:addons/web_uservoice/web/editors.py:72 +#, python-format +msgid "feedback" +msgstr "retorn d'experiéncia" diff --git a/addons/wiki/web/__init__.py b/addons/wiki/web/__init__.py index 5b55f6cf43b..6fb28f7f2ad 100644 --- a/addons/wiki/web/__init__.py +++ b/addons/wiki/web/__init__.py @@ -1,2 +1,4 @@ import widgets import controllers + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/wiki/web/controllers/__init__.py b/addons/wiki/web/controllers/__init__.py index 8c163ddd260..e1edf0f0f96 100644 --- a/addons/wiki/web/controllers/__init__.py +++ b/addons/wiki/web/controllers/__init__.py @@ -1 +1,3 @@ import wiki + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/wiki/web/controllers/wiki.py b/addons/wiki/web/controllers/wiki.py index f4b0527e1e2..2f147827f24 100644 --- a/addons/wiki/web/controllers/wiki.py +++ b/addons/wiki/web/controllers/wiki.py @@ -61,3 +61,5 @@ class WikiView(SecuredController): res, file_name = self.get_attachment(**kws) cherrypy.response.headers['Content-Disposition'] = 'filename="%s"' % (file_name,) return base64.decodestring(res) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/wiki/web/widgets/__init__.py b/addons/wiki/web/widgets/__init__.py index a3caa17e700..4b2c273d02a 100644 --- a/addons/wiki/web/widgets/__init__.py +++ b/addons/wiki/web/widgets/__init__.py @@ -1 +1,3 @@ from wiki import WikiWidget + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/wiki/web/widgets/rss/__init__.py b/addons/wiki/web/widgets/rss/__init__.py index 464c4364414..ff95e8bd52a 100644 --- a/addons/wiki/web/widgets/rss/__init__.py +++ b/addons/wiki/web/widgets/rss/__init__.py @@ -1 +1,3 @@ -import feedparser
\ No newline at end of file +import feedparser + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/wiki/web/widgets/rss/feedparser.py b/addons/wiki/web/widgets/rss/feedparser.py index 6f30574d300..885050d49f8 100755 --- a/addons/wiki/web/widgets/rss/feedparser.py +++ b/addons/wiki/web/widgets/rss/feedparser.py @@ -2856,3 +2856,5 @@ if __name__ == '__main__': # terminology; parse RFC 822-style dates with no time; lots of other # bug fixes #4.1 - MAP - removed socket timeout; added support for chardet library + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/wiki/web/widgets/wiki.py b/addons/wiki/web/widgets/wiki.py index 0f7240f6fcc..ccf2a75899c 100644 --- a/addons/wiki/web/widgets/wiki.py +++ b/addons/wiki/web/widgets/wiki.py @@ -220,3 +220,5 @@ class WikiWidget(Text): self.data = html register_widget(WikiWidget, ["text_wiki"]) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/wiki/web/widgets/wikimarkup/__init__.py b/addons/wiki/web/widgets/wikimarkup/__init__.py index 5eceea0e86d..f5fe67fada1 100644 --- a/addons/wiki/web/widgets/wikimarkup/__init__.py +++ b/addons/wiki/web/widgets/wikimarkup/__init__.py @@ -2142,3 +2142,5 @@ def str2url(str): for i in zip(mfrom, to): str = str.replace(*i) return str + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/wiki/wiki.py b/addons/wiki/wiki.py index 940d7116099..fa1dca8e95a 100644 --- a/addons/wiki/wiki.py +++ b/addons/wiki/wiki.py @@ -125,9 +125,9 @@ class wiki_wiki2(osv.osv): 'child_ids': fields.one2many('wiki.wiki', 'parent_id', 'Child Pages'), } _defaults = { - 'toc': lambda *a: True, - 'review': lambda *a: True, - 'minor_edit': lambda *a: True, + 'toc': True, + 'review': True, + 'minor_edit': True, } def onchange_group_id(self, cr, uid, ids, group_id, content, context=None): diff --git a/addons/wiki/wiki_view.xml b/addons/wiki/wiki_view.xml index 98e44ae669d..32880ac2309 100644 --- a/addons/wiki/wiki_view.xml +++ b/addons/wiki/wiki_view.xml @@ -264,7 +264,6 @@ <field name="model">wiki.groups</field> <field name="name">Search a Page</field> <field eval="'ir.actions.wizard,%d'%action_view_wiki_wiki_page_open" name="value"/> - <field eval="True" name="object"/> </record> </data> diff --git a/addons/wiki_faq/i18n/oc.po b/addons/wiki_faq/i18n/oc.po new file mode 100644 index 00000000000..c9408fe9635 --- /dev/null +++ b/addons/wiki_faq/i18n/oc.po @@ -0,0 +1,32 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:27+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: wiki_faq +#: model:ir.module.module,description:wiki_faq.module_meta_information +msgid "" +"This module provides a wiki FAQ Template\n" +" " +msgstr "" +"Aqueste modul provesís un modèl de FAQ Wiki\n" +" " + +#. module: wiki_faq +#: model:ir.module.module,shortdesc:wiki_faq.module_meta_information +msgid "Document Management - Wiki - FAQ" +msgstr "Gestion documentària - Wiki - FAQ" diff --git a/addons/wiki_quality_manual/i18n/oc.po b/addons/wiki_quality_manual/i18n/oc.po new file mode 100644 index 00000000000..28a4d42ec98 --- /dev/null +++ b/addons/wiki_quality_manual/i18n/oc.po @@ -0,0 +1,32 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:27+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: wiki_quality_manual +#: model:ir.module.module,description:wiki_quality_manual.module_meta_information +msgid "" +"Quality Manual Template\n" +" " +msgstr "" +"Modèl de manual qualitat\n" +" " + +#. module: wiki_quality_manual +#: model:ir.module.module,shortdesc:wiki_quality_manual.module_meta_information +msgid "Document Management - Wiki - Quality Manual" +msgstr "Gestion documentària - Wiki - Manual Qualitat" diff --git a/addons/wiki_sale_faq/i18n/oc.po b/addons/wiki_sale_faq/i18n/oc.po new file mode 100644 index 00000000000..dfe98f46645 --- /dev/null +++ b/addons/wiki_sale_faq/i18n/oc.po @@ -0,0 +1,68 @@ +# Occitan (post 1500) 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 <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:16+0000\n" +"PO-Revision-Date: 2011-11-20 09:26+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Occitan (post 1500) <oc@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-11-21 05:22+0000\n" +"X-Generator: Launchpad (build 14299)\n" + +#. module: wiki_sale_faq +#: model:ir.actions.act_window,name:wiki_sale_faq.action_document_form +#: model:ir.ui.menu,name:wiki_sale_faq.menu_document_files +#: model:ir.ui.menu,name:wiki_sale_faq.menu_sales +msgid "Documents" +msgstr "Documents" + +#. module: wiki_sale_faq +#: model:ir.actions.act_window,name:wiki_sale_faq.action_wiki_test +msgid "Wiki Pages" +msgstr "Paginas del wiki" + +#. module: wiki_sale_faq +#: model:ir.ui.menu,name:wiki_sale_faq.menu_action_wiki_wiki +msgid "FAQ" +msgstr "Questions frequentas (FAQ)" + +#. module: wiki_sale_faq +#: model:ir.module.module,description:wiki_sale_faq.module_meta_information +msgid "" +"This module provides a wiki FAQ Template\n" +" " +msgstr "" + +#. module: wiki_sale_faq +#: model:ir.actions.act_window,help:wiki_sale_faq.action_wiki_test +msgid "" +"Wiki pages allow you to share ideas and questions with coworkers. You can " +"create a new document that can be linked to one or several applications " +"(specifications of a project, FAQ for sales teams, etc.). Keywords can be " +"used to easily tag wiki pages. You should use this application with the " +"OpenERP web client interface." +msgstr "" + +#. module: wiki_sale_faq +#: model:ir.module.module,shortdesc:wiki_sale_faq.module_meta_information +msgid "Wiki -Sale - FAQ" +msgstr "FAQ Wiki Vendas" + +#. module: wiki_sale_faq +#: model:ir.actions.act_window,help:wiki_sale_faq.action_document_form +msgid "" +"Documents give you access to all files attached to any record. It is a " +"repository of all documents such as emails, project-related attachments or " +"any other documents. From this view, you can search through the content of " +"the documents. OpenERP automatically assign meta data based on the record " +"like the related partner and indexes the content of .DOC, .ODT, .TXT, .SXW " +"and .PDF documents." +msgstr "" |
