[Merge]with trunk

bzr revid: mba@tinyerp.com-20140408123641-0qyrg1fmgguezmro
This commit is contained in:
Barad Mahendra 2014-04-08 18:06:41 +05:30
commit 0522e80ea5
80 changed files with 490 additions and 832 deletions

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2012-12-22 12:46+0000\n" "PO-Revision-Date: 2014-04-04 19:18+0000\n"
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n" "Last-Translator: Dariusz Żbikowski <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-03-27 06:26+0000\n" "X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
"X-Generator: Launchpad (build 16967)\n" "X-Generator: Launchpad (build 16976)\n"
#. module: account #. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0 #: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@ -989,6 +989,8 @@ msgid ""
" opening/closing fiscal " " opening/closing fiscal "
"year process." "year process."
msgstr "" msgstr ""
"Nie możesz anulować uzgodnień pozycji dziennika jeśli zostały one "
"wygenerowane procesem zamykania/otwierania roku."
#. module: account #. module: account
#: model:ir.actions.act_window,name:account.action_subscription_form_new #: model:ir.actions.act_window,name:account.action_subscription_form_new

View File

@ -34,7 +34,7 @@ class validate_account_move(osv.osv_memory):
if context is None: if context is None:
context = {} context = {}
data = self.read(cr, uid, ids[0], context=context) data = self.read(cr, uid, ids[0], context=context)
ids_move = obj_move.search(cr, uid, [('state','=','draft'),('journal_id','in',tuple(data['journal_ids'])),('period_id','in',tuple(data['period_ids']))]) ids_move = obj_move.search(cr, uid, [('state','=','draft'),('journal_id','in',tuple(data['journal_ids'])),('period_id','in',tuple(data['period_ids']))], order='date')
if not ids_move: if not ids_move:
raise osv.except_osv(_('Warning!'), _('Specified journals do not have any account move entries in draft state for the specified periods.')) raise osv.except_osv(_('Warning!'), _('Specified journals do not have any account move entries in draft state for the specified periods.'))
obj_move.button_validate(cr, uid, ids_move, context=context) obj_move.button_validate(cr, uid, ids_move, context=context)

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-12 17:49+0000\n" "PO-Revision-Date: 2014-04-04 19:44+0000\n"
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n" "Last-Translator: Dariusz Żbikowski <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-03-27 06:16+0000\n" "X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
"X-Generator: Launchpad (build 16967)\n" "X-Generator: Launchpad (build 16976)\n"
#. module: account_followup #. module: account_followup
#: model:email.template,subject:account_followup.email_template_account_followup_default #: model:email.template,subject:account_followup.email_template_account_followup_default
@ -109,7 +109,7 @@ msgstr "Kroki monitowania płatności"
#. module: account_followup #. module: account_followup
#: field:account_followup.print,email_body:0 #: field:account_followup.print,email_body:0
msgid "Email Body" msgid "Email Body"
msgstr "" msgstr "Treść email"
#. module: account_followup #. module: account_followup
#: model:ir.actions.act_window,name:account_followup.action_account_followup_print #: model:ir.actions.act_window,name:account_followup.action_account_followup_print
@ -403,7 +403,7 @@ msgstr "Monity o płatność"
#. module: account_followup #. module: account_followup
#: field:account_followup.followup.line,delay:0 #: field:account_followup.followup.line,delay:0
msgid "Due Days" msgid "Due Days"
msgstr "" msgstr "Dni zwłoki"
#. module: account_followup #. module: account_followup
#: field:account.move.line,followup_line_id:0 #: field:account.move.line,followup_line_id:0
@ -419,7 +419,7 @@ msgstr "Ostatni monit o płatność"
#. module: account_followup #. module: account_followup
#: model:ir.ui.menu,name:account_followup.menu_manual_reconcile_followup #: model:ir.ui.menu,name:account_followup.menu_manual_reconcile_followup
msgid "Reconcile Invoices & Payments" msgid "Reconcile Invoices & Payments"
msgstr "" msgstr "Uzgadnianie Faktur i Płatności"
#. module: account_followup #. module: account_followup
#: model:ir.ui.menu,name:account_followup.account_followup_s #: model:ir.ui.menu,name:account_followup.account_followup_s
@ -429,7 +429,7 @@ msgstr "Wykonaj manualnie monit o płatność"
#. module: account_followup #. module: account_followup
#: report:account_followup.followup.print:0 #: report:account_followup.followup.print:0
msgid "Li." msgid "Li."
msgstr "" msgstr "Sp."
#. module: account_followup #. module: account_followup
#: field:account_followup.print,email_conf:0 #: field:account_followup.print,email_conf:0
@ -499,6 +499,7 @@ msgstr "Monitowanie płatności"
#, python-format #, python-format
msgid "Email not sent because of email address of partner not filled in" msgid "Email not sent because of email address of partner not filled in"
msgstr "" msgstr ""
"Email nie został wysłany ponieważ adres email partnera nie został wypełniony"
#. module: account_followup #. module: account_followup
#: model:ir.model,name:account_followup.model_account_followup_followup #: model:ir.model,name:account_followup.model_account_followup_followup
@ -511,6 +512,8 @@ msgid ""
"Optionally you can assign a user to this field, which will make him " "Optionally you can assign a user to this field, which will make him "
"responsible for the action." "responsible for the action."
msgstr "" msgstr ""
"Opcjonalnie możesz przypisać użytkownika do tego pola, który stanie się "
"odpowiedzialny za tę akcję."
#. module: account_followup #. module: account_followup
#: model:ir.model,name:account_followup.model_account_followup_sending_results #: model:ir.model,name:account_followup.model_account_followup_sending_results
@ -528,7 +531,7 @@ msgstr ""
#: code:addons/account_followup/wizard/account_followup_print.py:172 #: code:addons/account_followup/wizard/account_followup_print.py:172
#, python-format #, python-format
msgid " manual action(s) assigned:" msgid " manual action(s) assigned:"
msgstr "" msgstr " ręczna akcja przypisana do:"
#. module: account_followup #. module: account_followup
#: view:res.partner:0 #: view:res.partner:0
@ -548,13 +551,13 @@ msgstr "Przeszukaj monity o płatność"
#. module: account_followup #. module: account_followup
#: view:res.partner:0 #: view:res.partner:0
msgid "Account Move line" msgid "Account Move line"
msgstr "" msgstr "Pozycja zapisu"
#. module: account_followup #. module: account_followup
#: code:addons/account_followup/wizard/account_followup_print.py:237 #: code:addons/account_followup/wizard/account_followup_print.py:237
#, python-format #, python-format
msgid "Send Letters and Emails: Actions Summary" msgid "Send Letters and Emails: Actions Summary"
msgstr "" msgstr "Listy i Email: Podsumowanie akcji"
#. module: account_followup #. module: account_followup
#: view:account_followup.print:0 #: view:account_followup.print:0
@ -916,7 +919,7 @@ msgstr ""
#. module: account_followup #. module: account_followup
#: view:res.partner:0 #: view:res.partner:0
msgid "Responsible" msgid "Responsible"
msgstr "" msgstr "Odpowiedzialny"
#. module: account_followup #. module: account_followup
#: model:ir.ui.menu,name:account_followup.menu_finance_followup #: model:ir.ui.menu,name:account_followup.menu_finance_followup
@ -945,7 +948,7 @@ msgstr "Działanie monitowania płatności"
#. module: account_followup #. module: account_followup
#: view:account_followup.stat:0 #: view:account_followup.stat:0
msgid "Including journal entries marked as a litigation" msgid "Including journal entries marked as a litigation"
msgstr "" msgstr "Załącz pozycje dziennika oznaczone jako sporne"
#. module: account_followup #. module: account_followup
#: report:account_followup.followup.print:0 #: report:account_followup.followup.print:0

View File

@ -732,12 +732,16 @@ class account_voucher(osv.osv):
total_credit = 0.0 total_credit = 0.0
total_debit = 0.0 total_debit = 0.0
account_type = 'receivable' account_type = None
if context.get('account_id'):
account_type = self.pool['account.account'].browse(cr, uid, context['account_id'], context=context).type
if ttype == 'payment': if ttype == 'payment':
if not account_type:
account_type = 'payable' account_type = 'payable'
total_debit = price or 0.0 total_debit = price or 0.0
else: else:
total_credit = price or 0.0 total_credit = price or 0.0
if not account_type:
account_type = 'receivable' account_type = 'receivable'
if not context.get('move_line_ids', False): if not context.get('move_line_ids', False):
@ -827,9 +831,9 @@ class account_voucher(osv.osv):
else: else:
default['value']['line_dr_ids'].append(rs) default['value']['line_dr_ids'].append(rs)
if ttype == 'payment' and len(default['value']['line_cr_ids']) > 0: if len(default['value']['line_cr_ids']) > 0:
default['value']['pre_line'] = 1 default['value']['pre_line'] = 1
elif ttype == 'receipt' and len(default['value']['line_dr_ids']) > 0: elif len(default['value']['line_dr_ids']) > 0:
default['value']['pre_line'] = 1 default['value']['pre_line'] = 1
default['value']['writeoff_amount'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, ttype) default['value']['writeoff_amount'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, ttype)
return default return default
@ -1662,7 +1666,7 @@ class account_bank_statement_line(osv.osv):
def _check_amount(self, cr, uid, ids, context=None): def _check_amount(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids, context=context): for obj in self.browse(cr, uid, ids, context=context):
if obj.voucher_id: if obj.voucher_id:
diff = abs(obj.amount) - obj.voucher_id.amount diff = abs(obj.amount) - abs(obj.voucher_id.amount)
if not self.pool.get('res.currency').is_zero(cr, uid, obj.statement_id.currency, diff): if not self.pool.get('res.currency').is_zero(cr, uid, obj.statement_id.currency, diff):
return False return False
return True return True

View File

@ -213,10 +213,10 @@
<field name="inherit_id" ref="account.view_bank_statement_form"/> <field name="inherit_id" ref="account.view_bank_statement_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//page[@name='statement_line_ids']/field[@name='line_ids']/tree/field[@name='amount']" position="after"> <xpath expr="//page[@name='statement_line_ids']/field[@name='line_ids']/tree/field[@name='amount']" position="after">
<field name="voucher_id" string="" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False}"/> <field name="voucher_id" string="" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False, 'account_id': account_id}"/>
</xpath> </xpath>
<xpath expr="//page[@name='statement_line_ids']/field[@name='line_ids']/form/group/field[@name='sequence']" position="before"> <xpath expr="//page[@name='statement_line_ids']/field[@name='line_ids']/form/group/field[@name='sequence']" position="before">
<field name="voucher_id" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False}"/> <field name="voucher_id" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False, 'account_id': account_id}"/>
</xpath> </xpath>
<field name="amount" position="attributes"> <field name="amount" position="attributes">
<attribute name="on_change">onchange_amount(amount)</attribute> <attribute name="on_change">onchange_amount(amount)</attribute>
@ -230,7 +230,7 @@
<field name="inherit_id" ref="account.view_bank_statement_form2"/> <field name="inherit_id" ref="account.view_bank_statement_form2"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//page/field[@name='line_ids']/tree/field[@name='amount']" position="after"> <xpath expr="//page/field[@name='line_ids']/tree/field[@name='amount']" position="after">
<field name="voucher_id" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name}"/> <field name="voucher_id" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'account_id': account_id}"/>
</xpath> </xpath>
</field> </field>
</record> </record>
@ -241,7 +241,7 @@
<field name="inherit_id" ref="account.view_bank_statement_form2"/> <field name="inherit_id" ref="account.view_bank_statement_form2"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//page/field[@name='line_ids']/form/group/field[@name='amount']" position="after"> <xpath expr="//page/field[@name='line_ids']/form/group/field[@name='amount']" position="after">
<field name="voucher_id" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name}"/> <field name="voucher_id" context="{'line_type': type, 'default_type': amount &lt; 0 and 'payment' or 'receipt', 'type': amount &lt; 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'account_id': account_id}"/>
</xpath> </xpath>
</field> </field>
</record> </record>

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n" "Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-12 18:01+0000\n" "PO-Revision-Date: 2014-04-04 19:12+0000\n"
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n" "Last-Translator: Dariusz Żbikowski <Unknown>\n"
"Language-Team: Polish <pl@li.org>\n" "Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-03-27 07:32+0000\n" "X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
"X-Generator: Launchpad (build 16967)\n" "X-Generator: Launchpad (build 16976)\n"
#. module: auth_signup #. module: auth_signup
#: field:res.partner,signup_type:0 #: field:res.partner,signup_type:0
@ -80,7 +80,7 @@ msgstr "Wprowadź hasło o potwierdź je"
#. module: auth_signup #. module: auth_signup
#: view:res.users:0 #: view:res.users:0
msgid "Send an email to the user to (re)set their password." msgid "Send an email to the user to (re)set their password."
msgstr "" msgstr "Wyślij email do użytkownika w celu zresetowania hasła"
#. module: auth_signup #. module: auth_signup
#. openerp-web #. openerp-web
@ -99,7 +99,7 @@ msgstr "Nowy"
#: code:addons/auth_signup/res_users.py:258 #: code:addons/auth_signup/res_users.py:258
#, python-format #, python-format
msgid "Mail sent to:" msgid "Mail sent to:"
msgstr "" msgstr "Mail wysłano do:"
#. module: auth_signup #. module: auth_signup
#: field:res.users,state:0 #: field:res.users,state:0
@ -191,7 +191,7 @@ msgstr "Proszę wprowadź nazwę użytkownika lub adres email."
#. module: auth_signup #. module: auth_signup
#: selection:res.users,state:0 #: selection:res.users,state:0
msgid "Resetting Password" msgid "Resetting Password"
msgstr "" msgstr "Resetowane hasło"
#. module: auth_signup #. module: auth_signup
#. openerp-web #. openerp-web

View File

@ -83,7 +83,7 @@ class base_gengo_translations(osv.osv_memory):
''' '''
Function called by the wizard. Function called by the wizard.
''' '''
if context == None: if context is None:
context = {} context = {}
flag, gengo = self.gengo_authentication(cr, uid, context=context) flag, gengo = self.gengo_authentication(cr, uid, context=context)
@ -116,8 +116,13 @@ class base_gengo_translations(osv.osv_memory):
if not flag: if not flag:
_logger.warning("%s", gengo) _logger.warning("%s", gengo)
else: else:
translation_id = translation_pool.search(cr, uid, [('state', '=', 'inprogress'), ('gengo_translation', 'in', ('machine','standard','pro','ultra')), ('job_id', "!=",False)], limit=limit, context=context) offset = 0
translation_terms = translation_pool.browse(cr, uid, translation_id, context=context) all_translation_ids = translation_pool.search(cr, uid, [('state', '=', 'inprogress'), ('gengo_translation', 'in', ('machine', 'standard', 'pro', 'ultra')), ('job_id', "!=", False)], context=context)
while True:
translation_ids = all_translation_ids[offset:offset + limit]
if translation_ids:
offset += limit
translation_terms = translation_pool.browse(cr, uid, translation_ids, context=context)
gengo_job_id = [term.job_id for term in translation_terms] gengo_job_id = [term.job_id for term in translation_terms]
if gengo_job_id: if gengo_job_id:
gengo_ids = ','.join(gengo_job_id) gengo_ids = ','.join(gengo_job_id)
@ -141,6 +146,8 @@ class base_gengo_translations(osv.osv_memory):
if vals: if vals:
translation_pool.write(cr, uid, term.id, vals) translation_pool.write(cr, uid, term.id, vals)
_logger.info("Successfully Updated `%d` terms and %d Comments." % (up_term, up_comment)) _logger.info("Successfully Updated `%d` terms and %d Comments." % (up_term, up_comment))
if not len(translation_ids) == limit:
break
return True return True
def _update_terms(self, cr, uid, response, context=None): def _update_terms(self, cr, uid, response, context=None):
@ -223,13 +230,17 @@ class base_gengo_translations(osv.osv_memory):
#but if this specific key is given, then we restrict the request on terms of this language only #but if this specific key is given, then we restrict the request on terms of this language only
lang_ids = [context.get('gengo_language')] lang_ids = [context.get('gengo_language')]
langs = [lang.code for lang in language_pool.browse(cr, uid, lang_ids, context=context)] langs = [lang.code for lang in language_pool.browse(cr, uid, lang_ids, context=context)]
offset = 0
all_term_ids = translation_pool.search(cr, uid, [('state', '=', 'to_translate'), ('gengo_translation', 'in', ('machine', 'standard', 'pro', 'ultra')), ('lang', 'in', langs), ('job_id', "=", False)], context=context)
while True:
#search for the n first terms to translate #search for the n first terms to translate
term_ids = translation_pool.search(cr, uid, [('state', '=', 'to_translate'), ('gengo_translation', 'in', ('machine','standard','pro','ultra')), ('lang', 'in', langs),('job_id',"=",False)], limit=limit, context=context) term_ids = all_term_ids[offset:offset + limit]
if term_ids: if term_ids:
offset += limit
self._send_translation_terms(cr, uid, term_ids, context=context) self._send_translation_terms(cr, uid, term_ids, context=context)
_logger.info("%s Translation terms have been posted to Gengo successfully", len(term_ids)) _logger.info("%s Translation terms have been posted to Gengo successfully", len(term_ids))
else: if not len(term_ids) == limit:
_logger.info('No Translation terms to process.') break
except Exception, e: except Exception, e:
_logger.error("%s", e) _logger.error("%s", e)

View File

@ -285,7 +285,7 @@ openerp.base_import = function (instance) {
callback(item_finder(default_value)); callback(item_finder(default_value));
}, },
placeholder: _t('Don\'t import'),
width: 'resolve', width: 'resolve',
dropdownCssClass: 'oe_import_selector' dropdownCssClass: 'oe_import_selector'
}); });

View File

@ -347,8 +347,7 @@
<tr class="oe_import_fields"> <tr class="oe_import_fields">
<!-- Iterate on first row to ensure we have all columns --> <!-- Iterate on first row to ensure we have all columns -->
<td t-foreach="preview[0]" t-as="column"> <td t-foreach="preview[0]" t-as="column">
<input placeholder="Don't Import" <input class="oe_import_match_field"/>
class="oe_import_match_field"/>
</td> </td>
</tr> </tr>
<tr t-foreach="preview" t-as="row" class="oe_import_grid-row"> <tr t-foreach="preview" t-as="row" class="oe_import_grid-row">

View File

@ -126,6 +126,7 @@ class res_partner(osv.osv):
continue continue
vat_country, vat_number = self._split_vat(partner.vat) vat_country, vat_number = self._split_vat(partner.vat)
if not check_func(cr, uid, vat_country, vat_number, context=context): if not check_func(cr, uid, vat_country, vat_number, context=context):
_logger.info(_("Importing VAT Number [%s] is not valid !" % vat_number))
return False return False
return True return True
@ -149,7 +150,9 @@ class res_partner(osv.osv):
vat_no = "'CC##' (CC=Country Code, ##=VAT Number)" vat_no = "'CC##' (CC=Country Code, ##=VAT Number)"
if default_vat_check(vat_country, vat_number): if default_vat_check(vat_country, vat_number):
vat_no = _ref_vat[vat_country] if vat_country in _ref_vat else vat_no vat_no = _ref_vat[vat_country] if vat_country in _ref_vat else vat_no
return '\n' + _('This VAT number does not seem to be valid.\nNote: the expected format is %s') % vat_no #Retrieve the current partner for wich the VAT is not valid
error_partner = self.browse(cr, uid, ids, context=context)
return '\n' + _('The VAT number [%s] for partner [%s] does not seem to be valid. \nNote: the expected format is %s') % (error_partner[0].vat, error_partner[0].name, vat_no)
_constraints = [(check_vat, _construct_constraint_msg, ["vat"])] _constraints = [(check_vat, _construct_constraint_msg, ["vat"])]

View File

@ -1298,9 +1298,14 @@ class calendar_event(osv.Model):
invitation['attendee'].append({'name': attendee.cn, 'status': attendee.state}) invitation['attendee'].append({'name': attendee.cn, 'status': attendee.state})
return invitation return invitation
def get_interval(self, cr, uid, ids, date, interval, context=None): def get_interval(self, cr, uid, ids, date, interval, tz=None, context=None):
#Function used only in calendar_event_data.xml for email template #Function used only in calendar_event_data.xml for email template
date = datetime.strptime(date.split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT) date = datetime.strptime(date.split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT)
if tz:
timezone = pytz.timezone(tz or 'UTC')
date = date.replace(tzinfo=pytz.timezone('UTC')).astimezone(timezone)
if interval == 'day': if interval == 'day':
res = str(date.day) res = str(date.day)
elif interval == 'month': elif interval == 'month':
@ -1582,6 +1587,8 @@ class mail_message(osv.Model):
return super(mail_message, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count) return super(mail_message, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count)
def _find_allowed_model_wise(self, cr, uid, doc_model, doc_dict, context=None): def _find_allowed_model_wise(self, cr, uid, doc_model, doc_dict, context=None):
if context is None:
context = {}
if doc_model == 'calendar.event': if doc_model == 'calendar.event':
order = context.get('order', self._order) order = context.get('order', self._order)
for virtual_id in self.pool[doc_model].get_recurrent_ids(cr, uid, doc_dict.keys(), [], order=order, context=context): for virtual_id in self.pool[doc_model].get_recurrent_ids(cr, uid, doc_dict.keys(), [], order=order, context=context):

View File

@ -147,7 +147,7 @@
${object.event_id.get_interval(object.event_id.date,'day')} ${object.event_id.get_interval(object.event_id.date,'day')}
</div> </div>
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div> <div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div>
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.event_id.get_interval(object.event_id.date, 'time')}</div> <div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${not object.event_id.allday and object.event_id.get_interval(object.event_id.date, 'time', tz=object.partner_id.tz) or ''}</div>
</td> </td>
<td> <td>
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;"> <table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
@ -212,7 +212,7 @@
<td colspan="3"> <td colspan="3">
: :
% for attendee in object.event_id.attendee_ids: % for attendee in object.event_id.attendee_ids:
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx["color"][attendee.state]};'></div> <div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx["color"][attendee.state] or 'white'};'></div>
% if attendee.cn != object.cn: % if attendee.cn != object.cn:
<span style="margin-left:5px">${attendee.cn}</span> <span style="margin-left:5px">${attendee.cn}</span>
% else: % else:
@ -227,9 +227,9 @@
</table> </table>
</div> </div>
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;"> <div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a> <a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/accept?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">Accept</a>
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a> <a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/decline?db=${'dbname' in ctx and ctx['dbname'] or '' }&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">Decline</a>
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a> <a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/view?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">View</a>
</div> </div>
</div> </div>
</body> </body>
@ -280,7 +280,7 @@
${object.event_id.get_interval(object.event_id.date,'day')} ${object.event_id.get_interval(object.event_id.date,'day')}
</div> </div>
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div> <div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div>
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.event_id.get_interval(object.event_id.date, 'time')}</div> <div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${not object.event_id.allday and object.event_id.get_interval(object.event_id.date, 'time', tz=object.partner_id.tz) or ''}</div>
</td> </td>
<td> <td>
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;"> <table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
@ -345,7 +345,7 @@
<td colspan="3"> <td colspan="3">
: :
% for attendee in object.event_id.attendee_ids: % for attendee in object.event_id.attendee_ids:
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx["color"][attendee.state]};'></div> <div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx["color"][attendee.state] or 'white'};'></div>
% if attendee.cn != object.cn: % if attendee.cn != object.cn:
<span style="margin-left:5px">${attendee.cn}</span> <span style="margin-left:5px">${attendee.cn}</span>
% else: % else:
@ -360,9 +360,9 @@
</table> </table>
</div> </div>
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;"> <div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a> <a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/accept?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">Accept</a>
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a> <a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/decline?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">Decline</a>
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a> <a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/view?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">View</a>
</div> </div>
</div> </div>
</body> </body>
@ -412,7 +412,7 @@
${object.event_id.get_interval(object.event_id.date,'day')} ${object.event_id.get_interval(object.event_id.date,'day')}
</div> </div>
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div> <div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div>
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.event_id.get_interval(object.event_id.date, 'time')}</div> <div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${not object.event_id.allday and object.event_id.get_interval(object.event_id.date, 'time', tz=object.partner_id.tz) or ''}</div>
</td> </td>
<td> <td>
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;"> <table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
@ -477,7 +477,7 @@
<td colspan="3"> <td colspan="3">
: :
% for attendee in object.event_id.attendee_ids: % for attendee in object.event_id.attendee_ids:
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx["color"][attendee.state]};'></div> <div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx["color"][attendee.state] or 'white'};'></div>
% if attendee.cn != object.cn: % if attendee.cn != object.cn:
<span style="margin-left:5px">${attendee.cn}</span> <span style="margin-left:5px">${attendee.cn}</span>
% else: % else:

View File

@ -241,10 +241,10 @@ class crm_lead(format_address, osv.osv):
'opt_out': fields.boolean('Opt-Out', oldname='optout', 'opt_out': fields.boolean('Opt-Out', oldname='optout',
help="If opt-out is checked, this contact has refused to receive emails for mass mailing and marketing campaign. " help="If opt-out is checked, this contact has refused to receive emails for mass mailing and marketing campaign. "
"Filter 'Available for Mass Mailing' allows users to filter the leads when performing mass mailing."), "Filter 'Available for Mass Mailing' allows users to filter the leads when performing mass mailing."),
'type':fields.selection([ ('lead','Lead'), ('opportunity','Opportunity'), ],'Type', help="Type is used to separate Leads and Opportunities"), 'type': fields.selection([ ('lead','Lead'), ('opportunity','Opportunity'), ],'Type', select=True, help="Type is used to separate Leads and Opportunities"),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True), 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
'date_closed': fields.datetime('Closed', readonly=True), 'date_closed': fields.datetime('Closed', readonly=True),
'stage_id': fields.many2one('crm.case.stage', 'Stage', track_visibility='onchange', 'stage_id': fields.many2one('crm.case.stage', 'Stage', track_visibility='onchange', select=True,
domain="['&', ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]"), domain="['&', ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]"),
'user_id': fields.many2one('res.users', 'Salesperson', select=True, track_visibility='onchange'), 'user_id': fields.many2one('res.users', 'Salesperson', select=True, track_visibility='onchange'),
'referred': fields.char('Referred By', size=64), 'referred': fields.char('Referred By', size=64),

View File

@ -1,19 +0,0 @@
openerp.crm_partner_assign = function (instance) {
instance.crm_partner_assign = instance.crm_partner_assign || {};
instance.crm_partner_assign.next_or_list = function(parent) {
var view = parent.inner_widget.active_view;
var controller = parent.inner_widget.views[view].controller;
if (view === "form"){
if (controller.dataset.size()) {
controller.execute_pager_action('next');
} else {
controller.do_action('history_back');
}
}
controller.do_action({ type: 'ir.actions.act_window_close' });
if (view === "list"){
controller.records.remove(controller.records.get(parent.dialog_widget.action.context.active_id));
}
};
instance.web.client_actions.add("next_or_list", "instance.crm_partner_assign.next_or_list");
}

View File

@ -63,15 +63,12 @@ class crm_lead_forward_to_partner(osv.TransientModel):
if wizard.comment: if wizard.comment:
message += '<p>%s</p>' % wizard.comment message += '<p>%s</p>' % wizard.comment
for active_id in context.get('active_ids', []): for active_id in context.get('active_ids', []):
lead_obj.message_post(cr, uid, active_id, body=message, context=context) lead_obj.message_post(cr, uid, active_id, body=message, subtype="mail.mt_comment", context=context)
if values: if values:
lead_obj.write(cr, SUPERUSER_ID, context.get('active_ids', []), values) lead_obj.write(cr, SUPERUSER_ID, context.get('active_ids', []), values)
if wizard.interested: if wizard.interested:
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context): for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
lead_obj.convert_opportunity(cr, SUPERUSER_ID, [lead.id], lead.partner_id and lead.partner_id.id or None, context=None) lead_obj.convert_opportunity(cr, SUPERUSER_ID, [lead.id], lead.partner_id and lead.partner_id.id or None, context=None)
return { return {
'type': 'ir.actions.client', 'type': 'ir.actions.act_window_close',
'tag': 'next_or_list',
'params': {
},
} }

View File

@ -58,20 +58,18 @@ class sale_order(osv.Model):
result.update(carrier_id=order.carrier_id.id) result.update(carrier_id=order.carrier_id.id)
return result return result
def _delivery_unset(self, cr, uid, order, context=None): def _delivery_unset(self, cr, uid, ids, context=None):
line_ids = [line.id for line in order.order_line if line.is_delivery] sale_obj = self.pool['sale.order.line']
self.pool['sale.order.line'].unlink(cr, uid, line_ids, context=context) line_ids = sale_obj.search(cr, uid, [('order_id', 'in', ids), ('is_delivery', '=', True)],context=context)
order.refresh() sale_obj.unlink(cr, uid, line_ids, context=context)
return True
def delivery_set(self, cr, uid, ids, context=None): def delivery_set(self, cr, uid, ids, context=None):
line_obj = self.pool.get('sale.order.line') line_obj = self.pool.get('sale.order.line')
grid_obj = self.pool.get('delivery.grid') grid_obj = self.pool.get('delivery.grid')
carrier_obj = self.pool.get('delivery.carrier') carrier_obj = self.pool.get('delivery.carrier')
acc_fp_obj = self.pool.get('account.fiscal.position') acc_fp_obj = self.pool.get('account.fiscal.position')
self._delivery_unset(cr, uid, ids, context=context)
for order in self.browse(cr, uid, ids, context=context): for order in self.browse(cr, uid, ids, context=context):
self._delivery_unset(cr, uid, order, context=context)
grid_id = carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id) grid_id = carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id)
if not grid_id: if not grid_id:
raise osv.except_osv(_('No Grid Available!'), _('No grid matching for this carrier!')) raise osv.except_osv(_('No Grid Available!'), _('No grid matching for this carrier!'))

View File

@ -111,16 +111,30 @@ class event_event(osv.osv):
"""Get reserved, available, reserved but unconfirmed and used seats. """Get reserved, available, reserved but unconfirmed and used seats.
@return: Dictionary of function field values. @return: Dictionary of function field values.
""" """
res = dict([(id, {}) for id in ids]) keys = {'draft': 'seats_unconfirmed', 'open':'seats_reserved', 'done': 'seats_used'}
for event in self.browse(cr, uid, ids, context=context): res = {}
res[event.id]['seats_reserved'] = sum(reg.nb_register for reg in event.registration_ids if reg.state == "open") for event_id in ids:
res[event.id]['seats_used'] = sum(reg.nb_register for reg in event.registration_ids if reg.state == "done") res[event_id] = {key:0 for key in keys.values()}
res[event.id]['seats_unconfirmed'] = sum(reg.nb_register for reg in event.registration_ids if reg.state == "draft") query = "SELECT state, sum(nb_register) FROM event_registration WHERE event_id = %s AND state IN ('draft','open','done') GROUP BY state"
for event in self.pool.get('event.event').browse(cr, uid, ids, context=context):
cr.execute(query, (event.id,))
reg_states = cr.fetchall()
for reg_state in reg_states:
res[event.id][keys[reg_state[0]]] = reg_state[1]
res[event.id]['seats_available'] = event.seats_max - \ res[event.id]['seats_available'] = event.seats_max - \
(res[event.id]['seats_reserved'] + res[event.id]['seats_used']) \ (res[event.id]['seats_reserved'] + res[event.id]['seats_used']) \
if event.seats_max > 0 else None if event.seats_max > 0 else None
return res return res
def _get_events_from_registrations(self, cr, uid, ids, context=None):
"""Get reserved, available, reserved but unconfirmed and used seats, of the event related to a registration.
@return: Dictionary of function field values.
"""
event_ids=set()
for registration in self.browse(cr, uid, ids, context=context):
event_ids.add(registration.event_id.id)
return list(event_ids)
def _subscribe_fnc(self, cr, uid, ids, fields, args, context=None): def _subscribe_fnc(self, cr, uid, ids, fields, args, context=None):
"""This functional fields compute if the current user (uid) is already subscribed or not to the event passed in parameter (ids) """This functional fields compute if the current user (uid) is already subscribed or not to the event passed in parameter (ids)
""" """
@ -142,10 +156,18 @@ class event_event(osv.osv):
'type': fields.many2one('event.type', 'Type of Event', readonly=False, states={'done': [('readonly', True)]}), 'type': fields.many2one('event.type', 'Type of Event', readonly=False, states={'done': [('readonly', True)]}),
'seats_max': fields.integer('Maximum Avalaible Seats', oldname='register_max', help="You can for each event define a maximum registration level. If you have too much registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}), 'seats_max': fields.integer('Maximum Avalaible Seats', oldname='register_max', help="You can for each event define a maximum registration level. If you have too much registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
'seats_min': fields.integer('Minimum Reserved Seats', oldname='register_min', help="You can for each event define a minimum registration level. If you do not enough registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}), 'seats_min': fields.integer('Minimum Reserved Seats', oldname='register_min', help="You can for each event define a minimum registration level. If you do not enough registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
'seats_reserved': fields.function(_get_seats, oldname='register_current', string='Reserved Seats', type='integer', multi='seats_reserved'), 'seats_reserved': fields.function(_get_seats, oldname='register_current', string='Reserved Seats', type='integer', multi='seats_reserved',
'seats_available': fields.function(_get_seats, oldname='register_avail', string='Available Seats', type='integer', multi='seats_reserved'), store={'event.registration': (_get_events_from_registrations, ['state'], 10),
'seats_unconfirmed': fields.function(_get_seats, oldname='register_prospect', string='Unconfirmed Seat Reservations', type='integer', multi='seats_reserved'), 'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
'seats_used': fields.function(_get_seats, oldname='register_attended', string='Number of Participations', type='integer', multi='seats_reserved'), 'seats_available': fields.function(_get_seats, oldname='register_avail', string='Available Seats', type='integer', multi='seats_reserved',
store={'event.registration': (_get_events_from_registrations, ['state'], 10),
'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
'seats_unconfirmed': fields.function(_get_seats, oldname='register_prospect', string='Unconfirmed Seat Reservations', type='integer', multi='seats_reserved',
store={'event.registration': (_get_events_from_registrations, ['state'], 10),
'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
'seats_used': fields.function(_get_seats, oldname='register_attended', string='Number of Participations', type='integer', multi='seats_reserved',
store={'event.registration': (_get_events_from_registrations, ['state'], 10),
'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}), 'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}),
'date_begin': fields.datetime('Start Date', required=True, readonly=True, states={'draft': [('readonly', False)]}), 'date_begin': fields.datetime('Start Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'date_end': fields.datetime('End Date', required=True, readonly=True, states={'draft': [('readonly', False)]}), 'date_end': fields.datetime('End Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),

View File

@ -10,6 +10,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="supplier" position="after"> <field name="supplier" position="after">
<field name="speaker"/> <field name="speaker"/>
<label for="speaker"/>
</field> </field>
</field> </field>
</record> </record>

View File

@ -28,7 +28,6 @@
'installable': True, 'installable': True,
'auto_install': False, 'auto_install': False,
'js': [ 'js': [
'static/lib/gapi/client.js',
'static/src/js/gdrive.js', 'static/src/js/gdrive.js',
], ],
'data': [ 'data': [

View File

@ -1,7 +0,0 @@
var gapi=window.gapi=window.gapi||{};gapi._bs=new Date().getTime();(function(){var f=null,g=encodeURIComponent,k=window,m=decodeURIComponent,n="push",r="test",t="shift",u="replace",y="length",B="split",C="join";var D=k,E=document,aa=D.location,ba=function(){},ca=/\[native code\]/,G=function(a,b,c){return a[b]=a[b]||c},da=function(a){for(var b=0;b<this[y];b++)if(this[b]===a)return b;return-1},ea=function(a){a=a.sort();for(var b=[],c=void 0,d=0;d<a[y];d++){var e=a[d];e!=c&&b[n](e);c=e}return b},H=function(){var a;if((a=Object.create)&&ca[r](a))a=a(f);else{a={};for(var b in a)a[b]=void 0}return a},I=G(D,"gapi",{});var J;J=G(D,"___jsl",H());G(J,"I",0);G(J,"hel",10);var K=function(){var a=aa.href,b;if(J.dpo)b=J.h;else{b=J.h;var c=RegExp("([#].*&|[#])jsh=([^&#]*)","g"),d=RegExp("([?#].*&|[?#])jsh=([^&#]*)","g");if(a=a&&(c.exec(a)||d.exec(a)))try{b=m(a[2])}catch(e){}}return b},fa=function(a){var b=G(J,"PQ",[]);J.PQ=[];var c=b[y];if(0===c)a();else for(var d=0,e=function(){++d===c&&a()},h=0;h<c;h++)b[h](e)},L=function(a){return G(G(J,"H",H()),a,H())};var M=G(J,"perf",H()),N=G(M,"g",H()),ga=G(M,"i",H());G(M,"r",[]);H();H();var O=function(a,b,c){var d=M.r;"function"===typeof d?d(a,b,c):d[n]([a,b,c])},Q=function(a,b,c){b&&0<b[y]&&(b=P(b),c&&0<c[y]&&(b+="___"+P(c)),28<b[y]&&(b=b.substr(0,28)+(b[y]-28)),c=b,b=G(ga,"_p",H()),G(b,c,H())[a]=(new Date).getTime(),O(a,"_p",c))},P=function(a){return a[C]("__")[u](/\./g,"_")[u](/\-/g,"_")[u](/\,/g,"_")};var S=H(),T=[],U=function(a){throw Error("Bad hint"+(a?": "+a:""));};T[n](["jsl",function(a){for(var b in a)if(Object.prototype.hasOwnProperty.call(a,b)){var c=a[b];"object"==typeof c?J[b]=G(J,b,[]).concat(c):G(J,b,c)}if(b=a.u)a=G(J,"us",[]),a[n](b),(b=/^https:(.*)$/.exec(b))&&a[n]("http:"+b[1])}]);var ha=/^(\/[a-zA-Z0-9_\-]+)+$/,ia=/^[a-zA-Z0-9\-_\.!]+$/,ja=/^gapi\.loaded_[0-9]+$/,ka=/^[a-zA-Z0-9,._-]+$/,oa=function(a,b,c,d){var e=a[B](";"),h=S[e[t]()],l=f;h&&(l=h(e,b,c,d));if(!(b=!l))b=l,c=b.match(la),d=b.match(ma),b=!(d&&1===d[y]&&na[r](b)&&c&&1===c[y]);b&&U(a);return l},qa=function(a,b,c,d){a=pa(a);ja[r](c)||U("invalid_callback");b=V(b);d=d&&d[y]?V(d):f;var e=function(a){return g(a)[u](/%2C/g,",")};return[g(a.d)[u](/%2C/g,",")[u](/%2F/g,"/"),"/k=",e(a.version),"/m=",e(b),d?"/exm="+e(d):
"","/rt=j/sv=1/d=1/ed=1",a.a?"/am="+e(a.a):"",a.b?"/rs="+e(a.b):"","/cb=",e(c)][C]("")},pa=function(a){"/"!==a.charAt(0)&&U("relative path");for(var b=a.substring(1)[B]("/"),c=[];b[y];){a=b[t]();if(!a[y]||0==a.indexOf("."))U("empty/relative directory");else if(0<a.indexOf("=")){b.unshift(a);break}c[n](a)}a={};for(var d=0,e=b[y];d<e;++d){var h=b[d][B]("="),l=m(h[0]),p=m(h[1]);2!=h[y]||(!l||!p)||(a[l]=a[l]||p)}b="/"+c[C]("/");ha[r](b)||U("invalid_prefix");c=W(a,"k",!0);d=W(a,"am");a=W(a,"rs");return{d:b,
version:c,a:d,b:a}},V=function(a){for(var b=[],c=0,d=a[y];c<d;++c){var e=a[c][u](/\./g,"_")[u](/-/g,"_");ka[r](e)&&b[n](e)}return b[C](",")},W=function(a,b,c){a=a[b];!a&&c&&U("missing: "+b);if(a){if(ia[r](a))return a;U("invalid: "+b)}return f},na=/^https?:\/\/[a-z0-9_.-]+\.google\.com(:\d+)?\/[a-zA-Z0-9_.,!=\-\/]+$/,ma=/\/cb=/g,la=/\/\//g,ra=function(){var a=K();if(!a)throw Error("Bad hint");return a};S.m=function(a,b,c,d){(a=a[0])||U("missing_hint");return"https://apis.google.com"+qa(a,b,c,d)};var X=decodeURI("%73cript"),Y=function(a,b){for(var c=[],d=0;d<a[y];++d){var e=a[d];e&&0>da.call(b,e)&&c[n](e)}return c},sa=function(a){"loading"!=E.readyState?Z(a):E.write("<"+X+' src="'+encodeURI(a)+'"></'+X+">")},Z=function(a){var b=E.createElement(X);b.setAttribute("src",a);b.async="true";(a=E.getElementsByTagName(X)[0])?a.parentNode.insertBefore(b,a):(E.head||E.body||E.documentElement).appendChild(b)},ta=function(a,b){var c=b&&b._c;if(c)for(var d=0;d<T[y];d++){var e=T[d][0],h=T[d][1];h&&Object.prototype.hasOwnProperty.call(c,
e)&&h(c[e],a,b)}},ua=function(a,b){$(function(){var c;c=b===K()?G(I,"_",H()):H();c=G(L(b),"_",c);a(c)})},wa=function(a,b){var c=b||{};"function"==typeof b&&(c={},c.callback=b);ta(a,c);var d=a?a[B](":"):[],e=c.h||ra(),h=G(J,"ah",H());if(!h["::"]||!d[y])va(d||[],c,e);else{for(var l=[],p=f;p=d[t]();){var v=p[B]("."),v=h[p]||h[v[1]&&"ns:"+v[0]||""]||e,s=l[y]&&l[l[y]-1]||f,z=s;if(!s||s.hint!=v)z={hint:v,c:[]},l[n](z);z.c[n](p)}var A=l[y];if(1<A){var F=c.callback;F&&(c.callback=function(){0==--A&&F()})}for(;d=
l[t]();)va(d.c,c,d.hint)}},va=function(a,b,c){a=ea(a)||[];var d=b.callback,e=b.config,h=b.timeout,l=b.ontimeout,p=f,v=!1;if(h&&!l||!h&&l)throw"Timeout requires both the timeout parameter and ontimeout parameter to be set";var s=G(L(c),"r",[]).sort(),z=G(L(c),"L",[]).sort(),A=[].concat(s),F=function(a,b){if(v)return 0;D.clearTimeout(p);z[n].apply(z,q);var d=((I||{}).config||{}).update;d?d(e):e&&G(J,"cu",[])[n](e);if(b){Q("me0",a,A);try{ua(b,c)}finally{Q("me1",a,A)}}return 1};0<h&&(p=D.setTimeout(function(){v=
!0;l()},h));var q=Y(a,z);if(q[y]){var q=Y(a,s),w=G(J,"CP",[]),x=w[y];w[x]=function(a){if(!a)return 0;Q("ml1",q,A);var b=function(b){w[x]=f;F(q,a)&&fa(function(){d&&d();b()})},c=function(){var a=w[x+1];a&&a()};0<x&&w[x-1]?w[x]=function(){b(c)}:b(c)};if(q[y]){var R="loaded_"+J.I++;I[R]=function(a){w[x](a);I[R]=f};a=oa(c,q,"gapi."+R,s);s[n].apply(s,q);Q("ml0",q,A);b.sync||D.___gapisync?sa(a):Z(a)}else w[x](ba)}else F(q)&&d&&d()};var $=function(a){if(J.hee&&0<J.hel)try{return a()}catch(b){J.hel--,wa("debug_error",function(){k.___jsl.hefn(b)})}else return a()};I.load=function(a,b){return $(function(){return wa(a,b)})};N.bs0=k.gapi._bs||(new Date).getTime();O("bs0");N.bs1=(new Date).getTime();O("bs1");delete k.gapi._bs;})();
gapi.load("client",{callback:window["gapi_onload"],_c:{"jsl":{"ci":{"services":{},"deviceType":"desktop","lexps":[102,103,100,71,98,96,110,108,79,106,45,17,86,81,112,61,30],"inline":{"css":1},"report":{},"oauth-flow":{"disableOpt":true,"authUrl":"https://accounts.google.com/o/oauth2/auth","proxyUrl":"https://accounts.google.com/o/oauth2/postmessageRelay","persist":true},"isLoggedIn":true,"isPlusUser":true,"iframes":{"additnow":{"methods":["launchurl"],"url":"https://apis.google.com/additnow/additnow.html?bsv"},"shortlists":{"url":"?bsv"},"plus":{"methods":["onauth"],"url":":socialhost:/u/:session_index:/_/pages/badge?bsv"},":socialhost:":"https://plusone.google.com","recobox":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/widget/render/recobox?bsv"},"plus_followers":{"params":{"url":""},"url":":socialhost:/_/im/_/widget/render/plus/followers?bsv"},"autocomplete":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/widget/render/autocomplete?bsv"},"plus_share":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/+1/sharebutton?plusShare\u003dtrue\u0026bsv"},"savetowallet":{"url":"https://clients5.google.com/s2w/o/savetowallet?bsv"},"panoembed":{"url":"https://ssl.gstatic.com/pano/embed/?bsv"},"signin":{"methods":["onauth"],"params":{"url":""},"url":":socialhost:/:session_prefix:_/widget/render/signin?bsv"},"appcirclepicker":{"url":":socialhost:/:session_prefix:_/widget/render/appcirclepicker?bsv"},"commentcount":{"url":":socialhost:/:session_prefix:_/widget/render/commentcount?bsv"},"hangout":{"url":"https://talkgadget.google.com/:session_prefix:talkgadget/_/widget?bsv"},"plus_circle":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/widget/plus/circle?bsv"},"savetodrive":{"methods":["save"],"url":"https://drive.google.com/savetodrivebutton?usegapi\u003d1\u0026bsv"},"card":{"url":":socialhost:/:session_prefix:_/hovercard/card?bsv"},"evwidget":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/events/widget?bsv"},"zoomableimage":{"url":"https://ssl.gstatic.com/microscope/embed/?bsv"},":signuphost:":"https://plus.google.com","plusone":{"preloadUrl":["https://ssl.gstatic.com/s2/oz/images/stars/po/Publisher/sprite4-a67f741843ffc4220554c34bd01bb0bb.png"],"params":{"count":"","size":"","url":""},"url":":socialhost:/:session_prefix:_/+1/fastbutton?bsv"},"comments":{"methods":["scroll","openwindow"],"params":{"location":["search","hash"]},"url":":socialhost:/:session_prefix:_/widget/render/comments?bsv"}},"debug":{"host":"https://plusone.google.com","reportExceptionRate":0.05,"rethrowException":true},"csi":{"rate":0.01},"googleapis.config":{"mobilesignupurl":"https://m.google.com/app/plus/oob?"}},"h":"m;/_/scs/apps-static/_/js/k\u003doz.gapi.en.02N985CHyyc.O/m\u003d__features__/am\u003dIQ/rt\u003dj/d\u003d1/rs\u003dAItRSTPZZ0JVQCv9Qljsu0NQlsb1ZzD2zQ","u":"https://apis.google.com/js/client.js","hee":true,"fp":"e2aa6cd0095417dbec61deca3abed1394160dab3","dpo":false},"fp":"e2aa6cd0095417dbec61deca3abed1394160dab3","annotation":["autocomplete","profile","interactivepost"],"bimodal":["signin"]}});

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-06-22 10:54+0000\n" "PO-Revision-Date: 2014-04-04 19:21+0000\n"
"Last-Translator: Dariusz Kubiak <d.kubiak@macopedia.pl>\n" "Last-Translator: Dariusz Kubiak <d.kubiak@macopedia.pl>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-03-27 06:53+0000\n" "X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
"X-Generator: Launchpad (build 16967)\n" "X-Generator: Launchpad (build 16976)\n"
#. module: hr_holidays #. module: hr_holidays
#: selection:hr.holidays.status,color_name:0 #: selection:hr.holidays.status,color_name:0
@ -680,7 +680,7 @@ msgstr "Podsumowanie"
#. module: hr_holidays #. module: hr_holidays
#: model:hr.holidays.status,name:hr_holidays.holiday_status_unpaid #: model:hr.holidays.status,name:hr_holidays.holiday_status_unpaid
msgid "Unpaid" msgid "Unpaid"
msgstr "Bezpłatny" msgstr "Urlop bezpłatny"
#. module: hr_holidays #. module: hr_holidays
#: xsl:holidays.summary:0 #: xsl:holidays.summary:0

View File

@ -571,7 +571,7 @@ class hr_payslip(osv.osv):
payslip_obj = Payslips(self.pool, cr, uid, payslip.employee_id.id, payslip) payslip_obj = Payslips(self.pool, cr, uid, payslip.employee_id.id, payslip)
rules_obj = BrowsableObject(self.pool, cr, uid, payslip.employee_id.id, rules) rules_obj = BrowsableObject(self.pool, cr, uid, payslip.employee_id.id, rules)
localdict = {'categories': categories_obj, 'rules': rules_obj, 'payslip': payslip_obj, 'worked_days': worked_days_obj, 'inputs': input_obj} baselocaldict = {'categories': categories_obj, 'rules': rules_obj, 'payslip': payslip_obj, 'worked_days': worked_days_obj, 'inputs': input_obj}
#get the ids of the structures on the contracts and their parent id as well #get the ids of the structures on the contracts and their parent id as well
structure_ids = self.pool.get('hr.contract').get_all_structures(cr, uid, contract_ids, context=context) structure_ids = self.pool.get('hr.contract').get_all_structures(cr, uid, contract_ids, context=context)
#get the rules of the structure and thier children #get the rules of the structure and thier children
@ -581,11 +581,12 @@ class hr_payslip(osv.osv):
for contract in self.pool.get('hr.contract').browse(cr, uid, contract_ids, context=context): for contract in self.pool.get('hr.contract').browse(cr, uid, contract_ids, context=context):
employee = contract.employee_id employee = contract.employee_id
localdict.update({'employee': employee, 'contract': contract}) localdict = dict(baselocaldict, employee=employee, contract=contract)
for rule in obj_rule.browse(cr, uid, sorted_rule_ids, context=context): for rule in obj_rule.browse(cr, uid, sorted_rule_ids, context=context):
key = rule.code + '-' + str(contract.id) key = rule.code + '-' + str(contract.id)
localdict['result'] = None localdict['result'] = None
localdict['result_qty'] = 1.0 localdict['result_qty'] = 1.0
localdict['result_rate'] = 100
#check if the rule can be applied #check if the rule can be applied
if obj_rule.satisfy_condition(cr, uid, rule.id, localdict, context=context) and rule.id not in blacklist: if obj_rule.satisfy_condition(cr, uid, rule.id, localdict, context=context) and rule.id not in blacklist:
#compute the amount of the rule #compute the amount of the rule

View File

@ -5,12 +5,7 @@
<h3 class="oe_slogan">Organize your vacancies and applications</h3> <h3 class="oe_slogan">Organize your vacancies and applications</h3>
</div> </div>
<div class="oe_span6"> <div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website_hr">
<img src="">
</a>
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
</div>
</div> </div>
<div class="oe_span6"> <div class="oe_span6">
<p class='oe_mt32'> <p class='oe_mt32'>

View File

@ -54,11 +54,10 @@ class EscposDriver(Thread):
return connected return connected
def lockedstart(self): def lockedstart(self):
self.lock.acquire() with self.lock:
if not self.isAlive(): if not self.isAlive():
self.daemon = True self.daemon = True
self.start() self.start()
self.lock.release()
def get_escpos_printer(self): def get_escpos_printer(self):
try: try:

View File

@ -88,10 +88,10 @@ class Scanner(Thread):
} }
def lockedstart(self): def lockedstart(self):
self.lock.acquire() with self.lock:
if not self.isAlive(): if not self.isAlive():
self.daemon = True
self.start() self.start()
self.lock.release()
def set_status(self, status, message = None): def set_status(self, status, message = None):
if status == self.status['status']: if status == self.status['status']:

View File

@ -2052,6 +2052,8 @@
<field name="description">VAT-IN-V82-CAR-EXC-C1</field> <field name="description">VAT-IN-V82-CAR-EXC-C1</field>
<field name="name">Frais de voiture - VAT 50% Non Deductible</field> <field name="name">Frais de voiture - VAT 50% Non Deductible</field>
<field name="parent_id" ref="attn_VAT-IN-V82-CAR-EXC"/> <field name="parent_id" ref="attn_VAT-IN-V82-CAR-EXC"/>
<field name="account_collected_id" ref="a64012"/>
<field name="account_paid_id" ref="a64012"/>
<field name="price_include" eval="0"/> <field name="price_include" eval="0"/>
<field name="amount">0.105</field> <field name="amount">0.105</field>
<field name="type">percent</field> <field name="type">percent</field>

View File

@ -40,11 +40,6 @@
<field name="tax_src_id" ref="tva_normale" /> <field name="tax_src_id" ref="tva_normale" />
<field name="tax_dest_id" ref="tva_intra_0" /> <field name="tax_dest_id" ref="tva_intra_0" />
</record> </record>
<record id="fp_tax_template_intraeub2b_vt_normale_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_normale_temp" />
<field name="tax_dest_id" ref="tva_intra_0" />
</record>
<!-- Taux DOM-TOM --> <!-- Taux DOM-TOM -->
<record id="fp_tax_template_intraeub2b_vt_specifique" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_intraeub2b_vt_specifique" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" /> <field name="position_id" ref="fiscal_position_template_intraeub2b" />
@ -57,22 +52,12 @@
<field name="tax_src_id" ref="tva_intermediaire" /> <field name="tax_src_id" ref="tva_intermediaire" />
<field name="tax_dest_id" ref="tva_intra_0" /> <field name="tax_dest_id" ref="tva_intra_0" />
</record> </record>
<record id="fp_tax_template_intraeub2b_vt_intermediaire_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_intermediaire_temp" />
<field name="tax_dest_id" ref="tva_intra_0" />
</record>
<!-- Taux réduit --> <!-- Taux réduit -->
<record id="fp_tax_template_intraeub2b_vt_reduite" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_intraeub2b_vt_reduite" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" /> <field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_reduite" /> <field name="tax_src_id" ref="tva_reduite" />
<field name="tax_dest_id" ref="tva_intra_0" /> <field name="tax_dest_id" ref="tva_intra_0" />
</record> </record>
<record id="fp_tax_template_intraeub2b_vt_reduite_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_reduite_temp" />
<field name="tax_dest_id" ref="tva_intra_0" />
</record>
<!-- Taux super réduit --> <!-- Taux super réduit -->
<record id="fp_tax_template_intraeub2b_vt_super_reduite" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_intraeub2b_vt_super_reduite" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" /> <field name="position_id" ref="fiscal_position_template_intraeub2b" />
@ -91,17 +76,6 @@
<field name="tax_src_id" ref="tva_acq_normale" /> <field name="tax_src_id" ref="tva_acq_normale" />
<field name="tax_dest_id" ref="tva_acq_intra_normale" /> <field name="tax_dest_id" ref="tva_acq_intra_normale" />
</record> </record>
<record id="fp_tax_template_intraeub2b_ha_normale_deduc_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_acq_normale_temp" />
<field name="tax_dest_id" ref="tva_intra_normale_temp" />
</record>
<record id="fp_tax_template_intraeub2b_ha_normale_acq_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_acq_normale_temp" />
<field name="tax_dest_id" ref="tva_acq_intra_normale_temp" />
</record>
<!-- Taux DOM-TOM --> <!-- Taux DOM-TOM -->
<record id="fp_tax_template_intraeub2b_ha_specifique_deduc" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_intraeub2b_ha_specifique_deduc" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" /> <field name="position_id" ref="fiscal_position_template_intraeub2b" />
@ -124,17 +98,6 @@
<field name="tax_src_id" ref="tva_acq_intermediaire" /> <field name="tax_src_id" ref="tva_acq_intermediaire" />
<field name="tax_dest_id" ref="tva_acq_intra_intermediaire" /> <field name="tax_dest_id" ref="tva_acq_intra_intermediaire" />
</record> </record>
<record id="fp_tax_template_intraeub2b_ha_intermediaire_deduc_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_acq_intermediaire_temp" />
<field name="tax_dest_id" ref="tva_intra_intermediaire_temp" />
</record>
<record id="fp_tax_template_intraeub2b_ha_intermediaire_acq_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_acq_intermediaire_temp" />
<field name="tax_dest_id" ref="tva_acq_intra_intermediaire_temp" />
</record>
<!-- Taux réduit --> <!-- Taux réduit -->
<record id="fp_tax_template_intraeub2b_ha_reduite_deduc" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_intraeub2b_ha_reduite_deduc" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" /> <field name="position_id" ref="fiscal_position_template_intraeub2b" />
@ -146,17 +109,6 @@
<field name="tax_src_id" ref="tva_acq_reduite" /> <field name="tax_src_id" ref="tva_acq_reduite" />
<field name="tax_dest_id" ref="tva_acq_intra_reduite" /> <field name="tax_dest_id" ref="tva_acq_intra_reduite" />
</record> </record>
<record id="fp_tax_template_intraeub2b_ha_reduite_deduc_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_acq_reduite_temp" />
<field name="tax_dest_id" ref="tva_intra_reduite_temp" />
</record>
<record id="fp_tax_template_intraeub2b_ha_reduite_acq_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
<field name="tax_src_id" ref="tva_acq_reduite_temp" />
<field name="tax_dest_id" ref="tva_acq_intra_reduite_temp" />
</record>
<!-- Taux super réduit --> <!-- Taux super réduit -->
<record id="fp_tax_template_intraeub2b_ha_super_reduite_deduc" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_intraeub2b_ha_super_reduite_deduc" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_intraeub2b" /> <field name="position_id" ref="fiscal_position_template_intraeub2b" />
@ -177,11 +129,6 @@
<field name="tax_src_id" ref="tva_normale" /> <field name="tax_src_id" ref="tva_normale" />
<field name="tax_dest_id" ref="tva_export_0" /> <field name="tax_dest_id" ref="tva_export_0" />
</record> </record>
<record id="fp_tax_template_impexp_vt_normale_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" />
<field name="tax_src_id" ref="tva_normale_temp" />
<field name="tax_dest_id" ref="tva_export_0" />
</record>
<!-- Taux DOM-TOM --> <!-- Taux DOM-TOM -->
<record id="fp_tax_template_impexp_vt_specifique" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_impexp_vt_specifique" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" /> <field name="position_id" ref="fiscal_position_template_import_export" />
@ -194,22 +141,12 @@
<field name="tax_src_id" ref="tva_intermediaire" /> <field name="tax_src_id" ref="tva_intermediaire" />
<field name="tax_dest_id" ref="tva_export_0" /> <field name="tax_dest_id" ref="tva_export_0" />
</record> </record>
<record id="fp_tax_template_impexp_vt_intermediaire_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" />
<field name="tax_src_id" ref="tva_intermediaire_temp" />
<field name="tax_dest_id" ref="tva_export_0" />
</record>
<!-- Taux Réduit --> <!-- Taux Réduit -->
<record id="fp_tax_template_impexp_vt_reduite" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_impexp_vt_reduite" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" /> <field name="position_id" ref="fiscal_position_template_import_export" />
<field name="tax_src_id" ref="tva_reduite" /> <field name="tax_src_id" ref="tva_reduite" />
<field name="tax_dest_id" ref="tva_export_0" /> <field name="tax_dest_id" ref="tva_export_0" />
</record> </record>
<record id="fp_tax_template_impexp_vt_reduite_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" />
<field name="tax_src_id" ref="tva_reduite_temp" />
<field name="tax_dest_id" ref="tva_export_0" />
</record>
<!-- Taux super réduit --> <!-- Taux super réduit -->
<record id="fp_tax_template_impexp_vt_super_reduite" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_impexp_vt_super_reduite" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" /> <field name="position_id" ref="fiscal_position_template_import_export" />
@ -224,11 +161,6 @@
<field name="tax_src_id" ref="tva_acq_normale" /> <field name="tax_src_id" ref="tva_acq_normale" />
<field name="tax_dest_id" ref="tva_import_0" /> <field name="tax_dest_id" ref="tva_import_0" />
</record> </record>
<record id="fp_tax_template_impexp_ha_normale_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" />
<field name="tax_src_id" ref="tva_acq_normale_temp" />
<field name="tax_dest_id" ref="tva_import_0" />
</record>
<!-- Taux DOM-TOM --> <!-- Taux DOM-TOM -->
<record id="fp_tax_template_impexp_ha_specifique" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_impexp_ha_specifique" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" /> <field name="position_id" ref="fiscal_position_template_import_export" />
@ -241,23 +173,12 @@
<field name="tax_src_id" ref="tva_acq_intermediaire" /> <field name="tax_src_id" ref="tva_acq_intermediaire" />
<field name="tax_dest_id" ref="tva_import_0" /> <field name="tax_dest_id" ref="tva_import_0" />
</record> </record>
<record id="fp_tax_template_impexp_ha_intermediaire_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" />
<field name="tax_src_id" ref="tva_acq_intermediaire_temp" />
<field name="tax_dest_id" ref="tva_import_0" />
</record>
<!-- Taux Réduit --> <!-- Taux Réduit -->
<record id="fp_tax_template_impexp_ha_reduite" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_impexp_ha_reduite" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" /> <field name="position_id" ref="fiscal_position_template_import_export" />
<field name="tax_src_id" ref="tva_acq_reduite" /> <field name="tax_src_id" ref="tva_acq_reduite" />
<field name="tax_dest_id" ref="tva_import_0" /> <field name="tax_dest_id" ref="tva_import_0" />
</record> </record>
<record id="fp_tax_template_impexp_ha_reduite_temp" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" />
<field name="tax_src_id" ref="tva_acq_reduite_temp" />
<field name="tax_dest_id" ref="tva_import_0" />
</record>
<!-- Taux super réduit --> <!-- Taux super réduit -->
<record id="fp_tax_template_impexp_ha_super_reduite" model="account.fiscal.position.tax.template"> <record id="fp_tax_template_impexp_ha_super_reduite" model="account.fiscal.position.tax.template">
<field name="position_id" ref="fiscal_position_template_import_export" /> <field name="position_id" ref="fiscal_position_template_import_export" />

View File

@ -30,28 +30,6 @@
<field name="type_tax_use">sale</field> <field name="type_tax_use">sale</field>
</record> </record>
<record model="account.tax.template" id="tva_normale_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA collectée (vente) 19,6%</field>
<field name="description">19.6</field>
<field name="amount" eval="0.196"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_col_196_ht"/>
<field name="base_sign" eval="1"/>
<field name="tax_code_id" ref="tax_col_196"/>
<field name="tax_sign" eval="1"/>
<field name="account_collected_id" ref="pcg_445711"/>
<field name="account_paid_id" ref="pcg_445711"/>
<field name="ref_base_code_id" ref="tax_col_196_ht"/>
<field name="ref_base_sign" eval="-1"/>
<field name="ref_tax_code_id" ref="tax_col_196"/>
<field name="ref_tax_sign" eval="-1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">sale</field>
</record>
<record model="account.tax.template" id="tva_specifique"> <record model="account.tax.template" id="tva_specifique">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA collectée (vente) 8,5%</field> <field name="name">TVA collectée (vente) 8,5%</field>
@ -96,51 +74,7 @@
<field name="type_tax_use">sale</field> <field name="type_tax_use">sale</field>
</record> </record>
<record model="account.tax.template" id="tva_intermediaire_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA collectée (vente) 7,0%</field>
<field name="description">7.0</field>
<field name="amount" eval="0.07"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_col_70_ht"/>
<field name="base_sign" eval="1"/>
<field name="tax_code_id" ref="tax_col_70"/>
<field name="tax_sign" eval="1"/>
<field name="account_collected_id" ref="pcg_445712"/>
<field name="account_paid_id" ref="pcg_445712"/>
<field name="ref_base_code_id" ref="tax_col_70_ht"/>
<field name="ref_base_sign" eval="-1"/>
<field name="ref_tax_code_id" ref="tax_col_70"/>
<field name="ref_tax_sign" eval="-1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">sale</field>
</record>
<record model="account.tax.template" id="tva_reduite"> <record model="account.tax.template" id="tva_reduite">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA collectée (vente) 5,0%</field>
<field name="description">5.0</field>
<field name="amount" eval="0.050"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_col_50_ht"/>
<field name="base_sign" eval="1"/>
<field name="tax_code_id" ref="tax_col_50"/>
<field name="tax_sign" eval="1"/>
<field name="account_collected_id" ref="pcg_445713"/>
<field name="account_paid_id" ref="pcg_445713"/>
<field name="ref_base_code_id" ref="tax_col_50_ht"/>
<field name="ref_base_sign" eval="-1"/>
<field name="ref_tax_code_id" ref="tax_col_50"/>
<field name="ref_tax_sign" eval="-1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">sale</field>
</record>
<record model="account.tax.template" id="tva_reduite_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA collectée (vente) 5,5%</field> <field name="name">TVA collectée (vente) 5,5%</field>
<field name="description">5.5</field> <field name="description">5.5</field>
@ -208,28 +142,6 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_acq_normale_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 19,6%</field>
<field name="description">ACH-19.6</field>
<field name="amount" eval="0.196"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_acq_196_ht"/>
<field name="base_sign" eval="-1"/>
<field name="tax_code_id" ref="tax_acq_196"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44566"/>
<field name="account_paid_id" ref="pcg_44566"/>
<field name="ref_base_code_id" ref="tax_acq_196_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_acq_196"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_acq_specifique"> <record model="account.tax.template" id="tva_acq_specifique">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 8,5%</field> <field name="name">TVA déductible (achat) 8,5%</field>
@ -274,51 +186,7 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_acq_intermediaire_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 7,0%</field>
<field name="description">ACH-7.0</field>
<field name="amount" eval="0.07"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_acq_70_ht"/>
<field name="base_sign" eval="-1"/>
<field name="tax_code_id" ref="tax_acq_70"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44566"/>
<field name="account_paid_id" ref="pcg_44566"/>
<field name="ref_base_code_id" ref="tax_acq_70_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_acq_70"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_acq_reduite"> <record model="account.tax.template" id="tva_acq_reduite">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 5,0%</field>
<field name="description">ACH-5.0</field>
<field name="amount" eval="0.050"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_acq_50_ht"/>
<field name="base_sign" eval="-1"/>
<field name="tax_code_id" ref="tax_acq_50"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44566"/>
<field name="account_paid_id" ref="pcg_44566"/>
<field name="ref_base_code_id" ref="tax_acq_50_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_acq_50"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_acq_reduite_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 5,5%</field> <field name="name">TVA déductible (achat) 5,5%</field>
<field name="description">ACH-5.5</field> <field name="description">ACH-5.5</field>
@ -387,29 +255,6 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_acq_normale_TTC_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 19,6% TTC</field>
<field name="description">ACH-19.6-TTC</field>
<field name="price_include" eval="1"/>
<field name="amount" eval="0.196"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_acq_196_ht"/>
<field name="base_sign" eval="-1"/>
<field name="tax_code_id" ref="tax_acq_196"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44566"/>
<field name="account_paid_id" ref="pcg_44566"/>
<field name="ref_base_code_id" ref="tax_acq_196_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_acq_196"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_acq_specifique_TTC"> <record model="account.tax.template" id="tva_acq_specifique_TTC">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 8,5% TTC</field> <field name="name">TVA déductible (achat) 8,5% TTC</field>
@ -456,53 +301,7 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_acq_intermediaire_TTC_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 7,0% TTC</field>
<field name="description">ACH-7.0-TTC</field>
<field name="price_include" eval="1"/>
<field name="amount" eval="0.07"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_acq_70_ht"/>
<field name="base_sign" eval="-1"/>
<field name="tax_code_id" ref="tax_acq_70"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44566"/>
<field name="account_paid_id" ref="pcg_44566"/>
<field name="ref_base_code_id" ref="tax_acq_70_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_acq_70"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_acq_reduite_TTC"> <record model="account.tax.template" id="tva_acq_reduite_TTC">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 5,0% TTC</field>
<field name="description">ACH-5.0-TTC</field>
<field name="price_include" eval="1"/>
<field name="amount" eval="0.050"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_acq_50_ht"/>
<field name="base_sign" eval="-1"/>
<field name="tax_code_id" ref="tax_acq_50"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44566"/>
<field name="account_paid_id" ref="pcg_44566"/>
<field name="ref_base_code_id" ref="tax_acq_50_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_acq_50"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_acq_reduite_TTC_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déductible (achat) 5,5% TTC</field> <field name="name">TVA déductible (achat) 5,5% TTC</field>
<field name="description">ACH-5.5-TTC</field> <field name="description">ACH-5.5-TTC</field>
@ -573,28 +372,6 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_imm_normale_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd./immobilisation (achat) 19,6%</field>
<field name="description">IMMO-19.6</field>
<field name="amount" eval="0.196"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_imm_196_ht"/>
<field name="base_sign" eval="-1"/>
<field name="tax_code_id" ref="tax_imm_196"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44562"/>
<field name="account_paid_id" ref="pcg_44562"/>
<field name="ref_base_code_id" ref="tax_imm_196_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_imm_196"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_imm_specifique"> <record model="account.tax.template" id="tva_imm_specifique">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd./immobilisation (achat) 8,5%</field> <field name="name">TVA déd./immobilisation (achat) 8,5%</field>
@ -639,51 +416,7 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_imm_intermediaire_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd./immobilisation (achat) 7,0%</field>
<field name="description">IMMO-7.0</field>
<field name="amount" eval="0.07"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_imm_70_ht"/>
<field name="base_sign" eval="-1"/>
<field name="tax_code_id" ref="tax_imm_70"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44562"/>
<field name="account_paid_id" ref="pcg_44562"/>
<field name="ref_base_code_id" ref="tax_imm_70_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_imm_70"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_imm_reduite"> <record model="account.tax.template" id="tva_imm_reduite">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd./immobilisation (achat) 5,0%</field>
<field name="description">IMMO-5.0</field>
<field name="amount" eval="0.050"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_imm_50_ht"/>
<field name="base_sign" eval="-1"/>
<field name="tax_code_id" ref="tax_imm_50"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_44562"/>
<field name="account_paid_id" ref="pcg_44562"/>
<field name="ref_base_code_id" ref="tax_imm_50_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_imm_50"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_imm_reduite_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd./immobilisation (achat) 5,5%</field> <field name="name">TVA déd./immobilisation (achat) 5,5%</field>
<field name="description">IMMO-5.5</field> <field name="description">IMMO-5.5</field>
@ -751,28 +484,6 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_intra_normale_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA due s/ acq. intracommunautaire (achat) 19,6%</field> <!-- ventes -->
<field name="description">ACH_UE_due-19.6</field>
<field name="amount" eval="-0.196"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_intra_196_ht"/>
<field name="base_sign" eval="-1" />
<field name="tax_code_id" ref="tax_intra_196"/>
<field name="tax_sign" eval="-1" />
<field name="account_collected_id" ref="pcg_445201"/>
<field name="account_paid_id" ref="pcg_445201"/>
<field name="ref_base_code_id" ref="tax_intra_196_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_intra_196"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_intra_specifique"> <record model="account.tax.template" id="tva_intra_specifique">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA due s/ acq. intracommunautaire (achat) 8,5%</field> <field name="name">TVA due s/ acq. intracommunautaire (achat) 8,5%</field>
@ -817,51 +528,7 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_intra_intermediaire_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA due s/ acq. intracommunautaire (achat) 7,0%</field>
<field name="description">ACH_UE_due-7.0</field>
<field name="amount" eval="-0.07"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_intra_70_ht"/>
<field name="base_sign" eval="-1" />
<field name="tax_code_id" ref="tax_intra_70"/>
<field name="tax_sign" eval="-1" />
<field name="account_collected_id" ref="pcg_445202"/>
<field name="account_paid_id" ref="pcg_445202"/>
<field name="ref_base_code_id" ref="tax_intra_70_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_intra_70"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_intra_reduite"> <record model="account.tax.template" id="tva_intra_reduite">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA due s/ acq. intracommunautaire (achat) 5,0%</field>
<field name="description">ACH_UE_due-5.0</field>
<field name="amount" eval="-0.050"/>
<field name="type">percent</field>
<field name="base_code_id" ref="tax_intra_50_ht"/>
<field name="base_sign" eval="-1" />
<field name="tax_code_id" ref="tax_intra_50"/>
<field name="tax_sign" eval="-1" />
<field name="account_collected_id" ref="pcg_445203"/>
<field name="account_paid_id" ref="pcg_445203"/>
<field name="ref_base_code_id" ref="tax_intra_50_ht"/>
<field name="ref_base_sign" eval="1"/>
<field name="ref_tax_code_id" ref="tax_intra_50"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_intra_reduite_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA due s/ acq. intracommunautaire (achat) 5,5%</field> <field name="name">TVA due s/ acq. intracommunautaire (achat) 5,5%</field>
<field name="description">ACH_UE_due-5.5</field> <field name="description">ACH_UE_due-5.5</field>
@ -925,24 +592,6 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_acq_intra_normale_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 19,6%</field>
<field name="description">ACH_UE_ded.-19.6</field>
<field name="amount" eval="0.196"/>
<field name="type">percent</field>
<field name="tax_code_id" ref="tax_intra_acq_196"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_445662"/>
<field name="account_paid_id" ref="pcg_445662"/>
<field name="ref_tax_code_id" ref="tax_intra_acq_196"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_acq_intra_specifique"> <record model="account.tax.template" id="tva_acq_intra_specifique">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 8,5%</field> <field name="name">TVA déd. s/ acq. intracommunautaire (achat) 8,5%</field>
@ -979,43 +628,7 @@
<field name="type_tax_use">purchase</field> <field name="type_tax_use">purchase</field>
</record> </record>
<record model="account.tax.template" id="tva_acq_intra_intermediaire_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 7,0%</field>
<field name="description">ACH_UE_ded.-7.0</field>
<field name="amount" eval="0.07"/>
<field name="type">percent</field>
<field name="tax_code_id" ref="tax_intra_acq_70"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_445662"/>
<field name="account_paid_id" ref="pcg_445662"/>
<field name="ref_tax_code_id" ref="tax_intra_acq_70"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_acq_intra_reduite"> <record model="account.tax.template" id="tva_acq_intra_reduite">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 5,0%</field>
<field name="description">ACH_UE_ded.-5.0</field>
<field name="amount" eval="0.050"/>
<field name="type">percent</field>
<field name="tax_code_id" ref="tax_intra_acq_50"/>
<field name="tax_sign" eval="-1"/>
<field name="account_collected_id" ref="pcg_445662"/>
<field name="account_paid_id" ref="pcg_445662"/>
<field name="ref_tax_code_id" ref="tax_intra_acq_50"/>
<field name="ref_tax_sign" eval="1"/>
<field name="sequence" eval="10"/>
<field name="type_tax_use">purchase</field>
</record>
<record model="account.tax.template" id="tva_acq_intra_reduite_temp">
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/> <field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 5,5%</field> <field name="name">TVA déd. s/ acq. intracommunautaire (achat) 5,5%</field>
<field name="description">ACH_UE_ded.-5.5</field> <field name="description">ACH_UE_ded.-5.5</field>

View File

@ -44,8 +44,6 @@ Con la Colaboración de
], ],
"demo_xml": [ "demo_xml": [
], ],
"data": [
],
"active": False, "active": False,
"installable": True, "installable": True,
"certificate" : "", "certificate" : "",

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n" "Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2012-12-17 19:55+0000\n" "PO-Revision-Date: 2014-04-04 19:25+0000\n"
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n" "Last-Translator: Dariusz Żbikowski <Unknown>\n"
"Language-Team: Polish <pl@li.org>\n" "Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-03-27 07:26+0000\n" "X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
"X-Generator: Launchpad (build 16967)\n" "X-Generator: Launchpad (build 16976)\n"
#. module: mail #. module: mail
#: view:mail.followers:0 #: view:mail.followers:0
@ -1363,7 +1363,7 @@ msgstr "Wiadomość Rich-text/HTML"
#. module: mail #. module: mail
#: view:mail.mail:0 #: view:mail.mail:0
msgid "Creation Month" msgid "Creation Month"
msgstr "Miesiąc tworzenia" msgstr "Miesiąc utworzenia"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
@ -1509,7 +1509,7 @@ msgstr ""
#: code:addons/mail/static/src/xml/mail.xml:213 #: code:addons/mail/static/src/xml/mail.xml:213
#, python-format #, python-format
msgid "Please, wait while the file is uploading." msgid "Please, wait while the file is uploading."
msgstr "" msgstr "Poczekaj, aż plik zostanie załadowany."
#. module: mail #. module: mail
#: view:mail.group:0 #: view:mail.group:0

View File

@ -76,8 +76,6 @@ Dashboard / Reports for MRP will include:
'views/report_mrpbomstructure.xml', 'views/report_mrpbomstructure.xml',
], ],
'demo': ['mrp_demo.xml'], 'demo': ['mrp_demo.xml'],
#TODO: This yml tests are needed to be completely reviewed again because the product wood panel is removed in product demo as it does not suit for new demo context of computer and consultant company
# so the ymls are too complex to change at this stage
'test': [ 'test': [
'test/bom_with_service_type_product.yml', 'test/bom_with_service_type_product.yml',
'test/mrp_users.yml', 'test/mrp_users.yml',

View File

@ -1,4 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_account_analytic_line_user,account.analytic.line,account.model_account_analytic_line,group_mrp_user,1,1,1,0
access_mrp_workcenter,mrp.workcenter,model_mrp_workcenter,mrp.group_mrp_user,1,0,0,0 access_mrp_workcenter,mrp.workcenter,model_mrp_workcenter,mrp.group_mrp_user,1,0,0,0
access_mrp_routing,mrp.routing,model_mrp_routing,mrp.group_mrp_user,1,0,0,0 access_mrp_routing,mrp.routing,model_mrp_routing,mrp.group_mrp_user,1,0,0,0
access_mrp_routing_workcenter,mrp.routing.workcenter,model_mrp_routing_workcenter,mrp.group_mrp_user,1,0,0,0 access_mrp_routing_workcenter,mrp.routing.workcenter,model_mrp_routing_workcenter,mrp.group_mrp_user,1,0,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_account_analytic_line_user account.analytic.line account.model_account_analytic_line group_mrp_user 1 1 1 0
3 access_mrp_workcenter mrp.workcenter model_mrp_workcenter mrp.group_mrp_user 1 0 0 0
4 access_mrp_routing mrp.routing model_mrp_routing mrp.group_mrp_user 1 0 0 0
5 access_mrp_routing_workcenter mrp.routing.workcenter model_mrp_routing_workcenter mrp.group_mrp_user 1 0 0 0

View File

@ -52,8 +52,15 @@ class PaymentAcquirer(osv.Model):
_name = 'payment.acquirer' _name = 'payment.acquirer'
_description = 'Payment Acquirer' _description = 'Payment Acquirer'
def _get_providers(self, cr, uid, context=None):
return []
# indirection to ease inheritance
_provider_selection = lambda self, *args, **kwargs: self._get_providers(*args, **kwargs)
_columns = { _columns = {
'name': fields.char('Name', required=True), 'name': fields.char('Name', required=True),
'provider': fields.selection(_provider_selection, string='Provider', required=True),
'company_id': fields.many2one('res.company', 'Company', required=True), 'company_id': fields.many2one('res.company', 'Company', required=True),
'pre_msg': fields.html('Message', help='Message displayed to explain and help the payment process.'), 'pre_msg': fields.html('Message', help='Message displayed to explain and help the payment process.'),
'post_msg': fields.html('Thanks Message', help='Message displayed after having done the payment process.'), 'post_msg': fields.html('Thanks Message', help='Message displayed after having done the payment process.'),
@ -84,10 +91,10 @@ class PaymentAcquirer(osv.Model):
} }
def _check_required_if_provider(self, cr, uid, ids, context=None): def _check_required_if_provider(self, cr, uid, ids, context=None):
""" If the field has 'required_if_provider="<name>"' attribute, then it """ If the field has 'required_if_provider="<provider>"' attribute, then it
required if record.name is <name>. """ required if record.provider is <provider>. """
for acquirer in self.browse(cr, uid, ids, context=context): for acquirer in self.browse(cr, uid, ids, context=context):
if any(c for c, f in self._all_columns.items() if getattr(f.column, 'required_if_provider', None) == acquirer.name and not acquirer[c]): if any(c for c, f in self._all_columns.items() if getattr(f.column, 'required_if_provider', None) == acquirer.provider and not acquirer[c]):
return False return False
return True return True
@ -98,8 +105,8 @@ class PaymentAcquirer(osv.Model):
def get_form_action_url(self, cr, uid, id, context=None): def get_form_action_url(self, cr, uid, id, context=None):
""" Returns the form action URL, for form-based acquirer implementations. """ """ Returns the form action URL, for form-based acquirer implementations. """
acquirer = self.browse(cr, uid, id, context=context) acquirer = self.browse(cr, uid, id, context=context)
if hasattr(self, '%s_get_form_action_url' % acquirer.name): if hasattr(self, '%s_get_form_action_url' % acquirer.provider):
return getattr(self, '%s_get_form_action_url' % acquirer.name)(cr, uid, id, context=context) return getattr(self, '%s_get_form_action_url' % acquirer.provider)(cr, uid, id, context=context)
return False return False
def form_preprocess_values(self, cr, uid, id, reference, amount, currency_id, tx_id, partner_id, partner_values, tx_values, context=None): def form_preprocess_values(self, cr, uid, id, reference, amount, currency_id, tx_id, partner_id, partner_values, tx_values, context=None):
@ -178,7 +185,7 @@ class PaymentAcquirer(osv.Model):
}) })
# compute fees # compute fees
fees_method_name = '%s_compute_fees' % acquirer.name fees_method_name = '%s_compute_fees' % acquirer.provider
if hasattr(self, fees_method_name): if hasattr(self, fees_method_name):
fees = getattr(self, fees_method_name)( fees = getattr(self, fees_method_name)(
cr, uid, id, tx_data['amount'], tx_data['currency_id'], partner_data['country_id'], context=None) cr, uid, id, tx_data['amount'], tx_data['currency_id'], partner_data['country_id'], context=None)
@ -237,7 +244,7 @@ class PaymentAcquirer(osv.Model):
partner_values, tx_values, context=context) partner_values, tx_values, context=context)
# call <name>_form_generate_values to update the tx dict with acqurier specific values # call <name>_form_generate_values to update the tx dict with acqurier specific values
cust_method_name = '%s_form_generate_values' % (acquirer.name) cust_method_name = '%s_form_generate_values' % (acquirer.provider)
if hasattr(self, cust_method_name): if hasattr(self, cust_method_name):
method = getattr(self, cust_method_name) method = getattr(self, cust_method_name)
partner_values, tx_values = method(cr, uid, id, partner_values, tx_values, context=context) partner_values, tx_values = method(cr, uid, id, partner_values, tx_values, context=context)
@ -383,14 +390,14 @@ class PaymentTransaction(osv.Model):
acquirer = self.pool['payment.acquirer'].browse(cr, uid, values.get('acquirer_id'), context=context) acquirer = self.pool['payment.acquirer'].browse(cr, uid, values.get('acquirer_id'), context=context)
# compute fees # compute fees
custom_method_name = '%s_compute_fees' % acquirer.name custom_method_name = '%s_compute_fees' % acquirer.provider
if hasattr(Acquirer, custom_method_name): if hasattr(Acquirer, custom_method_name):
fees = getattr(Acquirer, custom_method_name)( fees = getattr(Acquirer, custom_method_name)(
cr, uid, acquirer.id, values.get('amount', 0.0), values.get('currency_id'), values.get('country_id'), context=None) cr, uid, acquirer.id, values.get('amount', 0.0), values.get('currency_id'), values.get('country_id'), context=None)
values['fees'] = float_round(fees, 2) values['fees'] = float_round(fees, 2)
# custom create # custom create
custom_method_name = '%s_create' % acquirer.name custom_method_name = '%s_create' % acquirer.provider
if hasattr(self, custom_method_name): if hasattr(self, custom_method_name):
values.update(getattr(self, custom_method_name)(cr, uid, values, context=context)) values.update(getattr(self, custom_method_name)(cr, uid, values, context=context))
@ -469,7 +476,7 @@ class PaymentTransaction(osv.Model):
if values.get('acquirer_id'): if values.get('acquirer_id'):
acquirer = self.pool['payment.acquirer'].browse(cr, uid, values.get('acquirer_id'), context=context) acquirer = self.pool['payment.acquirer'].browse(cr, uid, values.get('acquirer_id'), context=context)
custom_method_name = '_%s_s2s_send' % acquirer.name custom_method_name = '_%s_s2s_send' % acquirer.provider
if hasattr(self, custom_method_name): if hasattr(self, custom_method_name):
tx_id, result = getattr(self, custom_method_name)(cr, uid, values, cc_values, context=context) tx_id, result = getattr(self, custom_method_name)(cr, uid, values, cc_values, context=context)
@ -482,7 +489,7 @@ class PaymentTransaction(osv.Model):
tx = self.browse(cr, uid, tx_id, context=context) tx = self.browse(cr, uid, tx_id, context=context)
invalid_parameters = None invalid_parameters = None
invalid_param_method_name = '_%s_s2s_get_invalid_parameters' % tx.acquirer_id.name invalid_param_method_name = '_%s_s2s_get_invalid_parameters' % tx.acquirer_id.provider
if hasattr(self, invalid_param_method_name): if hasattr(self, invalid_param_method_name):
invalid_parameters = getattr(self, invalid_param_method_name)(cr, uid, tx, data, context=context) invalid_parameters = getattr(self, invalid_param_method_name)(cr, uid, tx, data, context=context)
@ -493,7 +500,7 @@ class PaymentTransaction(osv.Model):
_logger.error(_error_message) _logger.error(_error_message)
return False return False
feedback_method_name = '_%s_s2s_validate' % tx.acquirer_id.name feedback_method_name = '_%s_s2s_validate' % tx.acquirer_id.provider
if hasattr(self, feedback_method_name): if hasattr(self, feedback_method_name):
return getattr(self, feedback_method_name)(cr, uid, tx, data, context=context) return getattr(self, feedback_method_name)(cr, uid, tx, data, context=context)
@ -503,7 +510,7 @@ class PaymentTransaction(osv.Model):
""" Get the tx status. """ """ Get the tx status. """
tx = self.browse(cr, uid, tx_id, context=context) tx = self.browse(cr, uid, tx_id, context=context)
invalid_param_method_name = '_%s_s2s_get_tx_status' % tx.acquirer_id.name invalid_param_method_name = '_%s_s2s_get_tx_status' % tx.acquirer_id.provider
if hasattr(self, invalid_param_method_name): if hasattr(self, invalid_param_method_name):
return getattr(self, invalid_param_method_name)(cr, uid, tx, context=context) return getattr(self, invalid_param_method_name)(cr, uid, tx, context=context)

View File

@ -8,7 +8,7 @@
parent='base.menu_administration'/> parent='base.menu_administration'/>
<record id="acquirer_form" model="ir.ui.view"> <record id="acquirer_form" model="ir.ui.view">
<field name="name">acquirer.form</field> <field name="name">payment.acquirer.form</field>
<field name="model">payment.acquirer</field> <field name="model">payment.acquirer</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Payment Acquirer" version="7.0"> <form string="Payment Acquirer" version="7.0">
@ -16,6 +16,7 @@
<group name="acquirer_base"> <group name="acquirer_base">
<group> <group>
<field name="name"/> <field name="name"/>
<field name="provider"/>
<field name="company_id"/> <field name="company_id"/>
<field name="website_published"/> <field name="website_published"/>
<field name="env"/> <field name="env"/>
@ -62,10 +63,12 @@
</record> </record>
<record id="acquirer_list" model="ir.ui.view"> <record id="acquirer_list" model="ir.ui.view">
<field name="name">payment.acquirer.list</field>
<field name="model">payment.acquirer</field> <field name="model">payment.acquirer</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Payment Acquirers"> <tree string="Payment Acquirers">
<field name="name"/> <field name="name"/>
<field name="provider"/>
<field name="website_published"/> <field name="website_published"/>
<field name="env"/> <field name="env"/>
</tree> </tree>
@ -73,10 +76,15 @@
</record> </record>
<record id="acquirer_search" model="ir.ui.view"> <record id="acquirer_search" model="ir.ui.view">
<field name="name">payment.acquirer.search</field>
<field name="model">payment.acquirer</field> <field name="model">payment.acquirer</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search> <search>
<field name="name"/> <field name="name"/>
<field name="provider"/>
<group expand="0" string="Group By...">
<filter string="Provider" name="provider" domain="[]" context="{'group_by': 'provider'}"/>
</group>
</search> </search>
</field> </field>
</record> </record>
@ -95,6 +103,7 @@
sequence='10' /> sequence='10' />
<record id="transaction_form" model="ir.ui.view"> <record id="transaction_form" model="ir.ui.view">
<field name="name">payment.transaction.form</field>
<field name="model">payment.transaction</field> <field name="model">payment.transaction</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Payment Transactions" version="7.0"> <form string="Payment Transactions" version="7.0">
@ -138,6 +147,7 @@
</record> </record>
<record id="transaction_list" model="ir.ui.view"> <record id="transaction_list" model="ir.ui.view">
<field name="name">payment.transaction.list</field>
<field name="model">payment.transaction</field> <field name="model">payment.transaction</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Payment Transactions"> <tree string="Payment Transactions">
@ -151,6 +161,7 @@
</record> </record>
<record id="transaction" model="ir.ui.view"> <record id="transaction" model="ir.ui.view">
<field name="name">payment.transaction.search</field>
<field name="model">payment.transaction</field> <field name="model">payment.transaction</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search> <search>

View File

@ -3,7 +3,8 @@
<data noupdate="1"> <data noupdate="1">
<record id="payment_acquirer_adyen" model="payment.acquirer"> <record id="payment_acquirer_adyen" model="payment.acquirer">
<field name="name">adyen</field> <field name="name">Adyen</field>
<field name="provider">adyen</field>
<field name="company_id" ref="base.main_company"/> <field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="adyen_acquirer_button"/> <field name="view_template_id" ref="adyen_acquirer_button"/>
<field name="env">test</field> <field name="env">test</field>

View File

@ -26,15 +26,15 @@ class AcquirerAdyen(osv.Model):
- yhpp: hosted payment page: pay.shtml for single, select.shtml for multiple - yhpp: hosted payment page: pay.shtml for single, select.shtml for multiple
""" """
if env == 'prod':
return { return {
'adyen_form_url': 'https://prod.adyen.com/hpp/pay.shtml', 'adyen_form_url': 'https://%s.adyen.com/hpp/pay.shtml' % env,
}
else:
return {
'adyen_form_url': 'https://test.adyen.com/hpp/pay.shtml',
} }
def _get_providers(self, cr, uid, context=None):
providers = super(AcquirerAdyen, self)._get_providers(cr, uid, context=context)
providers.append(['adyen', 'Adyen'])
return providers
_columns = { _columns = {
'adyen_merchant_account': fields.char('Merchant Account', required_if_provider='adyen'), 'adyen_merchant_account': fields.char('Merchant Account', required_if_provider='adyen'),
'adyen_skin_code': fields.char('Skin Code', required_if_provider='adyen'), 'adyen_skin_code': fields.char('Skin Code', required_if_provider='adyen'),
@ -54,7 +54,7 @@ class AcquirerAdyen(osv.Model):
:return string: shasign :return string: shasign
""" """
assert inout in ('in', 'out') assert inout in ('in', 'out')
assert acquirer.name == 'adyen' assert acquirer.provider == 'adyen'
if inout == 'in': if inout == 'in':
keys = "paymentAmount currencyCode shipBeforeDate merchantReference skinCode merchantAccount sessionValidity shopperEmail shopperReference recurringContract allowedMethods blockedMethods shopperStatement merchantReturnData billingAddressType deliveryAddressType offset".split() keys = "paymentAmount currencyCode shipBeforeDate merchantReference skinCode merchantAccount sessionValidity shopperEmail shopperReference recurringContract allowedMethods blockedMethods shopperStatement merchantReturnData billingAddressType deliveryAddressType offset".split()

View File

@ -8,7 +8,7 @@
<field name="inherit_id" ref="payment.acquirer_form"/> <field name="inherit_id" ref="payment.acquirer_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr='//group[@name="acquirer_display"]' position='after'> <xpath expr='//group[@name="acquirer_display"]' position='after'>
<group attrs="{'invisible': [('name', '!=', 'adyen')]}"> <group attrs="{'invisible': [('provider', '!=', 'adyen')]}">
<field name="adyen_merchant_account"/> <field name="adyen_merchant_account"/>
<field name="adyen_skin_code"/> <field name="adyen_skin_code"/>
<field name="adyen_skin_hmac_key"/> <field name="adyen_skin_hmac_key"/>

View File

@ -3,7 +3,8 @@
<data noupdate="1"> <data noupdate="1">
<record id="payment_acquirer_ogone" model="payment.acquirer"> <record id="payment_acquirer_ogone" model="payment.acquirer">
<field name="name">ogone</field> <field name="name">Credit Card</field>
<field name="provider">ogone</field>
<field name="company_id" ref="base.main_company"/> <field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="ogone_acquirer_button"/> <field name="view_template_id" ref="ogone_acquirer_button"/>
<field name="env">test</field> <field name="env">test</field>

View File

@ -36,6 +36,11 @@ class PaymentAcquirerOgone(osv.Model):
'ogone_afu_agree_url': 'https://secure.ogone.com/ncol/%s/AFU_agree.asp' % (env,), 'ogone_afu_agree_url': 'https://secure.ogone.com/ncol/%s/AFU_agree.asp' % (env,),
} }
def _get_providers(self, cr, uid, context=None):
providers = super(PaymentAcquirerOgone, self)._get_providers(cr, uid, context=context)
providers.append(['ogone', 'Ogone'])
return providers
_columns = { _columns = {
'ogone_pspid': fields.char('PSPID', required_if_provider='ogone'), 'ogone_pspid': fields.char('PSPID', required_if_provider='ogone'),
'ogone_userid': fields.char('API User ID', required_if_provider='ogone'), 'ogone_userid': fields.char('API User ID', required_if_provider='ogone'),
@ -57,7 +62,7 @@ class PaymentAcquirerOgone(osv.Model):
:return string: shasign :return string: shasign
""" """
assert inout in ('in', 'out') assert inout in ('in', 'out')
assert acquirer.name == 'ogone' assert acquirer.provider == 'ogone'
key = getattr(acquirer, 'ogone_shakey_' + inout) key = getattr(acquirer, 'ogone_shakey_' + inout)
def filter_key(key): def filter_key(key):

View File

@ -8,7 +8,7 @@
<field name="inherit_id" ref="payment.acquirer_form"/> <field name="inherit_id" ref="payment.acquirer_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr='//group[@name="acquirer_display"]' position='after'> <xpath expr='//group[@name="acquirer_display"]' position='after'>
<group attrs="{'invisible': [('name', '!=', 'ogone')]}"> <group attrs="{'invisible': [('provider', '!=', 'ogone')]}">
<field name="ogone_pspid"/> <field name="ogone_pspid"/>
<field name="ogone_userid"/> <field name="ogone_userid"/>
<field name="ogone_password"/> <field name="ogone_password"/>

View File

@ -3,7 +3,8 @@
<data noupdate="1"> <data noupdate="1">
<record id="payment_acquirer_paypal" model="payment.acquirer"> <record id="payment_acquirer_paypal" model="payment.acquirer">
<field name="name">paypal</field> <field name="name">Paypal</field>
<field name="provider">paypal</field>
<field name="company_id" ref="base.main_company"/> <field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="paypal_acquirer_button"/> <field name="view_template_id" ref="paypal_acquirer_button"/>
<field name="env">test</field> <field name="env">test</field>

View File

@ -34,6 +34,11 @@ class AcquirerPaypal(osv.Model):
'paypal_rest_url': 'https://api.sandbox.paypal.com/v1/oauth2/token', 'paypal_rest_url': 'https://api.sandbox.paypal.com/v1/oauth2/token',
} }
def _get_providers(self, cr, uid, context=None):
providers = super(AcquirerPaypal, self)._get_providers(cr, uid, context=context)
providers.append(['paypal', 'Paypal'])
return providers
_columns = { _columns = {
'paypal_email_account': fields.char('Paypal Email ID', required_if_provider='paypal'), 'paypal_email_account': fields.char('Paypal Email ID', required_if_provider='paypal'),
'paypal_seller_account': fields.char( 'paypal_seller_account': fields.char(

View File

@ -8,7 +8,7 @@
<field name="inherit_id" ref="payment.acquirer_form"/> <field name="inherit_id" ref="payment.acquirer_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr='//group[@name="acquirer_display"]' position='after'> <xpath expr='//group[@name="acquirer_display"]' position='after'>
<group attrs="{'invisible': [('name', '!=', 'paypal')]}"> <group attrs="{'invisible': [('provider', '!=', 'paypal')]}">
<group> <group>
<group> <group>
<field name="paypal_email_account"/> <field name="paypal_email_account"/>

View File

@ -3,7 +3,8 @@
<data noupdate="1"> <data noupdate="1">
<record id="payment_acquirer_transfer" model="payment.acquirer"> <record id="payment_acquirer_transfer" model="payment.acquirer">
<field name="name">transfer</field> <field name="name">Wire Transfer</field>
<field name="provider">transfer</field>
<field name="company_id" ref="base.main_company"/> <field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="transfer_acquirer_button"/> <field name="view_template_id" ref="transfer_acquirer_button"/>
<field name="validation">manual</field> <field name="validation">manual</field>

View File

@ -14,6 +14,11 @@ _logger = logging.getLogger(__name__)
class TransferPaymentAcquirer(osv.Model): class TransferPaymentAcquirer(osv.Model):
_inherit = 'payment.acquirer' _inherit = 'payment.acquirer'
def _get_providers(self, cr, uid, context=None):
providers = super(TransferPaymentAcquirer, self)._get_providers(cr, uid, context=context)
providers.append(['transfer', 'Wire Transfer'])
return providers
def transfer_get_form_action_url(self, cr, uid, id, context=None): def transfer_get_form_action_url(self, cr, uid, id, context=None):
return '/payment/transfer/feedback' return '/payment/transfer/feedback'

View File

@ -517,7 +517,8 @@ class pos_order(osv.osv):
# Keep only new orders # Keep only new orders
submitted_references = [o['data']['name'] for o in orders] submitted_references = [o['data']['name'] for o in orders]
existing_orders = self.search_read(cr, uid, domain=[('pos_reference', 'in', submitted_references)], fields=['pos_reference'], context=context) existing_order_ids = self.search(cr, uid, [('pos_reference', 'in', submitted_references)], context=context)
existing_orders = self.read(cr, uid, existing_order_ids, ['pos_reference'], context=context)
existing_references = set([o['pos_reference'] for o in existing_orders]) existing_references = set([o['pos_reference'] for o in existing_orders])
orders_to_save = [o for o in orders if o['data']['name'] not in existing_references] orders_to_save = [o for o in orders if o['data']['name'] not in existing_references]

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n" "Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-16 20:56+0000\n" "PO-Revision-Date: 2014-04-04 19:08+0000\n"
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n" "Last-Translator: Dariusz Żbikowski <Unknown>\n"
"Language-Team: Polish <pl@li.org>\n" "Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-03-27 07:18+0000\n" "X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
"X-Generator: Launchpad (build 16967)\n" "X-Generator: Launchpad (build 16976)\n"
#. module: procurement #. module: procurement
#: model:ir.ui.menu,name:procurement.menu_stock_sched #: model:ir.ui.menu,name:procurement.menu_stock_sched
@ -493,7 +493,7 @@ msgstr "Nieprzeczytane wiadomości"
#. module: procurement #. module: procurement
#: selection:mrp.property,composition:0 #: selection:mrp.property,composition:0
msgid "plus" msgid "plus"
msgstr "" msgstr "plus"
#. module: procurement #. module: procurement
#: help:procurement.order,state:0 #: help:procurement.order,state:0
@ -515,6 +515,8 @@ msgid ""
"If the active field is set to False, it will allow you to hide the " "If the active field is set to False, it will allow you to hide the "
"orderpoint without removing it." "orderpoint without removing it."
msgstr "" msgstr ""
"Jeśli pole nie jest aktywne, pozwoli ci ukryć punkt zamawiania bez jego "
"kasowania."
#. module: procurement #. module: procurement
#: view:product.product:0 #: view:product.product:0
@ -547,8 +549,8 @@ msgid ""
"You have to select a product unit of measure in the same category than the " "You have to select a product unit of measure in the same category than the "
"default unit of measure of the product" "default unit of measure of the product"
msgstr "" msgstr ""
"Musisz wybrać jednostkę miary z tej samej kategorii do domyślna jednostka " "Musisz wybrać jednostkę miary z tej samej kategorii, co domyślna jednostka "
"produktu." "produktu"
#. module: procurement #. module: procurement
#: view:procurement.order:0 #: view:procurement.order:0
@ -589,7 +591,7 @@ msgstr "Projekt"
#: model:ir.ui.menu,name:procurement.menu_stock_proc_schedulers #: model:ir.ui.menu,name:procurement.menu_stock_proc_schedulers
#: view:procurement.order.compute.all:0 #: view:procurement.order.compute.all:0
msgid "Run Schedulers" msgid "Run Schedulers"
msgstr "uruchom planowanie" msgstr "Uruchom planowanie"
#. module: procurement #. module: procurement
#: view:procurement.order.compute:0 #: view:procurement.order.compute:0
@ -1027,7 +1029,7 @@ msgstr "Zapotrzbowanie uruchomione późno"
#. module: procurement #. module: procurement
#: selection:mrp.property,composition:0 #: selection:mrp.property,composition:0
msgid "min" msgid "min"
msgstr "" msgstr "min."
#. module: procurement #. module: procurement
#: view:make.procurement:0 #: view:make.procurement:0

View File

@ -439,7 +439,8 @@ class procurement_order(osv.osv):
if len(to_cancel): if len(to_cancel):
move_obj.action_cancel(cr, uid, to_cancel) move_obj.action_cancel(cr, uid, to_cancel)
if len(to_assign): if len(to_assign):
move_obj.write(cr, uid, to_assign, {'state': 'assigned'}) move_obj.write(cr, uid, to_assign, {'state': 'confirmed'})
move_obj.action_assign(cr, uid, to_assign)
self.write(cr, uid, ids, {'state': 'cancel'}) self.write(cr, uid, ids, {'state': 'cancel'})
for id in ids: for id in ids:
workflow.trg_trigger(uid, 'procurement.order', id, cr) workflow.trg_trigger(uid, 'procurement.order', id, cr)

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev_rc3\n" "Project-Id-Version: OpenERP Server 6.0dev_rc3\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-16 19:25+0000\n" "PO-Revision-Date: 2014-04-07 13:25+0000\n"
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n" "Last-Translator: Dariusz Żbikowski (Krokus) <darek@krokus.com.pl>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-03-27 06:41+0000\n" "X-Launchpad-Export-Date: 2014-04-08 06:18+0000\n"
"X-Generator: Launchpad (build 16967)\n" "X-Generator: Launchpad (build 16976)\n"
#. module: product #. module: product
#: field:product.packaging,rows:0 #: field:product.packaging,rows:0
@ -735,7 +735,7 @@ msgstr "Jeśli zaznaczone, to wiadomość wymaga twojej uwagi"
#. module: product #. module: product
#: field:product.product,ean13:0 #: field:product.product,ean13:0
msgid "EAN13 Barcode" msgid "EAN13 Barcode"
msgstr "" msgstr "Kod kreskowy EAN13"
#. module: product #. module: product
#: model:ir.actions.act_window,name:product.action_product_price_list #: model:ir.actions.act_window,name:product.action_product_price_list
@ -1188,7 +1188,7 @@ msgstr "Wiadomości i historia komunikacji"
#. module: product #. module: product
#: model:product.uom,name:product.product_uom_kgm #: model:product.uom,name:product.product_uom_kgm
msgid "kg" msgid "kg"
msgstr "" msgstr "kg"
#. module: product #. module: product
#: selection:product.template,state:0 #: selection:product.template,state:0
@ -1198,7 +1198,7 @@ msgstr "Zdezaktualizowany"
#. module: product #. module: product
#: model:product.uom,name:product.product_uom_km #: model:product.uom,name:product.product_uom_km
msgid "km" msgid "km"
msgstr "" msgstr "km"
#. module: product #. module: product
#: field:product.template,standard_price:0 #: field:product.template,standard_price:0
@ -1354,6 +1354,8 @@ msgid ""
"This field holds the image used as image for the product, limited to " "This field holds the image used as image for the product, limited to "
"1024x1024px." "1024x1024px."
msgstr "" msgstr ""
"To pole utrzymuje obraz użyty jako zdjęcie produktu, limitowany rozmiar "
"1024x1024."
#. module: product #. module: product
#: help:product.pricelist.item,categ_id:0 #: help:product.pricelist.item,categ_id:0
@ -1519,7 +1521,7 @@ msgstr ""
#. module: product #. module: product
#: model:product.uom,name:product.product_uom_cm #: model:product.uom,name:product.product_uom_cm
msgid "cm" msgid "cm"
msgstr "" msgstr "cm"
#. module: product #. module: product
#: model:ir.model,name:product.model_product_uom #: model:ir.model,name:product.model_product_uom

View File

@ -10,7 +10,7 @@ Add email templates to products to be send on invoice confirmation
================================================================== ==================================================================
With this module, link your products to a template to send complete information and tools to your customer. With this module, link your products to a template to send complete information and tools to your customer.
For instance when invoicing a training, the training agenda and materials will automatically be send to your customers.' For instance when invoicing a training, the training agenda and materials will automatically be sent to your customers.'
""", """,
'website': 'http://www.openerp.com', 'website': 'http://www.openerp.com',
'demo': [ 'demo': [

View File

@ -13,7 +13,7 @@ class product_template(osv.Model):
_columns = { _columns = {
'email_template_id': fields.many2one( 'email_template_id': fields.many2one(
'email.template', 'Product Email Template', 'email.template', 'Product Email Template',
help='When validating an invoice, an email will be send to the customer' help='When validating an invoice, an email will be sent to the customer'
'based on this template. The customer will receive an email for each' 'based on this template. The customer will receive an email for each'
'product linked to an email template.'), 'product linked to an email template.'),
} }

View File

@ -287,7 +287,9 @@ class project(osv.osv):
"- Followers Only: employees see only the followed tasks or issues; if portal\n" "- Followers Only: employees see only the followed tasks or issues; if portal\n"
" is activated, portal users see the followed tasks or issues."), " is activated, portal users see the followed tasks or issues."),
'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'), ('cancelled', 'Cancelled'),('pending','Pending'),('close','Closed')], 'Status', required=True,), 'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'), ('cancelled', 'Cancelled'),('pending','Pending'),('close','Closed')], 'Status', required=True,),
'doc_count':fields.function(_get_attached_docs, string="Number of documents attached", type='int') 'doc_count': fields.function(
_get_attached_docs, string="Number of documents attached", type='integer'
)
} }
def _get_type_common(self, cr, uid, context): def _get_type_common(self, cr, uid, context):
@ -724,6 +726,7 @@ class task(osv.osv):
context = {} context = {}
if default is None: if default is None:
default = {} default = {}
if not context.get('copy', False):
stage = self._get_default_stage_id(cr, uid, context=context) stage = self._get_default_stage_id(cr, uid, context=context)
if stage: if stage:
default['stage_id'] = stage default['stage_id'] = stage
@ -750,7 +753,7 @@ class task(osv.osv):
'description': fields.text('Description'), 'description': fields.text('Description'),
'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'Priority', select=True), 'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'Priority', select=True),
'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of tasks."), 'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of tasks."),
'stage_id': fields.many2one('project.task.type', 'Stage', track_visibility='onchange', 'stage_id': fields.many2one('project.task.type', 'Stage', track_visibility='onchange', select=True,
domain="[('project_ids', '=', project_id)]"), domain="[('project_ids', '=', project_id)]"),
'categ_ids': fields.many2many('project.category', string='Tags'), 'categ_ids': fields.many2many('project.category', string='Tags'),
'kanban_state': fields.selection([('normal', 'In Progress'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State', 'kanban_state': fields.selection([('normal', 'In Progress'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State',
@ -766,7 +769,7 @@ class task(osv.osv):
'date_end': fields.datetime('Ending Date',select=True), 'date_end': fields.datetime('Ending Date',select=True),
'date_deadline': fields.date('Deadline',select=True), 'date_deadline': fields.date('Deadline',select=True),
'date_last_stage_update': fields.datetime('Last Stage Update', select=True), 'date_last_stage_update': fields.datetime('Last Stage Update', select=True),
'project_id': fields.many2one('project.project', 'Project', ondelete='set null', select="1", track_visibility='onchange', change_default=True), 'project_id': fields.many2one('project.project', 'Project', ondelete='set null', select=True, track_visibility='onchange', change_default=True),
'parent_ids': fields.many2many('project.task', 'project_task_parent_rel', 'task_id', 'parent_id', 'Parent Tasks'), 'parent_ids': fields.many2many('project.task', 'project_task_parent_rel', 'task_id', 'parent_id', 'Parent Tasks'),
'child_ids': fields.many2many('project.task', 'project_task_parent_rel', 'parent_id', 'task_id', 'Delegated Tasks'), 'child_ids': fields.many2many('project.task', 'project_task_parent_rel', 'parent_id', 'task_id', 'Delegated Tasks'),
'notes': fields.text('Notes'), 'notes': fields.text('Notes'),
@ -792,7 +795,7 @@ class task(osv.osv):
'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours'], 10), 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours'], 10),
'project.task.work': (_get_task, ['hours'], 10), 'project.task.work': (_get_task, ['hours'], 10),
}), }),
'user_id': fields.many2one('res.users', 'Assigned to', track_visibility='onchange'), 'user_id': fields.many2one('res.users', 'Assigned to', select=True, track_visibility='onchange'),
'delegated_user_id': fields.related('child_ids', 'user_id', type='many2one', relation='res.users', string='Delegated To'), 'delegated_user_id': fields.related('child_ids', 'user_id', type='many2one', relation='res.users', string='Delegated To'),
'partner_id': fields.many2one('res.partner', 'Customer'), 'partner_id': fields.many2one('res.partner', 'Customer'),
'work_ids': fields.one2many('project.task.work', 'task_id', 'Work done'), 'work_ids': fields.one2many('project.task.work', 'task_id', 'Work done'),
@ -1026,7 +1029,7 @@ class task(osv.osv):
if vals.get('project_id') and not context.get('default_project_id'): if vals.get('project_id') and not context.get('default_project_id'):
context['default_project_id'] = vals.get('project_id') context['default_project_id'] = vals.get('project_id')
# user_id change: update date_start # user_id change: update date_start
if vals.get('user_id'): if vals.get('user_id') and not vals.get('start_date'):
vals['date_start'] = fields.datetime.now() vals['date_start'] = fields.datetime.now()
# context: no_log, because subtype already handle this # context: no_log, because subtype already handle this
@ -1043,7 +1046,7 @@ class task(osv.osv):
if 'stage_id' in vals: if 'stage_id' in vals:
vals['date_last_stage_update'] = fields.datetime.now() vals['date_last_stage_update'] = fields.datetime.now()
# user_id change: update date_start # user_id change: update date_start
if vals.get('user_id'): if vals.get('user_id') and 'date_start' not in vals:
vals['date_start'] = fields.datetime.now() vals['date_start'] = fields.datetime.now()
# Overridden to reset the kanban_state to normal whenever # Overridden to reset the kanban_state to normal whenever

View File

@ -380,7 +380,7 @@
</div> </div>
<group> <group>
<group> <group>
<field name="project_id" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/> <field name="project_id" domain="[('state', '!=', 'close')]" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/>
<field name="user_id" <field name="user_id"
options='{"no_open": True}' options='{"no_open": True}'
context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_user']}"/> context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_user']}"/>

View File

@ -265,9 +265,9 @@ class project_issue(osv.Model):
'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'Priority', select=True), 'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'Priority', select=True),
'version_id': fields.many2one('project.issue.version', 'Version'), 'version_id': fields.many2one('project.issue.version', 'Version'),
'stage_id': fields.many2one ('project.task.type', 'Stage', 'stage_id': fields.many2one ('project.task.type', 'Stage',
track_visibility='onchange', track_visibility='onchange', select=True,
domain="[('project_ids', '=', project_id)]"), domain="[('project_ids', '=', project_id)]"),
'project_id':fields.many2one('project.project', 'Project', track_visibility='onchange'), 'project_id': fields.many2one('project.project', 'Project', track_visibility='onchange', select=True),
'duration': fields.float('Duration'), 'duration': fields.float('Duration'),
'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"), 'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"),
'day_open': fields.function(_compute_day, string='Days to Open', \ 'day_open': fields.function(_compute_day, string='Days to Open', \

View File

@ -62,7 +62,7 @@ class purchase_config_settings(osv.osv_memory):
} }
_defaults = { _defaults = {
'default_invoice_method': 'manual', 'default_invoice_method': 'order',
} }
def onchange_purchase_analytic_plans(self, cr, uid, ids, module_purchase_analytic_plans, context=None): def onchange_purchase_analytic_plans(self, cr, uid, ids, module_purchase_analytic_plans, context=None):

View File

@ -107,7 +107,7 @@ class purchase_requisition(osv.osv):
seller_delay = product_supplier.delay seller_delay = product_supplier.delay
seller_qty = product_supplier.qty seller_qty = product_supplier.qty
supplier_pricelist = supplier.property_product_pricelist_purchase or False supplier_pricelist = supplier.property_product_pricelist_purchase or False
seller_price = pricelist.price_get(cr, uid, [supplier_pricelist.id], product.id, qty, False, {'uom': default_uom_po_id})[supplier_pricelist.id] seller_price = pricelist.price_get(cr, uid, [supplier_pricelist.id], product.id, qty, supplier.id, {'uom': default_uom_po_id})[supplier_pricelist.id]
if seller_qty: if seller_qty:
qty = max(qty,seller_qty) qty = max(qty,seller_qty)
date_planned = self._planned_date(requisition_line.requisition_id, seller_delay) date_planned = self._planned_date(requisition_line.requisition_id, seller_delay)

View File

@ -500,7 +500,7 @@ class sale_order(osv.osv):
lines.append(line.id) lines.append(line.id)
created_lines = obj_sale_order_line.invoice_line_create(cr, uid, lines) created_lines = obj_sale_order_line.invoice_line_create(cr, uid, lines)
if created_lines: if created_lines:
invoices.setdefault(o.partner_id.id, []).append((o, created_lines)) invoices.setdefault(o.partner_invoice_id.id or o.partner_id.id, []).append((o, created_lines))
if not invoices: if not invoices:
for o in self.browse(cr, uid, ids, context=context): for o in self.browse(cr, uid, ids, context=context):
for i in o.invoice_ids: for i in o.invoice_ids:

View File

@ -101,7 +101,6 @@ class sale_order_line_make_invoice(osv.osv_memory):
break break
if flag: if flag:
workflow.trg_validate(uid, 'sale.order', order.id, 'manual_invoice', cr) workflow.trg_validate(uid, 'sale.order', order.id, 'manual_invoice', cr)
sales_order_obj.write(cr, uid, [order.id], {'state': 'progress'})
if not invoices: if not invoices:
raise osv.except_osv(_('Warning!'), _('Invoice cannot be created for this Sales Order Line due to one of the following reasons:\n1.The state of this sales order line is either "draft" or "cancel"!\n2.The Sales Order Line is Invoiced!')) raise osv.except_osv(_('Warning!'), _('Invoice cannot be created for this Sales Order Line due to one of the following reasons:\n1.The state of this sales order line is either "draft" or "cancel"!\n2.The Sales Order Line is Invoiced!'))

View File

@ -19,21 +19,7 @@
# #
############################################################################## ##############################################################################
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp import SUPERUSER_ID
class res_groups(osv.osv):
_name = "res.groups"
_inherit = 'res.groups'
_columns = {
'share': fields.boolean('Share Group', readonly=True,
help="Group created to set access rights for sharing data with some users.")
}
def get_application_groups(self, cr, uid, domain=None, context=None):
if domain is None:
domain = []
domain.append(('share', '=', False))
return super(res_groups, self).get_application_groups(cr, uid, domain=domain, context=context)
class res_users(osv.osv): class res_users(osv.osv):
_name = 'res.users' _name = 'res.users'
@ -59,4 +45,28 @@ class res_users(osv.osv):
}, help="External user with limited access, created only for the purpose of sharing data."), }, help="External user with limited access, created only for the purpose of sharing data."),
} }
class res_groups(osv.osv):
_name = "res.groups"
_inherit = 'res.groups'
_columns = {
'share': fields.boolean('Share Group', readonly=True,
help="Group created to set access rights for sharing data with some users.")
}
def init(self, cr):
# force re-generation of the user groups view without the shared groups
self.update_user_groups_view(cr, SUPERUSER_ID)
parent_class = super(res_groups, self)
if hasattr(parent_class, 'init'):
parent_class.init(cr)
def get_application_groups(self, cr, uid, domain=None, context=None):
if domain is None:
domain = []
domain.append(('share', '=', False))
return super(res_groups, self).get_application_groups(cr, uid, domain=domain, context=context)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2012-12-22 15:56+0000\n" "PO-Revision-Date: 2014-04-07 13:08+0000\n"
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n" "Last-Translator: Dariusz Żbikowski (Krokus) <darek@krokus.com.pl>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-03-27 05:52+0000\n" "X-Launchpad-Export-Date: 2014-04-08 06:18+0000\n"
"X-Generator: Launchpad (build 16967)\n" "X-Generator: Launchpad (build 16976)\n"
#. module: stock #. module: stock
#: field:stock.inventory.line.split,line_exist_ids:0 #: field:stock.inventory.line.split,line_exist_ids:0
@ -1420,7 +1420,7 @@ msgstr "Zapas fizyczny"
#: code:addons/stock/wizard/stock_move.py:214 #: code:addons/stock/wizard/stock_move.py:214
#, python-format #, python-format
msgid "Processing Error!" msgid "Processing Error!"
msgstr "" msgstr "Błąd przetwarzania!"
#. module: stock #. module: stock
#: help:stock.location,chained_company_id:0 #: help:stock.location,chained_company_id:0
@ -2623,7 +2623,7 @@ msgstr "Ustaw na projekt"
#: model:ir.actions.act_window,name:stock.action_stock_journal_form #: model:ir.actions.act_window,name:stock.action_stock_journal_form
#: model:ir.ui.menu,name:stock.menu_action_stock_journal_form #: model:ir.ui.menu,name:stock.menu_action_stock_journal_form
msgid "Stock Journals" msgid "Stock Journals"
msgstr "Dzienniki mogazynowe" msgstr "Dzienniki magazynowe"
#. module: stock #. module: stock
#: view:product.product:0 #: view:product.product:0

View File

@ -66,7 +66,7 @@ class ir_http(orm.AbstractModel):
def reroute(self, path): def reroute(self, path):
if not hasattr(request, 'rerouting'): if not hasattr(request, 'rerouting'):
request.rerouting = [] request.rerouting = [request.httprequest.path]
if path in request.rerouting: if path in request.rerouting:
raise Exception("Rerouting loop is forbidden") raise Exception("Rerouting loop is forbidden")
request.rerouting.append(path) request.rerouting.append(path)

View File

@ -157,7 +157,7 @@ class DateTime(orm.AbstractModel):
value = datetime.datetime.strptime( value = datetime.datetime.strptime(
value, DEFAULT_SERVER_DATETIME_FORMAT) value, DEFAULT_SERVER_DATETIME_FORMAT)
if value: if value:
value = column.context_timestamp( value = fields.datetime.context_timestamp(
cr, uid, timestamp=value, context=context) cr, uid, timestamp=value, context=context)
value = value.strftime(openerp.tools.DEFAULT_SERVER_DATETIME_FORMAT) value = value.strftime(openerp.tools.DEFAULT_SERVER_DATETIME_FORMAT)

View File

@ -511,13 +511,13 @@
<img class="oe_snippet_thumbnail_img" src="/website/static/src/img/blocks/block_button.png"/> <img class="oe_snippet_thumbnail_img" src="/website/static/src/img/blocks/block_button.png"/>
<span class="oe_snippet_thumbnail_title">Button</span> <span class="oe_snippet_thumbnail_title">Button</span>
</div> </div>
<section class="oe_snippet_body jumbotron oe_dark"> <section class="oe_snippet_body jumbotron">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-9"> <div class="col-md-9 text-muted">
<p class="mb0"> <p class="mb0">
<strong>50,000+ companies run Odoo to grow their businesses.</strong> <strong>50,000+ companies run Odoo to grow their businesses.</strong>
</p><p class="mb0 text-muted"> </p><p class="mb0">
Join us and make your company a better place. Join us and make your company a better place.
</p> </p>
</div> </div>

View File

@ -6,10 +6,7 @@
</div> </div>
<div class="oe_span6"> <div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot"> <div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website_blog">
<img src="blog_cover.png"> <img src="blog_cover.png">
</a>
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
</div> </div>
</div> </div>
<div class="oe_span6"> <div class="oe_span6">

View File

@ -6,10 +6,7 @@
</div> </div>
<div class="oe_span6"> <div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot"> <div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website">
<img src="contact.png"> <img src="contact.png">
</a>
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
</div> </div>
</div> </div>
<div class="oe_span6"> <div class="oe_span6">

View File

@ -6,10 +6,7 @@
</div> </div>
<div class="oe_span6"> <div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot"> <div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website_event">
<img src="event_top.png"> <img src="event_top.png">
</a>
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
</div> </div>
</div> </div>
<div class="oe_span6"> <div class="oe_span6">

View File

@ -6,10 +6,7 @@
</div> </div>
<div class="oe_span6"> <div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot"> <div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website_event">
<img src="event.png"> <img src="event.png">
</a>
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
</div> </div>
</div> </div>
<div class="oe_span6"> <div class="oe_span6">

View File

@ -6,10 +6,7 @@
</div> </div>
<div class="oe_span6"> <div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot"> <div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website_hr">
<img src="jobs.png"> <img src="jobs.png">
</a>
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
</div> </div>
</div> </div>
<div class="oe_span6"> <div class="oe_span6">

View File

@ -19,10 +19,10 @@
# #
############################################################################## ##############################################################################
from openerp import SUPERUSER_ID
from openerp.tools import html2plaintext from openerp.tools import html2plaintext
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp.osv import osv, fields from openerp.osv import osv, fields, expression
class MailMessage(osv.Model): class MailMessage(osv.Model):
_inherit = 'mail.message' _inherit = 'mail.message'
@ -63,10 +63,11 @@ class MailMessage(osv.Model):
context=None, count=False, access_rights_uid=None): context=None, count=False, access_rights_uid=None):
""" Override that adds specific access rights of mail.message, to restrict """ Override that adds specific access rights of mail.message, to restrict
messages to published messages for public users. """ messages to published messages for public users. """
if uid != SUPERUSER_ID:
group_ids = self.pool.get('res.users').browse(cr, uid, uid, context=context).groups_id group_ids = self.pool.get('res.users').browse(cr, uid, uid, context=context).groups_id
group_user_id = self.pool.get("ir.model.data").get_object_reference(cr, uid, 'base', 'group_public')[1] group_user_id = self.pool.get("ir.model.data").get_object_reference(cr, uid, 'base', 'group_public')[1]
if group_user_id in [group.id for group in group_ids]: if group_user_id in [group.id for group in group_ids]:
args = ['&', ('website_published', '=', True)] + list(args) args = expression.AND([[('website_published', '=', True)], list(args)])
return super(MailMessage, self)._search(cr, uid, args, offset=offset, limit=limit, order=order, return super(MailMessage, self)._search(cr, uid, args, offset=offset, limit=limit, order=order,
context=context, count=count, access_rights_uid=access_rights_uid) context=context, count=count, access_rights_uid=access_rights_uid)

View File

@ -21,7 +21,7 @@
from openerp.osv import osv, fields from openerp.osv import osv, fields
# TODO for trunk, remove me
class MailThread(osv.Model): class MailThread(osv.Model):
_inherit = 'mail.thread' _inherit = 'mail.thread'
@ -35,3 +35,7 @@ class MailThread(osv.Model):
help="Website communication history", help="Website communication history",
), ),
} }
def copy(self, cr, uid, id, default=None, context=None):
default['website_message_ids'] = []
return super(MailThread, self).copy(cr, uid, id, default=default, context=context)

View File

@ -131,6 +131,8 @@ class sale_order(osv.osv):
} }
def onchange_template_id(self, cr, uid, ids, template_id, partner=False, fiscal_position=False, context=None): def onchange_template_id(self, cr, uid, ids, template_id, partner=False, fiscal_position=False, context=None):
if not template_id:
return True
lines = [] lines = []
quote_template = self.pool.get('sale.quote.template').browse(cr, uid, template_id, context=context) quote_template = self.pool.get('sale.quote.template').browse(cr, uid, template_id, context=context)
for line in quote_template.quote_line: for line in quote_template.quote_line:

View File

@ -14,6 +14,7 @@ OpenERP E-Commerce
'data/website_sale_data.xml', 'data/website_sale_data.xml',
'views/website_sale.xml', 'views/website_sale.xml',
'views/website_sale_backend.xml', 'views/website_sale_backend.xml',
'views/payment.xml',
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'security/website_sale.xml', 'security/website_sale.xml',
], ],

View File

@ -275,6 +275,7 @@ class Ecommerce(http.Controller):
all_categories.add(parent) all_categories.add(parent)
parent = parent.parent_id parent = parent.parent_id
categories = list(all_categories) categories = list(all_categories)
categories.sort(key=lambda x: x.sequence)
values = { values = {
'products': products, 'products': products,
@ -584,6 +585,7 @@ class Ecommerce(http.Controller):
""" """
cr, uid, context = request.cr, request.uid, request.context cr, uid, context = request.cr, request.uid, request.context
payment_obj = request.registry.get('payment.acquirer') payment_obj = request.registry.get('payment.acquirer')
sale_order_obj = request.registry['sale.order']
# if no sale order at this stage: back to checkout beginning # if no sale order at this stage: back to checkout beginning
order = self.get_order() order = self.get_order()
@ -602,11 +604,12 @@ class Ecommerce(http.Controller):
else: else:
shipping_partner_id = order.partner_invoice_id.id shipping_partner_id = order.partner_invoice_id.id
values = { values = {}
'order': request.registry['sale.order'].browse(cr, SUPERUSER_ID, order.id, context=context) values['website_sale_order'] = values['order'] = sale_order_obj.browse(cr, SUPERUSER_ID, order.id, context=context)
} values['errors'] = sale_order_obj._get_errors(cr, uid, order, context=context)
values.update(request.registry.get('sale.order')._get_website_data(cr, uid, order, context)) values.update(sale_order_obj._get_website_data(cr, uid, order, context=context))
if not values['errors']:
# fetch all registered payment means # fetch all registered payment means
if tx: if tx:
acquirer_ids = [tx.acquirer_id.id] acquirer_ids = [tx.acquirer_id.id]
@ -709,6 +712,7 @@ class Ecommerce(http.Controller):
message = '<p>The payment seems to have been canceled.</p>' message = '<p>The payment seems to have been canceled.</p>'
elif state == 'pending' and tx.acquirer_id.validation == 'manual': elif state == 'pending' and tx.acquirer_id.validation == 'manual':
message = '<p>Your transaction is waiting confirmation.</p>' message = '<p>Your transaction is waiting confirmation.</p>'
if tx.acquirer_id.post_msg:
message += tx.acquirer_id.post_msg message += tx.acquirer_id.post_msg
else: else:
message = '<p>Your transaction is waiting confirmation.</p>' message = '<p>Your transaction is waiting confirmation.</p>'

View File

@ -16,6 +16,9 @@ class SaleOrder(osv.Model):
), ),
} }
def _get_errors(self, cr, uid, order, context=None):
return []
def _get_website_data(self, cr, uid, order, context): def _get_website_data(self, cr, uid, order, context):
return { return {
'partner': order.partner_id.id, 'partner': order.partner_id.id,

View File

@ -73,11 +73,11 @@
}, },
{ {
title: "select payment", title: "select payment",
element: '#payment_method label:has(img[title="transfer"]) input', element: '#payment_method label:has(img[title="Wire Transfer"]) input',
}, },
{ {
title: "Pay Now", title: "Pay Now",
waitFor: '#payment_method label:has(input:checked):has(img[title="transfer"])', waitFor: '#payment_method label:has(input:checked):has(img[title="Wire Transfer"])',
element: '.oe_sale_acquirer_button .btn[name="submit"]:visible', element: '.oe_sale_acquirer_button .btn[name="submit"]:visible',
}, },
{ {

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="transaction_form_website_sale" model="ir.ui.view">
<field name="name">payment.transaction.form.website_sale</field>
<field name="model">payment.transaction</field>
<field name="inherit_id" ref="payment.transaction_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='reference']" position="after">
<field name="sale_order_id"/>
</xpath>
</field>
</record>
</data>
</openerp>

View File

@ -443,14 +443,20 @@
</li> </li>
</ul> </ul>
<div class="css_editable_mode_hidden"> <div class="css_editable_mode_hidden">
<t groups="base.group_public">
<a class="btn btn-primary mt8" t-attf-href="/web/login?redirect=/shop/product/#{product.id}%23comment">Log in </a> <span>to post comments</span>
</t>
<t groups="base.group_user,base.group_portal">
<form id="comment" t-attf-action="/shop/product/#{product.id}/comment" <form id="comment" t-attf-action="/shop/product/#{product.id}/comment"
method="POST"> method="POST">
<img class="img pull-left img-rounded" t-att-src="'/website/image?model=res.partner&amp;field=image_small&amp;id='+str(user_id.partner_id.id)" style="width: 50px; margin-right: 10px;"/> <img class="img pull-left img-rounded" t-att-src="'/website/image?model=res.partner&amp;field=image_small&amp;id='+str(user_id.partner_id.id)" style="width: 50px; margin-right: 10px;"/>
<div class="pull-left mb32" style="width: 75%%"> <div class="pull-left mb32" style="width: 75%%">
<textarea rows="3" name="comment" class="form-control" placeholder="Write a comment..."></textarea> <textarea rows="3" name="comment" class="form-control" placeholder="Write a comment..."></textarea>
<a class="btn btn-primary mt8 a-submit">Post</a> <a class="btn btn-primary mt8 a-submit">Post</a>
</div> </div>
</form> </form>
</t>
</div> </div>
</div> </div>
</section> </section>
@ -886,6 +892,12 @@
<li class="text-muted">Confirmation<span class="chevron"></span></li> <li class="text-muted">Confirmation<span class="chevron"></span></li>
</ul> </ul>
<h1 class="mb32">Validate Order</h1> <h1 class="mb32">Validate Order</h1>
<t t-foreach="errors" t-as="error">
<div class="alert alert-danger" t-if="error">
<h4><t t-esc="error[0]"/></h4>
<t t-esc="error[1]"/>
</div>
</t>
<div class="row"> <div class="row">
<div class="col-lg-8 col-sm-9 oe_mycart"> <div class="col-lg-8 col-sm-9 oe_mycart">
<table class='table table-striped table-condensed' id="mycart_products" t-if="website_sale_order and website_sale_order.website_order_line"> <table class='table table-striped table-condensed' id="mycart_products" t-if="website_sale_order and website_sale_order.website_order_line">
@ -958,7 +970,7 @@
<input t-att-value="acquirer.id" type="radio" name="acquirer" t-att-checked="acquirers[0] == acquirer"/> <input t-att-value="acquirer.id" type="radio" name="acquirer" t-att-checked="acquirers[0] == acquirer"/>
<img class="media-object" style="width: 60px; display: inline-block;" <img class="media-object" style="width: 60px; display: inline-block;"
t-att-title="acquirer.name" t-att-title="acquirer.name"
t-att-src="'/payment_%s/static/src/img/%s_icon.png' % (acquirer.name, acquirer.name)"/> t-att-src="'/payment_%s/static/src/img/%s_icon.png' % (acquirer.provider, acquirer.provider)"/>
<span t-field="acquirer.name"/> <span t-field="acquirer.name"/>
</label> </label>
</li> </li>
@ -973,7 +985,7 @@
</t> </t>
</div> </div>
</div> </div>
<div class="js_payment mb64 row" t-if="not website_sale_order.amount_total" id="payment_method"> <div class="js_payment mb64 row" t-if="not website_sale_order.amount_total and not errors" id="payment_method">
<div class="col-lg-8 col-sm-8"> <div class="col-lg-8 col-sm-8">
<form target="_self" action="/shop/payment/validate" method="post" class="pull-right"> <form target="_self" action="/shop/payment/validate" method="post" class="pull-right">
<a style="width:100px;" class="btn btn-primary a-submit"> <a style="width:100px;" class="btn btn-primary a-submit">

View File

@ -12,10 +12,11 @@ class Ecommerce(Ecommerce):
cr, uid, context = request.cr, request.uid, request.context cr, uid, context = request.cr, request.uid, request.context
order = self.get_order() order = self.get_order()
carrier_id = post.get('carrier_id') carrier_id = post.get('carrier_id')
if carrier_id:
if order and carrier_id: carrier_id = int(carrier_id)
# recompute delivery costs if order:
request.registry['website']._check_carrier_quotation(cr,uid,order,carrier_id,context=context) request.registry['sale.order']._check_carrier_quotation(cr, uid, order, force_carrier_id=carrier_id, context=context)
if carrier_id:
return request.redirect("/shop/payment") return request.redirect("/shop/payment")
res = super(Ecommerce, self).payment(**post) res = super(Ecommerce, self).payment(**post)

View File

@ -56,6 +56,57 @@ class SaleOrder(orm.Model):
), ),
} }
def _check_carrier_quotation(self, cr, uid, order, force_carrier_id=None, context=None):
carrier_obj = self.pool.get('delivery.carrier')
# check to add or remove carrier_id
if not order:
return False
if all(line.product_id.type == "service" for line in order.website_order_line):
order.write({'carrier_id': None}, context=context)
self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, [order.id], context=context)
return True
else:
carrier_id = force_carrier_id or order.carrier_id.id
carrier_ids = self._get_delivery_methods(cr, uid, order, context=context)
if carrier_id:
if carrier_id not in carrier_ids:
carrier_id = False
else:
carrier_ids.remove(carrier_id)
carrier_ids.insert(0, carrier_id)
if force_carrier_id or not carrier_id or not carrier_id in carrier_ids:
for delivery_id in carrier_ids:
grid_id = carrier_obj.grid_get(cr, SUPERUSER_ID, [delivery_id], order.partner_shipping_id.id)
if grid_id:
carrier_id = delivery_id
break
order.write({'carrier_id': carrier_id}, context=context)
if carrier_id:
order.delivery_set(context=context)
else:
order._delivery_unset(context=context)
return bool(carrier_id)
def _get_delivery_methods(self, cr, uid, order, context=None):
carrier_obj = self.pool.get('delivery.carrier')
delivery_ids = carrier_obj.search(cr, uid, [('website_published','=',True)], context=context)
# Following loop is done to avoid displaying delivery methods who are not available for this order
# This can surely be done in a more efficient way, but at the moment, it mimics the way it's
# done in delivery_set method of sale.py, from delivery module
for delivery_id in list(delivery_ids):
grid_id = carrier_obj.grid_get(cr, SUPERUSER_ID, [delivery_id], order.partner_shipping_id.id)
if not grid_id:
delivery_ids.remove(delivery_id)
return delivery_ids
def _get_errors(self, cr, uid, order, context=None):
errors = super(SaleOrder, self)._get_errors(cr, uid, order, context=context)
if not self._get_delivery_methods(cr, uid, order, context=context):
errors.append(('No delivery method available', 'There is no available delivery method for your order'))
return errors
def _get_website_data(self, cr, uid, order, context=None): def _get_website_data(self, cr, uid, order, context=None):
""" Override to add delivery-related website data. """ """ Override to add delivery-related website data. """
values = super(SaleOrder, self)._get_website_data(cr, uid, order, context=context) values = super(SaleOrder, self)._get_website_data(cr, uid, order, context=context)
@ -69,6 +120,7 @@ class SaleOrder(orm.Model):
delivery_ctx = dict(context, order_id=order.id) delivery_ctx = dict(context, order_id=order.id)
DeliveryCarrier = self.pool.get('delivery.carrier') DeliveryCarrier = self.pool.get('delivery.carrier')
delivery_ids = DeliveryCarrier.search(cr, uid, [('website_published','=',True)], context=context) delivery_ids = self._get_delivery_methods(cr, uid, order, context=context)
values['deliveries'] = DeliveryCarrier.browse(cr, SUPERUSER_ID, delivery_ids, context=delivery_ctx) values['deliveries'] = DeliveryCarrier.browse(cr, SUPERUSER_ID, delivery_ids, context=delivery_ctx)
return values return values

View File

@ -9,7 +9,7 @@ class Website(orm.Model):
def _ecommerce_create_quotation(self, cr, uid, context=None): def _ecommerce_create_quotation(self, cr, uid, context=None):
order_id = super(Website, self)._ecommerce_create_quotation(cr, uid, context=context) order_id = super(Website, self)._ecommerce_create_quotation(cr, uid, context=context)
order = self.pool['sale.order'].browse(cr, SUPERUSER_ID, order_id, context=context) order = self.pool['sale.order'].browse(cr, SUPERUSER_ID, order_id, context=context)
self._check_carrier_quotation(cr, uid, order, force_carrier_id=None, context=context) self.pool['sale.order']._check_carrier_quotation(cr, uid, order, force_carrier_id=None, context=context)
return order_id return order_id
def _ecommerce_add_product_to_cart(self, cr, uid, product_id=0, order_line_id=0, number=1, set_number=-1, context=None): def _ecommerce_add_product_to_cart(self, cr, uid, product_id=0, order_line_id=0, number=1, set_number=-1, context=None):
@ -17,31 +17,4 @@ class Website(orm.Model):
product_id=product_id, order_line_id=order_line_id, number=number, set_number=set_number, product_id=product_id, order_line_id=order_line_id, number=number, set_number=set_number,
context=context) context=context)
order = self.ecommerce_get_current_order(cr, uid, context=context) order = self.ecommerce_get_current_order(cr, uid, context=context)
return self._check_carrier_quotation(cr, uid, order, force_carrier_id=None, context=context) and quantity or None return self.pool['sale.order']._check_carrier_quotation(cr, uid, order, force_carrier_id=None, context=context) and quantity or None
def _check_carrier_quotation(self, cr, uid, order, force_carrier_id=None, context=None):
# check to add or remove carrier_id
carrier_id = False
for line in order.website_order_line:
if line.product_id.type != "service":
carrier_id = True
break
if not carrier_id:
order.write({'carrier_id': None}, context=context)
self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context)
return True
else:
if order.carrier_id:
self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context)
carrier_ids = self.pool.get('delivery.carrier').search(cr, uid, [('website_published','=',True)], context=context)
carrier_id = force_carrier_id or (carrier_ids and carrier_ids[0])
order.write({'carrier_id': carrier_id}, context=context)
#If carrier_id have no grid, we don't have delivery !
if carrier_id:
order.delivery_set(context=context)
else:
self.pool['sale.order']._delivery_unset(cr, SUPERUSER_ID, order, context=context)
return bool(carrier_id)