[merge]
bzr revid: nicolas.vanhoren@openerp.com-20120105130649-peftu9zzz6698wvl
This commit is contained in:
@@ -2651,7 +2651,7 @@ class account_tax_code_template(osv.osv):
|
||||
company = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
|
||||
|
||||
#find all the children of the tax_code_root_id
|
||||
children_tax_code_template = obj_tax_code_template.search(cr, uid, [('parent_id','child_of',[tax_code_root_id])], order='id')
|
||||
children_tax_code_template = tax_code_root_id and obj_tax_code_template.search(cr, uid, [('parent_id','child_of',[tax_code_root_id])], order='id') or []
|
||||
for tax_code_template in obj_tax_code_template.browse(cr, uid, children_tax_code_template, context=context):
|
||||
vals = {
|
||||
'name': (tax_code_root_id == tax_code_template.id) and company.name or tax_code_template.name,
|
||||
|
||||
@@ -794,34 +794,39 @@ class account_invoice(osv.osv):
|
||||
line.append((0,0,val))
|
||||
return line
|
||||
|
||||
def action_move_create(self, cr, uid, ids, *args):
|
||||
def action_move_create(self, cr, uid, ids, context=None):
|
||||
"""Creates invoice related analytics and financial move lines"""
|
||||
ait_obj = self.pool.get('account.invoice.tax')
|
||||
cur_obj = self.pool.get('res.currency')
|
||||
period_obj = self.pool.get('account.period')
|
||||
context = {}
|
||||
for inv in self.browse(cr, uid, ids):
|
||||
payment_term_obj = self.pool.get('account.payment.term')
|
||||
journal_obj = self.pool.get('account.journal')
|
||||
move_obj = self.pool.get('account.move')
|
||||
if context is None:
|
||||
context = {}
|
||||
for inv in self.browse(cr, uid, ids, context=context):
|
||||
if not inv.journal_id.sequence_id:
|
||||
raise osv.except_osv(_('Error !'), _('Please define sequence on the journal related to this invoice.'))
|
||||
if not inv.invoice_line:
|
||||
raise osv.except_osv(_('No Invoice Lines !'), _('Please create some invoice lines.'))
|
||||
if inv.move_id:
|
||||
continue
|
||||
|
||||
|
||||
ctx = context.copy()
|
||||
ctx.update({'lang': inv.partner_id.lang})
|
||||
if not inv.date_invoice:
|
||||
self.write(cr, uid, [inv.id], {'date_invoice':time.strftime('%Y-%m-%d')})
|
||||
self.write(cr, uid, [inv.id], {'date_invoice':time.strftime('%Y-%m-%d')}, context=ctx)
|
||||
company_currency = inv.company_id.currency_id.id
|
||||
# create the analytical lines
|
||||
# one move line per invoice line
|
||||
iml = self._get_analytic_lines(cr, uid, inv.id)
|
||||
iml = self._get_analytic_lines(cr, uid, inv.id, context=ctx)
|
||||
# check if taxes are all computed
|
||||
ctx = context.copy()
|
||||
ctx.update({'lang': inv.partner_id.lang})
|
||||
compute_taxes = ait_obj.compute(cr, uid, inv.id, context=ctx)
|
||||
self.check_tax_lines(cr, uid, inv, compute_taxes, ait_obj)
|
||||
|
||||
if inv.type in ('in_invoice', 'in_refund') and abs(inv.check_total - inv.amount_total) >= (inv.currency_id.rounding/2.0):
|
||||
raise osv.except_osv(_('Bad total !'), _('Please verify the price of the invoice !\nThe real total does not match the computed total.'))
|
||||
# I disabled the check_total feature
|
||||
#if inv.type in ('in_invoice', 'in_refund') and abs(inv.check_total - inv.amount_total) >= (inv.currency_id.rounding/2.0):
|
||||
# raise osv.except_osv(_('Bad total !'), _('Please verify the price of the invoice !\nThe real total does not match the computed total.'))
|
||||
|
||||
if inv.payment_term:
|
||||
total_fixed = total_percent = 0
|
||||
@@ -859,8 +864,8 @@ class account_invoice(osv.osv):
|
||||
name = inv['name'] or '/'
|
||||
totlines = False
|
||||
if inv.payment_term:
|
||||
totlines = self.pool.get('account.payment.term').compute(cr,
|
||||
uid, inv.payment_term.id, total, inv.date_invoice or False)
|
||||
totlines = payment_term_obj.compute(cr,
|
||||
uid, inv.payment_term.id, total, inv.date_invoice or False, context=ctx)
|
||||
if totlines:
|
||||
res_amount_currency = total_currency
|
||||
i = 0
|
||||
@@ -906,12 +911,12 @@ class account_invoice(osv.osv):
|
||||
date = inv.date_invoice or time.strftime('%Y-%m-%d')
|
||||
part = inv.partner_id.id
|
||||
|
||||
line = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, part, date, context={})),iml)
|
||||
line = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, part, date, context=ctx)),iml)
|
||||
|
||||
line = self.group_lines(cr, uid, iml, line, inv)
|
||||
|
||||
journal_id = inv.journal_id.id
|
||||
journal = self.pool.get('account.journal').browse(cr, uid, journal_id)
|
||||
journal = journal_obj.browse(cr, uid, journal_id, context=ctx)
|
||||
if journal.centralisation:
|
||||
raise osv.except_osv(_('UserError'),
|
||||
_('You cannot create an invoice on a centralised journal. Uncheck the centralised counterpart box in the related journal from the configuration menu.'))
|
||||
@@ -935,13 +940,14 @@ class account_invoice(osv.osv):
|
||||
for i in line:
|
||||
i[2]['period_id'] = period_id
|
||||
|
||||
move_id = self.pool.get('account.move').create(cr, uid, move, context=context)
|
||||
new_move_name = self.pool.get('account.move').browse(cr, uid, move_id).name
|
||||
move_id = move_obj.create(cr, uid, move, context=ctx)
|
||||
new_move_name = move_obj.browse(cr, uid, move_id, context=ctx).name
|
||||
# make the invoice point to that move
|
||||
self.write(cr, uid, [inv.id], {'move_id': move_id,'period_id':period_id, 'move_name':new_move_name})
|
||||
self.write(cr, uid, [inv.id], {'move_id': move_id,'period_id':period_id, 'move_name':new_move_name}, context=ctx)
|
||||
# Pass invoice in context in method post: used if you want to get the same
|
||||
# account move reference when creating the same invoice after a cancelled one:
|
||||
self.pool.get('account.move').post(cr, uid, [move_id], context={'invoice':inv})
|
||||
ctx.update({'invoice':inv})
|
||||
move_obj.post(cr, uid, [move_id], context=ctx)
|
||||
self._log_event(cr, uid, ids)
|
||||
return True
|
||||
|
||||
@@ -1262,7 +1268,7 @@ class account_invoice_line(osv.osv):
|
||||
def _price_unit_default(self, cr, uid, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
if 'check_total' in context:
|
||||
if context.get('check_total', False):
|
||||
t = context['check_total']
|
||||
for l in context.get('invoice_line', {}):
|
||||
if isinstance(l, (list, tuple)) and len(l) >= 3 and l[2]:
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
<field name="reference_type" nolabel="1" size="0"/>
|
||||
<field name="reference" nolabel="1"/>
|
||||
<field name="date_due"/>
|
||||
<field name="check_total" required="2"/>
|
||||
<field name="check_total" invisible="1"/>
|
||||
<field colspan="4" default_get="{'check_total': check_total, 'invoice_line': invoice_line, 'address_invoice_id': address_invoice_id, 'partner_id': partner_id, 'price_type': 'price_type' in dir() and price_type or False}" name="invoice_line" context="{'type': type}" nolabel="1">
|
||||
<tree string="Invoice lines">
|
||||
<field name="product_id" on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.address_invoice_id, parent.currency_id, context, parent.company_id)"/>
|
||||
@@ -179,7 +179,7 @@
|
||||
<field name="price_unit"/>
|
||||
<!-- Removed if subtotal is set -->
|
||||
<field name="price_subtotal"/>
|
||||
<field name="name"/>
|
||||
<field invisible="True" name="name"/>
|
||||
<field invisible="True" name="uos_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -303,7 +303,6 @@
|
||||
<group col="8" colspan="4" groups="base.group_user">
|
||||
<button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel" groups="base.group_no_one"/>
|
||||
<button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object" icon="terp-stock_effects-object-colorize"/>
|
||||
|
||||
<button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','<>','paid'), ('reconciled', '=', True)]}" icon="gtk-convert" help="This button only appears when the state of the invoice is 'paid' (showing that it has been fully reconciled) and auto-computed boolean 'reconciled' is False (depicting that it's not the case anymore). In other words, the invoice has been dereconciled and it does not fit anymore the 'paid' state. You should press this button to re-open it and let it continue its normal process after having resolved the eventual exceptions it may have created."/>
|
||||
<button name="%(action_account_invoice_refund)d" type='action' string='Refund' states='open,paid' icon="gtk-execute"/>
|
||||
<button name="invoice_proforma2" states="draft" string="PRO-FORMA" icon="terp-gtk-media-pause" groups="account.group_account_user"/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<record id="demo_invoice_0" model="account.invoice">
|
||||
<field name="date_due">2011-07-21</field>
|
||||
<field name="date_due" eval="time.strftime('%Y')+'-01-30'"/>
|
||||
<field name="payment_term" ref="account.account_payment_term"/>
|
||||
<field name="journal_id" ref="account.expenses_journal"/>
|
||||
<field name="currency_id" ref="base.EUR"/>
|
||||
@@ -15,7 +15,7 @@
|
||||
<field name="type">in_invoice</field>
|
||||
<field name="account_id" ref="account.a_pay"/>
|
||||
<field eval="0" name="reconciled"/>
|
||||
<field name="date_invoice">2011-06-01</field>
|
||||
<field name="date_invoice" eval="time.strftime('%Y')+'-01-01'"/>
|
||||
<field eval="14.0" name="amount_untaxed"/>
|
||||
<field eval="14.0" name="amount_total"/>
|
||||
<field name="partner_id" ref="base.res_partner_maxtor"/>
|
||||
|
||||
+27
-27
@@ -7,14 +7,14 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-12-23 09:55+0000\n"
|
||||
"PO-Revision-Date: 2011-11-25 15:24+0000\n"
|
||||
"Last-Translator: Numérigraphe <Unknown>\n"
|
||||
"PO-Revision-Date: 2012-01-02 11:15+0000\n"
|
||||
"Last-Translator: Olivier Dony (OpenERP) <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-12-24 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 14560)\n"
|
||||
"X-Launchpad-Export-Date: 2012-01-03 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14616)\n"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_move_line.py:1199
|
||||
@@ -90,7 +90,7 @@ msgstr ""
|
||||
#: view:account.invoice.report:0
|
||||
#: view:analytic.entries.report:0
|
||||
msgid "last month"
|
||||
msgstr ""
|
||||
msgstr "Le mois dernier"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
|
||||
@@ -326,7 +326,7 @@ msgstr ""
|
||||
#. module: account
|
||||
#: report:account.overdue:0
|
||||
msgid "Sub-Total :"
|
||||
msgstr "Sous-Total :"
|
||||
msgstr "Sous-total :"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_account_use_model_create_entry
|
||||
@@ -865,7 +865,7 @@ msgstr "Délettrage"
|
||||
#. module: account
|
||||
#: view:account.payment.term.line:0
|
||||
msgid "At 14 net days 2 percent, remaining amount at 30 days end of month."
|
||||
msgstr ""
|
||||
msgstr "2% à 15 jours net, le solde à 30 jours fin de mois"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:account.model_account_analytic_journal_report
|
||||
@@ -881,7 +881,7 @@ msgstr "Rapprochement automatique"
|
||||
#: code:addons/account/account_move_line.py:1250
|
||||
#, python-format
|
||||
msgid "No period found or period given is ambigous."
|
||||
msgstr ""
|
||||
msgstr "Période fiscale ambigüe ou introuvable."
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,help:account.action_account_gain_loss
|
||||
@@ -1116,7 +1116,7 @@ msgstr ""
|
||||
#. module: account
|
||||
#: field:account.report.general.ledger,sortby:0
|
||||
msgid "Sort by"
|
||||
msgstr ""
|
||||
msgstr "Trier par"
|
||||
|
||||
#. module: account
|
||||
#: help:account.fiscalyear.close,fy_id:0
|
||||
@@ -1391,7 +1391,7 @@ msgstr "Sélectionnez un début et une fin de période"
|
||||
#. module: account
|
||||
#: model:account.financial.report,name:account.account_financial_report_profitandloss0
|
||||
msgid "Profit and Loss"
|
||||
msgstr ""
|
||||
msgstr "Pertes et profits"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:account.model_account_account_template
|
||||
@@ -1520,7 +1520,7 @@ msgstr "Sauter l'état \"Brouillon\" pour les écritures manuelles"
|
||||
#: view:account.invoice.report:0
|
||||
#: field:account.invoice.report,price_total:0
|
||||
msgid "Total Without Tax"
|
||||
msgstr "Total hors taxe"
|
||||
msgstr "Total HT"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,help:account.action_move_journal_line
|
||||
@@ -1744,7 +1744,7 @@ msgstr "Partenaire inconnu"
|
||||
#. module: account
|
||||
#: field:account.tax.code,sum:0
|
||||
msgid "Year Sum"
|
||||
msgstr "Montant total de l'exercice"
|
||||
msgstr "Total de l'exercice"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:1424
|
||||
@@ -1866,7 +1866,7 @@ msgstr "Impossible de créer une ligne d'écriture sur un compte clôturé"
|
||||
#: code:addons/account/account.py:428
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr ""
|
||||
msgstr "Erreur !"
|
||||
|
||||
#. module: account
|
||||
#: sql_constraint:account.move.line:0
|
||||
@@ -1898,7 +1898,7 @@ msgstr "Écritures par ligne"
|
||||
#. module: account
|
||||
#: field:account.vat.declaration,based_on:0
|
||||
msgid "Based on"
|
||||
msgstr ""
|
||||
msgstr "Basée sur"
|
||||
|
||||
#. module: account
|
||||
#: field:account.invoice,move_id:0
|
||||
@@ -1987,7 +1987,7 @@ msgstr "Définition de la taxe"
|
||||
#: code:addons/account/account.py:3076
|
||||
#, python-format
|
||||
msgid "Deposit"
|
||||
msgstr ""
|
||||
msgstr "Dépôt"
|
||||
|
||||
#. module: account
|
||||
#: help:wizard.multi.charts.accounts,seq_journal:0
|
||||
@@ -2195,7 +2195,7 @@ msgstr ""
|
||||
#. module: account
|
||||
#: report:account.invoice:0
|
||||
msgid "Customer Code"
|
||||
msgstr ""
|
||||
msgstr "Code Client"
|
||||
|
||||
#. module: account
|
||||
#: view:account.installer:0
|
||||
@@ -2773,7 +2773,7 @@ msgstr "Écritures comptables"
|
||||
#. module: account
|
||||
#: field:account.invoice,reference_type:0
|
||||
msgid "Communication Type"
|
||||
msgstr ""
|
||||
msgstr "Type de communication"
|
||||
|
||||
#. module: account
|
||||
#: field:account.invoice.line,discount:0
|
||||
@@ -3116,7 +3116,7 @@ msgstr "Toujours"
|
||||
#: view:account.invoice.report:0
|
||||
#: view:analytic.entries.report:0
|
||||
msgid "Month-1"
|
||||
msgstr ""
|
||||
msgstr "Mois -1"
|
||||
|
||||
#. module: account
|
||||
#: view:account.analytic.line:0
|
||||
@@ -7303,7 +7303,7 @@ msgstr ""
|
||||
#. module: account
|
||||
#: help:res.partner,credit:0
|
||||
msgid "Total amount this customer owes you."
|
||||
msgstr "Montant Total que ce client vous doit."
|
||||
msgstr "Montant total que ce client vous doit."
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:account.model_ir_sequence
|
||||
@@ -7626,7 +7626,7 @@ msgstr "Taxe"
|
||||
#: code:addons/account/account_move_line.py:1276
|
||||
#, python-format
|
||||
msgid "No piece number !"
|
||||
msgstr "Pas de Numéro de Pièce !"
|
||||
msgstr "Pas de numéro de pièce !"
|
||||
|
||||
#. module: account
|
||||
#: view:account.financial.report:0
|
||||
@@ -7898,7 +7898,7 @@ msgstr "Rapports officiels"
|
||||
#. module: account
|
||||
#: field:account.tax.code,sum_period:0
|
||||
msgid "Period Sum"
|
||||
msgstr "Montant total de la période"
|
||||
msgstr "Total de la période"
|
||||
|
||||
#. module: account
|
||||
#: help:account.tax,sequence:0
|
||||
@@ -9645,7 +9645,7 @@ msgstr "Non-rapprochée"
|
||||
#: code:addons/account/account_invoice.py:824
|
||||
#, python-format
|
||||
msgid "Bad total !"
|
||||
msgstr "Mauvais montant !"
|
||||
msgstr "Total incorrect !"
|
||||
|
||||
#. module: account
|
||||
#: field:account.journal,sequence_id:0
|
||||
@@ -10176,7 +10176,7 @@ msgid ""
|
||||
"reconciliation process today. The current partner is counted as already "
|
||||
"processed."
|
||||
msgstr ""
|
||||
"Ce nombre représente le nombre total de partenaires qui sont passés au "
|
||||
"Ce chiffre représente le nombre total de partenaires qui sont passés au "
|
||||
"travers du processus de rapprochement aujourd'hui. Le partenaire actuel est "
|
||||
"considéré comme déjà traité."
|
||||
|
||||
@@ -10221,7 +10221,7 @@ msgstr "Lignes de facture"
|
||||
#. module: account
|
||||
#: field:account.chart,period_to:0
|
||||
msgid "End period"
|
||||
msgstr "Clôturer la période"
|
||||
msgstr "Fin de période"
|
||||
|
||||
#. module: account
|
||||
#: sql_constraint:account.journal:0
|
||||
@@ -10848,9 +10848,9 @@ msgstr ""
|
||||
"Créer et gérer les comptes dont vous avez besoin pour enregistrer les pièces "
|
||||
"comptables. Un compte fait partie du grand livre permettant à votre société "
|
||||
"d'enregistrer tout type de transaction de débit ou de crédit. Les sociétés "
|
||||
"présentent leurs comptes annuels en 2 parties : le bilan et le rapport des "
|
||||
"comptes de résultat. Les comptes annuels d'une société sont légalement tenus "
|
||||
"de mentionner un minimum d'information. Ils doivent être certifiés par un "
|
||||
"présentent leurs comptes annuels en 2 parties : le bilan et le compte de "
|
||||
"résultat. Les comptes annuels d'une société sont légalement tenus de "
|
||||
"mentionner un minimum d'informations. Ils doivent être certifiés par un "
|
||||
"auditeur externe annuellement."
|
||||
|
||||
#. module: account
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<field name="type">tree</field>
|
||||
<field name="field_parent">child_complete_ids</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="red:state=='pending';grey:state in ('close','cancelled');blue:type=='view'" string="Analytic account" toolbar="1">
|
||||
<tree colors="blue:state=='pending';grey:state in ('close','cancelled');blue:type=='view'" string="Analytic account" toolbar="1">
|
||||
<field name="name"/>
|
||||
<field name="code" groups="base.group_extended"/>
|
||||
<field name="quantity"/>
|
||||
|
||||
@@ -1,13 +1,23 @@
|
||||
|
||||
-
|
||||
In order to test close period wizard I create a period then close it and checked it's state
|
||||
In order to test close period wizard I first create a dummy fiscal year in the past to avoid conflicts related to closed periods
|
||||
-
|
||||
!record {model: account.fiscalyear, id: data_fiscalyear_minus1}:
|
||||
company_id: base.main_company
|
||||
date_start: !eval "'%s-01-01' %(datetime.now().year-1)"
|
||||
date_stop: !eval "'%s-12-31' %(datetime.now().year-1)"
|
||||
name: !eval "'Fiscal Year X %s' %(datetime.now().year-1)"
|
||||
code: !eval "'FY%s' %(datetime.now().year-1)"
|
||||
|
||||
-
|
||||
I create a period then close it and checked it's state
|
||||
-
|
||||
!record {model: account.period, id: account_period_jan0}:
|
||||
company_id: base.main_company
|
||||
date_start: !eval "'%s-01-01' %(datetime.now().year)"
|
||||
date_stop: !eval "'%s-01-31' %(datetime.now().year)"
|
||||
fiscalyear_id: account.data_fiscalyear
|
||||
name: !eval "'Jan-%s' %(datetime.now().year)"
|
||||
date_start: !eval "'%s-01-01' %(datetime.now().year-1)"
|
||||
date_stop: !eval "'%s-01-31' %(datetime.now().year-1)"
|
||||
fiscalyear_id: data_fiscalyear_minus1
|
||||
name: !eval "'Jan-%s' %(datetime.now().year-1)"
|
||||
special: 1
|
||||
|
||||
-
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
address_invoice_id: base.res_partner_address_8invoice
|
||||
company_id: 1
|
||||
account_id: account.a_pay
|
||||
date_invoice: '2011-06-22'
|
||||
date_invoice: !eval "'%s' % (time.strftime('%Y-%m-%d'))"
|
||||
name: selling product
|
||||
type: 'out_invoice'
|
||||
invoice_line:
|
||||
@@ -48,12 +48,13 @@
|
||||
Then I import a sample EDI document of another customer invoice
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
import time
|
||||
edi_document = {
|
||||
"__id": "account:b22acf7a-ddcd-11e0-a4db-701a04e25543.random_invoice_763jsms",
|
||||
"__module": "account",
|
||||
"__model": "account.invoice",
|
||||
"__version": [6,1,0],
|
||||
"internal_number": "SAJ/2011/002",
|
||||
"internal_number": time.strftime("SAJ/%Y/002"),
|
||||
"company_address": {
|
||||
"__id": "base:b22acf7a-ddcd-11e0-a4db-701a04e25543.main_address",
|
||||
"__module": "base",
|
||||
@@ -86,7 +87,7 @@
|
||||
"zip": "1367",
|
||||
"country_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.be", "Belgium"],
|
||||
},
|
||||
"date_invoice": "2011-06-22",
|
||||
"date_invoice": time.strftime('%Y-%m-%d'),
|
||||
"name": "sample invoice",
|
||||
"tax_line": [{
|
||||
"__id": "account:b22acf7a-ddcd-11e0-a4db-701a04e25543.account_invoice_tax-4g4EutbiEMVl",
|
||||
@@ -128,7 +129,7 @@
|
||||
assert bank_info.acc_number == "Sample bank: 123465789-156113", 'Expected "Sample bank: 123465789-156113", got %s' % bank_info.acc_number
|
||||
|
||||
assert invoice_new.partner_id.supplier, 'Imported Partner is not marked as supplier'
|
||||
assert invoice_new.reference == "SAJ/2011/002", "internal number is not stored in reference"
|
||||
assert invoice_new.reference == time.strftime("SAJ/%Y/002"), "internal number is not stored in reference"
|
||||
assert invoice_new.reference_type == 'none', "reference type is not set to 'none'"
|
||||
assert invoice_new.internal_number == False, "internal number is not reset"
|
||||
assert invoice_new.journal_id.id, "journal id is not selected"
|
||||
|
||||
@@ -380,7 +380,7 @@ class account_invoice(osv.osv):
|
||||
res['analytics_id'] = x.get('analytics_id', False)
|
||||
return res
|
||||
|
||||
def _get_analytic_lines(self, cr, uid, id):
|
||||
def _get_analytic_lines(self, cr, uid, id, context=None):
|
||||
inv = self.browse(cr, uid, [id])[0]
|
||||
cur_obj = self.pool.get('res.currency')
|
||||
invoice_line_obj = self.pool.get('account.invoice.line')
|
||||
@@ -391,7 +391,7 @@ class account_invoice(osv.osv):
|
||||
else:
|
||||
sign = -1
|
||||
|
||||
iml = invoice_line_obj.move_line_get(cr, uid, inv.id)
|
||||
iml = invoice_line_obj.move_line_get(cr, uid, inv.id, context=context)
|
||||
|
||||
for il in iml:
|
||||
if il.get('analytics_id', False):
|
||||
@@ -400,8 +400,10 @@ class account_invoice(osv.osv):
|
||||
ref = inv.reference
|
||||
else:
|
||||
ref = self._convert_ref(cr, uid, inv.number)
|
||||
obj_move_line = acct_ins_obj.browse(cr, uid, il['analytics_id'])
|
||||
amount_calc = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, il['price'], context={'date': inv.date_invoice}) * sign
|
||||
obj_move_line = acct_ins_obj.browse(cr, uid, il['analytics_id'], context=context)
|
||||
ctx = context.copy()
|
||||
ctx.update({'date': inv.date_invoice})
|
||||
amount_calc = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, il['price'], context=ctx) * sign
|
||||
qty = il['quantity']
|
||||
il['analytic_lines'] = []
|
||||
for line2 in obj_move_line.account_ids:
|
||||
|
||||
@@ -81,8 +81,6 @@
|
||||
<field name="globalisation_id" string="Glob. Id"/>
|
||||
<field name="globalisation_amount" string="Glob. Am."/>
|
||||
<field name="state"/>
|
||||
<field name="write_date"/>
|
||||
<field name="write_uid"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -106,8 +104,6 @@
|
||||
<field name="amount"/>
|
||||
<field name="globalisation_id"/>
|
||||
<field name="sequence" readonly="0"/>
|
||||
<field name="write_date"/>
|
||||
<field name="write_uid"/>
|
||||
<field name="state"/>
|
||||
<separator colspan="4" string="Notes"/>
|
||||
<field colspan="4" name="note" nolabel="1"/>
|
||||
@@ -140,8 +136,6 @@
|
||||
<group string="Extended Filters..." expand="0">
|
||||
<field name="account_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="write_date"/>
|
||||
<field name="write_uid"/>
|
||||
<field name="ref"/>
|
||||
<field name="note"/>
|
||||
</group>
|
||||
|
||||
@@ -448,7 +448,7 @@ class account_voucher(osv.osv):
|
||||
default['value']['account_id'] = account_id
|
||||
default['value']['type'] = ttype or tr_type
|
||||
|
||||
vals = self.onchange_journal(cr, uid, ids, journal_id, line_ids, tax_id, partner_id, company_id, context)
|
||||
vals = self.onchange_journal(cr, uid, ids, journal_id, line_ids, tax_id, partner_id, time.strftime('%Y-%m-%d'), price, ttype, company_id, context)
|
||||
default['value'].update(vals.get('value'))
|
||||
|
||||
return default
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Bill Payment">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" context="{'invoice_currency':currency_id}" string="Supplier"/>
|
||||
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Supplier" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1, 'invoice_currency': currency_id}" />
|
||||
<field name="amount" on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)"/>
|
||||
<field name="journal_id"
|
||||
domain="[('type','in',['bank', 'cash'])]"
|
||||
@@ -145,7 +145,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Bill Payment">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" domain="[('supplier','=',True)]" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" context="{'invoice_currency':currency_id}" string="Supplier"/>
|
||||
<field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" context="{'invoice_currency':currency_id, 'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" string="Supplier"/>
|
||||
<field name="amount" invisible="context.get('line_type', False)" on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)"/>
|
||||
<field name="journal_id"
|
||||
domain="[('type','in',['bank', 'cash'])]"
|
||||
@@ -294,7 +294,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Customer Payment">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer"/>
|
||||
<field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
<field name="amount"
|
||||
invisible="context.get('line_type', False)"
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Sales Receipt">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer"/>
|
||||
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
|
||||
<field name="date" on_change="onchange_date(date, currency_id, currency_id, amount, company_id, context)"/>
|
||||
<field name="journal_id" domain="[('type','in',['sale','sale_refund'])]" widget="selection" on_change="onchange_journal(journal_id, line_cr_ids, tax_id, partner_id, date, amount, type, company_id, context)"/>
|
||||
<field name="number"/>
|
||||
@@ -209,7 +209,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Supplier Voucher">
|
||||
<group col="6" colspan="4">
|
||||
<field name="partner_id" domain="[('supplier','=',True)]" required="1" string="Supplier" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)"/>
|
||||
<field name="partner_id" domain="[('supplier','=',True)]" required="1" string="Supplier" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" />
|
||||
<field name="date" string="Bill Date" select="1" on_change="onchange_date(date, currency_id, currency_id, amount, company_id, context)"/>
|
||||
<field name="journal_id" domain="[('type','in',['purchase','purchase_refund'])]" widget="selection" select="1" on_change="onchange_journal(journal_id, line_dr_ids, tax_id, partner_id, date, amount, type, company_id, context)"/>
|
||||
<field name="number"/>
|
||||
@@ -276,6 +276,7 @@
|
||||
<group attrs="{'invisible':['|', ('state','!=','posted'), ('paid','=',True)]}">
|
||||
<button icon="terp-dolar_ok!" name="%(act_pay_bills)d" context="{'narration':narration, 'title':'Bill Payment', 'type':'payment', 'partner_id': partner_id, 'reference':reference}" type="action" string="Pay Bill" attrs="{'invisible':[('pay_now','=','pay_now')]}"/>
|
||||
</group>
|
||||
<field name="pay_now" invisible="1"/>
|
||||
<button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft" icon="terp-stock_effects-object-colorize"/>
|
||||
<button name="proforma_voucher" string="Validate" states="draft" icon="gtk-go-forward"/>
|
||||
</group>
|
||||
|
||||
@@ -100,8 +100,8 @@ hr_analytic_timesheet()
|
||||
class account_invoice(osv.osv):
|
||||
_inherit = "account.invoice"
|
||||
|
||||
def _get_analytic_lines(self, cr, uid, id):
|
||||
iml = super(account_invoice, self)._get_analytic_lines(cr, uid, id)
|
||||
def _get_analytic_lines(self, cr, uid, id, context=None):
|
||||
iml = super(account_invoice, self)._get_analytic_lines(cr, uid, id, context=context)
|
||||
for il in iml:
|
||||
if il['account_analytic_id'] and il.get('analytic_lines', False):
|
||||
|
||||
@@ -109,10 +109,10 @@ class account_invoice(osv.osv):
|
||||
journal_id = il['analytic_lines'][0][2]['journal_id']
|
||||
account_id = il['analytic_lines'][0][2]['account_id']
|
||||
if journal_id and account_id:
|
||||
temp = self.pool.get('analytic_journal_rate_grid').search(cr, uid, [('journal_id', '=', journal_id),('account_id', '=', account_id) ])
|
||||
temp = self.pool.get('analytic_journal_rate_grid').search(cr, uid, [('journal_id', '=', journal_id),('account_id', '=', account_id)], context=context)
|
||||
|
||||
if temp:
|
||||
r = self.pool.get('analytic_journal_rate_grid').browse(cr, uid, temp)[0]
|
||||
r = self.pool.get('analytic_journal_rate_grid').browse(cr, uid, temp, context=context)[0]
|
||||
il['analytic_lines'][0][2]['to_invoice'] = r.rate_id.id
|
||||
return iml
|
||||
|
||||
|
||||
@@ -1486,6 +1486,7 @@ rule or repeating pattern of time to exclude from the recurring rule."),
|
||||
if not isinstance(ids, list):
|
||||
ids = [ids]
|
||||
res = False
|
||||
attendee_obj=self.pool.get('calendar.attendee')
|
||||
for event_id in ids[:]:
|
||||
if len(str(event_id).split('-')) == 1:
|
||||
continue
|
||||
@@ -1498,6 +1499,9 @@ rule or repeating pattern of time to exclude from the recurring rule."),
|
||||
exdate = (data['exdate'] and (data['exdate'] + ',') or '') + date_new
|
||||
self.write(cr, uid, [real_event_id], {'exdate': exdate})
|
||||
ids.remove(event_id)
|
||||
for event in self.browse(cr, uid, ids, context=context):
|
||||
if event.attendee_ids:
|
||||
attendee_obj.unlink(cr, uid, [x.id for x in event.attendee_ids], context=context)
|
||||
|
||||
res = super(calendar_event, self).unlink(cr, uid, ids, context=context)
|
||||
self.pool.get('res.alarm').do_alarm_unlink(cr, uid, ids, self._name)
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# Romanian translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2012-01-03 16:01+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Romanian <ro@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-01-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14616)\n"
|
||||
|
||||
#. module: base_tools
|
||||
#: model:ir.module.module,shortdesc:base_tools.module_meta_information
|
||||
msgid "Common base for tools modules"
|
||||
msgstr "Baza comuna pentru modulele unelte"
|
||||
|
||||
#. module: base_tools
|
||||
#: model:ir.module.module,description:base_tools.module_meta_information
|
||||
msgid ""
|
||||
"\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"****\n"
|
||||
" "
|
||||
@@ -229,9 +229,11 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Meetings"
|
||||
colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="name" string="Subject" />
|
||||
<field name="user_id"/>
|
||||
<field name="date"/>
|
||||
<field name="state"/>
|
||||
<field name="duration" />
|
||||
<field name="partner_id" string="Partner" />
|
||||
<field name="location" />
|
||||
|
||||
@@ -66,8 +66,8 @@
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,calendar</field>
|
||||
<field name="view_id" ref="crm_case_inbound_phone_tree_view"/>
|
||||
<field name="domain">[('state','=','done')]</field>
|
||||
<field name="context" eval="'{\'search_default_section_id\':section_id, \'default_state\':\'done\'}'"/>
|
||||
<field name="domain">[]</field>
|
||||
<field name="context" eval="'{\'search_default_section_id\':section_id}'"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
||||
<field name="help">This tool allows you to log your inbound calls on the fly. Each call you get will appear on the partner form to trace every contact you have with a partner. From the phone call form, you can trigger a request for another call, a meeting or an opportunity.</field>
|
||||
|
||||
|
||||
@@ -0,0 +1,841 @@
|
||||
# Romanian translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
|
||||
"PO-Revision-Date: 2012-01-03 18:58+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Romanian <ro@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-01-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14616)\n"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,planned_revenue:0
|
||||
msgid "Planned Revenue"
|
||||
msgstr "Venituri planificate"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising.report,nbr:0
|
||||
msgid "# of Cases"
|
||||
msgstr "# de Cazuri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Group By..."
|
||||
msgstr "Grupare după..."
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising.report,probability:0
|
||||
msgid "Avg. Probability"
|
||||
msgstr "Probabilitatea medie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "March"
|
||||
msgstr "Martie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising.report,delay_close:0
|
||||
msgid "Delay to close"
|
||||
msgstr "Întârziere la inchidere"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,company_id:0
|
||||
#: view:crm.fundraising.report:0
|
||||
#: field:crm.fundraising.report,company_id:0
|
||||
msgid "Company"
|
||||
msgstr "Companie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.actions.act_window,name:crm_fundraising.crm_fund_categ_action
|
||||
msgid "Fundraising Categories"
|
||||
msgstr "Categorii de strangere de fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,email_cc:0
|
||||
msgid "Watchers Emails"
|
||||
msgstr "Email-uri supraveghetori"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Cases"
|
||||
msgstr "Cazuri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising,priority:0
|
||||
msgid "Highest"
|
||||
msgstr "Cel mai ridicat (cea mai ridicata)"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
#: field:crm.fundraising.report,day:0
|
||||
msgid "Day"
|
||||
msgstr "Zi"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Add Internal Note"
|
||||
msgstr "Adauga nota interna"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,partner_mobile:0
|
||||
msgid "Mobile"
|
||||
msgstr "Mobil"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Notes"
|
||||
msgstr "Note"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,message_ids:0
|
||||
msgid "Messages"
|
||||
msgstr "Mesaje"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "My company"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Amount"
|
||||
msgstr "Sumă"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising,state:0
|
||||
#: selection:crm.fundraising.report,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Anulat(ă)"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
#: field:crm.fundraising.report,amount_revenue:0
|
||||
msgid "Est.Revenue"
|
||||
msgstr "Venit estimat"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Open Funds"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,ref:0
|
||||
msgid "Reference"
|
||||
msgstr "Referinţă"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,type_id:0
|
||||
msgid "Campaign"
|
||||
msgstr "Campanie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,date_action_next:0
|
||||
msgid "Next Action"
|
||||
msgstr "Următoarea acţiune"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Reset to Draft"
|
||||
msgstr "Resetare ca ciorna"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Extra Info"
|
||||
msgstr "Informaţii suplimentare"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.model,name:crm_fundraising.model_crm_fundraising
|
||||
#: model:ir.ui.menu,name:crm_fundraising.menu_config_fundrising
|
||||
#: model:ir.ui.menu,name:crm_fundraising.menu_crm_case_fund_raise
|
||||
msgid "Fund Raising"
|
||||
msgstr "Strângerea de fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: field:crm.fundraising,partner_id:0
|
||||
#: field:crm.fundraising.report,partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr "Partener"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Funds raised in current year"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.actions.act_window,name:crm_fundraising.action_report_crm_fundraising
|
||||
#: model:ir.ui.menu,name:crm_fundraising.menu_report_crm_fundraising_tree
|
||||
msgid "Fundraising Analysis"
|
||||
msgstr "Analiza Strangere de fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Misc"
|
||||
msgstr "Diverse"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising.report,section_id:0
|
||||
msgid "Section"
|
||||
msgstr "Secţiune"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: field:crm.fundraising,priority:0
|
||||
msgid "Priority"
|
||||
msgstr "Prioritate"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Send New Email"
|
||||
msgstr "Trimite un e-mail nou"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:crm.case.categ,name:crm_fundraising.categ_fund1
|
||||
msgid "Social Rehabilitation And Rural Upliftment"
|
||||
msgstr "Reabilitare sociala si Ridicare rurala"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Pending Funds"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Payment Mode"
|
||||
msgstr "Modalitate de plată"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: selection:crm.fundraising,state:0
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,email_from:0
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising,priority:0
|
||||
msgid "Lowest"
|
||||
msgstr "Cel mai scazut (cea mai scazuta)"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "My Sales Team(s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,create_date:0
|
||||
msgid "Creation Date"
|
||||
msgstr "Data creării"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,date_deadline:0
|
||||
msgid "Deadline"
|
||||
msgstr "Data scadenta"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "July"
|
||||
msgstr "Iulie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.ui.menu,name:crm_fundraising.menu_crm_case_fundraising-act
|
||||
msgid "Categories"
|
||||
msgstr "Categorii"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,stage_id:0
|
||||
msgid "Stage"
|
||||
msgstr "Etapă"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "History Information"
|
||||
msgstr "Istoric Informatii"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Dates"
|
||||
msgstr "Date"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,partner_name2:0
|
||||
msgid "Employee Email"
|
||||
msgstr "Email angajat"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:crm.case.categ,name:crm_fundraising.categ_fund2
|
||||
msgid "Learning And Education"
|
||||
msgstr "Invatare si educatie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Contact"
|
||||
msgstr "Contact"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Funds Form"
|
||||
msgstr "Fonduri de la"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Fund Description"
|
||||
msgstr "Descriere fond"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: help:crm.fundraising.report,delay_close:0
|
||||
msgid "Number of Days to close the case"
|
||||
msgstr "Numarul de zile pana la inchiderea (rezolvarea) cazului"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Funds raised in current month"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "References"
|
||||
msgstr "Referințe"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Fundraising"
|
||||
msgstr "Strângere de fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.actions.act_window,help:crm_fundraising.action_report_crm_fundraising
|
||||
msgid ""
|
||||
"Have a general overview of all fund raising activities by sorting them with "
|
||||
"specific criteria such as the estimated revenue, average success probability "
|
||||
"and delay to close."
|
||||
msgstr ""
|
||||
"Aveti o vedere de ansamblu asupra tuturor activitatilor de stangere de "
|
||||
"fonduri sortandu-le dupa criterii specifice precum venitul estimat, "
|
||||
"probabilitatea medie de succes si intarzierea la inchidere."
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "September"
|
||||
msgstr "Septembrie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Communication"
|
||||
msgstr "Comunicare"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Funds Tree"
|
||||
msgstr "Arbore fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
#: field:crm.fundraising.report,month:0
|
||||
msgid "Month"
|
||||
msgstr "Luna"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Escalate"
|
||||
msgstr "Promovează"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,write_date:0
|
||||
msgid "Update Date"
|
||||
msgstr "Data actualizarii"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:crm.case.resource.type,name:crm_fundraising.type_fund3
|
||||
msgid "Credit Card"
|
||||
msgstr "Card de credit"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.actions.act_window,name:crm_fundraising.crm_fundraising_stage_act
|
||||
msgid "Fundraising Stages"
|
||||
msgstr "Etapele strangerii de fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Salesman"
|
||||
msgstr "Agent comercial"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,ref2:0
|
||||
msgid "Reference 2"
|
||||
msgstr "Referinta 2"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Funds raised in last month"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: field:crm.fundraising,categ_id:0
|
||||
#: view:crm.fundraising.report:0
|
||||
#: field:crm.fundraising.report,categ_id:0
|
||||
msgid "Category"
|
||||
msgstr "Categorie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:crm.case.categ,name:crm_fundraising.categ_fund4
|
||||
msgid "Arts And Culture"
|
||||
msgstr "Arta si Cultura"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,planned_cost:0
|
||||
#: view:crm.fundraising.report:0
|
||||
#: field:crm.fundraising.report,planned_cost:0
|
||||
msgid "Planned Costs"
|
||||
msgstr "Costuri planificate"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: help:crm.fundraising,email_cc:0
|
||||
msgid ""
|
||||
"These email addresses will be added to the CC field of all inbound and "
|
||||
"outbound emails for this record before being sent. Separate multiple email "
|
||||
"addresses with a comma"
|
||||
msgstr ""
|
||||
"Aceste adrese de email vor fi adaugate in campul CC al tuturor email-urilor "
|
||||
"primite si trimise pentru aceasta inregistrare inainte de a fi trimise. "
|
||||
"Despartiti adresele de mail multiple cu o virgula"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr "Ciornă"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising,priority:0
|
||||
msgid "Low"
|
||||
msgstr "Scăzut(ă)"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,date_closed:0
|
||||
#: selection:crm.fundraising,state:0
|
||||
#: selection:crm.fundraising.report,state:0
|
||||
msgid "Closed"
|
||||
msgstr "Închis"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: selection:crm.fundraising,state:0
|
||||
#: view:crm.fundraising.report:0
|
||||
#: selection:crm.fundraising.report,state:0
|
||||
msgid "Pending"
|
||||
msgstr "În așteptare"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Communication & History"
|
||||
msgstr "Comunicare & Istoric"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "August"
|
||||
msgstr "August"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising,priority:0
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Global CC"
|
||||
msgstr "CC global"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: model:ir.actions.act_window,name:crm_fundraising.crm_case_category_act_fund_all1
|
||||
msgid "Funds"
|
||||
msgstr "Fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "June"
|
||||
msgstr "Iunie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,partner_phone:0
|
||||
msgid "Phone"
|
||||
msgstr "Telefon"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising.report,user_id:0
|
||||
msgid "User"
|
||||
msgstr "Utilizator"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:crm.case.resource.type,name:crm_fundraising.type_fund2
|
||||
msgid "Cheque"
|
||||
msgstr "Cec"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,active:0
|
||||
msgid "Active"
|
||||
msgstr "Activ"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "November"
|
||||
msgstr "Noiembrie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr "Filtre extinse..."
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Search"
|
||||
msgstr "Căutare"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "October"
|
||||
msgstr "Octombrie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "January"
|
||||
msgstr "Ianuarie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "#Fundraising"
|
||||
msgstr "#Strangere de fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.actions.act_window,help:crm_fundraising.crm_fund_categ_action
|
||||
msgid ""
|
||||
"Manage and define the fund raising categories you want to be maintained in "
|
||||
"the system."
|
||||
msgstr ""
|
||||
"Gestionati si definiti categoriile strangerii de fonduri care doriti sa "
|
||||
"ramana in sistem."
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: help:crm.fundraising,email_from:0
|
||||
msgid "These people will receive email."
|
||||
msgstr "Aceste persoane vor primi e-mail."
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Fund Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,date:0
|
||||
msgid "Date"
|
||||
msgstr "Dată"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:crm.case.categ,name:crm_fundraising.categ_fund3
|
||||
msgid "Healthcare"
|
||||
msgstr "Servicii medicale"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "History"
|
||||
msgstr "Istoric"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,partner_address_id:0
|
||||
msgid "Partner Contact"
|
||||
msgstr "Contact partener"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Month of fundraising"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Estimates"
|
||||
msgstr "Estimări"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: field:crm.fundraising,state:0
|
||||
#: view:crm.fundraising.report:0
|
||||
#: field:crm.fundraising.report,state:0
|
||||
msgid "State"
|
||||
msgstr "Stare"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Unassigned"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Done"
|
||||
msgstr "Efectuat"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "December"
|
||||
msgstr "Decembrie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Cancel"
|
||||
msgstr "Anulează"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: view:crm.fundraising.report:0
|
||||
#: selection:crm.fundraising.report,state:0
|
||||
msgid "Open"
|
||||
msgstr "Deschide"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising,state:0
|
||||
msgid "In Progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.actions.act_window,help:crm_fundraising.crm_case_category_act_fund_all1
|
||||
msgid ""
|
||||
"If you need to collect money for your organization or a campaign, Fund "
|
||||
"Raising allows you to track all your fund raising activities. In the search "
|
||||
"list, filter by funds description, email, history and probability of success."
|
||||
msgstr ""
|
||||
"Daca trebuie sa strangeti bani pentru organizatia dumneavoastra sau pentru o "
|
||||
"campanie, Strangerea de fonduri va permite sa tineti evidenta tuturor "
|
||||
"activitatilor dumneavoastra de strangere de fonduri. In lista de cautare, "
|
||||
"filtrati dupa descrierea fondurilor, emai, istoric si probabilitatea de "
|
||||
"succes."
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: field:crm.fundraising,user_id:0
|
||||
msgid "Responsible"
|
||||
msgstr "Responsabil"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: help:crm.fundraising,section_id:0
|
||||
msgid ""
|
||||
"Sales team to which Case belongs to. Define Responsible user and Email "
|
||||
"account for mail gateway."
|
||||
msgstr ""
|
||||
"Echipa de vanzari careia ii apartine cazul. Definiti Utilizatorul "
|
||||
"responsabil si contul de email pentru mail gateway."
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.model,name:crm_fundraising.model_crm_fundraising_report
|
||||
msgid "CRM Fundraising Report"
|
||||
msgstr "Raport Strangere de Fonduri MRC"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Reply"
|
||||
msgstr "Răspuns"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Date of fundraising"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
#: field:crm.fundraising.report,amount_revenue_prob:0
|
||||
msgid "Est. Rev*Prob."
|
||||
msgstr "Venit Estimat*Probabilitate"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising.report,type_id:0
|
||||
msgid "Fundraising Type"
|
||||
msgstr "Tipul Strangerii de fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "New Funds"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:ir.actions.act_window,help:crm_fundraising.crm_fundraising_stage_act
|
||||
msgid ""
|
||||
"Create and manage fund raising activity categories you want to be maintained "
|
||||
"in the system."
|
||||
msgstr ""
|
||||
"Creati si gestionati categoriile activitatii de stranere de fonduri care "
|
||||
"doriti sa ramana in sistem."
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,description:0
|
||||
msgid "Description"
|
||||
msgstr "Descriere"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "May"
|
||||
msgstr "Mai"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,probability:0
|
||||
msgid "Probability (%)"
|
||||
msgstr "Probabilitate (%)"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,partner_name:0
|
||||
msgid "Employee's Name"
|
||||
msgstr "Numele angajatului"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: help:crm.fundraising,state:0
|
||||
msgid ""
|
||||
"The state is set to 'Draft', when a case is created. "
|
||||
" \n"
|
||||
"If the case is in progress the state is set to 'Open'. "
|
||||
" \n"
|
||||
"When the case is over, the state is set to 'Done'. "
|
||||
" \n"
|
||||
"If the case needs to be reviewed then the state is set to 'Pending'."
|
||||
msgstr ""
|
||||
"Starea este setata pe 'Ciorna', atunci cand este creat un caz. "
|
||||
" \n"
|
||||
"Daca cazul este in desfasurare, starea este setata pe 'Deschis'. "
|
||||
" \n"
|
||||
"Atunci cand cazul este incheiat, starea este setata pe 'Efectuat'. "
|
||||
" \n"
|
||||
"Daca cazul trebuie revazut, atunci starea este setata pe 'In asteptare'."
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "February"
|
||||
msgstr "Februarie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: field:crm.fundraising,name:0
|
||||
msgid "Name"
|
||||
msgstr "Nume"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:crm.case.resource.type,name:crm_fundraising.type_fund1
|
||||
msgid "Cash"
|
||||
msgstr "Numerar"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Funds by Categories"
|
||||
msgstr "Fonduri dupa Categorii"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Month-1"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising.report,month:0
|
||||
msgid "April"
|
||||
msgstr "Aprilie"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "My Case(s)"
|
||||
msgstr "Cazul (cazurile) meu (mele)"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: model:crm.case.resource.type,name:crm_fundraising.type_fund4
|
||||
msgid "Demand Draft"
|
||||
msgstr "Solicitare ciorna"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,id:0
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
msgid "Search Funds"
|
||||
msgstr "Cautare Fonduri"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: selection:crm.fundraising,priority:0
|
||||
msgid "High"
|
||||
msgstr "Ridicat(ă)"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising:0
|
||||
#: field:crm.fundraising,section_id:0
|
||||
#: view:crm.fundraising.report:0
|
||||
msgid "Sales Team"
|
||||
msgstr "Echipa de vânzări"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising.report,create_date:0
|
||||
msgid "Create Date"
|
||||
msgstr "Creare data"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,date_action_last:0
|
||||
msgid "Last Action"
|
||||
msgstr "Ultima acțiune"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: view:crm.fundraising.report:0
|
||||
#: field:crm.fundraising.report,name:0
|
||||
msgid "Year"
|
||||
msgstr "An"
|
||||
|
||||
#. module: crm_fundraising
|
||||
#: field:crm.fundraising,duration:0
|
||||
msgid "Duration"
|
||||
msgstr "Durată"
|
||||
|
||||
#~ msgid "CRM Fundraising"
|
||||
#~ msgstr "Strangere de fonduri MRC"
|
||||
|
||||
#~ msgid " Month "
|
||||
#~ msgstr " Luna "
|
||||
|
||||
#~ msgid "Channel"
|
||||
#~ msgstr "Canal"
|
||||
|
||||
#~ msgid " Month-1 "
|
||||
#~ msgstr " Luna-1 "
|
||||
|
||||
#~ msgid " Year "
|
||||
#~ msgstr " An "
|
||||
|
||||
#~ msgid "Stages"
|
||||
#~ msgstr "Etape"
|
||||
|
||||
#~ msgid "Stage of case"
|
||||
#~ msgstr "Etapa cazului"
|
||||
|
||||
#~ msgid "Attachments"
|
||||
#~ msgstr "Atașamente"
|
||||
|
||||
#~ msgid "Current"
|
||||
#~ msgstr "Curent"
|
||||
|
||||
#~ msgid "Details"
|
||||
#~ msgstr "Detalii"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The channels represent the different communication modes available with the "
|
||||
#~ "customer."
|
||||
#~ msgstr ""
|
||||
#~ "Canalele reprezinta diferitele moduri disponibile de comunicare cu clientul."
|
||||
@@ -103,7 +103,7 @@ class delivery_carrier(osv.osv):
|
||||
grid_line_pool = self.pool.get('delivery.grid.line')
|
||||
grid_pool = self.pool.get('delivery.grid')
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
grid_id = grid_pool.search(cr, uid, [('carrier_id', '=', record.id),('sequence','=',9999)], context=context)
|
||||
grid_id = grid_pool.search(cr, uid, [('carrier_id', '=', record.id)], context=context)
|
||||
|
||||
if grid_id and not (record.normal_price or record.free_if_more_than):
|
||||
grid_pool.unlink(cr, uid, grid_id, context=context)
|
||||
@@ -115,7 +115,7 @@ class delivery_carrier(osv.osv):
|
||||
record_data = {
|
||||
'name': record.name,
|
||||
'carrier_id': record.id,
|
||||
'sequence': 9999,
|
||||
'sequence': 10,
|
||||
}
|
||||
new_grid_id = grid_pool.create(cr, uid, record_data, context=context)
|
||||
grid_id = [new_grid_id]
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
# Romanian translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
|
||||
"PO-Revision-Date: 2012-01-04 13:13+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Romanian <ro@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-01-05 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 14625)\n"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.model,name:document_ftp.model_document_ftp_configuration
|
||||
msgid "Auto Directory Configuration"
|
||||
msgstr "Configurare auto Director"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid ""
|
||||
"Indicate the network address on which your OpenERP server should be "
|
||||
"reachable for end-users. This depends on your network topology and "
|
||||
"configuration, and will only affect the links displayed to the users. The "
|
||||
"format is HOST:PORT and the default host (localhost) is only suitable for "
|
||||
"access from the server machine itself.."
|
||||
msgstr ""
|
||||
"Indica adresa retelei in care serverul OpenERP ar trebui sa fie accesibil "
|
||||
"utilizatorilor finali. Aceasta depinde de topologia si configurarea retelei "
|
||||
"dumneavoastra, si va afecta doar link-urile afisate utilizatorilor. Formatul "
|
||||
"este HOST:PORT, iar gazda predenifinta (localhost) (gazda locala) este "
|
||||
"potrivita doar pentru accesul de la server.."
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.actions.url,name:document_ftp.action_document_browse
|
||||
msgid "Browse Files"
|
||||
msgstr "Răsfoiește fișiere"
|
||||
|
||||
#. module: document_ftp
|
||||
#: field:document.ftp.configuration,config_logo:0
|
||||
msgid "Image"
|
||||
msgstr "Imagine"
|
||||
|
||||
#. module: document_ftp
|
||||
#: field:document.ftp.configuration,host:0
|
||||
msgid "Address"
|
||||
msgstr "Adresă"
|
||||
|
||||
#. module: document_ftp
|
||||
#: field:document.ftp.browse,url:0
|
||||
msgid "FTP Server"
|
||||
msgstr "Server FTP"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory
|
||||
msgid "FTP Server Configuration"
|
||||
msgstr "Configurare Server FTP"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.browse:0
|
||||
msgid "_Browse"
|
||||
msgstr "_Răsfoiește"
|
||||
|
||||
#. module: document_ftp
|
||||
#: help:document.ftp.configuration,host:0
|
||||
msgid ""
|
||||
"Server address or IP and port to which users should connect to for DMS access"
|
||||
msgstr ""
|
||||
"Adresa serverului sau IP si portul la care utilizatorii ar trebui sa se "
|
||||
"conecteze pentru acces DMS"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.ui.menu,name:document_ftp.menu_document_browse
|
||||
msgid "Shared Repository (FTP)"
|
||||
msgstr "Depozit comun"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.browse:0
|
||||
msgid "_Cancel"
|
||||
msgstr "_Anulează"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "Configure FTP Server"
|
||||
msgstr "Configurare Server FTP"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "title"
|
||||
msgstr "titlu"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.model,name:document_ftp.model_document_ftp_browse
|
||||
msgid "Document FTP Browse"
|
||||
msgstr "Rasfoire document FTP"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "Knowledge Application Configuration"
|
||||
msgstr "Cunostinte configurare aplicatie"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse
|
||||
msgid "Document Browse"
|
||||
msgstr "Rasfoire document"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.browse:0
|
||||
msgid "Browse Document"
|
||||
msgstr "Rasfoieste dcoumentul"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "res_config_contents"
|
||||
msgstr "res_config_contents"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This is a support FTP Interface with document management system.\n"
|
||||
#~ " With this module you would not only be able to access documents through "
|
||||
#~ "OpenERP\n"
|
||||
#~ " but you would also be able to connect with them through the file system "
|
||||
#~ "using the\n"
|
||||
#~ " FTP client.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Aceasta este o Interfata FTP suport cu sistemul managementului "
|
||||
#~ "documentelor.\n"
|
||||
#~ " Cu acest modul veti putea nu doar sa accesati documente prin OpenERP, "
|
||||
#~ "ci\n"
|
||||
#~ " va veti putea si conecta la ele prin sistemul de fisiere folosind\n"
|
||||
#~ " clientul FTP.\n"
|
||||
|
||||
#~ msgid "Configuration Progress"
|
||||
#~ msgstr "Progres configurare"
|
||||
|
||||
#~ msgid "Integrated FTP Server with Document Management System"
|
||||
#~ msgstr "Server FTP integrat cu Sistemul Managementului Documentelor"
|
||||
@@ -0,0 +1,206 @@
|
||||
# Romanian translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
|
||||
"PO-Revision-Date: 2012-01-04 14:42+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Romanian <ro@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-01-05 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 14625)\n"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,create_date:0
|
||||
#: field:document.webdav.file.property,create_date:0
|
||||
msgid "Date Created"
|
||||
msgstr "Data creată"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.ui.menu,name:document_webdav.menu_document_props
|
||||
msgid "Documents"
|
||||
msgstr ""
|
||||
|
||||
#. module: document_webdav
|
||||
#: constraint:document.directory:0
|
||||
msgid "Error! You can not create recursive Directories."
|
||||
msgstr "Eroare! Nu puteti crea Directoare recursive."
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: view:document.webdav.file.property:0
|
||||
msgid "Search Document properties"
|
||||
msgstr "Cautare Proprietati documente"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: field:document.webdav.dir.property,namespace:0
|
||||
#: view:document.webdav.file.property:0
|
||||
#: field:document.webdav.file.property,namespace:0
|
||||
msgid "Namespace"
|
||||
msgstr "Spațiu de nume"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.directory,dav_prop_ids:0
|
||||
msgid "DAV properties"
|
||||
msgstr "Proprietati DAV"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.model,name:document_webdav.model_document_webdav_file_property
|
||||
msgid "document.webdav.file.property"
|
||||
msgstr "document.webdav.file.property (document.webdav.fisier.proprietate)"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: view:document.webdav.file.property:0
|
||||
msgid "Group By..."
|
||||
msgstr "Grupează după..."
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
msgid "These properties will be added to WebDAV requests"
|
||||
msgstr "Aceste proprietati vor fi adaugate cererilor WebDAV"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.actions.act_window,name:document_webdav.action_file_props_form
|
||||
msgid "DAV Properties for Documents"
|
||||
msgstr ""
|
||||
|
||||
#. module: document_webdav
|
||||
#: code:addons/document_webdav/webdav.py:37
|
||||
#, python-format
|
||||
msgid "PyWebDAV Import Error!"
|
||||
msgstr "Eroare Import PyWebDAV!"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.file.property:0
|
||||
#: field:document.webdav.file.property,file_id:0
|
||||
msgid "Document"
|
||||
msgstr "Document"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.ui.menu,name:document_webdav.menu_folder_props
|
||||
msgid "Folders"
|
||||
msgstr ""
|
||||
|
||||
#. module: document_webdav
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "Directory cannot be parent of itself!"
|
||||
msgstr "Directorul nu poate fi parinte lui insusi"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
msgid "Dynamic context"
|
||||
msgstr "Context dinamic"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
msgid "WebDAV properties"
|
||||
msgstr "Proprietari WebDAV"
|
||||
|
||||
#. module: document_webdav
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "The directory name must be unique !"
|
||||
msgstr "Numele directorului trebuie sa fie unic !"
|
||||
|
||||
#. module: document_webdav
|
||||
#: code:addons/document_webdav/webdav.py:37
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please install PyWebDAV from "
|
||||
"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-"
|
||||
"0.9.4.tar.gz&can=2&q=/"
|
||||
msgstr ""
|
||||
"Va rugam sa instalati PyWebDAV de la "
|
||||
"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-"
|
||||
"0.9.4.tar.gz&can=2&q=/"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form
|
||||
msgid "DAV Properties for Folders"
|
||||
msgstr ""
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: view:document.webdav.file.property:0
|
||||
msgid "Properties"
|
||||
msgstr "Proprietăți"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,name:0
|
||||
#: field:document.webdav.file.property,name:0
|
||||
msgid "Name"
|
||||
msgstr "Nume"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.model,name:document_webdav.model_document_webdav_dir_property
|
||||
msgid "document.webdav.dir.property"
|
||||
msgstr "document.webdav.dir.property"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,value:0
|
||||
#: field:document.webdav.file.property,value:0
|
||||
msgid "Value"
|
||||
msgstr "Valoare"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,dir_id:0
|
||||
#: model:ir.model,name:document_webdav.model_document_directory
|
||||
msgid "Directory"
|
||||
msgstr "Director"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,write_uid:0
|
||||
#: field:document.webdav.file.property,write_uid:0
|
||||
msgid "Last Modification User"
|
||||
msgstr "Utilizatorul ultimei modificari"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
msgid "Dir"
|
||||
msgstr "Director"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,write_date:0
|
||||
#: field:document.webdav.file.property,write_date:0
|
||||
msgid "Date Modified"
|
||||
msgstr "Dată modificare"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,create_uid:0
|
||||
#: field:document.webdav.file.property,create_uid:0
|
||||
msgid "Creator"
|
||||
msgstr "Creator"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.ui.menu,name:document_webdav.menu_properties
|
||||
msgid "DAV Properties"
|
||||
msgstr ""
|
||||
|
||||
#. module: document_webdav
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "Directory must have a parent or a storage"
|
||||
msgstr "Directorul trebuie sa aiba un parinte sau o arhiva"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,do_subst:0
|
||||
#: field:document.webdav.file.property,do_subst:0
|
||||
msgid "Substitute"
|
||||
msgstr "Inlocuire"
|
||||
|
||||
#~ msgid "DAV properties for documents"
|
||||
#~ msgstr "Proprietati DAV pentru documente"
|
||||
|
||||
#~ msgid "DAV properties for folders"
|
||||
#~ msgstr "Proprietăți DAV pentru fisiere"
|
||||
|
||||
#~ msgid "WebDAV server for Document Management"
|
||||
#~ msgstr "Serverul WebDAV pentru Managementul documentelor"
|
||||
@@ -100,11 +100,11 @@
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
parent="base.next_id_15"
|
||||
parent="base.menu_email"
|
||||
id="menu_action_fetchmail_server_tree"
|
||||
action="action_email_server_tree"
|
||||
name="Incoming Mail Servers"
|
||||
sequence="40"
|
||||
sequence="14"
|
||||
/>
|
||||
|
||||
<record model="ir.ui.view" id="email_message_tree_view">
|
||||
|
||||
+101
-66
@@ -8,14 +8,15 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-12-23 09:54+0000\n"
|
||||
"PO-Revision-Date: 2010-03-09 04:16+0000\n"
|
||||
"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n"
|
||||
"PO-Revision-Date: 2012-01-03 02:55+0000\n"
|
||||
"Last-Translator: Christopher Ormaza - (Ecuadorenlinea.net) "
|
||||
"<chris.ormaza@gmail.com>\n"
|
||||
"Language-Team: Spanish (Ecuador) <es_EC@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-12-24 05:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14560)\n"
|
||||
"X-Launchpad-Export-Date: 2012-01-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14616)\n"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.node,name:hr.process_node_openerpuser0
|
||||
@@ -26,7 +27,7 @@ msgstr "Usuario OpenERP"
|
||||
#: view:hr.job:0
|
||||
#: field:hr.job,requirements:0
|
||||
msgid "Requirements"
|
||||
msgstr ""
|
||||
msgstr "Requisitos"
|
||||
|
||||
#. module: hr
|
||||
#: constraint:hr.department:0
|
||||
@@ -36,7 +37,7 @@ msgstr "Error! No puede crear departamentos recursivos."
|
||||
#. module: hr
|
||||
#: model:process.transition,name:hr.process_transition_contactofemployee0
|
||||
msgid "Link the employee to information"
|
||||
msgstr ""
|
||||
msgstr "Enlaza el empleado con la información"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,sinid:0
|
||||
@@ -54,12 +55,12 @@ msgstr "Recursos Humanos"
|
||||
#: view:hr.employee:0
|
||||
#: view:hr.job:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
msgstr "Agroupar por ..."
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,name:hr.view_department_form_installer
|
||||
msgid "Create Your Departments"
|
||||
msgstr ""
|
||||
msgstr "Crear sus Departamentos"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,help:hr.action_hr_job
|
||||
@@ -70,6 +71,11 @@ msgid ""
|
||||
"will be used in the recruitment process to evaluate the applicants for this "
|
||||
"job position."
|
||||
msgstr ""
|
||||
"Los puestos de trabajo se utilizan para definir los cargos y sus requisitos. "
|
||||
"Puede controlar el número de empleados que tiene por puesto y cuántos espera "
|
||||
"tener en un futuro. Asimismo, puede adjuntar una encuesta a una posición "
|
||||
"laboral que será utilizada en el proceso de selección para evaluar a los "
|
||||
"candidatos a este puesto."
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
@@ -83,17 +89,17 @@ msgstr "Departamento"
|
||||
#. module: hr
|
||||
#: view:hr.job:0
|
||||
msgid "Mark as Old"
|
||||
msgstr ""
|
||||
msgstr "Marcar como antiguo"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.job:0
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
msgstr "Tareas"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.job:0
|
||||
msgid "In Recruitment"
|
||||
msgstr ""
|
||||
msgstr "En selección"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.department,company_id:0
|
||||
@@ -106,12 +112,12 @@ msgstr "Compañía"
|
||||
#. module: hr
|
||||
#: field:hr.job,no_of_recruitment:0
|
||||
msgid "Expected in Recruitment"
|
||||
msgstr ""
|
||||
msgstr "Previsión en selección"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.actions.todo.category,name:hr.category_hr_management_config
|
||||
msgid "HR Management"
|
||||
msgstr ""
|
||||
msgstr "Administración de RH"
|
||||
|
||||
#. module: hr
|
||||
#: help:hr.employee,partner_id:0
|
||||
@@ -119,11 +125,13 @@ msgid ""
|
||||
"Partner that is related to the current employee. Accounting transaction will "
|
||||
"be written on this partner belongs to employee."
|
||||
msgstr ""
|
||||
"Empresa que está relacionada con el empleado actual. Las transacciones "
|
||||
"contables se escribirán en esta empresa a la cual pertenece el empleado."
|
||||
|
||||
#. module: hr
|
||||
#: model:process.transition,name:hr.process_transition_employeeuser0
|
||||
msgid "Link a user to an employee"
|
||||
msgstr ""
|
||||
msgstr "Vincular un usuario a un empleado"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.department,parent_id:0
|
||||
@@ -139,7 +147,7 @@ msgstr "Notas"
|
||||
#. module: hr
|
||||
#: selection:hr.employee,marital:0
|
||||
msgid "Married"
|
||||
msgstr ""
|
||||
msgstr "Casado (a)"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,help:hr.action_create_hr_employee_installer
|
||||
@@ -149,6 +157,10 @@ msgid ""
|
||||
"operations on all the employees of the same category, i.e. allocating "
|
||||
"holidays."
|
||||
msgstr ""
|
||||
"Cree empleados y enlacelos a un usuario del sistema OpenERP si usted quiere "
|
||||
"que ellos tengan acceso al sistema, Las Categorías pueden ser asignadas a "
|
||||
"los empleados para poder realizar operaciones sobre las categorías, por "
|
||||
"ejemplo los días feriados"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,help:hr.open_module_tree_department
|
||||
@@ -157,11 +169,14 @@ msgid ""
|
||||
"to employees by departments: expenses and timesheet validation, leaves "
|
||||
"management, recruitments, etc."
|
||||
msgstr ""
|
||||
"La estructura de departamentos de su compañía se utiliza para gestionar "
|
||||
"todos los documentos relativos a los empleados por departamentos: gastos y "
|
||||
"validación de tiempos, gestión de ausencias, procesos de selección, etc."
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,color:0
|
||||
msgid "Color Index"
|
||||
msgstr ""
|
||||
msgstr "Color del Indice"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.transition,note:hr.process_transition_employeeuser0
|
||||
@@ -169,17 +184,19 @@ msgid ""
|
||||
"The Related user field on the Employee form allows to link the OpenERP user "
|
||||
"(and her rights) to the employee."
|
||||
msgstr ""
|
||||
"El campo usuario relacionado en el formulario del empleado permite vincular "
|
||||
"el usuario de OpenERP (y sus permisos) al empleado."
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.job:0
|
||||
#: selection:hr.job,state:0
|
||||
msgid "In Recruitement"
|
||||
msgstr ""
|
||||
msgstr "En selección"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,identification_id:0
|
||||
msgid "Identification No"
|
||||
msgstr ""
|
||||
msgstr "Nº identificación"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.employee,gender:0
|
||||
@@ -189,12 +206,12 @@ msgstr "Mujer"
|
||||
#. module: hr
|
||||
#: help:hr.job,expected_employees:0
|
||||
msgid "Required number of employees in total for that job."
|
||||
msgstr ""
|
||||
msgstr "Número de empleados requeridos en total para este puesto"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.ui.menu,name:hr.menu_open_view_attendance_reason_new_config
|
||||
msgid "Attendance"
|
||||
msgstr ""
|
||||
msgstr "Asistencia"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
@@ -216,7 +233,7 @@ msgstr "Categorías Inferiores"
|
||||
#: field:hr.job,description:0
|
||||
#: model:ir.model,name:hr.model_hr_job
|
||||
msgid "Job Description"
|
||||
msgstr ""
|
||||
msgstr "Descripción del puesto de trabajo"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,work_location:0
|
||||
@@ -226,7 +243,7 @@ msgstr "Dirección Oficina"
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
msgid "My Departments Employee"
|
||||
msgstr ""
|
||||
msgstr "Mis Departamentos"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
@@ -238,17 +255,17 @@ msgstr "Empleado"
|
||||
#. module: hr
|
||||
#: model:process.node,note:hr.process_node_employeecontact0
|
||||
msgid "Other information"
|
||||
msgstr ""
|
||||
msgstr "Otra información"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,work_email:0
|
||||
msgid "Work E-mail"
|
||||
msgstr ""
|
||||
msgstr "Email de trabajo"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,birthday:0
|
||||
msgid "Date of Birth"
|
||||
msgstr ""
|
||||
msgstr "Fecha de nacimiento"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.ui.menu,name:hr.menu_hr_reporting
|
||||
@@ -259,14 +276,14 @@ msgstr "Informe"
|
||||
#: model:ir.actions.act_window,name:hr.open_board_hr
|
||||
#: model:ir.ui.menu,name:hr.menu_hr_dashboard_user
|
||||
msgid "Human Resources Dashboard"
|
||||
msgstr ""
|
||||
msgstr "Tablero de Recursos Humanos"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
#: field:hr.employee,job_id:0
|
||||
#: view:hr.job:0
|
||||
msgid "Job"
|
||||
msgstr ""
|
||||
msgstr "Puesto de Trabajo"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.department,member_ids:0
|
||||
@@ -282,12 +299,12 @@ msgstr "Configuración"
|
||||
#: view:hr.employee:0
|
||||
#: field:hr.employee,category_ids:0
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
msgstr "Categorías"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.job,expected_employees:0
|
||||
msgid "Expected Employees"
|
||||
msgstr ""
|
||||
msgstr "Empleados previstos"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.employee,marital:0
|
||||
@@ -302,7 +319,7 @@ msgstr "Categoría Superior"
|
||||
#. module: hr
|
||||
#: constraint:hr.employee.category:0
|
||||
msgid "Error ! You cannot create recursive Categories."
|
||||
msgstr ""
|
||||
msgstr "¡Error! No puede crear categorías recursivas."
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.department:0
|
||||
@@ -320,7 +337,7 @@ msgstr "Contacto de Empleado"
|
||||
#. module: hr
|
||||
#: view:board.board:0
|
||||
msgid "My Board"
|
||||
msgstr ""
|
||||
msgstr "Mi tablero"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.employee,gender:0
|
||||
@@ -342,7 +359,7 @@ msgstr "Categoría de empleado"
|
||||
#. module: hr
|
||||
#: model:process.process,name:hr.process_process_employeecontractprocess0
|
||||
msgid "Employee Contract"
|
||||
msgstr ""
|
||||
msgstr "Contrato de empleado"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.model,name:hr.model_hr_department
|
||||
@@ -352,7 +369,7 @@ msgstr "Departamento"
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,name:hr.action_create_hr_employee_installer
|
||||
msgid "Create your Employees"
|
||||
msgstr ""
|
||||
msgstr "Cree sus empleados"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee.category,name:0
|
||||
@@ -373,11 +390,23 @@ msgid ""
|
||||
"they will be able to enter time through the system. In the note tab, you can "
|
||||
"enter text data that should be recorded for a specific employee."
|
||||
msgstr ""
|
||||
"Aquí puede gestionar su mano de obra creando empleados y asignándoles "
|
||||
"propiedades específicas en el sistema. Mantenga toda la información "
|
||||
"relacionada con los empleados y haga un seguimiento de cualquier hecho que "
|
||||
"necesite ser registrado. La pestaña con información personal le ayudará a "
|
||||
"mantener los datos sobre su identidad. La pestaña Categorías le permite "
|
||||
"asignarles categorías de empleados en función de su puesto y actividades "
|
||||
"dentro de la compañía. Una categoría puede ser la antigüedad dentro de la "
|
||||
"compañía o departamento. La pestaña de Hoja de servicios permite asignarles "
|
||||
"una hoja de servicios específica y un diario analítico donde podrán "
|
||||
"introducir tiempo en el sistema. En la pestaña notas puede introducir "
|
||||
"información, en formato texto libre, que debe ser guardada para un empleado "
|
||||
"en concreto."
|
||||
|
||||
#. module: hr
|
||||
#: help:hr.employee,bank_account_id:0
|
||||
msgid "Employee bank salary account"
|
||||
msgstr ""
|
||||
msgstr "Cuenta bancaria de salario del empleado."
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.department,note:0
|
||||
@@ -393,6 +422,7 @@ msgstr "Árbol de Empleados"
|
||||
#: constraint:res.users:0
|
||||
msgid "The chosen company is not in the allowed companies for this user"
|
||||
msgstr ""
|
||||
"La compañía seleccionada no está autorizada como compañía para este usuario"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
@@ -408,7 +438,7 @@ msgstr "Dirección de trabajo"
|
||||
#: model:ir.actions.act_window,name:hr.open_board_hr_manager
|
||||
#: model:ir.ui.menu,name:hr.menu_hr_dashboard_manager
|
||||
msgid "HR Manager Dashboard"
|
||||
msgstr ""
|
||||
msgstr "Tablero Director Recursos Humanos"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
@@ -424,12 +454,12 @@ msgstr "Árbol de categorías"
|
||||
#. module: hr
|
||||
#: field:hr.employee,partner_id:0
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
msgstr "Desconocido"
|
||||
|
||||
#. module: hr
|
||||
#: help:hr.job,no_of_employee:0
|
||||
msgid "Number of employees with that job."
|
||||
msgstr ""
|
||||
msgstr "Número de empleados con este trabajo"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,ssnid:0
|
||||
@@ -449,7 +479,7 @@ msgstr "¡Error! No se puede crear una jerarquía recursiva de empleados."
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,name:hr.action2
|
||||
msgid "Subordonate Hierarchy"
|
||||
msgstr ""
|
||||
msgstr "Organigrama Jerárquico"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,help:hr.view_department_form_installer
|
||||
@@ -458,11 +488,14 @@ msgid ""
|
||||
"employees by departments: expenses and timesheet validation, leaves "
|
||||
"management, recruitments, etc."
|
||||
msgstr ""
|
||||
"La estructura de sus departamentos es usada para administrar todos los "
|
||||
"documentos relacionados a los empleados por departamento: Gastos y Hojas de "
|
||||
"Asistencia, gestión de ausencias, proceso de selección, etc."
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,bank_account_id:0
|
||||
msgid "Bank Account Number"
|
||||
msgstr ""
|
||||
msgstr "Número de Cuenta Bancaria"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.department:0
|
||||
@@ -475,27 +508,29 @@ msgid ""
|
||||
"In the Employee form, there are different kind of information like Contact "
|
||||
"information."
|
||||
msgstr ""
|
||||
"En el formulario del empleado, hay diferentes tipos de información como la "
|
||||
"información de contacto."
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.ui.menu,name:hr.menu_hr_dashboard
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
msgstr "Tablero"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.job,state:0
|
||||
msgid "Old"
|
||||
msgstr ""
|
||||
msgstr "Antiguo"
|
||||
|
||||
#. module: hr
|
||||
#: sql_constraint:res.users:0
|
||||
msgid "You can not have two users with the same login !"
|
||||
msgstr ""
|
||||
msgstr "¡No puede tener dos usuarios con el mismo identificador de usuario!"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.job:0
|
||||
#: field:hr.job,state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
msgstr "Estado/Provincia"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,marital:0
|
||||
@@ -505,22 +540,22 @@ msgstr "Estado civil"
|
||||
#. module: hr
|
||||
#: model:ir.model,name:hr.model_ir_actions_act_window
|
||||
msgid "ir.actions.act_window"
|
||||
msgstr ""
|
||||
msgstr "Asistente"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.node,note:hr.process_node_employee0
|
||||
msgid "Employee form and structure"
|
||||
msgstr ""
|
||||
msgstr "Formulario y estructura del empleado"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,photo:0
|
||||
msgid "Photo"
|
||||
msgstr ""
|
||||
msgstr "Fotografía"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.model,name:hr.model_res_users
|
||||
msgid "res.users"
|
||||
msgstr ""
|
||||
msgstr "Usuarios"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
@@ -530,17 +565,17 @@ msgstr "Información personal"
|
||||
#. module: hr
|
||||
#: field:hr.employee,city:0
|
||||
msgid "City"
|
||||
msgstr ""
|
||||
msgstr "Ciudad"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,passport_id:0
|
||||
msgid "Passport No"
|
||||
msgstr ""
|
||||
msgstr "Nº Pasaporte"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,mobile_phone:0
|
||||
msgid "Work Mobile"
|
||||
msgstr ""
|
||||
msgstr "Móvil del trabajo"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee.category:0
|
||||
@@ -555,23 +590,23 @@ msgstr "Domicilio"
|
||||
#. module: hr
|
||||
#: view:hr.job:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
msgstr "Descripción"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.employee,marital:0
|
||||
msgid "Single"
|
||||
msgstr ""
|
||||
msgstr "Soltero(a)"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.job,name:0
|
||||
msgid "Job Name"
|
||||
msgstr ""
|
||||
msgstr "Nombre del Puesto de Trabajo"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.job:0
|
||||
#: selection:hr.job,state:0
|
||||
msgid "In Position"
|
||||
msgstr ""
|
||||
msgstr "Ocupado"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.department:0
|
||||
@@ -586,17 +621,17 @@ msgstr "Nacionalidad"
|
||||
#. module: hr
|
||||
#: model:ir.ui.menu,name:hr.menu_open_view_attendance_reason_config
|
||||
msgid "Leaves"
|
||||
msgstr ""
|
||||
msgstr "Ausencias"
|
||||
|
||||
#. module: hr
|
||||
#: view:board.board:0
|
||||
msgid "HR Manager Board"
|
||||
msgstr ""
|
||||
msgstr "Tablero de gestión de RRHH"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,resource_id:0
|
||||
msgid "Resource"
|
||||
msgstr ""
|
||||
msgstr "Recurso"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.department,complete_name:0
|
||||
@@ -636,12 +671,12 @@ msgstr "Nombre de departamento"
|
||||
#. module: hr
|
||||
#: help:hr.employee,ssnid:0
|
||||
msgid "Social Security Number"
|
||||
msgstr ""
|
||||
msgstr "Número de Seguro Social"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.node,note:hr.process_node_openerpuser0
|
||||
msgid "Creation of a OpenERP user"
|
||||
msgstr ""
|
||||
msgstr "Creación de un usuario OpenERP"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.department,child_ids:0
|
||||
@@ -657,28 +692,28 @@ msgstr "Información laboral"
|
||||
#: model:ir.actions.act_window,name:hr.action_hr_job
|
||||
#: model:ir.ui.menu,name:hr.menu_hr_job
|
||||
msgid "Job Positions"
|
||||
msgstr ""
|
||||
msgstr "Puestos de trabajo"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,otherid:0
|
||||
msgid "Other Id"
|
||||
msgstr ""
|
||||
msgstr "Otro id"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
#: field:hr.employee,coach_id:0
|
||||
msgid "Coach"
|
||||
msgstr ""
|
||||
msgstr "Entrenador"
|
||||
|
||||
#. module: hr
|
||||
#: sql_constraint:hr.job:0
|
||||
msgid "The name of the job position must be unique per company!"
|
||||
msgstr ""
|
||||
msgstr "¡El nombre de el puesto de trabajo, debe ser único por Compañia!"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.job:0
|
||||
msgid "My Departments Jobs"
|
||||
msgstr ""
|
||||
msgstr "Mis departamentos de Trabajo"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.department,manager_id:0
|
||||
@@ -690,7 +725,7 @@ msgstr "Director"
|
||||
#. module: hr
|
||||
#: selection:hr.employee,marital:0
|
||||
msgid "Widower"
|
||||
msgstr ""
|
||||
msgstr "Viudo(a)"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,child_ids:0
|
||||
@@ -700,7 +735,7 @@ msgstr "Subordinados"
|
||||
#. module: hr
|
||||
#: field:hr.job,no_of_employee:0
|
||||
msgid "Number of Employees"
|
||||
msgstr ""
|
||||
msgstr "Número de Empleados"
|
||||
|
||||
#~ msgid "Work Email"
|
||||
#~ msgstr "E-mail de Trabajo"
|
||||
|
||||
@@ -1,50 +1,31 @@
|
||||
-
|
||||
In order to test attendance process in OpenERP, at the time of login, I use "Sign In/Sign Out" wizard for attendances.
|
||||
I click on this wizard to login.
|
||||
In order to test attendance process in OpenERP, I entry of SignIn of employee.
|
||||
-
|
||||
!python {model: hr.sign.in.out}: |
|
||||
hr_employee = self.pool.get('hr.employee')
|
||||
uid = ref('base.user_al')
|
||||
emp_ids = hr_employee.search(cr, uid, [('user_id', '=', uid)])
|
||||
if emp_ids:
|
||||
employee = hr_employee.browse(cr, uid, emp_ids)[0]
|
||||
id = self.create(cr, uid, {'emp_id': employee.id, 'name': employee.name, 'state': employee.state})
|
||||
self.si_check(cr, uid, [id])
|
||||
context.update({'emp_id': [ref('hr.employee_al')]}) #TOFIX: emp_ids instead of 'emp_id'
|
||||
-
|
||||
!record {model: hr.sign.in.out, id: employee_sign_in}:
|
||||
{}
|
||||
-
|
||||
Employee Signs In.
|
||||
-
|
||||
!python {model: hr.sign.in.out}: |
|
||||
self.si_check(cr, uid, [ref("employee_sign_in")], context=context)
|
||||
-
|
||||
I check that Employee is "Present".
|
||||
-
|
||||
!assert {model: hr.employee, id: hr.employee_al, severity: error, string: Employee should be in present state}:
|
||||
- state == 'present'
|
||||
-
|
||||
I click on "Sign In" button of this wizard, this will Open a new form which ask for Last Sign Out date.
|
||||
After few seconds, employee sign's out.
|
||||
-
|
||||
!python {model: hr.sign.in.out}: |
|
||||
hr_employee = self.pool.get('hr.employee')
|
||||
uid = ref('base.user_al')
|
||||
emp_ids = hr_employee.search(cr, uid, [('user_id', '=', uid)])
|
||||
if emp_ids:
|
||||
employee = hr_employee.browse(cr, uid, emp_ids)[0]
|
||||
id = self.create(cr, uid, {'emp_id': employee.id, 'name': employee.name, 'state': employee.state})
|
||||
self.si_check(cr, uid, [id])
|
||||
-
|
||||
I select Last Sign Out date.
|
||||
-
|
||||
!record {model: hr.sign.in.out.ask, id: hr_sign_in_out_ask_Antony}:
|
||||
last_time: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
name: Antony
|
||||
-
|
||||
Now I click on "Sign In" button of this wizard.
|
||||
-
|
||||
!python {model: hr.sign.in.out.ask}: |
|
||||
import time
|
||||
hr_employee = self.pool.get('hr.employee')
|
||||
uid = ref('base.user_al')
|
||||
emp_ids = hr_employee.search(cr, uid, [('user_id', '=', uid)])
|
||||
if emp_ids:
|
||||
employee = hr_employee.browse(cr, uid, emp_ids)[0]
|
||||
id = self.create(cr, uid, {'emp_id': employee.id, 'name': employee.name, 'last_time': time.strftime('%Y-%m-%d %H:%M:%S')})
|
||||
time.sleep(2)
|
||||
self.so_check(cr, uid, [ref("employee_sign_in")], context=context)
|
||||
-
|
||||
Finally i check the employee is present.
|
||||
I check that Employee is "Absent".
|
||||
-
|
||||
!assert {model: hr.employee, id: hr.employee_al, severity: error, string: Employee should be in present state}:
|
||||
- state == 'present'
|
||||
!assert {model: hr.employee, id: hr.employee_al, severity: error, string: Employee should be in absent state}:
|
||||
- state == 'absent'
|
||||
|
||||
|
||||
@@ -305,10 +305,13 @@
|
||||
<field name="response" readonly="1"/>
|
||||
<field name="user_to_review_id"/>
|
||||
<field name="user_id" string="Interviewer"/>
|
||||
<button string="Send Reminder Email"
|
||||
name="%(mail.action_email_compose_message_wizard)d"
|
||||
icon="terp-mail-message-new" type="action" colspan="2"
|
||||
states="waiting_answer"/>
|
||||
<group col="2" colspan="2">
|
||||
<button string="Send Reminder Email"
|
||||
name="%(mail.action_email_compose_message_wizard)d"
|
||||
icon="terp-mail-message-new" type="action"
|
||||
states="waiting_answer"/>
|
||||
<button name="action_print_survey" string="Print Survey" type="object" icon="gtk-print" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0}" attrs="{'readonly':[('survey_id','=',False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator string="State" colspan="4"/>
|
||||
@@ -332,6 +335,7 @@
|
||||
<field name="response" readonly="1" invisible="True"/>
|
||||
<button name="%(survey.action_view_survey_question_message)d" string="Interview Question" type="action" states="waiting_answer,done,cancel" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response, 'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/>
|
||||
<button name="%(survey.survey_browse_response)d" string="Print Interview" type="action" states="done" icon="gtk-print" context="{'survey_id': survey_id, 'response_id' : [response], 'response_no':0}" attrs="{'readonly':[('response','=',False)]}" />
|
||||
<button name="action_print_survey" string="Print Survey" type="object" icon="gtk-print" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0}" attrs="{'readonly':[('survey_id','=',False)]}"/>
|
||||
<button name="%(mail.action_email_compose_message_wizard)d" string="Send Reminder Email" icon="terp-mail-message-new" type="action" colspan="2" states="waiting_answer"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
|
||||
@@ -0,0 +1,908 @@
|
||||
# Arabic translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
|
||||
"PO-Revision-Date: 2012-01-03 12:54+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Arabic <ar@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-01-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14616)\n"
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.plan.phase,send_anonymous_manager:0
|
||||
msgid "Send an anonymous summary to the manager"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Start Appraisal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
#: view:hr.evaluation.report:0
|
||||
#: view:hr_evaluation.plan:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Appraisal that overpassed the deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.interview,request_id:0
|
||||
#: field:hr.evaluation.report,request_id:0
|
||||
msgid "Request_id"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.report,progress_bar:0
|
||||
#: field:hr_evaluation.evaluation,progress:0
|
||||
msgid "Progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.report,delay_date:0
|
||||
msgid "Delay to Start"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Appraisal that are in waiting appreciation state"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: code:addons/hr_evaluation/hr_evaluation.py:244
|
||||
#: code:addons/hr_evaluation/hr_evaluation.py:320
|
||||
#, python-format
|
||||
msgid "Warning !"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan:0
|
||||
#: field:hr_evaluation.plan,company_id:0
|
||||
#: field:hr_evaluation.plan.phase,company_id:0
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.interview,evaluation_id:0
|
||||
#: field:hr_evaluation.plan.phase,survey_id:0
|
||||
msgid "Appraisal Form"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: field:hr.evaluation.report,day:0
|
||||
msgid "Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan:0
|
||||
#: field:hr_evaluation.plan,phase_ids:0
|
||||
msgid "Appraisal Phases"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.plan,month_first:0
|
||||
msgid ""
|
||||
"This number of months will be used to schedule the first evaluation date of "
|
||||
"the employee when selecting an evaluation plan. "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.employee:0
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "(eval_name)s:Appraisal Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.actions.act_window,help:hr_evaluation.open_view_hr_evaluation_tree
|
||||
msgid ""
|
||||
"Each employee may be assigned an Appraisal Plan. Such a plan defines the "
|
||||
"frequency and the way you manage your periodic personnel evaluation. You "
|
||||
"will be able to define steps and attach interviews to each step. OpenERP "
|
||||
"manages all kind of evaluations: bottom-up, top-down, self-evaluation and "
|
||||
"final evaluation by the manager."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "Mail Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan.phase,wait:0
|
||||
msgid "Wait Previous Phases"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_evaluation
|
||||
msgid "Employee Appraisal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,state:0
|
||||
#: selection:hr_evaluation.evaluation,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,rating:0
|
||||
#: selection:hr_evaluation.evaluation,rating:0
|
||||
msgid "Did not meet expectations"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.employee:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_tree
|
||||
#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr
|
||||
#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_tree
|
||||
msgid "Appraisal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "Send to Managers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.evaluation,date_close:0
|
||||
msgid "Ending Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.evaluation,note_action:0
|
||||
msgid ""
|
||||
"If the evaluation does not meet the expectations, you can proposean action "
|
||||
"plan"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "Send to Employees"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: code:addons/hr_evaluation/hr_evaluation.py:82
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
"Date: %(date)s\n"
|
||||
"\n"
|
||||
"Dear %(employee_name)s,\n"
|
||||
"\n"
|
||||
"I am doing an evaluation regarding %(eval_name)s.\n"
|
||||
"\n"
|
||||
"Kindly submit your response.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Thanks,\n"
|
||||
"--\n"
|
||||
"%(user_signature)s\n"
|
||||
"\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Appraisal that are in Plan In Progress state"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Reset to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.report,deadline:0
|
||||
msgid "Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid " Month "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid "In progress Evaluations"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.model,name:hr_evaluation.model_survey_request
|
||||
msgid "survey.request"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "(date)s: Current Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.plan.phase,send_anonymous_employee:0
|
||||
msgid "Send an anonymous summary to the employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: code:addons/hr_evaluation/hr_evaluation.py:81
|
||||
#, python-format
|
||||
msgid "Regarding "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
#: view:hr.evaluation.report:0
|
||||
#: field:hr.evaluation.report,state:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
#: field:hr_evaluation.evaluation,state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: field:hr.evaluation.report,employee_id:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
#: field:hr_evaluation.evaluation,employee_id:0
|
||||
#: model:ir.model,name:hr_evaluation.model_hr_employee
|
||||
msgid "Employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr_evaluation.evaluation,state:0
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan.phase,mail_body:0
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,rating:0
|
||||
#: selection:hr_evaluation.evaluation,rating:0
|
||||
msgid "Exceeds expectations"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.plan.phase,mail_feature:0
|
||||
msgid ""
|
||||
"Check this box if you want to send mail to employees coming under this phase"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid "Evaluation done in last month"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.model,name:hr_evaluation.model_mail_compose_message
|
||||
msgid "E-mail composition wizard"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid "Creation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.plan.phase,send_answer_manager:0
|
||||
msgid "Send all answers to the manager"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,state:0
|
||||
#: selection:hr_evaluation.evaluation,state:0
|
||||
msgid "Plan In Progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Public Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
msgid "Send Reminder Email"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: field:hr_evaluation.evaluation,rating:0
|
||||
msgid "Appreciation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Print Interview"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.report,closed:0
|
||||
msgid "closed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,rating:0
|
||||
#: selection:hr_evaluation.evaluation,rating:0
|
||||
msgid "Meet expectations"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: field:hr.evaluation.report,nbr:0
|
||||
msgid "# of Requests"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_plans_installer
|
||||
msgid "Review Appraisal Plans"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid " Month-1 "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "Action to Perform"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.evaluation,note_action:0
|
||||
msgid "Action Plan"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr_config
|
||||
msgid "Periodic Appraisal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Appraisal to close within the next 7 days"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Ending Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,rating:0
|
||||
#: selection:hr_evaluation.evaluation,rating:0
|
||||
msgid "Significantly exceeds expectations"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.actions.act_window,help:hr_evaluation.action_hr_evaluation_interview_tree
|
||||
msgid ""
|
||||
"Interview Requests are generated automatically by OpenERP according to an "
|
||||
"employee's Appraisal Plan. Each user receives automatic emails and requests "
|
||||
"to evaluate their colleagues periodically."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "In progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
msgid "Interview Request"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan.phase,send_answer_employee:0
|
||||
#: field:hr_evaluation.plan.phase,send_answer_manager:0
|
||||
msgid "All Answers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid "Evaluation done in current year"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: field:hr.evaluation.report,month:0
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Group by..."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "Mail Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.actions.act_window,name:hr_evaluation.evaluation_reminders
|
||||
msgid "Appraisal Reminders"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Interview Question"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.plan.phase,wait:0
|
||||
msgid ""
|
||||
"Check this box if you want to wait that all preceding phases are finished "
|
||||
"before launching this phase."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "Legend"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan,month_first:0
|
||||
msgid "First Appraisal in (months)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan.phase,send_anonymous_employee:0
|
||||
#: field:hr_evaluation.plan.phase,send_anonymous_manager:0
|
||||
msgid "Anonymous Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "7 Days"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.employee,evaluation_plan_id:0
|
||||
#: view:hr_evaluation.plan:0
|
||||
#: field:hr_evaluation.plan,name:0
|
||||
#: field:hr_evaluation.plan.phase,plan_id:0
|
||||
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan
|
||||
msgid "Appraisal Plan"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,rating:0
|
||||
#: selection:hr_evaluation.evaluation,rating:0
|
||||
msgid "Significantly bellow expectations"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid " (employee_name)s: Partner name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: field:hr.evaluation.report,plan_id:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
#: field:hr_evaluation.evaluation,plan_id:0
|
||||
msgid "Plan"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: constraint:hr.employee:0
|
||||
msgid "Error ! You cannot create recursive Hierarchy of Employees."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan_phase
|
||||
msgid "Appraisal Plan Phase"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.actions.act_window,name:hr_evaluation.act_hr_employee_2_hr__evaluation_interview
|
||||
msgid "Appraisal Interviews"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
msgid "Survey"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.evaluation,rating:0
|
||||
msgid "This is the appreciation on that summarize the evaluation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan.phase,action:0
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: selection:hr.evaluation.report,state:0
|
||||
msgid "Final Validation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr_evaluation.evaluation,state:0
|
||||
msgid "Waiting Appreciation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_report_all
|
||||
#: model:ir.ui.menu,name:hr_evaluation.menu_evaluation_report_all
|
||||
msgid "Appraisal Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.evaluation,date:0
|
||||
msgid "Appraisal Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.report,rating:0
|
||||
msgid "Overall Rating"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan.phase,email_subject:0
|
||||
msgid "char"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Interviewer"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_report
|
||||
msgid "Evaluations Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
msgid "Deadline Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: code:addons/hr_evaluation/wizard/mail_compose_message.py:45
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Hello %s, \n"
|
||||
"\n"
|
||||
" Kindly post your response for '%s' survey interview. \n"
|
||||
"\n"
|
||||
" Thanks,"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr_evaluation.plan.phase,action:0
|
||||
msgid "Top-Down Appraisal Requests"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.actions.act_window,help:hr_evaluation.action_evaluation_plans_installer
|
||||
msgid ""
|
||||
"You can define appraisal plans (ex: first interview after 6 months, then "
|
||||
"every year). Then, each employee can be linked to an appraisal plan so that "
|
||||
"OpenERP can automatically generate interview requests to managers and/or "
|
||||
"subordinates."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.plan.phase,send_answer_employee:0
|
||||
msgid "Send all answers to the employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Appraisal Data"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: selection:hr.evaluation.report,state:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
#: selection:hr_evaluation.evaluation,state:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_plan_tree
|
||||
#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_plan_tree
|
||||
msgid "Appraisal Plans"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_interview
|
||||
msgid "Appraisal Interview"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: code:addons/hr_evaluation/wizard/mail_compose_message.py:49
|
||||
#, python-format
|
||||
msgid "Reminder to fill up Survey"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid "In Progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
msgid "To Do"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid "Final Validation Evaluations"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan.phase,mail_feature:0
|
||||
msgid "Send mail for this phase"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Late"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr.employee,evaluation_date:0
|
||||
msgid ""
|
||||
"The date of the next appraisal is computed by the appraisal plan's dates "
|
||||
"(first appraisal + periodicity)."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.report,overpass_delay:0
|
||||
msgid "Overpassed Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: help:hr_evaluation.plan,month_next:0
|
||||
msgid ""
|
||||
"The number of month that depicts the delay between each evaluation of this "
|
||||
"plan (after the first one)."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan,month_next:0
|
||||
msgid "Periodicity of Appraisal (months)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr_evaluation.plan.phase,action:0
|
||||
msgid "Self Appraisal Requests"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.evaluation,survey_request_ids:0
|
||||
msgid "Appraisal Forms"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Internal Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr_evaluation.plan.phase,action:0
|
||||
msgid "Final Interview"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan.phase,name:0
|
||||
msgid "Phase"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr_evaluation.plan.phase,action:0
|
||||
msgid "Bottom-Up Appraisal Requests"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: code:addons/hr_evaluation/hr_evaluation.py:244
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot change state, because some appraisal in waiting answer or draft "
|
||||
"state"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Interview Appraisal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:survey.request,is_evaluation:0
|
||||
msgid "Is Appraisal?"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: code:addons/hr_evaluation/hr_evaluation.py:320
|
||||
#, python-format
|
||||
msgid "You cannot start evaluation without Appraisal."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
msgid "Evaluation done in current month"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.interview,user_to_review_id:0
|
||||
msgid "Employee to Interview"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: selection:hr.evaluation.report,month:0
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "Appraisal Plan Phases"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Validate Appraisal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.interview:0
|
||||
#: view:hr_evaluation.evaluation:0
|
||||
msgid "Search Appraisal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.plan.phase,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.plan.phase:0
|
||||
msgid "(user_signature)s: User name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:board.board:0
|
||||
#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_board
|
||||
#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_tree
|
||||
#: model:ir.ui.menu,name:hr_evaluation.menu_open_hr_evaluation_interview_requests
|
||||
msgid "Interview Requests"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.evaluation.report,create_date:0
|
||||
msgid "Create Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: view:hr.evaluation.report:0
|
||||
#: field:hr.evaluation.report,year:0
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.evaluation,note_summary:0
|
||||
msgid "Appraisal Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr.employee,evaluation_date:0
|
||||
msgid "Next Appraisal Date"
|
||||
msgstr ""
|
||||
@@ -25,9 +25,18 @@ access_survey_page_hr_user,survey.page.hr.user,survey.model_survey_page,base.gro
|
||||
access_survey_response_hr_user,survey.response.hr.user,survey.model_survey_response,base.group_hr_user,1,1,1,0
|
||||
access_survey_history_hr_user,survey.history.hr.user,survey.model_survey_history,base.group_hr_user,1,1,1,0
|
||||
access_survey_request_hr_user,survey.request.hr.user,survey.model_survey_request,base.group_hr_user,1,1,1,0
|
||||
access_survey_request_hr_employee,survey.request.hr.employee,survey.model_survey_request,base.group_user,1,1,1,0
|
||||
access_survey_question_column_heading_hr_user,survey.question.column.heading.hr.user,survey.model_survey_question_column_heading,base.group_hr_user,1,0,0,0
|
||||
access_survey_response_line_hr_user,survey.response.line.hr.user,survey.model_survey_response_line,base.group_hr_user,1,1,1,0
|
||||
access_survey_tbl_column_heading_hr_user,survey.tbl.column.heading.hr.user,survey.model_survey_tbl_column_heading,base.group_hr_user,1,1,1,0
|
||||
access_base_calendar_attendee_survey_user,base.calendar.calendar.attendee.survey.user,base_calendar.model_calendar_attendee,base.group_survey_user,1,1,1,0
|
||||
access_base_calendar_attendee_tool_user,base.calendar.calendar.attendee.tool.user,base_calendar.model_calendar_attendee,base.group_tool_user,1,1,1,0
|
||||
access_survey_request_hr_employee,survey.request.hr.employee,survey.model_survey_request,base.group_user,1,1,1,0
|
||||
access_survey_hr_employee,survey.hr.employee,survey.model_survey,base.group_user,1,1,0,0
|
||||
access_survey_page_hr_employee,survey.page.hr.employee,survey.model_survey_page,base.group_user,1,0,0,0
|
||||
access_survey_answer_hr_employee,survey.answer.employee,survey.model_survey_answer,base.group_user,1,0,0,0
|
||||
access_survey_question_hr_employee,survey.question.employee,survey.model_survey_question,base.group_user,1,0,0,0
|
||||
access_survey_response_hr_employee,survey.response.employee,survey.model_survey_response,base.group_user,1,1,1,0
|
||||
access_survey_question_column_heading_hr_employee,survey.question.column.heading.employee,survey.model_survey_question_column_heading,base.group_user,1,0,0,0
|
||||
access_survey_response_line_hr_employee,survey.response.line.employee,survey.model_survey_response_line,base.group_user,1,1,1,0
|
||||
access_survey_response_answer_hr_employee,survey.response.answer.hr.employee,survey.model_survey_response_answer,base.group_user,1,1,1,0
|
||||
|
||||
|
||||
|
@@ -172,7 +172,6 @@
|
||||
<field name="name">Expenses</field>
|
||||
<field name="res_model">hr.expense.expense</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
<field name="search_view_id" ref="view_hr_expense_filter"/>
|
||||
<field name="view_id" ref="view_expenses_tree"/>
|
||||
<field name="help">The OpenERP expenses management module allows you to track the full flow. Every month, the employees record their expenses. At the end of the month, their managers validates the expenses sheets which creates costs on projects/analytic accounts. The accountant validates the proposed entries and the employee can be reimbursed. You can also reinvoice the customer at the end of the flow.</field>
|
||||
|
||||
@@ -356,9 +356,17 @@ resource_calendar_leaves()
|
||||
|
||||
|
||||
class hr_employee(osv.osv):
|
||||
_inherit="hr.employee"
|
||||
_inherit="hr.employee"
|
||||
|
||||
def _set_remaining_days(self, cr, uid, empl_id, name, value, arg, context=None):
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
# don't pass the value of remaining leave if it's 0 at the creation time, otherwise it will trigger the inverse
|
||||
# function _set_remaining_days and the system may not be configured for. Note that we don't have this problem on
|
||||
# the write because the clients only send the fields that have been modified.
|
||||
if 'remaining_leaves' in vals and not vals['remaining_leaves']:
|
||||
del(vals['remaining_leaves'])
|
||||
return super(hr_employee, self).create(cr, uid, vals, context=context)
|
||||
|
||||
def _set_remaining_days(self, cr, uid, empl_id, name, value, arg, context=None):
|
||||
employee = self.browse(cr, uid, empl_id, context=context)
|
||||
diff = value - employee.remaining_leaves
|
||||
type_obj = self.pool.get('hr.holidays.status')
|
||||
@@ -366,7 +374,7 @@ class hr_employee(osv.osv):
|
||||
# Find for holidays status
|
||||
status_ids = type_obj.search(cr, uid, [('limit', '=', False)], context=context)
|
||||
if len(status_ids) != 1 :
|
||||
raise osv.except_osv(_('Warning !'),_("To use this feature, you must have only one leave type without the option 'Allow to Override Limit' set. (%s Found).") % (len(status_ids)))
|
||||
raise osv.except_osv(_('Warning !'),_("The feature behind the field 'Remaining Legal Leaves' can only be used when there is only one leave type with the option 'Allow to Override Limit' unchecked. (%s Found). Otherwise, the update is ambiguous as we cannot decide on which leave type the update has to be done. \nYou may prefer to use the classic menus 'Leave Requests' and 'Allocation Requests' located in 'Human Resources \ Leaves' to manage the leave days of the employees if the configuration does not allow to use this field.") % (len(status_ids)))
|
||||
status_id = status_ids and status_ids[0] or False
|
||||
if not status_id:
|
||||
return False
|
||||
@@ -382,7 +390,7 @@ class hr_employee(osv.osv):
|
||||
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr)
|
||||
return True
|
||||
|
||||
def _get_remaining_days(self, cr, uid, ids, name, args, context=None):
|
||||
def _get_remaining_days(self, cr, uid, ids, name, args, context=None):
|
||||
cr.execute("""SELECT
|
||||
sum(h.number_of_days) as days,
|
||||
h.employee_id
|
||||
@@ -403,7 +411,7 @@ class hr_employee(osv.osv):
|
||||
remaining[employee_id] = 0.0
|
||||
return remaining
|
||||
|
||||
def _get_leave_status(self, cr, uid, ids, name, args, context=None):
|
||||
def _get_leave_status(self, cr, uid, ids, name, args, context=None):
|
||||
holidays_id = self.pool.get('hr.holidays').search(cr, uid,
|
||||
[('employee_id', 'in', ids), ('date_from','<=',time.strftime('%Y-%m-%d %H:%M:%S')),
|
||||
('date_to','>=',time.strftime('%Y-%m-%d %H:%M:%S')),('type','=','remove'),('state','not in',('cancel','refuse'))],
|
||||
@@ -419,7 +427,7 @@ class hr_employee(osv.osv):
|
||||
result[holiday.employee_id.id]['current_leave_id'] = holiday.holiday_status_id.id
|
||||
return result
|
||||
|
||||
_columns = {
|
||||
_columns = {
|
||||
'remaining_leaves': fields.function(_get_remaining_days, string='Remaining Legal Leaves', fnct_inv=_set_remaining_days, type="float", help='Total number of legal leaves allocated to this employee, change this value to create allocation/leave requests.'),
|
||||
'current_leave_state': fields.function(_get_leave_status, multi="leave_status", string="Current Leave Status", type="selection",
|
||||
selection=[('draft', 'New'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'),
|
||||
|
||||
@@ -312,7 +312,7 @@
|
||||
<field name="name">Allocation Requests</field>
|
||||
<field name="res_model">hr.holidays</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="context">{"search_default_my_leaves": 1,'default_type':'add',"search_default_department_id": department_id}</field>
|
||||
<field name="context">{'default_type':'add',"search_default_department_id": department_id}</field>
|
||||
<field name="domain">[('type','=','add')]</field>
|
||||
<field name="view_id" ref="allocation_leave_new"/>
|
||||
<field name="search_view_id" ref="view_hr_holidays_filter"/>
|
||||
@@ -340,7 +340,7 @@
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" eval="view_holiday_simple"/>
|
||||
<field name="context">{'search_default_my_leaves': 1, 'search_default_group_type': 1, 'search_default_validated': 1}</field>
|
||||
<field name="context">{'search_default_group_type': 1, 'search_default_validated': 1}</field>
|
||||
<field name="domain">[('holiday_type','=','employee')]</field>
|
||||
<field name="search_view_id" ref="view_hr_holidays_filter"/>
|
||||
</record>
|
||||
|
||||
@@ -585,14 +585,15 @@ class hr_payslip(osv.osv):
|
||||
#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:
|
||||
#compute the amount of the rule
|
||||
amount, qty = obj_rule.compute_rule(cr, uid, rule.id, localdict, context=context)
|
||||
amount, qty, rate = obj_rule.compute_rule(cr, uid, rule.id, localdict, context=context)
|
||||
#check if there is already a rule computed with that code
|
||||
previous_amount = rule.code in localdict and localdict[rule.code] or 0.0
|
||||
#set/overwrite the amount computed for this rule in the localdict
|
||||
localdict[rule.code] = amount * qty
|
||||
tot_rule = amount * qty * rate / 100.0
|
||||
localdict[rule.code] = tot_rule
|
||||
rules[rule.code] = rule
|
||||
#sum the amount for its salary category
|
||||
localdict = _sum_salary_rule_category(localdict, rule.category_id, (amount * qty) - previous_amount)
|
||||
localdict = _sum_salary_rule_category(localdict, rule.category_id, tot_rule - previous_amount)
|
||||
#create/overwrite the rule in the temporary results
|
||||
result_dict[key] = {
|
||||
'salary_rule_id': rule.id,
|
||||
@@ -616,6 +617,7 @@ class hr_payslip(osv.osv):
|
||||
'amount': amount,
|
||||
'employee_id': contract.employee_id.id,
|
||||
'quantity': qty,
|
||||
'rate': rate,
|
||||
}
|
||||
else:
|
||||
#blacklist this rule and its children
|
||||
@@ -780,7 +782,7 @@ class hr_salary_rule(osv.osv):
|
||||
('code','Python Code'),
|
||||
],'Amount Type', select=True, required=True, help="The computation method for the rule amount."),
|
||||
'amount_fix': fields.float('Fixed Amount', digits_compute=dp.get_precision('Payroll'),),
|
||||
'amount_percentage': fields.float('Percentage (%)', digits_compute=dp.get_precision('Payroll'), help='For example, enter 50.0 to apply a percentage of 50%'),
|
||||
'amount_percentage': fields.float('Percentage (%)', digits_compute=dp.get_precision('Payroll Rate'), help='For example, enter 50.0 to apply a percentage of 50%'),
|
||||
'amount_python_compute':fields.text('Python Code'),
|
||||
'amount_percentage_base':fields.char('Percentage based on',size=1024, required=False, readonly=False, help='result will be affected to a variable'),
|
||||
'child_ids':fields.one2many('hr.salary.rule', 'parent_rule_id', 'Child Salary Rule'),
|
||||
@@ -846,26 +848,26 @@ result = rules.NET > categories.NET * 0.10''',
|
||||
#TODO should add some checks on the type of result (should be float)
|
||||
def compute_rule(self, cr, uid, rule_id, localdict, context=None):
|
||||
"""
|
||||
@param rule_id: id of rule to compute
|
||||
@param localdict: dictionary containing the environement in which to compute the rule
|
||||
@return: returns the result of computation and the quantity as floats
|
||||
:param rule_id: id of rule to compute
|
||||
:param localdict: dictionary containing the environement in which to compute the rule
|
||||
:return: returns a tuple build as the base/amount computed, the quantity and the rate
|
||||
:rtype: (float, float, float)
|
||||
"""
|
||||
rule = self.browse(cr, uid, rule_id, context=context)
|
||||
if rule.amount_select == 'fix':
|
||||
try:
|
||||
return rule.amount_fix, eval(rule.quantity, localdict)
|
||||
return rule.amount_fix, eval(rule.quantity, localdict), 100.0
|
||||
except:
|
||||
raise osv.except_osv(_('Error'), _('Wrong quantity defined for salary rule %s (%s)')% (rule.name, rule.code))
|
||||
elif rule.amount_select == 'percentage':
|
||||
try:
|
||||
amount = rule.amount_percentage * eval(rule.amount_percentage_base, localdict) / 100
|
||||
return amount, eval(rule.quantity, localdict)
|
||||
return eval(rule.amount_percentage_base, localdict), eval(rule.quantity, localdict), rule.amount_percentage
|
||||
except:
|
||||
raise osv.except_osv(_('Error'), _('Wrong percentage base or quantity defined for salary rule %s (%s)')% (rule.name, rule.code))
|
||||
else:
|
||||
try:
|
||||
eval(rule.amount_python_compute, localdict, mode='exec', nocopy=True)
|
||||
return localdict['result'], 'result_qty' in localdict and localdict['result_qty'] or 1.0
|
||||
return localdict['result'], 'result_qty' in localdict and localdict['result_qty'] or 1.0, 'result_rate' in localdict and localdict['result_rate'] or 100.0
|
||||
except:
|
||||
raise osv.except_osv(_('Error'), _('Wrong python code defined for salary rule %s (%s) ')% (rule.name, rule.code))
|
||||
|
||||
@@ -923,7 +925,7 @@ class hr_payslip_line(osv.osv):
|
||||
if not ids: return {}
|
||||
res = {}
|
||||
for line in self.browse(cr, uid, ids, context=context):
|
||||
res[line.id] = float(line.quantity) * line.amount
|
||||
res[line.id] = float(line.quantity) * line.amount * line.rate / 100
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
@@ -931,6 +933,7 @@ class hr_payslip_line(osv.osv):
|
||||
'salary_rule_id':fields.many2one('hr.salary.rule', 'Rule', required=True),
|
||||
'employee_id':fields.many2one('hr.employee', 'Employee', required=True),
|
||||
'contract_id':fields.many2one('hr.contract', 'Contract', required=True, select=True),
|
||||
'rate': fields.float('Rate (%)', digits_compute=dp.get_precision('Payroll Rate')),
|
||||
'amount': fields.float('Amount', digits_compute=dp.get_precision('Payroll')),
|
||||
'quantity': fields.float('Quantity', digits_compute=dp.get_precision('Payroll')),
|
||||
'total': fields.function(_calculate_total, method=True, type='float', string='Total', digits_compute=dp.get_precision('Payroll'),store=True ),
|
||||
@@ -938,6 +941,7 @@ class hr_payslip_line(osv.osv):
|
||||
|
||||
_defaults = {
|
||||
'quantity': 1.0,
|
||||
'rate': 100.0,
|
||||
}
|
||||
|
||||
hr_payslip_line()
|
||||
|
||||
@@ -79,5 +79,11 @@
|
||||
<field name="digits">2</field>
|
||||
</record>
|
||||
|
||||
<record forcecreate="True" id="decimal_payroll_rate" model="decimal.precision">
|
||||
<field name="name">Payroll Rate</field>
|
||||
<field name="digits">4</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -169,7 +169,8 @@
|
||||
<field name="sequence" groups="base.group_extended"/>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="quantity" string="Quantity/Rate"/>
|
||||
<field name="quantity"/>
|
||||
<field name="rate"/>
|
||||
<field name="amount"/>
|
||||
<field name="total"/>
|
||||
<field name="amount_select" invisible="1"/>
|
||||
@@ -319,7 +320,8 @@
|
||||
<field name="code"/>
|
||||
<field name="category_id"/>
|
||||
<field name="sequence" invisible="1"/>
|
||||
<field name="quantity" string="Quantity/Rate"/>
|
||||
<field name="quantity"/>
|
||||
<field name="rate"/>
|
||||
<field name="amount"/>
|
||||
<field name="total"/>
|
||||
</tree>
|
||||
@@ -329,7 +331,8 @@
|
||||
<field name="code" select="1"/>
|
||||
<field name="category_id"/>
|
||||
<field name="sequence" groups="base.group_extended"/>
|
||||
<field name="quantity" string="Quantity/Rate"/>
|
||||
<field name="quantity"/>
|
||||
<field name="rate"/>
|
||||
<field name="amount"/>
|
||||
<field name="total"/>
|
||||
<field name="salary_rule_id" groups="base.group_extended"/>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,140 @@
|
||||
# Arabic translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
|
||||
"PO-Revision-Date: 2012-01-03 12:54+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Arabic <ar@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-01-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14616)\n"
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: field:hr.payslip,move_id:0
|
||||
msgid "Accounting Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: field:hr.salary.rule,account_tax_id:0
|
||||
msgid "Tax Code"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: field:hr.payslip,journal_id:0
|
||||
#: field:hr.payslip.run,journal_id:0
|
||||
msgid "Expense Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: code:addons/hr_payroll_account/hr_payroll_account.py:157
|
||||
#: code:addons/hr_payroll_account/hr_payroll_account.py:173
|
||||
#, python-format
|
||||
msgid "Adjustment Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: field:hr.contract,analytic_account_id:0
|
||||
#: field:hr.salary.rule,analytic_account_id:0
|
||||
msgid "Analytic Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: model:ir.model,name:hr_payroll_account.model_hr_salary_rule
|
||||
msgid "hr.salary.rule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: model:ir.model,name:hr_payroll_account.model_hr_payslip_run
|
||||
msgid "Payslip Batches"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: field:hr.contract,journal_id:0
|
||||
msgid "Salary Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: model:ir.model,name:hr_payroll_account.model_hr_payslip
|
||||
msgid "Pay Slip"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: constraint:hr.payslip:0
|
||||
msgid "Payslip 'Date From' must be before 'Date To'."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: help:hr.payslip,period_id:0
|
||||
msgid "Keep empty to use the period of the validation(Payslip) date."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: code:addons/hr_payroll_account/hr_payroll_account.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The Expense Journal \"%s\" has not properly configured the Debit Account!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: code:addons/hr_payroll_account/hr_payroll_account.py:155
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The Expense Journal \"%s\" has not properly configured the Credit Account!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: field:hr.salary.rule,account_debit:0
|
||||
msgid "Debit Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: code:addons/hr_payroll_account/hr_payroll_account.py:102
|
||||
#, python-format
|
||||
msgid "Payslip of %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: model:ir.model,name:hr_payroll_account.model_hr_contract
|
||||
msgid "Contract"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: constraint:hr.contract:0
|
||||
msgid "Error! contract start-date must be lower then contract end-date."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: field:hr.payslip,period_id:0
|
||||
msgid "Force Period"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: field:hr.salary.rule,account_credit:0
|
||||
msgid "Credit Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: model:ir.model,name:hr_payroll_account.model_hr_payslip_employees
|
||||
msgid "Generate payslips for all selected employees"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: code:addons/hr_payroll_account/hr_payroll_account.py:155
|
||||
#: code:addons/hr_payroll_account/hr_payroll_account.py:171
|
||||
#, python-format
|
||||
msgid "Configuration Error!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_payroll_account
|
||||
#: view:hr.contract:0
|
||||
#: view:hr.salary.rule:0
|
||||
msgid "Accounting"
|
||||
msgstr ""
|
||||
File diff suppressed because it is too large
Load Diff
@@ -89,7 +89,7 @@
|
||||
<field name="res_model">hr.analytic.timesheet</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{"search_default_user_id":uid, "search_default_today":1}</field>
|
||||
<field name="context">{"search_default_today":1}</field>
|
||||
<field name="search_view_id" ref="hr_timesheet_line_search"/>
|
||||
<field name="help">Through this menu you can register and follow your workings hours by project every day.</field>
|
||||
</record>
|
||||
|
||||
@@ -170,16 +170,16 @@ hr_analytic_timesheet()
|
||||
class account_invoice(osv.osv):
|
||||
_inherit = "account.invoice"
|
||||
|
||||
def _get_analytic_lines(self, cr, uid, id):
|
||||
iml = super(account_invoice, self)._get_analytic_lines(cr, uid, id)
|
||||
def _get_analytic_lines(self, cr, uid, id, context=None):
|
||||
iml = super(account_invoice, self)._get_analytic_lines(cr, uid, id, context=context)
|
||||
|
||||
inv = self.browse(cr, uid, [id])[0]
|
||||
inv = self.browse(cr, uid, [id], context=context)[0]
|
||||
if inv.type == 'in_invoice':
|
||||
obj_analytic_account = self.pool.get('account.analytic.account')
|
||||
for il in iml:
|
||||
if il['account_analytic_id']:
|
||||
# *-* browse (or refactor to avoid read inside the loop)
|
||||
to_invoice = obj_analytic_account.read(cr, uid, [il['account_analytic_id']], ['to_invoice'])[0]['to_invoice']
|
||||
to_invoice = obj_analytic_account.read(cr, uid, [il['account_analytic_id']], ['to_invoice'], context=context)[0]['to_invoice']
|
||||
if to_invoice:
|
||||
il['analytic_lines'][0][2]['to_invoice'] = to_invoice[0]
|
||||
return iml
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<field name="state" readonly="1" widget="statusbar"
|
||||
statusbar_visible="open,pending,close" statusbar_colors='{"pending":"red", "template":"blue"}'/>
|
||||
<button name="set_cancel" string="Cancel" type="object" states="open,pending" icon="gtk-cancel"/>
|
||||
<button name="set_open" string="Reactivate Account" type="object" states="pending,cancelled,close,draft" icon="gtk-ok"/>
|
||||
<button name="set_open" string="Re-open project" type="object" states="pending,cancelled,close,draft" icon="gtk-ok"/>
|
||||
<button name="set_pending" string="Pending" type="object" states="open" icon="gtk-media-pause"/>
|
||||
<button name="set_close" string="Close" type="object" states="open,pending" icon="terp-dialog-close"/>
|
||||
</group>
|
||||
|
||||
@@ -120,9 +120,9 @@
|
||||
|
||||
<record id="pst_qc_en" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="ca_en_chart_template_en"/>
|
||||
<field name="name">PST - 8.5%</field>
|
||||
<field name="name">PST - 9.5%</field>
|
||||
<field name="description">PST</field>
|
||||
<field name="amount">0.085000</field>
|
||||
<field name="amount">0.095000</field>
|
||||
<field name="type">percent</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="account_collected_id" ref="chart1182_en"/>
|
||||
|
||||
@@ -120,9 +120,9 @@
|
||||
|
||||
<record id="tvq_fr" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="ca_fr_chart_template_fr"/>
|
||||
<field name="name">TVQ - 8.5%</field>
|
||||
<field name="name">TVQ - 9.5%</field>
|
||||
<field name="description">TVQ</field>
|
||||
<field name="amount">0.085000</field>
|
||||
<field name="amount">0.095000</field>
|
||||
<field name="type">percent</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="account_collected_id" ref="chart1182_fr"/>
|
||||
|
||||
@@ -1,235 +1,235 @@
|
||||
"id","code","name","parent_id:id","user_type:id","type","reconcile"
|
||||
"0","0","Azienda",,"account_type_view","view","FALSE"
|
||||
"1","1","ATTIVO ","0","account_type_view","view","TRUE"
|
||||
"11","11","IMMOBILIZZAZIONI IMMATERIALI ","1","account_type_view","view","TRUE"
|
||||
"1101","1101","costi di impianto ","11","account_type_asset","other","TRUE"
|
||||
"1106","1106","software ","11","account_type_asset","other","TRUE"
|
||||
"1108","1108","avviamento ","11","account_type_asset","other","TRUE"
|
||||
"1111","1111","fondo ammortamento costi di impianto ","11","account_type_asset","other","TRUE"
|
||||
"1116","1116","fondo ammortamento software ","11","account_type_asset","other","TRUE"
|
||||
"1118","1118","fondo ammortamento avviamento ","11","account_type_asset","other","TRUE"
|
||||
"12","12","IMMOBILIZZAZIONI MATERIALI ","1","account_type_view","view","TRUE"
|
||||
"1201","1201","fabbricati ","12","account_type_asset","other","TRUE"
|
||||
"1202","1202","impianti e macchinari ","12","account_type_asset","other","TRUE"
|
||||
"1204","1204","attrezzature commerciali ","12","account_type_asset","other","TRUE"
|
||||
"1205","1205","macchine d'ufficio ","12","account_type_asset","other","TRUE"
|
||||
"1206","1206","arredamento ","12","account_type_asset","other","TRUE"
|
||||
"1207","1207","automezzi ","12","account_type_asset","other","TRUE"
|
||||
"1208","1208","imballaggi durevoli ","12","account_type_asset","other","TRUE"
|
||||
"1211","1211","fondo ammortamento fabbricati ","12","account_type_asset","other","TRUE"
|
||||
"1212","1212","fondo ammortamento impianti e macchinari ","12","account_type_asset","other","TRUE"
|
||||
"1214","1214","fondo ammortamento attrezzature commerciali ","12","account_type_asset","other","TRUE"
|
||||
"1215","1215","fondo ammortamento macchine d'ufficio ","12","account_type_asset","other","TRUE"
|
||||
"1216","1216","fondo ammortamento arredamento ","12","account_type_asset","other","TRUE"
|
||||
"1217","1217","fondo ammortamento automezzi ","12","account_type_asset","other","TRUE"
|
||||
"1218","1218","fondo ammortamento imballaggi durevoli ","12","account_type_asset","other","TRUE"
|
||||
"1220","1220","fornitori immobilizzazioni c/acconti ","12","account_type_asset","other","TRUE"
|
||||
"13","13","IMMOBILIZZAZIONI FINANZIARIE ","1","account_type_view","view","TRUE"
|
||||
"1301","1301","mutui attivi ","13","account_type_asset","other","TRUE"
|
||||
"14","14","RIMANENZE ","1","account_type_view","view","TRUE"
|
||||
"1401","1401","materie di consumo ","14","account_type_asset","other","TRUE"
|
||||
"1404","1404","merci ","14","account_type_asset","other","TRUE"
|
||||
"1410","1410","fornitori c/acconti ","14","account_type_asset","other","TRUE"
|
||||
"15","15","CREDITI COMMERCIALI ","1","account_type_view","view","TRUE"
|
||||
"1501","1501","crediti v/clienti ","15","account_type_receivable","receivable","TRUE"
|
||||
"1502","1502","crediti commerciali diversi ","15","account_type_receivable","other","TRUE"
|
||||
"1503","1503","clienti c/spese anticipate ","15","account_type_receivable","receivable","TRUE"
|
||||
"1505","1505","cambiali attive ","15","account_type_receivable","other","TRUE"
|
||||
"1506","1506","cambiali allo sconto ","15","account_type_receivable","other","TRUE"
|
||||
"1507","1507","cambiali all'incasso ","15","account_type_receivable","other","TRUE"
|
||||
"1509","1509","fatture da emettere ","15","account_type_receivable","other","TRUE"
|
||||
"1510","1510","crediti insoluti ","15","account_type_receivable","other","TRUE"
|
||||
"1511","1511","cambiali insolute ","15","account_type_receivable","other","TRUE"
|
||||
"1531","1531","crediti da liquidare ","15","account_type_receivable","other","TRUE"
|
||||
"1540","1540","fondo svalutazione crediti ","15","account_type_receivable","other","TRUE"
|
||||
"1541","1541","fondo rischi su crediti ","15","account_type_receivable","other","TRUE"
|
||||
"16","16","CREDITI DIVERSI ","1","account_type_view","view","TRUE"
|
||||
"1601","1601","IVA n/credito ","16","account_type_tax","other","TRUE"
|
||||
"1602","1602","IVA c/acconto ","16","account_type_tax","other","TRUE"
|
||||
"1605","1605","crediti per IVA ","16","account_type_tax","other","TRUE"
|
||||
"1607","1607","imposte c/acconto ","16","account_type_tax","other","TRUE"
|
||||
"1608","1608","crediti per imposte ","16","account_type_tax","other","TRUE"
|
||||
"1609","1609","crediti per ritenute subite ","16","account_type_asset","other","TRUE"
|
||||
"1610","1610","crediti per cauzioni ","16","account_type_asset","other","TRUE"
|
||||
"1620","1620","personale c/acconti ","16","account_type_asset","other","TRUE"
|
||||
"1630","1630","crediti v/istituti previdenziali ","16","account_type_asset","other","TRUE"
|
||||
"1640","1640","debitori diversi ","16","account_type_receivable","receivable","TRUE"
|
||||
"18","18","DISPONIBILITÀ LIQUIDE ","1","account_type_view","view","TRUE"
|
||||
"1801","1801","banche c/c ","18","account_type_bank","liquidity","TRUE"
|
||||
"1810","1810","c/c postali ","18","account_type_cash","liquidity","TRUE"
|
||||
"1820","1820","denaro in cassa ","18","account_type_cash","liquidity","TRUE"
|
||||
"1821","1821","assegni ","18","account_type_cash","liquidity","TRUE"
|
||||
"1822","1822","valori bollati ","18","account_type_cash","liquidity","TRUE"
|
||||
"19","19","RATEI E RISCONTI ATTIVI ","1","account_type_view","view","TRUE"
|
||||
"1901","1901","ratei attivi ","19","account_type_asset","other","TRUE"
|
||||
"1902","1902","risconti attivi ","19","account_type_asset","other","TRUE"
|
||||
"2","2","PASSIVO ","0","account_type_view","view","TRUE"
|
||||
"20","20","PATRIMONIO NETTO ","2","account_type_view","view","TRUE"
|
||||
"2101","2101","patrimonio netto ","20","account_type_asset","other","TRUE"
|
||||
"2102","2102","utile d'esercizio ","20","account_type_asset","other","TRUE"
|
||||
"2103","2103","perdita d'esercizio ","20","account_type_asset","other","TRUE"
|
||||
"2104","2104","prelevamenti extra gestione ","20","account_type_asset","other","TRUE"
|
||||
"2105","2105","titolare c/ritenute subite ","20","account_type_asset","other","TRUE"
|
||||
"22","22","FONDI PER RISCHI E ONERI ","2","account_type_view","view","TRUE"
|
||||
"2201","2201","fondo per imposte ","22","account_type_asset","other","TRUE"
|
||||
"2204","2204","fondo responsabilità civile ","22","account_type_asset","other","TRUE"
|
||||
"2205","2205","fondo spese future ","22","account_type_asset","other","TRUE"
|
||||
"2211","2211","fondo manutenzioni programmate ","22","account_type_asset","other","TRUE"
|
||||
"23","23","TRATTAMENTO FINE RAPPORTO DI LAVORO ","2","account_type_view","view","TRUE"
|
||||
"2301","2301","debiti per TFRL ","23","account_type_asset","other","TRUE"
|
||||
"24","24","DEBITI FINANZIARI ","2","account_type_view","view","TRUE"
|
||||
"2410","2410","mutui passivi ","24","account_type_asset","other","TRUE"
|
||||
"2411","2411","banche c/sovvenzioni ","24","account_type_asset","other","TRUE"
|
||||
"2420","2420","banche c/c passivi ","24","account_type_asset","other","TRUE"
|
||||
"2421","2421","banche c/RIBA all'incasso ","24","account_type_asset","other","TRUE"
|
||||
"2422","2422","banche c/cambiali all'incasso ","24","account_type_asset","other","TRUE"
|
||||
"2423","2423","banche c/anticipi su fatture ","24","account_type_asset","other","TRUE"
|
||||
"2440","2440","debiti v/altri finanziatori ","24","account_type_asset","other","TRUE"
|
||||
"25","25","DEBITI COMMERCIALI ","2","account_type_view","view","TRUE"
|
||||
"2501","2501","debiti v/fornitori ","25","account_type_payable","payable","TRUE"
|
||||
"2503","2503","cambiali passive ","25","account_type_asset","other","TRUE"
|
||||
"2520","2520","fatture da ricevere ","25","account_type_asset","other","TRUE"
|
||||
"2521","2521","debiti da liquidare ","25","account_type_asset","other","TRUE"
|
||||
"2530","2530","clienti c/acconti ","25","account_type_payable","payable","TRUE"
|
||||
"26","26","DEBITI DIVERSI ","2","account_type_view","view","TRUE"
|
||||
"2601","2601","IVA n/debito ","26","account_type_tax","other","TRUE"
|
||||
"2602","2602","debiti per ritenute da versare ","26","account_type_tax","other","TRUE"
|
||||
"2605","2605","erario c/IVA ","26","account_type_tax","other","TRUE"
|
||||
"2606","2606","debiti per imposte ","26","account_type_tax","other","TRUE"
|
||||
"2619","2619","debiti per cauzioni ","26","account_type_asset","other","TRUE"
|
||||
"2620","2620","personale c/retribuzioni ","26","account_type_asset","other","TRUE"
|
||||
"2621","2621","personale c/liquidazioni ","26","account_type_asset","other","TRUE"
|
||||
"2622","2622","clienti c/cessione ","26","account_type_asset","other","TRUE"
|
||||
"2630","2630","debiti v/istituti previdenziali ","26","account_type_asset","other","TRUE"
|
||||
"2640","2640","creditori diversi ","26","account_type_payable","payable","TRUE"
|
||||
"27","27","RATEI E RISCONTI PASSIVI ","2","account_type_view","view","TRUE"
|
||||
"2701","2701","ratei passivi ","27","account_type_asset","other","TRUE"
|
||||
"2702","2702","risconti passivi ","27","account_type_asset","other","TRUE"
|
||||
"28","28","CONTI TRANSITORI E DIVERSI ","2","account_type_view","view","TRUE"
|
||||
"2801","2801","bilancio di apertura ","28","account_type_asset","other","TRUE"
|
||||
"2802","2802","bilancio di chiusura ","28","account_type_asset","other","TRUE"
|
||||
"2810","2810","IVA c/liquidazioni ","28","account_type_asset","other","TRUE"
|
||||
"2811","2811","istituti previdenziali ","28","account_type_asset","other","TRUE"
|
||||
"2820","2820","banca ... c/c ","28","account_type_asset","other","TRUE"
|
||||
"2821","2821","banca ... c/c ","28","account_type_asset","other","TRUE"
|
||||
"2822","2822","banca ... c/c ","28","account_type_asset","other","TRUE"
|
||||
"29","29","CONTI DEI SISTEMI SUPPLEMENTARI ","2","account_type_view","view","TRUE"
|
||||
"2901","2901","beni di terzi ","29","account_type_asset","other","TRUE"
|
||||
"2902","2902","depositanti beni ","29","account_type_asset","other","TRUE"
|
||||
"2911","2911","merci da ricevere ","29","account_type_asset","other","TRUE"
|
||||
"2912","2912","fornitori c/impegni ","29","account_type_asset","other","TRUE"
|
||||
"2913","2913","impegni per beni in leasing ","29","account_type_asset","other","TRUE"
|
||||
"2914","2914","creditori c/leasing ","29","account_type_asset","other","TRUE"
|
||||
"2916","2916","clienti c/impegni ","29","account_type_asset","other","TRUE"
|
||||
"2917","2917","merci da consegnare ","29","account_type_asset","other","TRUE"
|
||||
"2921","2921","rischi per effetti scontati ","29","account_type_asset","other","TRUE"
|
||||
"2922","2922","banche c/effetti scontati ","29","account_type_asset","other","TRUE"
|
||||
"2926","2926","rischi per fideiussioni ","29","account_type_asset","other","TRUE"
|
||||
"2927","2927","creditori per fideiussioni ","29","account_type_asset","other","TRUE"
|
||||
"2931","2931","rischi per avalli ","29","account_type_asset","other","TRUE"
|
||||
"2932","2932","creditori per avalli ","29","account_type_asset","other","TRUE"
|
||||
"3","3","VALORE DELLA PRODUZIONE ","0","account_type_view","view","TRUE"
|
||||
"31","31","VENDITE E PRESTAZIONI ","3","account_type_view","view","TRUE"
|
||||
"3101","3101","merci c/vendite ","31","account_type_income","other","TRUE"
|
||||
"3103","3103","rimborsi spese di vendita ","31","account_type_income","other","TRUE"
|
||||
"3110","3110","resi su vendite ","31","account_type_income","other","TRUE"
|
||||
"3111","3111","ribassi e abbuoni passivi ","31","account_type_income","other","TRUE"
|
||||
"3112","3112","premi su vendite ","31","account_type_income","other","TRUE"
|
||||
"32","32","RICAVI E PROVENTI DIVERSI ","3","account_type_view","view","TRUE"
|
||||
"3201","3201","fitti attivi ","32","account_type_income","other","TRUE"
|
||||
"3202","3202","proventi vari ","32","account_type_income","other","TRUE"
|
||||
"3210","3210","arrotondamenti attivi ","32","account_type_income","other","TRUE"
|
||||
"3220","3220","plusvalenze ordinarie diverse ","32","account_type_income","other","TRUE"
|
||||
"3230","3230","sopravvenienze attive ordinarie diverse ","32","account_type_income","other","TRUE"
|
||||
"3240","3240","insussistenze attive ordinarie diverse ","32","account_type_income","other","TRUE"
|
||||
"4","4","COSTI DELLA PRODUZIONE ","0","account_type_view","view","TRUE"
|
||||
"41","41","COSTO DEL VENDUTO ","4","account_type_view","view","TRUE"
|
||||
"4101","4101","merci c/acquisti ","41","account_type_expense","other","TRUE"
|
||||
"4102","4102","materie di consumo c/acquisti ","41","account_type_expense","other","TRUE"
|
||||
"4105","4105","merci c/apporti ","41","account_type_expense","other","TRUE"
|
||||
"4110","4110","resi su acquisti ","41","account_type_expense","other","TRUE"
|
||||
"4111","4111","ribassi e abbuoni attivi ","41","account_type_expense","other","TRUE"
|
||||
"4112","4112","premi su acquisti ","41","account_type_expense","other","TRUE"
|
||||
"4121","4121","merci c/esistenze iniziali ","41","account_type_expense","other","TRUE"
|
||||
"4122","4122","materie di consumo c/esistenze iniziali ","41","account_type_expense","other","TRUE"
|
||||
"4131","4131","merci c/rimanenze finali ","41","account_type_expense","other","TRUE"
|
||||
"4132","4132","materie di consumo c/rimanenze finali ","41","account_type_expense","other","TRUE"
|
||||
"42","42","COSTI PER SERVIZI ","4","account_type_view","view","TRUE"
|
||||
"4201","4201","costi di trasporto ","42","account_type_expense","other","TRUE"
|
||||
"4202","4202","costi per energia ","42","account_type_expense","other","TRUE"
|
||||
"4203","4203","costi di pubblicità ","42","account_type_expense","other","TRUE"
|
||||
"4204","4204","costi di consulenze ","42","account_type_expense","other","TRUE"
|
||||
"4205","4205","costi postali ","42","account_type_expense","other","TRUE"
|
||||
"4206","4206","costi telefonici ","42","account_type_expense","other","TRUE"
|
||||
"4207","4207","costi di assicurazione ","42","account_type_expense","other","TRUE"
|
||||
"4208","4208","costi di vigilanza ","42","account_type_expense","other","TRUE"
|
||||
"4209","4209","costi per i locali ","42","account_type_expense","other","TRUE"
|
||||
"4210","4210","costi di esercizio automezzi ","42","account_type_expense","other","TRUE"
|
||||
"4211","4211","costi di manutenzione e riparazione ","42","account_type_expense","other","TRUE"
|
||||
"4212","4212","provvigioni passive ","42","account_type_expense","other","TRUE"
|
||||
"4213","4213","spese di incasso ","42","account_type_expense","other","TRUE"
|
||||
"43","43","COSTI PER GODIMENTO BENI DI TERZI ","4","account_type_view","view","TRUE"
|
||||
"4301","4301","fitti passivi ","43","account_type_expense","other","TRUE"
|
||||
"4302","4302","canoni di leasing ","43","account_type_expense","other","TRUE"
|
||||
"44","44","COSTI PER IL PERSONALE ","4","account_type_view","view","TRUE"
|
||||
"4401","4401","salari e stipendi ","44","account_type_expense","other","TRUE"
|
||||
"4402","4402","oneri sociali ","44","account_type_expense","other","TRUE"
|
||||
"4403","4403","TFRL ","44","account_type_expense","other","TRUE"
|
||||
"4404","4404","altri costi per il personale ","44","account_type_expense","other","TRUE"
|
||||
"45","45","AMMORTAMENTI IMMOBILIZZAZIONI IMMATERIALI ","4","account_type_view","view","TRUE"
|
||||
"4501","4501","ammortamento costi di impianto ","45","account_type_p_l","other","TRUE"
|
||||
"4506","4506","ammortamento software ","45","account_type_p_l","other","TRUE"
|
||||
"4508","4508","ammortamento avviamento ","45","account_type_p_l","other","TRUE"
|
||||
"46","46","AMMORTAMENTI IMMOBILIZZAZIONI MATERIALI ","4","account_type_view","view","TRUE"
|
||||
"4601","4601","ammortamento fabbricati ","46","account_type_p_l","other","TRUE"
|
||||
"4602","4602","ammortamento impianti e macchinari ","46","account_type_p_l","other","TRUE"
|
||||
"4604","4604","ammortamento attrezzature commerciali ","46","account_type_p_l","other","TRUE"
|
||||
"4605","4605","ammortamento macchine d'ufficio ","46","account_type_p_l","other","TRUE"
|
||||
"4606","4606","ammortamento arredamento ","46","account_type_p_l","other","TRUE"
|
||||
"4607","4607","ammortamento automezzi ","46","account_type_p_l","other","TRUE"
|
||||
"4608","4608","ammortamento imballaggi durevoli ","46","account_type_p_l","other","TRUE"
|
||||
"47","47","SVALUTAZIONI ","4","account_type_view","view","TRUE"
|
||||
"4701","4701","svalutazioni immobilizzazioni immateriali ","47","account_type_p_l","other","TRUE"
|
||||
"4702","4702","svalutazioni immobilizzazioni materiali ","47","account_type_p_l","other","TRUE"
|
||||
"4706","4706","svalutazione crediti ","47","account_type_p_l","other","TRUE"
|
||||
"48","48","ACCANTONAMENTI ","4","account_type_view","view","TRUE"
|
||||
"481","481","ACCANTONAMENTI PER RISCHI ","48","account_type_view","view","TRUE"
|
||||
"4814","4814","accantonamento per responsabilità civile ","481","account_type_p_l","other","TRUE"
|
||||
"482","482","ALTRI ACCANTONAMENTI ","48","account_type_view","view","TRUE"
|
||||
"4821","4821","accantonamento per spese future ","482","account_type_p_l","other","TRUE"
|
||||
"4823","4823","accantonamento per manutenzioni programmate ","482","account_type_p_l","other","TRUE"
|
||||
"49","49","ONERI DIVERSI ","4","account_type_view","view","TRUE"
|
||||
"4901","4901","oneri fiscali diversi ","49","account_type_p_l","other","TRUE"
|
||||
"4903","4903","oneri vari ","49","account_type_p_l","other","TRUE"
|
||||
"4905","4905","perdite su crediti ","49","account_type_p_l","other","TRUE"
|
||||
"4910","4910","arrotondamenti passivi ","49","account_type_p_l","other","TRUE"
|
||||
"4920","4920","minusvalenze ordinarie diverse ","49","account_type_p_l","other","TRUE"
|
||||
"4930","4930","sopravvenienze passive ordinarie diverse ","49","account_type_p_l","other","TRUE"
|
||||
"4940","4940","insussistenze passive ordinarie diverse ","49","account_type_p_l","other","TRUE"
|
||||
"5","5","PROVENTI E ONERI FINANZIARI ","0","account_type_view","view","TRUE"
|
||||
"51","51","PROVENTI FINANZIARI ","5","account_type_view","view","TRUE"
|
||||
"5110","5110","interessi attivi v/clienti ","51","account_type_p_l","other","TRUE"
|
||||
"5115","5115","interessi attivi bancari ","51","account_type_p_l","other","TRUE"
|
||||
"5116","5116","interessi attivi postali ","51","account_type_p_l","other","TRUE"
|
||||
"5140","5140","proventi finanziari diversi ","51","account_type_p_l","other","TRUE"
|
||||
"52","52","ONERI FINANZIARI ","5","account_type_view","view","TRUE"
|
||||
"5201","5201","interessi passivi v/fornitori ","52","account_type_p_l","other","TRUE"
|
||||
"5202","5202","interessi passivi bancari ","52","account_type_p_l","other","TRUE"
|
||||
"5203","5203","sconti passivi bancari ","52","account_type_p_l","other","TRUE"
|
||||
"5210","5210","interessi passivi su mutui ","52","account_type_p_l","other","TRUE"
|
||||
"5240","5240","oneri finanziari diversi ","52","account_type_p_l","other","TRUE"
|
||||
"7","7","PROVENTI E ONERI STRAORDINARI ","0","account_type_view","view","TRUE"
|
||||
"71","71","PROVENTI STRAORDINARI ","7","account_type_view","view","TRUE"
|
||||
"7101","7101","plusvalenze straordinarie ","71","account_type_p_l","other","TRUE"
|
||||
"7102","7102","sopravvenienze attive straordinarie ","71","account_type_p_l","other","TRUE"
|
||||
"7103","7103","insussistenze attive straordinarie ","71","account_type_p_l","other","TRUE"
|
||||
"72","72","ONERI STRAORDINARI ","7","account_type_view","view","TRUE"
|
||||
"7201","7201","minusvalenze straordinarie ","72","account_type_p_l","other","TRUE"
|
||||
"7202","7202","sopravvenienze passive straordinarie ","72","account_type_p_l","other","TRUE"
|
||||
"7203","7203","insussistenze passive straordinarie ","72","account_type_p_l","other","TRUE"
|
||||
"7204","7204","imposte esercizi precedenti ","72","account_type_p_l","other","TRUE"
|
||||
"8","8","IMPOSTE DELL'ESERCIZIO ","0","account_type_view","view","TRUE"
|
||||
"8101","8101","imposte dell'esercizio ","8","account_type_p_l","other","TRUE"
|
||||
"9","9","CONTI DI RISULTATO ","0","account_type_view","view","TRUE"
|
||||
"9101","9101","conto di risultato economico ","9","account_type_p_l","other","TRUE"
|
||||
"9102","9102","stato patrimoniale","9","account_type_p_l","other","TRUE"
|
||||
id,code,name,parent_id:id,user_type:id,type,reconcile
|
||||
0,0,Azienda,,account_type_view,view,FALSE
|
||||
1,1,ATTIVO ,0,account_type_view,view,TRUE
|
||||
11,11,IMMOBILIZZAZIONI IMMATERIALI ,1,account_type_view,view,TRUE
|
||||
1101,1101,costi di impianto ,11,account_type_asset,other,TRUE
|
||||
1106,1106,software ,11,account_type_asset,other,TRUE
|
||||
1108,1108,avviamento ,11,account_type_asset,other,TRUE
|
||||
1111,1111,fondo ammortamento costi di impianto ,11,account_type_asset,other,TRUE
|
||||
1116,1116,fondo ammortamento software ,11,account_type_asset,other,TRUE
|
||||
1118,1118,fondo ammortamento avviamento ,11,account_type_asset,other,TRUE
|
||||
12,12,IMMOBILIZZAZIONI MATERIALI ,1,account_type_view,view,TRUE
|
||||
1201,1201,fabbricati ,12,account_type_asset,other,TRUE
|
||||
1202,1202,impianti e macchinari ,12,account_type_asset,other,TRUE
|
||||
1204,1204,attrezzature commerciali ,12,account_type_asset,other,TRUE
|
||||
1205,1205,macchine d'ufficio ,12,account_type_asset,other,TRUE
|
||||
1206,1206,arredamento ,12,account_type_asset,other,TRUE
|
||||
1207,1207,automezzi ,12,account_type_asset,other,TRUE
|
||||
1208,1208,imballaggi durevoli ,12,account_type_asset,other,TRUE
|
||||
1211,1211,fondo ammortamento fabbricati ,12,account_type_asset,other,TRUE
|
||||
1212,1212,fondo ammortamento impianti e macchinari ,12,account_type_asset,other,TRUE
|
||||
1214,1214,fondo ammortamento attrezzature commerciali ,12,account_type_asset,other,TRUE
|
||||
1215,1215,fondo ammortamento macchine d'ufficio ,12,account_type_asset,other,TRUE
|
||||
1216,1216,fondo ammortamento arredamento ,12,account_type_asset,other,TRUE
|
||||
1217,1217,fondo ammortamento automezzi ,12,account_type_asset,other,TRUE
|
||||
1218,1218,fondo ammortamento imballaggi durevoli ,12,account_type_asset,other,TRUE
|
||||
1220,1220,fornitori immobilizzazioni c/acconti ,12,account_type_asset,other,TRUE
|
||||
13,13,IMMOBILIZZAZIONI FINANZIARIE ,1,account_type_view,view,TRUE
|
||||
1301,1301,mutui attivi ,13,account_type_asset,other,TRUE
|
||||
14,14,RIMANENZE ,1,account_type_view,view,TRUE
|
||||
1401,1401,materie di consumo ,14,account_type_asset,other,TRUE
|
||||
1404,1404,merci ,14,account_type_asset,other,TRUE
|
||||
1410,1410,fornitori c/acconti ,14,account_type_asset,other,TRUE
|
||||
15,15,CREDITI COMMERCIALI ,1,account_type_view,view,TRUE
|
||||
1501,1501,crediti v/clienti ,15,account_type_receivable,receivable,TRUE
|
||||
1502,1502,crediti commerciali diversi ,15,account_type_receivable,other,TRUE
|
||||
1503,1503,clienti c/spese anticipate ,15,account_type_receivable,receivable,TRUE
|
||||
1505,1505,cambiali attive ,15,account_type_receivable,other,TRUE
|
||||
1506,1506,cambiali allo sconto ,15,account_type_receivable,other,TRUE
|
||||
1507,1507,cambiali all'incasso ,15,account_type_receivable,other,TRUE
|
||||
1509,1509,fatture da emettere ,15,account_type_receivable,other,TRUE
|
||||
1510,1510,crediti insoluti ,15,account_type_receivable,other,TRUE
|
||||
1511,1511,cambiali insolute ,15,account_type_receivable,other,TRUE
|
||||
1531,1531,crediti da liquidare ,15,account_type_receivable,other,TRUE
|
||||
1540,1540,fondo svalutazione crediti ,15,account_type_receivable,other,TRUE
|
||||
1541,1541,fondo rischi su crediti ,15,account_type_receivable,other,TRUE
|
||||
16,16,CREDITI DIVERSI ,1,account_type_view,view,TRUE
|
||||
1601,1601,IVA n/credito ,16,account_type_tax,other,TRUE
|
||||
1602,1602,IVA c/acconto ,16,account_type_tax,other,TRUE
|
||||
1605,1605,crediti per IVA ,16,account_type_tax,other,TRUE
|
||||
1607,1607,imposte c/acconto ,16,account_type_tax,other,TRUE
|
||||
1608,1608,crediti per imposte ,16,account_type_tax,other,TRUE
|
||||
1609,1609,crediti per ritenute subite ,16,account_type_asset,other,TRUE
|
||||
1610,1610,crediti per cauzioni ,16,account_type_asset,other,TRUE
|
||||
1620,1620,personale c/acconti ,16,account_type_asset,other,TRUE
|
||||
1630,1630,crediti v/istituti previdenziali ,16,account_type_asset,other,TRUE
|
||||
1640,1640,debitori diversi ,16,account_type_receivable,receivable,TRUE
|
||||
18,18,DISPONIBILITÀ LIQUIDE ,1,account_type_view,view,TRUE
|
||||
1801,1801,banche c/c ,18,account_type_bank,liquidity,TRUE
|
||||
1810,1810,c/c postali ,18,account_type_cash,liquidity,TRUE
|
||||
1820,1820,denaro in cassa ,18,account_type_cash,liquidity,TRUE
|
||||
1821,1821,assegni ,18,account_type_cash,liquidity,TRUE
|
||||
1822,1822,valori bollati ,18,account_type_cash,liquidity,TRUE
|
||||
19,19,RATEI E RISCONTI ATTIVI ,1,account_type_view,view,TRUE
|
||||
1901,1901,ratei attivi ,19,account_type_asset,other,TRUE
|
||||
1902,1902,risconti attivi ,19,account_type_asset,other,TRUE
|
||||
2,2,PASSIVO ,0,account_type_view,view,TRUE
|
||||
20,20,PATRIMONIO NETTO ,2,account_type_view,view,TRUE
|
||||
2101,2101,patrimonio netto ,20,account_type_asset,other,TRUE
|
||||
2102,2102,utile d'esercizio ,20,account_type_asset,other,TRUE
|
||||
2103,2103,perdita d'esercizio ,20,account_type_asset,other,TRUE
|
||||
2104,2104,prelevamenti extra gestione ,20,account_type_asset,other,TRUE
|
||||
2105,2105,titolare c/ritenute subite ,20,account_type_asset,other,TRUE
|
||||
22,22,FONDI PER RISCHI E ONERI ,2,account_type_view,view,TRUE
|
||||
2201,2201,fondo per imposte ,22,account_type_asset,other,TRUE
|
||||
2204,2204,fondo responsabilità civile ,22,account_type_asset,other,TRUE
|
||||
2205,2205,fondo spese future ,22,account_type_asset,other,TRUE
|
||||
2211,2211,fondo manutenzioni programmate ,22,account_type_asset,other,TRUE
|
||||
23,23,TRATTAMENTO FINE RAPPORTO DI LAVORO ,2,account_type_view,view,TRUE
|
||||
2301,2301,debiti per TFRL ,23,account_type_asset,other,TRUE
|
||||
24,24,DEBITI FINANZIARI ,2,account_type_view,view,TRUE
|
||||
2410,2410,mutui passivi ,24,account_type_asset,other,TRUE
|
||||
2411,2411,banche c/sovvenzioni ,24,account_type_asset,other,TRUE
|
||||
2420,2420,banche c/c passivi ,24,account_type_asset,other,TRUE
|
||||
2421,2421,banche c/RIBA all'incasso ,24,account_type_asset,other,TRUE
|
||||
2422,2422,banche c/cambiali all'incasso ,24,account_type_asset,other,TRUE
|
||||
2423,2423,banche c/anticipi su fatture ,24,account_type_asset,other,TRUE
|
||||
2440,2440,debiti v/altri finanziatori ,24,account_type_asset,other,TRUE
|
||||
25,25,DEBITI COMMERCIALI ,2,account_type_view,view,TRUE
|
||||
2501,2501,debiti v/fornitori ,25,account_type_payable,payable,TRUE
|
||||
2503,2503,cambiali passive ,25,account_type_asset,other,TRUE
|
||||
2520,2520,fatture da ricevere ,25,account_type_asset,other,TRUE
|
||||
2521,2521,debiti da liquidare ,25,account_type_asset,other,TRUE
|
||||
2530,2530,clienti c/acconti ,25,account_type_payable,payable,TRUE
|
||||
26,26,DEBITI DIVERSI ,2,account_type_view,view,TRUE
|
||||
2601,2601,IVA n/debito ,26,account_type_tax,other,TRUE
|
||||
2602,2602,debiti per ritenute da versare ,26,account_type_tax,other,TRUE
|
||||
2605,2605,erario c/IVA ,26,account_type_payable,payable,TRUE
|
||||
2606,2606,debiti per imposte ,26,account_type_tax,other,TRUE
|
||||
2619,2619,debiti per cauzioni ,26,account_type_asset,other,TRUE
|
||||
2620,2620,personale c/retribuzioni ,26,account_type_asset,other,TRUE
|
||||
2621,2621,personale c/liquidazioni ,26,account_type_asset,other,TRUE
|
||||
2622,2622,clienti c/cessione ,26,account_type_asset,other,TRUE
|
||||
2630,2630,debiti v/istituti previdenziali ,26,account_type_asset,other,TRUE
|
||||
2640,2640,creditori diversi ,26,account_type_payable,payable,TRUE
|
||||
27,27,RATEI E RISCONTI PASSIVI ,2,account_type_view,view,TRUE
|
||||
2701,2701,ratei passivi ,27,account_type_asset,other,TRUE
|
||||
2702,2702,risconti passivi ,27,account_type_asset,other,TRUE
|
||||
28,28,CONTI TRANSITORI E DIVERSI ,2,account_type_view,view,TRUE
|
||||
2801,2801,bilancio di apertura ,28,account_type_asset,other,TRUE
|
||||
2802,2802,bilancio di chiusura ,28,account_type_asset,other,TRUE
|
||||
2810,2810,IVA c/liquidazioni ,28,account_type_asset,other,TRUE
|
||||
2811,2811,istituti previdenziali ,28,account_type_asset,other,TRUE
|
||||
2820,2820,banca ... c/c ,28,account_type_asset,other,TRUE
|
||||
2821,2821,banca ... c/c ,28,account_type_asset,other,TRUE
|
||||
2822,2822,banca ... c/c ,28,account_type_asset,other,TRUE
|
||||
29,29,CONTI DEI SISTEMI SUPPLEMENTARI ,2,account_type_view,view,TRUE
|
||||
2901,2901,beni di terzi ,29,account_type_asset,other,TRUE
|
||||
2902,2902,depositanti beni ,29,account_type_asset,other,TRUE
|
||||
2911,2911,merci da ricevere ,29,account_type_asset,other,TRUE
|
||||
2912,2912,fornitori c/impegni ,29,account_type_asset,other,TRUE
|
||||
2913,2913,impegni per beni in leasing ,29,account_type_asset,other,TRUE
|
||||
2914,2914,creditori c/leasing ,29,account_type_asset,other,TRUE
|
||||
2916,2916,clienti c/impegni ,29,account_type_asset,other,TRUE
|
||||
2917,2917,merci da consegnare ,29,account_type_asset,other,TRUE
|
||||
2921,2921,rischi per effetti scontati ,29,account_type_asset,other,TRUE
|
||||
2922,2922,banche c/effetti scontati ,29,account_type_asset,other,TRUE
|
||||
2926,2926,rischi per fideiussioni ,29,account_type_asset,other,TRUE
|
||||
2927,2927,creditori per fideiussioni ,29,account_type_asset,other,TRUE
|
||||
2931,2931,rischi per avalli ,29,account_type_asset,other,TRUE
|
||||
2932,2932,creditori per avalli ,29,account_type_asset,other,TRUE
|
||||
3,3,VALORE DELLA PRODUZIONE ,0,account_type_view,view,TRUE
|
||||
31,31,VENDITE E PRESTAZIONI ,3,account_type_view,view,TRUE
|
||||
3101,3101,merci c/vendite ,31,account_type_income,other,TRUE
|
||||
3103,3103,rimborsi spese di vendita ,31,account_type_income,other,TRUE
|
||||
3110,3110,resi su vendite ,31,account_type_income,other,TRUE
|
||||
3111,3111,ribassi e abbuoni passivi ,31,account_type_income,other,TRUE
|
||||
3112,3112,premi su vendite ,31,account_type_income,other,TRUE
|
||||
32,32,RICAVI E PROVENTI DIVERSI ,3,account_type_view,view,TRUE
|
||||
3201,3201,fitti attivi ,32,account_type_income,other,TRUE
|
||||
3202,3202,proventi vari ,32,account_type_income,other,TRUE
|
||||
3210,3210,arrotondamenti attivi ,32,account_type_income,other,TRUE
|
||||
3220,3220,plusvalenze ordinarie diverse ,32,account_type_income,other,TRUE
|
||||
3230,3230,sopravvenienze attive ordinarie diverse ,32,account_type_income,other,TRUE
|
||||
3240,3240,insussistenze attive ordinarie diverse ,32,account_type_income,other,TRUE
|
||||
4,4,COSTI DELLA PRODUZIONE ,0,account_type_view,view,TRUE
|
||||
41,41,COSTO DEL VENDUTO ,4,account_type_view,view,TRUE
|
||||
4101,4101,merci c/acquisti ,41,account_type_expense,other,TRUE
|
||||
4102,4102,materie di consumo c/acquisti ,41,account_type_expense,other,TRUE
|
||||
4105,4105,merci c/apporti ,41,account_type_expense,other,TRUE
|
||||
4110,4110,resi su acquisti ,41,account_type_expense,other,TRUE
|
||||
4111,4111,ribassi e abbuoni attivi ,41,account_type_expense,other,TRUE
|
||||
4112,4112,premi su acquisti ,41,account_type_expense,other,TRUE
|
||||
4121,4121,merci c/esistenze iniziali ,41,account_type_expense,other,TRUE
|
||||
4122,4122,materie di consumo c/esistenze iniziali ,41,account_type_expense,other,TRUE
|
||||
4131,4131,merci c/rimanenze finali ,41,account_type_expense,other,TRUE
|
||||
4132,4132,materie di consumo c/rimanenze finali ,41,account_type_expense,other,TRUE
|
||||
42,42,COSTI PER SERVIZI ,4,account_type_view,view,TRUE
|
||||
4201,4201,costi di trasporto ,42,account_type_expense,other,TRUE
|
||||
4202,4202,costi per energia ,42,account_type_expense,other,TRUE
|
||||
4203,4203,costi di pubblicità ,42,account_type_expense,other,TRUE
|
||||
4204,4204,costi di consulenze ,42,account_type_expense,other,TRUE
|
||||
4205,4205,costi postali ,42,account_type_expense,other,TRUE
|
||||
4206,4206,costi telefonici ,42,account_type_expense,other,TRUE
|
||||
4207,4207,costi di assicurazione ,42,account_type_expense,other,TRUE
|
||||
4208,4208,costi di vigilanza ,42,account_type_expense,other,TRUE
|
||||
4209,4209,costi per i locali ,42,account_type_expense,other,TRUE
|
||||
4210,4210,costi di esercizio automezzi ,42,account_type_expense,other,TRUE
|
||||
4211,4211,costi di manutenzione e riparazione ,42,account_type_expense,other,TRUE
|
||||
4212,4212,provvigioni passive ,42,account_type_expense,other,TRUE
|
||||
4213,4213,spese di incasso ,42,account_type_expense,other,TRUE
|
||||
43,43,COSTI PER GODIMENTO BENI DI TERZI ,4,account_type_view,view,TRUE
|
||||
4301,4301,fitti passivi ,43,account_type_expense,other,TRUE
|
||||
4302,4302,canoni di leasing ,43,account_type_expense,other,TRUE
|
||||
44,44,COSTI PER IL PERSONALE ,4,account_type_view,view,TRUE
|
||||
4401,4401,salari e stipendi ,44,account_type_expense,other,TRUE
|
||||
4402,4402,oneri sociali ,44,account_type_expense,other,TRUE
|
||||
4403,4403,TFRL ,44,account_type_expense,other,TRUE
|
||||
4404,4404,altri costi per il personale ,44,account_type_expense,other,TRUE
|
||||
45,45,AMMORTAMENTI IMMOBILIZZAZIONI IMMATERIALI ,4,account_type_view,view,TRUE
|
||||
4501,4501,ammortamento costi di impianto ,45,account_type_p_l,other,TRUE
|
||||
4506,4506,ammortamento software ,45,account_type_p_l,other,TRUE
|
||||
4508,4508,ammortamento avviamento ,45,account_type_p_l,other,TRUE
|
||||
46,46,AMMORTAMENTI IMMOBILIZZAZIONI MATERIALI ,4,account_type_view,view,TRUE
|
||||
4601,4601,ammortamento fabbricati ,46,account_type_p_l,other,TRUE
|
||||
4602,4602,ammortamento impianti e macchinari ,46,account_type_p_l,other,TRUE
|
||||
4604,4604,ammortamento attrezzature commerciali ,46,account_type_p_l,other,TRUE
|
||||
4605,4605,ammortamento macchine d'ufficio ,46,account_type_p_l,other,TRUE
|
||||
4606,4606,ammortamento arredamento ,46,account_type_p_l,other,TRUE
|
||||
4607,4607,ammortamento automezzi ,46,account_type_p_l,other,TRUE
|
||||
4608,4608,ammortamento imballaggi durevoli ,46,account_type_p_l,other,TRUE
|
||||
47,47,SVALUTAZIONI ,4,account_type_view,view,TRUE
|
||||
4701,4701,svalutazioni immobilizzazioni immateriali ,47,account_type_p_l,other,TRUE
|
||||
4702,4702,svalutazioni immobilizzazioni materiali ,47,account_type_p_l,other,TRUE
|
||||
4706,4706,svalutazione crediti ,47,account_type_p_l,other,TRUE
|
||||
48,48,ACCANTONAMENTI ,4,account_type_view,view,TRUE
|
||||
481,481,ACCANTONAMENTI PER RISCHI ,48,account_type_view,view,TRUE
|
||||
4814,4814,accantonamento per responsabilità civile ,481,account_type_p_l,other,TRUE
|
||||
482,482,ALTRI ACCANTONAMENTI ,48,account_type_view,view,TRUE
|
||||
4821,4821,accantonamento per spese future ,482,account_type_p_l,other,TRUE
|
||||
4823,4823,accantonamento per manutenzioni programmate ,482,account_type_p_l,other,TRUE
|
||||
49,49,ONERI DIVERSI ,4,account_type_view,view,TRUE
|
||||
4901,4901,oneri fiscali diversi ,49,account_type_p_l,other,TRUE
|
||||
4903,4903,oneri vari ,49,account_type_p_l,other,TRUE
|
||||
4905,4905,perdite su crediti ,49,account_type_p_l,other,TRUE
|
||||
4910,4910,arrotondamenti passivi ,49,account_type_p_l,other,TRUE
|
||||
4920,4920,minusvalenze ordinarie diverse ,49,account_type_p_l,other,TRUE
|
||||
4930,4930,sopravvenienze passive ordinarie diverse ,49,account_type_p_l,other,TRUE
|
||||
4940,4940,insussistenze passive ordinarie diverse ,49,account_type_p_l,other,TRUE
|
||||
5,5,PROVENTI E ONERI FINANZIARI ,0,account_type_view,view,TRUE
|
||||
51,51,PROVENTI FINANZIARI ,5,account_type_view,view,TRUE
|
||||
5110,5110,interessi attivi v/clienti ,51,account_type_p_l,other,TRUE
|
||||
5115,5115,interessi attivi bancari ,51,account_type_p_l,other,TRUE
|
||||
5116,5116,interessi attivi postali ,51,account_type_p_l,other,TRUE
|
||||
5140,5140,proventi finanziari diversi ,51,account_type_p_l,other,TRUE
|
||||
52,52,ONERI FINANZIARI ,5,account_type_view,view,TRUE
|
||||
5201,5201,interessi passivi v/fornitori ,52,account_type_p_l,other,TRUE
|
||||
5202,5202,interessi passivi bancari ,52,account_type_p_l,other,TRUE
|
||||
5203,5203,sconti passivi bancari ,52,account_type_p_l,other,TRUE
|
||||
5210,5210,interessi passivi su mutui ,52,account_type_p_l,other,TRUE
|
||||
5240,5240,oneri finanziari diversi ,52,account_type_p_l,other,TRUE
|
||||
7,7,PROVENTI E ONERI STRAORDINARI ,0,account_type_view,view,TRUE
|
||||
71,71,PROVENTI STRAORDINARI ,7,account_type_view,view,TRUE
|
||||
7101,7101,plusvalenze straordinarie ,71,account_type_p_l,other,TRUE
|
||||
7102,7102,sopravvenienze attive straordinarie ,71,account_type_p_l,other,TRUE
|
||||
7103,7103,insussistenze attive straordinarie ,71,account_type_p_l,other,TRUE
|
||||
72,72,ONERI STRAORDINARI ,7,account_type_view,view,TRUE
|
||||
7201,7201,minusvalenze straordinarie ,72,account_type_p_l,other,TRUE
|
||||
7202,7202,sopravvenienze passive straordinarie ,72,account_type_p_l,other,TRUE
|
||||
7203,7203,insussistenze passive straordinarie ,72,account_type_p_l,other,TRUE
|
||||
7204,7204,imposte esercizi precedenti ,72,account_type_p_l,other,TRUE
|
||||
8,8,IMPOSTE DELL'ESERCIZIO ,0,account_type_view,view,TRUE
|
||||
8101,8101,imposte dell'esercizio ,8,account_type_p_l,other,TRUE
|
||||
9,9,CONTI DI RISULTATO ,0,account_type_view,view,TRUE
|
||||
9101,9101,conto di risultato economico ,9,account_type_p_l,other,TRUE
|
||||
9102,9102,stato patrimoniale,9,account_type_p_l,other,TRUE
|
||||
|
||||
|
@@ -22,10 +22,6 @@
|
||||
import time
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
import PIL
|
||||
import io
|
||||
import base64
|
||||
import StringIO
|
||||
|
||||
import netsvc
|
||||
from osv import fields, osv
|
||||
@@ -282,7 +278,7 @@ class pos_order(osv.osv):
|
||||
('user_id', '=', uid),
|
||||
('state', '=', 'open')], context=context)
|
||||
if len(statement_id) == 0:
|
||||
raise osv.except_osv(_('Error !'), _('You have to open at least one cashbox.'))
|
||||
raise osv.except_osv(_('Error !'), _('You have to open at least one cashbox'))
|
||||
if statement_id:
|
||||
statement_id = statement_id[0]
|
||||
args['statement_id'] = statement_id
|
||||
@@ -731,40 +727,11 @@ class pos_category(osv.osv):
|
||||
}
|
||||
pos_category()
|
||||
|
||||
_IMAGE_SIZE = 100,120
|
||||
|
||||
class product_product(osv.osv):
|
||||
_inherit = 'product.product'
|
||||
|
||||
def _get_img(self, cr, uid, ids, field_name, arg, context=None):
|
||||
context = context or {}
|
||||
bin_size = context.get('bin_size', False)
|
||||
context = dict(context, bin_size = False)
|
||||
products = self.browse(cr, uid, ids, context=context)
|
||||
result = {}
|
||||
for product in products:
|
||||
image64 = product.product_image
|
||||
if not image64:
|
||||
result[product.id] = False
|
||||
continue
|
||||
image_bin = base64.decodestring(image64)
|
||||
image_stream = io.BytesIO(image_bin)
|
||||
im = PIL.Image.open(image_stream)
|
||||
im.thumbnail(_IMAGE_SIZE, PIL.Image.ANTIALIAS)
|
||||
nimage_stream = StringIO.StringIO()
|
||||
im.save(nimage_stream, format="JPEG")
|
||||
nimage_bin = nimage_stream.getvalue()
|
||||
if not bin_size:
|
||||
result[product.id] = base64.encodestring(nimage_bin)
|
||||
else:
|
||||
result[product.id] = nimage_bin.length
|
||||
return result
|
||||
|
||||
_columns = {
|
||||
'income_pdt': fields.boolean('PoS Cash Input', help="This is a product you can use to put cash into a statement for the point of sale backend."),
|
||||
'expense_pdt': fields.boolean('PoS Cash Output', help="This is a product you can use to take cash from a statement for the point of sale backend, exemple: money lost, transfer to bank, etc."),
|
||||
'img': fields.function(_get_img, method=True, type="binary", string='Product Image',
|
||||
store = {'product.product': (lambda self, cr, uid, ids, c=None: ids, ['product_image'], 10)}),
|
||||
'pos_categ_id': fields.many2one('pos.category','PoS Category',
|
||||
help="If you want to sell this product through the point of sale, select the category it belongs to.")
|
||||
}
|
||||
|
||||
@@ -82,6 +82,9 @@
|
||||
height: 35px;
|
||||
padding: 10px;
|
||||
}
|
||||
.point-of-sale #rightheader {
|
||||
float: none;
|
||||
}
|
||||
.point-of-sale #branding {
|
||||
border-right: 1px solid #373737;
|
||||
text-align: center;
|
||||
|
||||
@@ -86,7 +86,7 @@ openerp.point_of_sale = function(db) {
|
||||
}, this));
|
||||
}, this));
|
||||
$.when(this.fetch('pos.category', ['name', 'parent_id', 'child_id']),
|
||||
this.fetch('product.product', ['name', 'list_price', 'pos_categ_id', 'taxes_id', 'img'], [['pos_categ_id', '!=', 'false']]),
|
||||
this.fetch('product.product', ['name', 'list_price', 'pos_categ_id', 'taxes_id', 'product_image'], [['pos_categ_id', '!=', 'false']]),
|
||||
this.fetch('account.bank.statement', ['account_id', 'currency', 'journal_id', 'state', 'name'],
|
||||
[['state', '=', 'open'], ['user_id', '=', this.session.uid]]),
|
||||
this.fetch('account.journal', ['auto_cash', 'check_dtls', 'currency', 'name', 'type']),
|
||||
@@ -591,7 +591,7 @@ openerp.point_of_sale = function(db) {
|
||||
},
|
||||
clickAppendNewChar: function(event) {
|
||||
var newChar;
|
||||
newChar = event.currentTarget.innerText;
|
||||
newChar = event.currentTarget.innerText || event.currentTarget.textContent;
|
||||
return this.state.appendNewChar(newChar);
|
||||
},
|
||||
clickChangeMode: function(event) {
|
||||
|
||||
@@ -18,16 +18,16 @@
|
||||
<input type="radio" id="receipt-step-button" class="step-button" data-step='receipt' name="radio" />
|
||||
<label for="receipt-step-button">Receipt</label>
|
||||
</div>
|
||||
<div id="loggedas">
|
||||
<span class="oe_pos_synch-notification"></span>
|
||||
<button>Close</button>
|
||||
</div>
|
||||
<div id="rightheader">
|
||||
<div id="order-selector">
|
||||
<button id="neworder-button">+</button>
|
||||
<ol id="orders"></ol>
|
||||
</div>
|
||||
</div>
|
||||
<div id="loggedas">
|
||||
<span class="oe_pos_synch-notification"></span>
|
||||
<button>Close</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content">
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
<t t-name="pos-product-template">
|
||||
<a href="#">
|
||||
<div class="product-img">
|
||||
<img t-att-src="'data:image/gif;base64,'+ img" />
|
||||
<img t-att-src="'data:image/gif;base64,'+ product_image" />
|
||||
<span class="price-tag">
|
||||
<t t-esc="format_amount(list_price)"/>
|
||||
</span>
|
||||
|
||||
@@ -44,7 +44,6 @@ def get_journal(self, cr, uid, context=None):
|
||||
res = [(r['journal_id']) for r in res]
|
||||
if not len(res):
|
||||
raise osv.except_osv(_('Error !'), _('You do not have any open cash register. You must create a payment method or open a cash register.'))
|
||||
res.insert(0, ('', ''))
|
||||
return res
|
||||
|
||||
class pos_box_entries(osv.osv_memory):
|
||||
@@ -70,8 +69,8 @@ class pos_box_entries(osv.osv_memory):
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Reason', size=32, required=True),
|
||||
'journal_id': fields.selection(get_journal, "Cash Register", required=True),
|
||||
'product_id': fields.selection(_get_income_product, "Operation", required=True),
|
||||
'journal_id': fields.selection(get_journal, "Cash Register", required=True, size=-1),
|
||||
'product_id': fields.selection(_get_income_product, "Operation", required=True, size=-1),
|
||||
'amount': fields.float('Amount', digits=(16, 2), required=True),
|
||||
'ref': fields.char('Ref', size=32),
|
||||
}
|
||||
|
||||
@@ -45,13 +45,12 @@ class pos_box_out(osv.osv_memory):
|
||||
ids = product_obj.search(cr, uid, ['&', ('expense_pdt', '=', True), '|', ('company_id', '=', company_id), ('company_id', '=', None)], context=context)
|
||||
res = product_obj.read(cr, uid, ids, ['id', 'name'], context=context)
|
||||
res = [(r['id'], r['name']) for r in res]
|
||||
res.insert(0, ('', ''))
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Description / Reason', size=32, required=True),
|
||||
'journal_id': fields.selection(pos_box_entries.get_journal, "Cash Register", required=True),
|
||||
'product_id': fields.selection(_get_expense_product, "Operation", required=True),
|
||||
'journal_id': fields.selection(pos_box_entries.get_journal, "Cash Register", required=True, size=-1),
|
||||
'product_id': fields.selection(_get_expense_product, "Operation", required=True, size=-1),
|
||||
'amount': fields.float('Amount', digits=(16, 2), required=True),
|
||||
}
|
||||
_defaults = {
|
||||
|
||||
@@ -98,6 +98,7 @@ class portal(osv.osv):
|
||||
def do_create_menu(self, cr, uid, ids, context=None):
|
||||
""" create a parent menu for the given portals """
|
||||
menu_obj = self.pool.get('ir.ui.menu')
|
||||
ir_data = self.pool.get('ir.model.data')
|
||||
menu_root = self._res_xml_id(cr, uid, 'portal', 'portal_menu')
|
||||
|
||||
for p in self.browse(cr, uid, ids, context):
|
||||
@@ -110,7 +111,13 @@ class portal(osv.osv):
|
||||
menu_id = menu_obj.create(cr, uid, menu_values, context)
|
||||
# set the parent_menu_id to item_id
|
||||
self.write(cr, uid, [p.id], {'parent_menu_id': menu_id}, context)
|
||||
|
||||
menu_values.pop('parent_id')
|
||||
menu_values.pop('groups_id')
|
||||
menu_values.update({'model': 'ir.ui.menu',
|
||||
'module': 'portal',
|
||||
'res_id': menu_id,
|
||||
'noupdate': 'True'})
|
||||
data_id = ir_data.create(cr, uid, menu_values, context)
|
||||
return True
|
||||
|
||||
def _assign_menu(self, cr, uid, ids, context=None):
|
||||
|
||||
@@ -567,4 +567,12 @@ class stock_warehouse_orderpoint(osv.osv):
|
||||
return super(stock_warehouse_orderpoint, self).copy(cr, uid, id, default, context=context)
|
||||
|
||||
stock_warehouse_orderpoint()
|
||||
|
||||
class product_product(osv.osv):
|
||||
_inherit="product.product"
|
||||
_columns = {
|
||||
'orderpoint_ids': fields.one2many('stock.warehouse.orderpoint', 'product_id', 'Minimum Stock Rule')
|
||||
}
|
||||
product_product()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -275,5 +275,30 @@
|
||||
<menuitem id="menu_stock_procurement" name="Automatic Procurements" parent="stock.menu_stock_configuration" sequence="5"/>
|
||||
<menuitem action="action_orderpoint_form" id="menu_stock_order_points" parent="menu_stock_procurement" sequence="10"/>
|
||||
|
||||
|
||||
<record id="product_normal_form_view" model="ir.ui.view">
|
||||
<field name="name">product.normal.form.orderpoint.inherit</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="misc" position="after">
|
||||
<group col="2" colspan="2" attrs="{'invisible':[('type', '=', 'service')]}">
|
||||
<separator string="Minimum Stock Rules" colspan="2"/>
|
||||
<field name="orderpoint_ids" context="{'default_product_uom': uom_id}" nolabel="1">
|
||||
<tree string="Minimum Stock Rule" editable="bottom">
|
||||
<field name="warehouse_id" on_change="onchange_warehouse_id(warehouse_id)" widget="selection"/>
|
||||
<field name="location_id" groups="base.group_extended"/>
|
||||
<field name="product_min_qty"/>
|
||||
<field name="product_max_qty"/>
|
||||
<field name="product_uom" groups="base.group_extended"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -61,7 +61,11 @@ Print product labels with barcode.
|
||||
'partner_view.xml',
|
||||
'process/product_process.xml'
|
||||
],
|
||||
'test':['test/product_report.yml','test/product_test.yml'],
|
||||
'test':[
|
||||
'test/product_test.yml',
|
||||
'test/product_price_list.yml',
|
||||
'test/product_report.yml',
|
||||
],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'certificate': '0068861431437',
|
||||
|
||||
@@ -321,6 +321,7 @@
|
||||
<field name="type">product</field>
|
||||
<field name="categ_id" ref="product_category_10"/>
|
||||
</record>
|
||||
|
||||
<record id="product_product_tow1" model="product.product">
|
||||
<field name="default_code">TOW1</field>
|
||||
<field name="list_price">37.5</field>
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
-
|
||||
In order to check the calculation of price of the products according to selected pricelist,
|
||||
I create a pricelist rule for giving discount on some quantities of product.
|
||||
-
|
||||
!record {model: product.pricelist.item, id: item0}:
|
||||
name: Default Public Pricelist for More Qty
|
||||
min_quantity: 15
|
||||
price_discount: -0.10
|
||||
-
|
||||
I check whether the product consumes the price, based on the given quantities, correctly or not.
|
||||
-
|
||||
!python {model: product.pricelist}: |
|
||||
product_obj = self.pool.get("product.product")
|
||||
result = self.price_get_multi(cr, uid, [ref("product.list0")], [(ref("product_product_pc1"),15,False)])
|
||||
new_price = result[ref("product_product_pc1")].values()
|
||||
context.update({'pricelist': ref("product.list0"), 'quantity': 15})
|
||||
product_price = product_obj.browse(cr, uid, ref("product_product_pc1"), context=context).price
|
||||
assert new_price[0] == product_price,"Discount is not given on price of the product."
|
||||
-
|
||||
I create a pricelist rule to give discount for a specific product.
|
||||
-
|
||||
!record {model: product.pricelist.item, id: pricelist_rules_for_pc2}:
|
||||
name: Default Public Pricelist for PC2
|
||||
min_quantity: 1
|
||||
product_id: product.product_product_pc2
|
||||
sequence: 4
|
||||
base: !eval (ref('product.list_price'))
|
||||
price_version_id: product.ver0
|
||||
price_discount: -0.20
|
||||
-
|
||||
I check whether the selected product is having the price correctly or not.
|
||||
-
|
||||
!python {model: product.pricelist}: |
|
||||
result = self.price_get_multi(cr, uid, [ref("product.list0")], [(ref("product_product_pc2"),1,False)])
|
||||
product_obj = self.pool.get("product.product")
|
||||
new_price = result[ref("product_product_pc2")].values()
|
||||
context.update({'pricelist': ref("product.list0"), 'quantity': 1})
|
||||
product_price = product_obj.browse(cr, uid, ref("product_product_pc2"), context=context).price
|
||||
assert new_price[0] == product_price,"Discount is not given on price of the special product."
|
||||
-
|
||||
I create a pricelist rule to give discount for a specific category of products.
|
||||
-
|
||||
!record {model: product.pricelist.item, id: pricelist_rules_category_1}:
|
||||
name: Default Public Pricelist for Category
|
||||
min_quantity: 1
|
||||
categ_id: product.cat1
|
||||
sequence: 3
|
||||
base: !eval (ref('product.list_price'))
|
||||
price_version_id: product.ver0
|
||||
price_discount: -0.25
|
||||
-
|
||||
I check whether the price of products of selected product category is correctly set or not.
|
||||
-
|
||||
!python {model: product.pricelist}: |
|
||||
result = self.price_get_multi(cr, uid, [ref("product.list0")], [(ref("product_product_fan2"),1,False)])
|
||||
product_obj = self.pool.get("product.product")
|
||||
new_price = result[ref("product_product_fan2")].values()
|
||||
context.update({'pricelist': ref("product.list0"), 'quantity': 1})
|
||||
product_price = product_obj.browse(cr, uid, ref("product_product_fan2"), context=context).price
|
||||
assert new_price[0] == product_price,"Discount is not given on price of the special category of products."
|
||||
-
|
||||
I create a pricelist to give the discount at the end of year.
|
||||
-
|
||||
!record {model: product.pricelist, id: product_price_list_end_year}:
|
||||
name: End of Year Price List
|
||||
type: sale
|
||||
version_id:
|
||||
- name: End of Year Price List Version
|
||||
items_id:
|
||||
- name: End of Year Price List Version Rule
|
||||
min_quantity: 1
|
||||
base: !eval (ref('product.list_price'))
|
||||
price_discount: -0.30
|
||||
-
|
||||
!record {model: product.pricelist.item, id: pricelist_rules_for_end_year1}:
|
||||
name: End of Year Price List Version Rule - Public Pricelist
|
||||
min_quantity: 1
|
||||
sequence: 2
|
||||
base: -1
|
||||
price_version_id: product.ver0
|
||||
base_pricelist_id: product_price_list_end_year
|
||||
-
|
||||
Now, I check that the end of the year pricelist rule is applied on products.
|
||||
-
|
||||
!python {model: product.pricelist}: |
|
||||
result = self.price_get_multi(cr, uid, [ref("product.list0")], [(ref("product_product_pc1"),1,False)])
|
||||
new_price = result[ref("product_product_pc1")].values()
|
||||
product_obj = self.pool.get("product.product")
|
||||
context.update({'pricelist': ref("product.list0"), 'quantity': 1})
|
||||
product_price = product_obj.browse(cr, uid, ref("product_product_pc1"), context=context).price
|
||||
assert new_price[0] == product_price,"Discount is not given on price of product at the end of the year."
|
||||
-
|
||||
I create a pricelist for special customers by which they can get discount on products.
|
||||
-
|
||||
!record {model: product.pricelist, id: special_customer_price_list1}:
|
||||
name: Price List For Special Customer
|
||||
type: sale
|
||||
version_id:
|
||||
- name: Special Customer Price List Version
|
||||
items_id:
|
||||
- name: Special Customer Price List Version Rule
|
||||
min_quantity: 1
|
||||
base: !eval (ref('product.list_price'))
|
||||
price_discount: -0.40
|
||||
-
|
||||
!record {model: res.partner, id: base.res_partner_agrolait}:
|
||||
property_product_pricelist: special_customer_price_list1
|
||||
-
|
||||
I check that the customer is getting the discount according to the pricelist.
|
||||
-
|
||||
!python {model: product.pricelist}: |
|
||||
result = self.price_get_multi(cr, uid, [ref("product.special_customer_price_list1")], [(ref("product_product_pc4"),1,ref("base.res_partner_agrolait"))])
|
||||
product_obj = self.pool.get("product.product")
|
||||
new_price = result[ref("product_product_pc4")].values()
|
||||
context.update({'pricelist': ref("product.special_customer_price_list1"), 'quantity': 1})
|
||||
product_price = product_obj.browse(cr, uid, ref("product_product_pc4"), context=context).price
|
||||
assert new_price[0] == product_price,"Discount is not given to special customer."
|
||||
-
|
||||
I set the supplier pricelist for a product to get the discount at the time of purchase.
|
||||
-
|
||||
!record {model: product.supplierinfo, id: supplierinfo5}:
|
||||
pricelist_ids:
|
||||
- min_quantity: 10
|
||||
price: 200
|
||||
@@ -517,7 +517,7 @@ class task(osv.osv):
|
||||
if not project_id:
|
||||
return {}
|
||||
data = self.pool.get('project.project').browse(cr, uid, [project_id])
|
||||
partner_id=data and data[0].parent_id.partner_id
|
||||
partner_id=data and data[0].partner_id
|
||||
if partner_id:
|
||||
return {'value':{'partner_id':partner_id.id}}
|
||||
return {}
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection" required="1"/>
|
||||
<field name="warn_manager"/>
|
||||
<field name="priority"/>
|
||||
<field name="active"/>
|
||||
<field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator colspan="4"/>
|
||||
@@ -49,7 +49,7 @@
|
||||
<field name="state" widget="statusbar" statusbar_visible="open,close" statusbar_colors='{"pending":"blue"}' select="1" readonly="1"/>
|
||||
<button name="set_cancel" string="Cancel" type="object" states="open,pending" icon="gtk-cancel"/>
|
||||
<button name="set_template" string="Set as Template" type="object" states="open" icon="gtk-convert" groups="base.group_extended"/>
|
||||
<button name="set_open" string="Reactivate Project" type="object" states="pending,cancelled,close" icon="gtk-ok"/>
|
||||
<button name="set_open" string="Re-open project" type="object" states="pending,cancelled,close" icon="gtk-ok"/>
|
||||
<button name="set_pending" string="Pending" type="object" states="open" icon="gtk-media-pause"/>
|
||||
<button name="set_done" string="Done" type="object" states="open,pending" icon="terp-dialog-close"/>
|
||||
<button name="reset_project" string="Reset as Project" type="object" states="template" icon="gtk-convert"/>
|
||||
|
||||
@@ -243,6 +243,8 @@ class account_analytic_line(osv.osv):
|
||||
acc = self.pool.get('account.analytic.account').browse(cr, uid, account_id)
|
||||
st = acc.to_invoice.id
|
||||
res['value']['to_invoice'] = st or False
|
||||
if acc.state == 'close' or acc.state == 'cancelled':
|
||||
raise osv.except_osv(_('Invalid Analytic Account !'), _('You cannot select a Analytic Account which is in Close or Cancelled state'))
|
||||
return res
|
||||
account_analytic_line()
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -76,10 +76,10 @@ Dashboard for Sales Manager that includes:
|
||||
'company_view.xml',
|
||||
'sale_workflow.xml',
|
||||
'sale_sequence.xml',
|
||||
'sale_report.xml',
|
||||
'sale_data.xml',
|
||||
'sale_view.xml',
|
||||
'report/sale_report_view.xml',
|
||||
'sale_report.xml',
|
||||
'stock_view.xml',
|
||||
'process/sale_process.xml',
|
||||
'board_sale_view.xml',
|
||||
|
||||
@@ -102,12 +102,16 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Sales Order">
|
||||
<group col="6" colspan="4">
|
||||
<field name="name"/>
|
||||
<field name="date_order"/>
|
||||
<field name="invoiced"/>
|
||||
<field name="shop_id" on_change="onchange_shop_id(shop_id)" widget="selection"/>
|
||||
<field name="client_order_ref"/>
|
||||
<field name="shipped"/>
|
||||
<group col="4" colspan="4">
|
||||
<field name="name"/>
|
||||
<field name="date_order"/>
|
||||
<field name="shop_id" on_change="onchange_shop_id(shop_id)" widget="selection" groups="base.group_extended"/>
|
||||
<field name="client_order_ref"/>
|
||||
</group>
|
||||
<group col="2" colspan="2">
|
||||
<field name="invoiced"/>
|
||||
<field name="shipped"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook colspan="5">
|
||||
<page string="Sales Order">
|
||||
@@ -118,7 +122,7 @@
|
||||
<field domain="[('type','=','sale')]" name="pricelist_id" groups="base.group_extended" on_change="onchange_pricelist_id(pricelist_id,order_line)"/>
|
||||
<field name="project_id" context="{'partner_id':partner_id, 'contact_id':partner_order_id, 'pricelist_id':pricelist_id, 'default_name':name}" groups="analytic.group_analytic_accounting" domain="[('parent_id','!=',False)]"/>
|
||||
<newline/>
|
||||
<field colspan="4" mode="tree,form,graph" name="order_line" nolabel="1" widget="one2many_list">
|
||||
<field colspan="4" name="order_line" nolabel="1" widget="one2many_list">
|
||||
<form string="Sales Order Lines">
|
||||
<notebook>
|
||||
<page string="Order Line">
|
||||
@@ -195,18 +199,20 @@
|
||||
<button name="button_dummy" states="draft" string="Compute" type="object" icon="gtk-execute"/>
|
||||
<button name="%(action_view_sale_advance_payment_inv)d" string="Advance Invoice" type="action" icon="gtk-execute" states="draft,manual" groups="base.group_extended"/>
|
||||
</group>
|
||||
<group col="13" colspan="4">
|
||||
<group col="17" colspan="4">
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,progress,done" statusbar_colors='{"shipping_except":"red","invoice_except":"red","waiting_date":"blue"}'/>
|
||||
<button name="invoice_recreate" states="invoice_except" string="Recreate Invoice" icon="gtk-go-forward"/>
|
||||
<button name="invoice_corrected" states="invoice_except" string="Ignore Exception" icon="gtk-apply"/>
|
||||
<button name="ship_recreate" states="shipping_except" string="Recreate Packing" icon="gtk-ok"/>
|
||||
<button name="ship_corrected" states="shipping_except" string="Ignore Exception" icon="gtk-apply"/>
|
||||
<button name="action_cancel" states="manual,progress" string="Cancel Order" type="object" icon="gtk-cancel"/>
|
||||
<button name="%(report_sale_order)d" string="Print Order" type="action" icon="gtk-print" states="waiting_date,manual,progress,done,shipping_except,invoice_except"/>
|
||||
<button name="manual_invoice" states="manual" string="Create Final Invoice" icon="gtk-go-forward" type="object"/>
|
||||
<button name="ship_cancel" states="shipping_except" string="Cancel Order" icon="gtk-cancel"/>
|
||||
<button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="gtk-convert"/>
|
||||
<button name="cancel" states="draft" string="Cancel Order" icon="gtk-cancel"/>
|
||||
<button name="invoice_cancel" states="invoice_except" string="Cancel Order" icon="gtk-cancel"/>
|
||||
<button name="%(report_sale_order)d" string="Print Quotation" type="action" icon="gtk-print" states="draft"/>
|
||||
<button name="order_confirm" states="draft" string="Confirm Order" icon="gtk-apply"/>
|
||||
</group>
|
||||
</page>
|
||||
|
||||
@@ -51,7 +51,7 @@ Thanks to the double entry management, the inventory controlling is powerful and
|
||||
"init_xml" : [],
|
||||
"demo_xml" : [
|
||||
"stock_demo.xml",
|
||||
"stock_demo_picking.yml",
|
||||
"stock_demo.yml",
|
||||
],
|
||||
"update_xml" : [
|
||||
"security/stock_security.xml",
|
||||
@@ -82,10 +82,9 @@ Thanks to the double entry management, the inventory controlling is powerful and
|
||||
"board_warehouse_view.xml",
|
||||
],
|
||||
'test': [
|
||||
'test/stock_test.yml',
|
||||
'test/opening_stock.yml',
|
||||
'test/shipment.yml',
|
||||
'test/stock_report.yml',
|
||||
'test/stock_test_wizard.yml',
|
||||
'test/stock_demo_backorder.yml'
|
||||
],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
|
||||
@@ -447,14 +447,12 @@ class stock_location(osv.osv):
|
||||
""",
|
||||
(id, id, product_id))
|
||||
results += cr.dictfetchall()
|
||||
|
||||
total = 0.0
|
||||
results2 = 0.0
|
||||
for r in results:
|
||||
amount = self.pool.get('product.uom')._compute_qty(cr, uid, r['product_uom'], r['product_qty'], context.get('uom', False))
|
||||
results2 += amount
|
||||
total += amount
|
||||
|
||||
if total <= 0.0:
|
||||
continue
|
||||
|
||||
@@ -822,6 +820,7 @@ class stock_picking(osv.osv):
|
||||
""" Tests whether the move is in assigned state or not.
|
||||
@return: True or False
|
||||
"""
|
||||
#TOFIX: assignment of move lines should be call before testing assigment otherwise picking never gone in assign state
|
||||
ok = True
|
||||
for pick in self.browse(cr, uid, ids):
|
||||
mt = pick.move_type
|
||||
@@ -2321,6 +2320,7 @@ class stock_move(osv.osv):
|
||||
@param context: context arguments
|
||||
@return: Scraped lines
|
||||
"""
|
||||
#quantity should in MOVE UOM
|
||||
if quantity <= 0:
|
||||
raise osv.except_osv(_('Warning!'), _('Please provide a positive quantity to scrap!'))
|
||||
res = []
|
||||
@@ -2421,6 +2421,7 @@ class stock_move(osv.osv):
|
||||
@param context: context arguments
|
||||
@return: Consumed lines
|
||||
"""
|
||||
#quantity should in MOVE UOM
|
||||
if context is None:
|
||||
context = {}
|
||||
if quantity <= 0:
|
||||
@@ -2439,13 +2440,14 @@ class stock_move(osv.osv):
|
||||
quantity = move.product_qty
|
||||
|
||||
uos_qty = quantity / move_qty * move.product_uos_qty
|
||||
|
||||
location_dest_id = move.product_id.property_stock_production or move.location_dest_id
|
||||
if quantity_rest > 0:
|
||||
default_val = {
|
||||
'product_qty': quantity,
|
||||
'product_uos_qty': uos_qty,
|
||||
'state': move.state,
|
||||
'location_id': location_id or move.location_id.id,
|
||||
'location_dest_id': location_dest_id.id,
|
||||
}
|
||||
current_move = self.copy(cr, uid, move.id, default_val)
|
||||
res += [current_move]
|
||||
@@ -2461,7 +2463,8 @@ class stock_move(osv.osv):
|
||||
update_val = {
|
||||
'product_qty' : quantity_rest,
|
||||
'product_uos_qty' : uos_qty_rest,
|
||||
'location_id': location_id or move.location_id.id
|
||||
'location_id': location_id or move.location_id.id,
|
||||
'location_dest_id': location_dest_id.id,
|
||||
}
|
||||
self.write(cr, uid, [move.id], update_val)
|
||||
|
||||
@@ -2675,6 +2678,7 @@ class stock_inventory(osv.osv):
|
||||
message = _("Inventory '%s' is done.") %(inv.name)
|
||||
self.log(cr, uid, inv.id, message)
|
||||
self.write(cr, uid, [inv.id], {'state': 'confirm', 'move_ids': [(6, 0, move_ids)]})
|
||||
self.pool.get('stock.move').action_confirm(cr, uid, move_ids, context=context)
|
||||
return True
|
||||
|
||||
def action_cancel_draft(self, cr, uid, ids, context=None):
|
||||
@@ -2686,7 +2690,7 @@ class stock_inventory(osv.osv):
|
||||
self.write(cr, uid, [inv.id], {'state':'draft'}, context=context)
|
||||
return True
|
||||
|
||||
def action_cancel_inventary(self, cr, uid, ids, context=None):
|
||||
def action_cancel_inventory(self, cr, uid, ids, context=None):
|
||||
""" Cancels both stock move and inventory
|
||||
@return: True
|
||||
"""
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
<field name="name">Shelf 1</field>
|
||||
<field name="location_id" ref="stock_location_stock"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!--
|
||||
Resource: stock.inventory
|
||||
@@ -49,10 +50,7 @@
|
||||
|
||||
<record id="stock_inventory_0" model="stock.inventory">
|
||||
<field name="name">Starting Inventory</field>
|
||||
<field name="date_done">2005-08-02 13:42:43</field>
|
||||
<field name="state">done</field>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
Resource: stock.inventory.line
|
||||
-->
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
-
|
||||
!record {model: stock.location, id: location_refrigerator}:
|
||||
name: Refrigerator
|
||||
usage: internal
|
||||
-
|
||||
!record {model: stock.location, id: location_delivery_counter}:
|
||||
name: Delivery Counter
|
||||
usage: internal
|
||||
-
|
||||
!record {model: stock.location, id: location_refrigerator_small}:
|
||||
name: Small Refrigerator
|
||||
usage: internal
|
||||
location_id: location_refrigerator
|
||||
-
|
||||
!record {model: stock.location, id: location_opening}:
|
||||
name: opening
|
||||
usage: inventory
|
||||
-
|
||||
!record {model: stock.location, id: location_convenience_shop}:
|
||||
name: Convenient Store
|
||||
chained_auto_packing: auto
|
||||
chained_location_type: fixed
|
||||
usage: supplier
|
||||
chained_location_id: location_refrigerator
|
||||
location_id: stock_location_suppliers
|
||||
-
|
||||
!record {model: stock.warehouse, id: warehouse_icecream}:
|
||||
name: Ice Cream Shop
|
||||
lot_input_id: location_refrigerator
|
||||
lot_stock_id: location_refrigerator
|
||||
lot_output_id: location_delivery_counter
|
||||
-
|
||||
!record {model: product.product, id: product_icecream}:
|
||||
default_code: 001
|
||||
name: Ice Cream
|
||||
type: product
|
||||
categ_id: product.cat1
|
||||
supply_method: buy
|
||||
list_price: 100.0
|
||||
standard_price: 70.0
|
||||
uom_id: product.product_uom_kgm
|
||||
uom_po_id: product.product_uom_kgm
|
||||
procure_method: make_to_stock
|
||||
property_stock_inventory: location_opening
|
||||
property_stock_account_input: location_refrigerator
|
||||
property_stock_account_output: location_delivery_counter
|
||||
description: Ice cream can be mass-produced and thus is widely available in developed parts of the world. Ice cream can be purchased in large cartons (vats and squrounds) from supermarkets and grocery stores, in smaller quantities from ice cream shops, convenience stores, and milk bars, and in individual servings from small carts or vans at public events.
|
||||
|
||||
-
|
||||
!record {model: stock.production.lot, id: lot_icecream_0}:
|
||||
name: Lot0 for Ice cream
|
||||
product_id: product_icecream
|
||||
-
|
||||
!record {model: stock.production.lot, id: lot_icecream_1}:
|
||||
name: Lot1 for Ice cream
|
||||
product_id: product_icecream
|
||||
-
|
||||
!record {model: stock.inventory, id: stock_inventory_icecream}:
|
||||
name: Inventory for icecream
|
||||
-
|
||||
!record {model: stock.inventory.line, id: stock_inventory_line_icecream_lot0}:
|
||||
product_id: product_icecream
|
||||
product_uom: product.product_uom_kgm
|
||||
inventory_id: stock_inventory_icecream
|
||||
product_qty: 50.0
|
||||
prod_lot_id: lot_icecream_0
|
||||
location_id: location_refrigerator
|
||||
-
|
||||
!record {model: stock.inventory.line, id: stock_inventory_line_icecream_lot1}:
|
||||
product_id: product_icecream
|
||||
product_uom: product.product_uom_kgm
|
||||
inventory_id: stock_inventory_icecream
|
||||
product_qty: 40.0
|
||||
prod_lot_id: lot_icecream_1
|
||||
location_id: location_refrigerator
|
||||
|
||||
-
|
||||
!record {model: stock.picking, id: outgoing_shipment}:
|
||||
type: out
|
||||
location_dest_id: location_delivery_counter
|
||||
-
|
||||
!record {model: stock.move, id: outgoing_shipment_icecream}:
|
||||
picking_id: outgoing_shipment
|
||||
product_id: product_icecream
|
||||
product_uom: product.product_uom_kgm
|
||||
product_qty: 130.0
|
||||
location_id: location_refrigerator
|
||||
location_dest_id: location_delivery_counter
|
||||
-
|
||||
!record {model: stock.picking, id: incomming_shipment}:
|
||||
type: in
|
||||
invoice_state: 2binvoiced
|
||||
address_id: base.res_partner_address_9
|
||||
location_dest_id: location_refrigerator
|
||||
-
|
||||
!record {model: stock.move, id: incomming_shipment_icecream}:
|
||||
picking_id: incomming_shipment
|
||||
product_id: product_icecream
|
||||
product_uom: product.product_uom_kgm
|
||||
product_qty: 50.0
|
||||
location_id: location_convenience_shop
|
||||
location_dest_id: location_refrigerator
|
||||
@@ -1,25 +0,0 @@
|
||||
-
|
||||
!record {model: stock.picking, id: stock_picking_1}:
|
||||
type: out
|
||||
company_id: base.main_company
|
||||
address_id: res_partner_address_fabien0
|
||||
-
|
||||
!record {model: stock.move, id: stock_move_1}:
|
||||
product_id: product.product_product_cpu1
|
||||
product_uom: product.product_uom_unit
|
||||
product_uos_qty: 5.0
|
||||
product_qty: 5.0
|
||||
location_dest_id: stock.stock_location_customers
|
||||
location_id: stock.stock_location_stock
|
||||
name: CPU1, Processor AMD Athlon XP 1800
|
||||
picking_id: stock_picking_1
|
||||
-
|
||||
!record {model: stock.move, id: stock_move_2}:
|
||||
product_id: product.product_product_cpu3
|
||||
product_uom: product.product_uom_unit
|
||||
product_uos_qty: 5.0
|
||||
product_qty: 5.0
|
||||
location_dest_id: stock.stock_location_customers
|
||||
location_id: stock.stock_location_stock
|
||||
name: CPU3, Processor AMD Athlon XP 1800
|
||||
picking_id: stock_picking_1
|
||||
@@ -171,7 +171,7 @@
|
||||
<field name="state"/>
|
||||
</group>
|
||||
<group col="3" colspan="2">
|
||||
<button name="action_cancel_inventary" states="draft,confirm,done" string="Cancel Inventory" type="object" icon="gtk-cancel"/>
|
||||
<button name="action_cancel_inventory" states="draft,confirm,done" string="Cancel Inventory" type="object" icon="gtk-cancel"/>
|
||||
<button name="action_confirm" states="draft" string="Confirm Inventory" type="object" icon="gtk-apply"/>
|
||||
<button name="action_done" states="confirm" string="Validate Inventory" type="object" icon="gtk-jump-to"/>
|
||||
<button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="gtk-convert"/>
|
||||
@@ -709,7 +709,7 @@
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Products">
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_in_id': address_id}">
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" context="{'address_in_id': address_id}">
|
||||
<tree colors="grey:scrapped == True" string="Stock Moves">
|
||||
<field name="product_id"/>
|
||||
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
|
||||
@@ -902,7 +902,7 @@
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Products">
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_out_id': address_id, 'picking_type': type}" >
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" context="{'address_out_id': address_id, 'picking_type': type}" >
|
||||
<tree colors="grey:scrapped==True" string="Stock Moves">
|
||||
<field name="product_id"/>
|
||||
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
|
||||
@@ -1058,7 +1058,7 @@
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,calendar</field>
|
||||
<field name="domain">[('type','=','out')]</field>
|
||||
<field name="context">{'default_type': 'out', 'contact_display': 'partner_address', 'search_default_available': 1}</field>
|
||||
<field name="context">{'default_type': 'out', 'contact_display': 'partner_address', 'search_default_confirmed': 1, 'search_default_available': 1}</field>
|
||||
<field name="search_view_id" ref="view_picking_out_search"/>
|
||||
<field name="help">This is the list of all delivery orders that have to be prepared, according to your different sales orders and your logistics rules.</field>
|
||||
</record>
|
||||
@@ -1123,7 +1123,7 @@
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General Information">
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_in_id': address_id, 'picking_type': type}" >
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" context="{'address_in_id': address_id, 'picking_type': type}" >
|
||||
<tree colors="grey:scrapped==True" string="Stock Moves">
|
||||
<field name="product_id" />
|
||||
<field name="product_qty" />
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
-
|
||||
I update the price of the Ice-cream.
|
||||
-
|
||||
!python {model: stock.change.standard.price}: |
|
||||
context.update({'active_model':'product.product', 'active_id': ref('product_icecream'), 'active_ids':[ref('product_icecream')]})
|
||||
-
|
||||
!record {model: stock.change.standard.price, id: change_price}:
|
||||
new_price: 120
|
||||
-
|
||||
!python {model: stock.change.standard.price}: |
|
||||
self.change_price(cr, uid, [ref('change_price')], context=context)
|
||||
-
|
||||
I check price of Ice-cream after update price.
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
product = self.browse(cr, uid, ref('product_icecream'), context=context)
|
||||
assert product.standard_price == 120, "Price is not updated."
|
||||
-
|
||||
I update the current stock of the Ice-cream with 10 kgm in Small Refrigerator in lot0.
|
||||
-
|
||||
!record {model: stock.change.product.qty, id: change_qty}:
|
||||
location_id: location_refrigerator_small
|
||||
new_quantity: 10
|
||||
product_id: product_icecream
|
||||
prodlot_id: lot_icecream_1
|
||||
-
|
||||
!python {model: stock.change.product.qty}: |
|
||||
self.change_product_qty(cr, uid, [ref('change_qty')], context=context)
|
||||
-
|
||||
I check available stock of Ice-cream after update stock.
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
product = self.browse(cr, uid, ref('product_icecream'), context=context)
|
||||
assert product.qty_available == 10, "Stock is not updated."
|
||||
-
|
||||
I merge inventory.
|
||||
-
|
||||
!python {model: stock.inventory.merge }: |
|
||||
context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_icecream'), 'active_ids': [ref('stock_inventory_icecream')]})
|
||||
-
|
||||
!record {model: stock.inventory.merge, id: merge_inventory}:
|
||||
-
|
||||
!python {model: stock.inventory.merge }: |
|
||||
self.do_merge(cr, uid, [ref('merge_inventory')], context=context)
|
||||
-
|
||||
I cancel inventory.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
self.action_cancel_inventory(cr, uid, [ref('stock_inventory_icecream')])
|
||||
-
|
||||
I reset to draft inventory.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
self.action_cancel_draft(cr, uid, [ref('stock_inventory_icecream')])
|
||||
-
|
||||
I confirm physical inventory of Ice-cream which are came in different lots.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
self.action_confirm(cr, uid, [ref('stock_inventory_icecream')], context=context)
|
||||
-
|
||||
I check move details after confirmed physical inventory.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
inventory = self.browse(cr, uid, ref('stock_inventory_icecream'), context=context)
|
||||
assert len(inventory.move_ids) == len(inventory.inventory_line_id), "moves are not correspond."
|
||||
for move_line in inventory.move_ids:
|
||||
for line in inventory.inventory_line_id:
|
||||
if move_line.product_id.id == line.product_id.id and move_line.prodlot_id.id == line.prod_lot_id.id:
|
||||
location_id = line.product_id.product_tmpl_id.property_stock_inventory.id
|
||||
assert move_line.product_qty == line.product_qty, "Qty is not correspond."
|
||||
assert move_line.product_uom.id == line.product_uom.id, "UOM is not correspond."
|
||||
assert move_line.date == inventory.date, "Date is not correspond."
|
||||
assert move_line.location_id.id == location_id, "Source location is not correspond."
|
||||
assert move_line.location_dest_id.id == line.location_id.id, "Destination location is not correspond."
|
||||
assert move_line.state == 'confirmed', "Move is not confirmed."
|
||||
-
|
||||
I split inventory line.
|
||||
-
|
||||
!python {model: stock.inventory.line.split}: |
|
||||
context.update({'active_model': 'stock.inventory.line', 'active_id': ref('stock_inventory_line_icecream_lot0'), 'active_ids': [ref('stock_inventory_line_icecream_lot0')]})
|
||||
-
|
||||
!record {model: stock.inventory.line.split, id: split_inventory_lot0}:
|
||||
use_exist: True
|
||||
line_exist_ids:
|
||||
- quantity: 6
|
||||
prodlot_id: lot_icecream_0
|
||||
- quantity: 4
|
||||
prodlot_id: lot_icecream_0
|
||||
-
|
||||
!python {model: stock.inventory.line.split }: |
|
||||
self.split_lot(cr, uid, [ref('split_inventory_lot0')], context=context)
|
||||
-
|
||||
I fill inventory line.
|
||||
-
|
||||
!python {model: stock.fill.inventory}: |
|
||||
context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_icecream'), 'active_ids': [ref('stock_inventory_icecream')]})
|
||||
-
|
||||
!record {model: stock.fill.inventory, id: fill_inventory}:
|
||||
location_id: location_refrigerator
|
||||
recursive: True
|
||||
-
|
||||
!python {model: stock.fill.inventory }: |
|
||||
self.fill_inventory(cr, uid, [ref('fill_inventory')], context=context)
|
||||
|
||||
-
|
||||
Now I check vitual stock of Ice-cream after confirmed physical inventory.
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
product = self.browse(cr, uid, ref('product_icecream'), context=context)
|
||||
assert product.virtual_available == 100, "Vitual stock is not updated."
|
||||
-
|
||||
I close physical inventory of Ice-cream.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
self.action_done(cr, uid, [ref('stock_inventory_icecream')], context=context)
|
||||
-
|
||||
I check closed move and real stock of Ice-cream after closed physical inventory.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
inventory = self.browse(cr, uid, ref('stock_inventory_icecream'), context=context)
|
||||
assert inventory.state == 'done', "inventory is not closed."
|
||||
for move_line in inventory.move_ids:
|
||||
assert move_line.state == 'done', "Move is not closed."
|
||||
product = self.pool.get('product.product').browse(cr, uid, ref('product_icecream'), context=context)
|
||||
product.qty_available == 100, "Real stock is not updated."
|
||||
-
|
||||
I check stock in lot.
|
||||
-
|
||||
!python {model: stock.production.lot}: |
|
||||
lot = self.browse(cr, uid, ref('lot_icecream_0'), context=context)
|
||||
assert lot.stock_available == 50, "Stock in lot is not correspond."
|
||||
@@ -0,0 +1,263 @@
|
||||
-
|
||||
I confirm outgoing shipment of 130 kgm Ice-cream.
|
||||
-
|
||||
!workflow {model: stock.picking, action: button_confirm, ref: outgoing_shipment}
|
||||
-
|
||||
I check shipment details after confirmed.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
shipment = self.browse(cr, uid, ref("outgoing_shipment"))
|
||||
assert shipment.state == "confirmed", "Shipment should be confirmed."
|
||||
for move_line in shipment.move_lines:
|
||||
assert move_line.state == "confirmed", "Move should be confirmed."
|
||||
|
||||
-
|
||||
Now I check vitual stock of Ice-cream after confirmed outgoing shipment.
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
product = self.browse(cr, uid, ref('product_icecream'), context=context)
|
||||
product.virtual_available == -30, "Vitual stock is not updated."
|
||||
|
||||
-
|
||||
I confirm incomming shipment of 50 kgm Ice-cream.
|
||||
-
|
||||
!workflow {model: stock.picking, action: button_confirm, ref: incomming_shipment}
|
||||
-
|
||||
I receive 40kgm Ice-cream so I make backorder of incomming shipment for 40 kgm.
|
||||
-
|
||||
!python {model: stock.partial.picking}: |
|
||||
context.update({'active_model': 'stock.picking', 'active_id': ref('incomming_shipment'), 'active_ids': [ref('incomming_shipment')]})
|
||||
-
|
||||
!record {model: stock.partial.picking, id: partial_incomming}:
|
||||
move_ids:
|
||||
- quantity: 40
|
||||
product_id: product_icecream
|
||||
product_uom: product.product_uom_kgm
|
||||
move_id: incomming_shipment_icecream
|
||||
location_id: location_convenience_shop
|
||||
location_dest_id: location_refrigerator
|
||||
-
|
||||
!python {model: stock.partial.picking }: |
|
||||
self.do_partial(cr, uid, [ref('partial_incomming')], context=context)
|
||||
-
|
||||
I check backorder shipment after received partial shipment.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
shipment = self.browse(cr, uid, ref("incomming_shipment"))
|
||||
backorder = shipment.backorder_id
|
||||
assert backorder, "Backorder should be created after partial shipment."
|
||||
assert backorder.state == 'done', "Backorder should be close after received."
|
||||
for move_line in backorder.move_lines:
|
||||
assert move_line.product_qty == 40, "Qty in backorder is not correspond."
|
||||
assert move_line.state == 'done', "Move line of backorder should be closed."
|
||||
-
|
||||
I receive another 10kgm Ice-cream.
|
||||
-
|
||||
!record {model: stock.partial.picking, id: partial_incomming}:
|
||||
move_ids:
|
||||
- quantity: 10
|
||||
product_id: product_icecream
|
||||
product_uom: product.product_uom_kgm
|
||||
move_id: incomming_shipment_icecream
|
||||
location_id: location_convenience_shop
|
||||
location_dest_id: location_refrigerator
|
||||
-
|
||||
!python {model: stock.partial.picking }: |
|
||||
self.do_partial(cr, uid, [ref('partial_incomming')], context=context)
|
||||
|
||||
-
|
||||
I check incomming shipment after received.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
shipment = self.browse(cr, uid, ref("incomming_shipment"))
|
||||
assert shipment.state == 'done', "shipment should be close after received."
|
||||
for move_line in shipment.move_lines:
|
||||
assert move_line.product_qty == 10, "Qty is not correspond."
|
||||
assert move_line.state == 'done', "Move line should be closed."
|
||||
|
||||
-
|
||||
I return last incomming shipment for 10 kgm Ice-cream.
|
||||
-
|
||||
!record {model: stock.return.picking, id: return_incomming}:
|
||||
invoice_state: none
|
||||
-
|
||||
!python {model: stock.return.picking }: |
|
||||
self.create_returns(cr, uid, [ref('return_incomming')], context=context)
|
||||
-
|
||||
I cancel incomming shipment after return it.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.action_cancel(cr, uid, [ref("incomming_shipment")], context=context)
|
||||
-
|
||||
I make invoice of backorder of incomming shipment.
|
||||
-
|
||||
!python {model: stock.invoice.onshipping}: |
|
||||
shipment = self.pool.get('stock.picking').browse(cr, uid, ref("incomming_shipment"))
|
||||
context.update({'active_model': 'stock.picking', 'active_id': shipment.backorder_id.id, 'active_ids': [shipment.backorder_id.id]})
|
||||
-
|
||||
!record {model: stock.invoice.onshipping, id: invoice_incomming}:
|
||||
group: False
|
||||
-
|
||||
!python {model: stock.invoice.onshipping }: |
|
||||
self.create_invoice(cr, uid, [ref('invoice_incomming')], context=context)
|
||||
-
|
||||
I check invoice state of backorder of incomming shipment.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
shipment = self.browse(cr, uid, ref("incomming_shipment"))
|
||||
assert shipment.backorder_id.invoice_state == 'invoiced', 'Invoice state is not upadted.'
|
||||
-
|
||||
I check availabile stock after received incomming shipping.
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
product = self.browse(cr, uid, ref('product_icecream'), context=context)
|
||||
assert product.qty_available == 140, "Stock is not correspond."
|
||||
assert product.virtual_available == 10, "Vitual stock is not correspond."
|
||||
|
||||
-
|
||||
I split incomming shipment into lots. each lot contain 10 kgm Ice-cream.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
shipment = self.browse(cr, uid, ref("incomming_shipment"))
|
||||
move_ids = [x.id for x in shipment.backorder_id.move_lines]
|
||||
context.update({'active_model': 'stock.move', 'active_id': move_ids[0], 'active_ids': move_ids})
|
||||
-
|
||||
!record {model: stock.move.split, id: split_lot_incomming}:
|
||||
line_ids:
|
||||
- name: incoming_lot0
|
||||
quantity: 10
|
||||
- name: incoming_lot1
|
||||
quantity: 10
|
||||
- name: incoming_lot2
|
||||
quantity: 10
|
||||
- name: incoming_lot3
|
||||
quantity: 10
|
||||
|
||||
-
|
||||
!python {model: stock.move.split }: |
|
||||
self.split_lot(cr, uid, [ref('split_lot_incomming')], context=context)
|
||||
-
|
||||
I check move lines after spliting
|
||||
-
|
||||
!python {model: stock.move}: |
|
||||
lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incomming'), context=context)
|
||||
lot_ids = self.pool.get('stock.production.lot').search(cr, uid, [('name','in',[x.name for x in lot.line_ids])])
|
||||
assert len(lot_ids) == 4, 'lots of incomming shipment are not correspond.'
|
||||
move_ids = self.search(cr, uid, [('location_dest_id','=',ref('location_refrigerator')),('prodlot_id','in',lot_ids)])
|
||||
assert len(move_ids) == 4, 'move lines are not correspond per prodcution lot after splited.'
|
||||
for move in self.browse(cr, uid, move_ids, context=context):
|
||||
assert move.prodlot_id.name in ['incoming_lot0', 'incoming_lot1', 'incoming_lot2', 'incoming_lot3'], "lot is not correspond."
|
||||
assert move.product_qty == 10, "qty is not correspond per production lot."
|
||||
context.update({'active_model':'stock.move', 'active_id':move_ids[0],'active_ids': move_ids})
|
||||
-
|
||||
I consume 1 kgm ice-cream from each incoming lots into internal production.
|
||||
-
|
||||
!record {model: stock.move.consume, id: consume_lot_incomming}:
|
||||
product_qty: 1
|
||||
location_id: location_refrigerator
|
||||
-
|
||||
!python {model: stock.move.consume}: |
|
||||
self.do_move_consume(cr, uid, [ref('consume_lot_incomming')], context=context)
|
||||
-
|
||||
I scrap 10 gm ice-cream from each incoming lots into scrap location.
|
||||
-
|
||||
!record {model: stock.move.scrap, id: scrap_lot_incomming}:
|
||||
product_qty: 0.010
|
||||
-
|
||||
!python {model: stock.move.scrap}: |
|
||||
self.move_scrap(cr, uid, [ref('scrap_lot_incomming')], context=context)
|
||||
-
|
||||
I check stock in scrap location and refrigerator location.
|
||||
-
|
||||
!python {model: stock.location}: |
|
||||
ctx = {'product_id': ref('product_icecream')}
|
||||
refrigerator_location = self.browse(cr, uid, ref('location_refrigerator'), context=ctx)
|
||||
assert refrigerator_location.stock_real == 131.96, 'stock is not correspond in refrigerator location.'
|
||||
scrapped_location = self.browse(cr, uid, ref('stock_location_scrapped'), context=ctx)
|
||||
assert scrapped_location.stock_real == 0.010*4, 'scraped stock is not correspond in scrap location.'
|
||||
production_location = self.browse(cr, uid, ref('location_production'), context=ctx)
|
||||
assert production_location.stock_real == 1*4, 'consume stock is not correspond in production location.' #TOFIX: consume stock is not updated in default production location of product.
|
||||
|
||||
-
|
||||
I check availabile stock after consumed and scraped.
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
product = self.browse(cr, uid, ref('product_icecream'), context=context)
|
||||
assert product.qty_available == 131.96, "Stock is not correspond."
|
||||
assert round(product.virtual_available, 2) == 1.96, "Vitual stock is not correspond."
|
||||
-
|
||||
I trace all incoming lots.
|
||||
-
|
||||
!python {model: stock.production.lot }: |
|
||||
lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incomming'), context=context)
|
||||
lot_ids = self.search(cr, uid, [('name', 'in', [x.name for x in lot.line_ids])])
|
||||
self.action_traceability(cr, uid, lot_ids, context=context)
|
||||
-
|
||||
I check outgoing shipment after stock availablity in refrigerator.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
shipment = self.browse(cr, uid, ref("outgoing_shipment"), context=context)
|
||||
self.pool.get('stock.move').action_assign(cr, uid, [x.id for x in shipment.move_lines]) #TOFIX: assignment of move lines should be call before testing assigment otherwise picking never gone in assign state
|
||||
#TOFIX: shipment should be assigned if stock available
|
||||
#assert shipment.state == "assigned", "Shipment should be assigned."
|
||||
#for move_line in shipment.move_lines:
|
||||
# assert move_line.state == "assigned", "Move should be assigned."
|
||||
self.force_assign(cr, uid, [shipment.id])
|
||||
-
|
||||
I deliver 5kgm Ice-cream to customer so I make partial deliver
|
||||
-
|
||||
!python {model: stock.partial.move}: |
|
||||
context.update({'active_model': 'stock.move', 'active_id': ref('outgoing_shipment_icecream'), 'active_ids': [ref('outgoing_shipment_icecream')]})
|
||||
-
|
||||
!record {model: stock.partial.move, id: partial_outgoing_icecream}:
|
||||
move_ids:
|
||||
- quantity: 5
|
||||
product_id: product_icecream
|
||||
product_uom: product.product_uom_kgm
|
||||
move_id: outgoing_shipment_icecream
|
||||
location_id: location_refrigerator
|
||||
location_dest_id: location_delivery_counter
|
||||
-
|
||||
!python {model: stock.partial.move }: |
|
||||
self.do_partial(cr, uid, [ref('partial_outgoing_icecream')], context=context)
|
||||
|
||||
-
|
||||
I packing outgoing shipment into box per 10kgm with unique tracking lot.
|
||||
-
|
||||
!python {model: stock.move}: |
|
||||
stock_split = self.pool.get('stock.split.into')
|
||||
move = self.browse(cr, uid, ref('outgoing_shipment_icecream'), context=context)
|
||||
context.update({'active_model': 'stock.move', 'active_id': move.id, 'active_ids': [move.id]})
|
||||
total_qty = move.product_qty
|
||||
split_qty = 10
|
||||
while(total_qty>0):
|
||||
split_id = stock_split.create(cr, uid, {'quantity': split_qty}, context=context)
|
||||
stock_split.split(cr, uid, [split_id], context=context)
|
||||
total_qty -= split_qty
|
||||
-
|
||||
I deliver outgoing shipment.
|
||||
-
|
||||
!python {model: stock.partial.picking}: |
|
||||
context.update({'active_model': 'stock.picking', 'active_id': ref('outgoing_shipment'), 'active_ids': [ref('outgoing_shipment')]})
|
||||
-
|
||||
!record {model: stock.partial.picking, id: partial_outgoing}:
|
||||
picking_id: outgoing_shipment
|
||||
-
|
||||
!python {model: stock.partial.picking }: |
|
||||
self.do_partial(cr, uid, [ref('partial_outgoing')], context=context)
|
||||
|
||||
-
|
||||
I check outgoing shipment after deliver.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
shipment = self.browse(cr, uid, ref("outgoing_shipment"), context=context)
|
||||
assert shipment.state == "done", "Shipment should be closed."
|
||||
for move_line in shipment.move_lines:
|
||||
assert move_line.state == "done", "Move should be closed."
|
||||
-
|
||||
I check availabile stock after deliver.
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
product = self.browse(cr, uid, ref('product_icecream'), context=context)
|
||||
assert round(product.qty_available, 2) == 1.96, "Stock is not correspond."
|
||||
assert round(product.virtual_available, 2) == 1.96, "Vitual stock is not correspond."
|
||||
@@ -1,65 +0,0 @@
|
||||
-
|
||||
In order to test partial delivery and back orders, I will use a delivery order with 5 CPU1 and 5 CPU3
|
||||
-
|
||||
I confirm and force the availability of all products on the picking OUT001
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.draft_force_assign(cr, uid, [ref('stock.stock_picking_1')], {})
|
||||
self.force_assign(cr, uid, [ref('stock.stock_picking_1')], {})
|
||||
-
|
||||
After having confirmed the picking and its two lines, I add a new move line in draft state with 7 FAN2
|
||||
-
|
||||
!record {model: stock.move, id: stock_move_3}:
|
||||
product_id: product.product_product_fan2
|
||||
product_uom: product.product_uom_unit
|
||||
product_uos_qty: 7.0
|
||||
product_qty: 7.0
|
||||
location_dest_id: stock.stock_location_customers
|
||||
location_id: stock.stock_location_stock
|
||||
name: CPU3, Processor AMD Athlon XP 1800
|
||||
picking_id: stock_picking_1
|
||||
- |
|
||||
I click on 'Process Now' to process the delivery order and I change quantities to:
|
||||
7 CPU1, 0 CPU3, 3 FAN2 and a new product of 4 PC1
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
result = self.action_process(cr, uid, [ref('stock.stock_picking_1')], {})['res_id']
|
||||
pick = self.pool.get('stock.partial.picking').browse(cr, uid, result, {})
|
||||
lobj = self.pool.get('stock.partial.picking.line')
|
||||
for line in pick.move_ids:
|
||||
if line.product_id.id == ref('product.product_product_cpu3'):
|
||||
lobj.write(cr, uid, [line.id], {
|
||||
'quantity': 0.0
|
||||
}, {})
|
||||
elif line.product_id.id == ref('product.product_product_cpu1'):
|
||||
lobj.write(cr, uid, [line.id], {
|
||||
'quantity': 7.0
|
||||
}, {})
|
||||
elif line.product_id.id == ref('product.product_product_fan2'):
|
||||
lobj.write(cr, uid, [line.id], {
|
||||
'quantity': 3.0
|
||||
}, {})
|
||||
lobj.create(cr, uid, {
|
||||
'product_id': ref('product.product_product_pc1'),
|
||||
'quantity': 2.0,
|
||||
'product_uom': ref('product.product_uom_unit'),
|
||||
'location_id': ref('stock.stock_location_stock'),
|
||||
'location_dest_id': ref('stock.stock_location_customers'),
|
||||
'wizard_id': result
|
||||
}, {})
|
||||
self.pool.get('stock.partial.picking').do_partial(cr, uid, [result], {})
|
||||
-
|
||||
I test that the back order contains 5 CPU3, 4 FAN2 and nothing else
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
pick = self.browse(cr, uid, ref('stock.stock_picking_1'), {})
|
||||
for line in pick.move_lines:
|
||||
if line.product_id.id == ref('product.product_product_cpu3'):
|
||||
assert line.product_qty == 5.0, "Wrong quantity %.2f for CPU3 back order" % (line.product_qty,)
|
||||
elif line.product_id.id == ref('product.product_product_fan2'):
|
||||
assert line.product_qty == 4.0, "Wrong quantity %.2f for FAN2 back order" % (line.product_qty,)
|
||||
elif line.product_id.id == ref('product.product_product_pc1'):
|
||||
assert line.product_qty == 0.0, "Wrong quantity for PC1 back order"
|
||||
else:
|
||||
assert line.product_qty == 0.0, "Wrong quantity for %s back order" % (line.product_id.code,)
|
||||
|
||||
@@ -1,40 +1,41 @@
|
||||
-
|
||||
In order to test the PDF reports defined on a stock, we will print a Stock Overviewall(children) report
|
||||
I print a stock overview report of location.
|
||||
-
|
||||
!python {model: stock.location}: |
|
||||
import netsvc, tools, os
|
||||
(data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('stock.stock_location_stock')], {}, {})
|
||||
if tools.config['test_report_directory']:
|
||||
file(os.path.join(tools.config['test_report_directory'], 'stock-overviewall'+format), 'wb+').write(data)
|
||||
-
|
||||
In order to test the PDF reports defined on stock inventory, we will print a Stock Inventory Move report
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
import netsvc, tools, os
|
||||
(data, format) = netsvc.LocalService('report.stock.inventory.move').create(cr, uid, [ref('stock.stock_inventory_0')], {}, {})
|
||||
if tools.config['test_report_directory']:
|
||||
file(os.path.join(tools.config['test_report_directory'], 'stock-stock_inventory_move.'+format), 'wb+').write(data)
|
||||
-
|
||||
In order to test the PDF reports defined on a stock, we will print a Stock Overview report
|
||||
-
|
||||
!python {model: stock.location}: |
|
||||
import netsvc, tools, os
|
||||
(data, format) = netsvc.LocalService('report.lot.stock.overview').create(cr, uid, [ref('stock.stock_location_14')], {}, {})
|
||||
(data, format) = netsvc.LocalService('report.lot.stock.overview').create(cr, uid, [ref('location_refrigerator')], {}, {})
|
||||
if tools.config['test_report_directory']:
|
||||
file(os.path.join(tools.config['test_report_directory'], 'stock-overview'+format), 'wb+').write(data)
|
||||
-
|
||||
In order to test the PDF reports defined on a stock, we will print a Stock Picking List report
|
||||
I print a Stock Overview report of location with child location.
|
||||
-
|
||||
!python {model: stock.location}: |
|
||||
import netsvc, tools, os
|
||||
(data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('location_refrigerator')], {}, {})
|
||||
if tools.config['test_report_directory']:
|
||||
file(os.path.join(tools.config['test_report_directory'], 'stock-overviewall'+format), 'wb+').write(data)
|
||||
-
|
||||
I print a Stock Inventory report.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
import netsvc, tools, os
|
||||
(data, format) = netsvc.LocalService('report.stock.inventory.move').create(cr, uid, [ref('stock_inventory_icecream')], {}, {})
|
||||
if tools.config['test_report_directory']:
|
||||
file(os.path.join(tools.config['test_report_directory'], 'stock-stock_inventory_move.'+format), 'wb+').write(data)
|
||||
-
|
||||
I print a outgoing shipment report.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
import netsvc, tools, os
|
||||
(data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('stock.stock_picking_0')], {}, {})
|
||||
(data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('outgoing_shipment')], {}, {})
|
||||
if tools.config['test_report_directory']:
|
||||
file(os.path.join(tools.config['test_report_directory'], 'stock-picking_list'+format), 'wb+').write(data)
|
||||
-
|
||||
In order to test the PDF reports defined on a Stock, we will print Product Stock Report
|
||||
I print stock Report.
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
import netsvc, tools, os
|
||||
(data, format) = netsvc.LocalService('report.stock.product.history').create(cr, uid, [ref('product.product_product_pc1')], {}, {})
|
||||
(data, format) = netsvc.LocalService('report.stock.product.history').create(cr, uid, [ref('product_icecream')], {}, {})
|
||||
if tools.config['test_report_directory']:
|
||||
file(os.path.join(tools.config['test_report_directory'], 'stock-product_stock_report.'+format), 'wb+').write(data)
|
||||
|
||||
|
||||
@@ -1,424 +0,0 @@
|
||||
|
||||
-
|
||||
In order to test the stock module, I will create product,
|
||||
create physical inventory ,fill inventory lines from location,split inventory line into production lot
|
||||
-
|
||||
I create Stock Production Lot for product PC3
|
||||
-
|
||||
!record {model: stock.production.lot, id: stock_production_lot0}:
|
||||
product_id: product.product_product_pc3
|
||||
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
name: 0000001
|
||||
-
|
||||
I trace the Stock Production Lot for product PC3.
|
||||
-
|
||||
!python {model: stock.production.lot }: |
|
||||
self.action_traceability(cr,uid,[ref('stock_production_lot0')], {'lang': 'en_US', 'tz': False, 'active_model': 'ir.ui.menu', 'field': '', 'type': ''})
|
||||
|
||||
-
|
||||
I create change product quantity for product PC3.
|
||||
-
|
||||
!record {model: stock.change.product.qty, id: stock_change_product_qty0}:
|
||||
product_id: product.product_product_pc3
|
||||
new_quantity: 100
|
||||
location_id: stock.stock_location_stock
|
||||
prodlot_id: stock.stock_production_lot0
|
||||
|
||||
-
|
||||
I apply the new quantity on product PC3.
|
||||
-
|
||||
!python {model: stock.change.product.qty }: |
|
||||
context = {"lang": 'en_US', "active_model":
|
||||
"product.product", "active_ids": [ref("product.product_product_pc3")], "tz": False, "active_id":ref('product.product_product_pc3')}
|
||||
self.default_get(cr, uid, ["prodlot_id", "location_id", "new_quantity", "product_id"], context)
|
||||
self.fields_view_get(cr, uid, ref("stock.view_change_product_quantity"),"form", context)
|
||||
self.change_product_qty(cr, uid, [ref("stock_change_product_qty0")], {"lang": 'en_US', "active_model":
|
||||
"stock.change.product.qty", "active_ids": ref("product.product_product_pc3"), "tz": False, "active_id":ref('product.product_product_pc3')})
|
||||
|
||||
-
|
||||
I check that the quantity on product PC3 is updated.
|
||||
-
|
||||
!python {model: product.product }: |
|
||||
pro_obj = self.browse(cr, uid, ref("product.product_product_pc3"))
|
||||
assert (pro_obj.qty_available >= 100) , "The quantity of PC3 is not updated!"
|
||||
|
||||
-
|
||||
I Read quantity on product PC3.
|
||||
-
|
||||
!python {model: stock.location }: |
|
||||
self.read(cr, uid, [ref("stock.stock_location_stock")],['stock_real_value','stock_virtual'], {'lang': 'en_GB', 'tz': False, 'active_model': 'product.product', 'bin_size': True, 'active_ids': [ref("product.product_product_pc3")], 'product_id':ref("product.product_product_pc3"), 'active_id': ref("product.product_product_pc3")})
|
||||
|
||||
-
|
||||
I Creating a chained stock.location record
|
||||
-
|
||||
!record {model: stock.location, id: stock_location_loc0}:
|
||||
chained_auto_packing: auto
|
||||
chained_delay: 0.0
|
||||
chained_location_id: stock.stock_location_customers
|
||||
chained_location_type: fixed
|
||||
location_id: stock.stock_location_company
|
||||
name: chain location
|
||||
parent_left: 2
|
||||
parent_right: 3
|
||||
usage: internal
|
||||
|
||||
-
|
||||
I create Product By location chart for stock.location.product Object.
|
||||
-
|
||||
!record {model: stock.location.product, id: stock_location_product0}:
|
||||
from_date: '2011-07-01 00:00:00'
|
||||
to_date: '2011-07-31 23:59:00'
|
||||
|
||||
-
|
||||
I open product chart.
|
||||
-
|
||||
!python {model: stock.location.product }: |
|
||||
self.action_open_window(cr, uid, [ref("stock_location_product0")], {'lang': 'en_US', 'full': 1, 'tz': False, 'active_model': 'stock.location', 'search_default_in_location': 1, 'active_ids': [ref("stock.stock_location_stock")], 'active_id': ref("stock.stock_location_stock")})
|
||||
|
||||
-
|
||||
I open product form from stock.location object .
|
||||
-
|
||||
!python {model: product.product }: |
|
||||
self.fields_view_get(cr, uid, False, "tree", {'lang': 'en_US', 'full': 1, 'tz': False, 'active_model': 'stock.location', 'location': ref('stock.stock_location_stock'), 'search_default_in_location': 1, 'active_ids': [ref("stock.stock_location_stock")], 'active_id': ref("stock.stock_location_stock")})
|
||||
|
||||
-
|
||||
I create change product standard price for product PC3.
|
||||
-
|
||||
!record {model: stock.change.standard.price, id: stock_change_standard_price0}:
|
||||
new_price: 1515
|
||||
stock_account_input: account.a_recv
|
||||
stock_account_output: account.a_pay
|
||||
stock_journal: account.expenses_journal
|
||||
enable_stock_in_out_acc: True
|
||||
|
||||
-
|
||||
I apply the new product standard price on product PC3.
|
||||
-
|
||||
!python {model: stock.change.standard.price }: |
|
||||
context = {"lang": 'en_US', "active_model":
|
||||
"product.product", "active_ids": [ref("product.product_product_pc3")], "tz": False, "active_id":ref('product.product_product_pc3')}
|
||||
self.default_get(cr, uid, ["new_price"], context)
|
||||
self.change_price(cr, uid, [ref("stock_change_product_qty0")], context)
|
||||
|
||||
-
|
||||
I create Physical Inventory for the products.
|
||||
-
|
||||
!record {model: stock.inventory, id: stock_inventory_physicalinventoy0}:
|
||||
company_id: base.main_company
|
||||
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
inventory_line_id:
|
||||
- company_id: base.main_company
|
||||
location_id: stock.stock_location_stock
|
||||
product_id: product.product_product_pc3
|
||||
product_qty: 10.0
|
||||
product_uom: product.product_uom_unit
|
||||
- company_id: base.main_company
|
||||
location_id: stock.stock_location_stock
|
||||
product_id: product.product_product_pc1
|
||||
product_qty: 10.0
|
||||
product_uom: product.product_uom_unit
|
||||
name: Physical inventory
|
||||
state: draft
|
||||
|
||||
-
|
||||
I create merge Inventory for the products.
|
||||
-
|
||||
!record {model: stock.inventory, id: stock_inventory_mergeinventoy0}:
|
||||
company_id: base.main_company
|
||||
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
inventory_line_id:
|
||||
- company_id: base.main_company
|
||||
location_id: stock.stock_location_stock
|
||||
product_id: product.product_product_pc3
|
||||
product_qty: 20.0
|
||||
product_uom: product.product_uom_unit
|
||||
- company_id: base.main_company
|
||||
location_id: stock.stock_location_stock
|
||||
product_id: product.product_product_pc1
|
||||
product_qty: 20.0
|
||||
product_uom: product.product_uom_unit
|
||||
name: Physical inventory
|
||||
state: draft
|
||||
|
||||
-
|
||||
I merge inventory .
|
||||
-
|
||||
!python {model: stock.inventory.merge}: |
|
||||
context = {"lang": 'en_US',
|
||||
"full": "1", "tz": False, "active_model": "stock.inventory", "active_ids":
|
||||
[ref("stock_inventory_physicalinventoy0"), ref("stock_inventory_mergeinventoy0")], "active_id": ref("stock_inventory_physicalinventoy0"), }
|
||||
self.fields_view_get(cr, uid, False, "form", context)
|
||||
self.do_merge(cr, uid, [ref("stock_inventory_mergeinventoy0")], context)
|
||||
|
||||
-
|
||||
I create stock.inventory.line record.
|
||||
-
|
||||
!record {model: stock.inventory.line, id: stock_inventory_line}:
|
||||
product_id: product.product_product_pc1
|
||||
product_uom: product.product_uom_unit
|
||||
product_qty: 10
|
||||
inventory_id: stock_inventory_mergeinventoy0
|
||||
location_id: stock.stock_location_stock
|
||||
|
||||
-
|
||||
I Change a Product oF stock.inventory.line record.
|
||||
-
|
||||
!python {model: stock.inventory.line}: |
|
||||
self.on_change_product_id(cr, uid, [ref("stock_inventory_line")], ref('stock.stock_location_stock'), ref('product.product_product_pc3'), False, False)
|
||||
|
||||
-
|
||||
I create stock.fill.inventory .
|
||||
-
|
||||
!record {model: stock.fill.inventory, id: stock_fill_inventory_0}:
|
||||
location_id: stock.stock_location_stock
|
||||
recursive: False
|
||||
set_stock_zero: False
|
||||
|
||||
-
|
||||
I fill inventory for PC3.
|
||||
-
|
||||
!python {model: stock.fill.inventory}: |
|
||||
context = {"lang": 'en_US',"full": "1", "tz": False, "active_model": "stock.inventory", "active_ids":
|
||||
[ref("stock_inventory_physicalinventoy0")], "active_id": ref("stock_inventory_physicalinventoy0")}
|
||||
self.view_init(cr, uid, ["set_stock_zero", "location_id", "recursive"], context)
|
||||
self.fill_inventory(cr, uid, [ref("stock_fill_inventory_0")], context)
|
||||
|
||||
-
|
||||
I split the PC3 inventory line to create 5 PC3 with production lot 00002-stock-test
|
||||
-
|
||||
!record {model: stock.inventory.line.split, id: stock_inventory_line_0}:
|
||||
line_ids:
|
||||
- name: '00002-stock-test'
|
||||
quantity: 5
|
||||
product_id: product.product_product_pc1
|
||||
product_uom: product.product_uom_unit
|
||||
use_exist: False
|
||||
qty: 10
|
||||
-
|
||||
I confirm the split operation
|
||||
-
|
||||
!python {model: stock.inventory.line}: |
|
||||
line_ids = self.search(cr, uid, [('inventory_id','=',ref('stock_inventory_physicalinventoy0')),
|
||||
('product_id','=',ref('product.product_product_pc1'))])
|
||||
assert line_ids, 'Inventory lines are missing'
|
||||
self.pool.get('stock.inventory.line.split').split_lot(cr, uid, [ref("stock_inventory_line_0")],
|
||||
{'active_model': 'stock.inventory.line',
|
||||
'active_ids': [line_ids[0]]})
|
||||
-
|
||||
I confirm the Inventory for PC3.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
self.action_confirm(cr,uid,[ref('stock_inventory_physicalinventoy0')])
|
||||
self.action_done(cr,uid,[ref('stock_inventory_physicalinventoy0')])
|
||||
-
|
||||
I cancel the Inventory for PC3.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
self.action_cancel_inventary(cr,uid,[ref('stock_inventory_physicalinventoy0')])
|
||||
|
||||
-
|
||||
I change inventory state to draft for PC3.
|
||||
-
|
||||
!python {model: stock.inventory}: |
|
||||
self.action_cancel_draft(cr,uid,[ref('stock_inventory_physicalinventoy0')])
|
||||
|
||||
-
|
||||
In Order to test the picking I create picking with move lines.
|
||||
-
|
||||
!record {model: stock.picking, id: stock_picking_0}:
|
||||
name: test_picking
|
||||
address_id: base.res_partner_address_4
|
||||
company_id: base.main_company
|
||||
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
invoice_state: 2binvoiced
|
||||
move_lines:
|
||||
- company_id: base.main_company
|
||||
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
location_dest_id: stock.stock_location_loc0
|
||||
location_id: stock.stock_location_stock
|
||||
name: PC3
|
||||
product_id: product.product_product_pc3
|
||||
product_qty: 100.0
|
||||
product_uom: product.product_uom_unit
|
||||
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
product_uos_qty: 100.0
|
||||
move_type: direct
|
||||
type: out
|
||||
|
||||
-
|
||||
I split the picking with a first batch of 20 PCs
|
||||
-
|
||||
!python {model: stock.picking }: |
|
||||
pick=self.browse(cr,uid,ref('stock_picking_0'))
|
||||
split_obj=self.pool.get('stock.split.into')
|
||||
partial_datas={}
|
||||
move=pick.move_lines[0]
|
||||
partial_datas= {
|
||||
'quantity': 20,
|
||||
}
|
||||
split_id = self.pool.get('stock.split.into').create(cr, uid, partial_datas)
|
||||
split_obj.split(cr, uid, [split_id], {"lang": "en_US", "tz":
|
||||
False, "active_model": "stock.move", "active_ids": [move.id],
|
||||
"active_id": move.id, })
|
||||
|
||||
-
|
||||
I click on draft_force_assign on picking.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.draft_force_assign(cr, uid, [ref("stock_picking_0")], {"lang": "en_US", "active_model":
|
||||
"ir.ui.menu", "tz": False, "search_default_confirmed": 1, "contact_display":
|
||||
"partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
|
||||
ref("stock.menu_action_picking_tree6"), })
|
||||
|
||||
-
|
||||
I click on action_assign on picking.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.action_assign(cr, uid, [ref("stock_picking_0")], {"lang": "en_US", "active_model":
|
||||
"ir.ui.menu", "tz": False, "search_default_confirmed": 1, "contact_display":
|
||||
"partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
|
||||
ref("stock.menu_action_picking_tree6"), })
|
||||
|
||||
-
|
||||
I process the partial picking with 20 PCE
|
||||
-
|
||||
!python {model: stock.picking }: |
|
||||
pick = self.browse(cr,uid,ref('stock_picking_0'))
|
||||
stock_partial_move = self.pool.get('stock.partial.move')
|
||||
partial_id = stock_partial_move.create(cr, uid, {},
|
||||
context={'active_model': 'stock.move',
|
||||
'active_ids': [x.id for x in pick.move_lines]})
|
||||
stock_partial_move.do_partial(cr, uid, [partial_id])
|
||||
-
|
||||
I Performing an osv_memory action split_lot on module stock.move.split
|
||||
-
|
||||
|
||||
!python {model: stock.picking }: |
|
||||
split_obj=self.pool.get('stock.move.split')
|
||||
split_move_lines=self.pool.get('stock.move.split.lines')
|
||||
pick=self.browse(cr,uid,ref('stock_picking_0'))
|
||||
partial_datas={}
|
||||
move=pick.move_lines[0]
|
||||
partial_datas= {
|
||||
'product_id': move.product_id.id,
|
||||
'qty': 80,
|
||||
'product_uom': move.product_uom.id,
|
||||
'use_exist': move.picking_id and move.picking_id.type=='out' and True or False
|
||||
}
|
||||
split_id = self.pool.get('stock.move.split').create(cr, uid, partial_datas, context={})
|
||||
split_move_data= {
|
||||
'quantity': 10,
|
||||
'name': 'lot',
|
||||
}
|
||||
split_move_id = split_move_lines.create(cr, uid, split_move_data, context={})
|
||||
split_obj.default_get(cr, uid, ["product_id", "product_uom", "line_exist_ids", "qty",
|
||||
"line_ids", "use_exist"], {'lang': 'en_US', 'default_location_dest_id': ref('stock.stock_location_stock'), 'tz': False, 'active_model': 'stock.move', 'search_default_receive': 1, 'product_receive': True, 'active_ids': [move.id], 'default_location_id': ref('stock.stock_location_locations'), 'active_id': move.id})
|
||||
split_obj.split_lot(cr, uid, [split_id], context={"lang": "en_US", "tz":
|
||||
False, "active_model": "stock.move", "scrap": True, "active_ids": [move.id],
|
||||
"active_id": move.id, })
|
||||
|
||||
-
|
||||
I Performed an osv_memory action move_scrap on module stock.move.scrap
|
||||
-
|
||||
!python {model: stock.picking }: |
|
||||
location_obj = self.pool.get('stock.location')
|
||||
scrpaed_location_ids = location_obj.search(cr, uid, [('scrap_location','=',True)])
|
||||
pick=self.browse(cr,uid,ref('stock_picking_0'))
|
||||
scrap_obj=self.pool.get('stock.move.scrap')
|
||||
partial_datas={}
|
||||
move=pick.move_lines[0]
|
||||
partial_datas= {
|
||||
'product_id': move.product_id.id,
|
||||
'location_id': scrpaed_location_ids[0],
|
||||
'product_qty': 1,
|
||||
'product_uom': move.product_uom.id,
|
||||
}
|
||||
scrap_id = scrap_obj.create(cr, uid, partial_datas)
|
||||
context = {"lang": "en_US", "tz": False, "active_model": "stock.move",
|
||||
"scrap": True, "active_ids": [move.id], "active_id": move.id, }
|
||||
scrap_obj.default_get(cr, uid, ["location_id", "product_id", "product_uom", "product_qty"], context)
|
||||
scrap_obj.move_scrap(cr, uid, [scrap_id], context)
|
||||
|
||||
-
|
||||
I Performed an osv_memory do move consume on module stock.move.consume
|
||||
-
|
||||
!python {model: stock.picking }: |
|
||||
location_obj = self.pool.get('stock.location')
|
||||
scrpaed_location_ids = location_obj.search(cr, uid, [('scrap_location','=',True)])
|
||||
pick=self.browse(cr,uid,ref('stock_picking_0'))
|
||||
consume_obj=self.pool.get('stock.move.consume')
|
||||
partial_datas={}
|
||||
move=pick.move_lines[0]
|
||||
partial_datas= {
|
||||
'product_id': move.product_id.id,
|
||||
'location_id': scrpaed_location_ids[0],
|
||||
'product_qty': 1,
|
||||
'product_uom': move.product_uom.id,
|
||||
}
|
||||
context = {"lang": "en_US", "tz": False, "active_model": "stock.move",
|
||||
"scrap": True, "active_ids": [move.id], "active_id": move.id, }
|
||||
consume_id = consume_obj.create(cr, uid, partial_datas)
|
||||
consume_obj.default_get(cr, uid, ["location_id", "product_id", "product_uom", "product_qty"], context)
|
||||
consume_obj.do_move_consume(cr, uid, [consume_id], context)
|
||||
|
||||
-
|
||||
I process the picking with the 80 remaining PCs
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
stock_partial_picking = self.pool.get('stock.partial.picking')
|
||||
partial_id = stock_partial_picking.create(cr, uid, {},
|
||||
context={'active_model': 'stock.picking',
|
||||
'active_ids': [ref('stock_picking_0')]})
|
||||
stock_partial_picking.do_partial(cr, uid, [partial_id])
|
||||
-
|
||||
I Performing an osv_memory action create_invoice on module stock.invoice.onshipping
|
||||
-
|
||||
!python {model: stock.invoice.onshipping}: |
|
||||
invoice_line_id = self.create(cr, uid,{}, {"lang": 'en_US', "active_model":
|
||||
"stock.picking", "active_ids": [ref("stock_picking_0")], "tz": False, "active_id":ref("stock_picking_0")})
|
||||
self.open_invoice(cr, uid, [invoice_line_id], {"lang": "en_US",
|
||||
"search_default_available": 1, "inv_type": "in_invoice" , "tz": False, "active_model": "stock.picking",
|
||||
"contact_display": "partner_address", "active_ids": [ref("stock_picking_0")],
|
||||
"active_id": ref("stock_picking_0")})
|
||||
self._get_journal_id(cr, uid, {"lang": "en_US", "search_default_available": 1, "tz": False, "active_model": "stock.picking",
|
||||
"contact_display": "partner_address", "active_ids": [ref("stock_picking_0")],
|
||||
"active_id": ref("stock_picking_0"), })
|
||||
|
||||
-
|
||||
I create a record of stock.picking and unlink a record
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
copy_id = self.copy(cr, uid, (ref("stock_picking_0")))
|
||||
ctx = {"lang": "en_US", "active_model":
|
||||
"ir.ui.menu", "tz": False, "search_default_confirmed": 1, "contact_display":
|
||||
"partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
|
||||
ref("stock.menu_action_picking_tree6"), }
|
||||
self.draft_force_assign(cr, uid, [copy_id], ctx)
|
||||
self.unlink(cr, uid, [copy_id], ctx)
|
||||
|
||||
-
|
||||
I create a record of stock.picking and cancel a record
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
copy_id = self.copy(cr, uid, (ref("stock_picking_0")))
|
||||
self.draft_validate(cr, uid, [copy_id], {"lang": "en_US", "search_default_available":
|
||||
1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner_address",
|
||||
"active_ids": [ref("stock.menu_action_picking_tree4")], "active_id": ref("stock.menu_action_picking_tree4"),
|
||||
})
|
||||
self.allow_cancel(cr, uid, [copy_id], context= None)
|
||||
|
||||
-
|
||||
I process a copy of the picking and I return it
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
copy_id = self.copy(cr, uid, (ref("stock_picking_0")))
|
||||
self.draft_force_assign(cr, uid, [copy_id])
|
||||
self.force_assign(cr, uid, [copy_id])
|
||||
stock_partial_picking = self.pool.get('stock.partial.picking')
|
||||
context = {'active_model': 'stock.picking',
|
||||
'active_ids': [copy_id],
|
||||
'active_id': copy_id}
|
||||
partial_id = stock_partial_picking.create(cr, uid, {}, context=context)
|
||||
stock_partial_picking.do_partial(cr, uid, [partial_id], context)
|
||||
return_pick_id = self.pool.get('stock.return.picking').create(cr, uid,{}, context)
|
||||
self.pool.get('stock.return.picking').create_returns(cr, uid, [return_pick_id], context)
|
||||
@@ -1,78 +0,0 @@
|
||||
|
||||
-
|
||||
I create stock.tracking record.
|
||||
-
|
||||
!record {model: stock.tracking, id: stock_tracking_0}:
|
||||
move_ids:
|
||||
- product_id: product.product_product_pc1
|
||||
product_qty: 5.0
|
||||
product_uom: product.product_uom_unit
|
||||
location_id : stock.stock_location_suppliers
|
||||
location_dest_id: stock.stock_location_shop0
|
||||
name : '[PC1] Basic PC'
|
||||
date_expected : !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
name: 0000007
|
||||
active: True
|
||||
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
-
|
||||
I trace the information of a product.
|
||||
-
|
||||
!python {model: stock.tracking}: |
|
||||
self.name_get(cr, uid, [ref('stock_tracking_0')],{'lang': 'en_US', 'tz': False, 'active_model': 'ir.ui.menu', 'field': '', 'type': ''})
|
||||
self.action_traceability(cr,uid,[ref('stock_tracking_0')], {'lang': 'en_US', 'tz': False, 'active_model': 'ir.ui.menu', 'field': '', 'type': ''})
|
||||
|
||||
-
|
||||
I creat stock.move Record
|
||||
-
|
||||
!record {model: stock.move, id: stock_move_test0}:
|
||||
location_dest_id: stock.stock_location_shop0
|
||||
product_id: product.product_product_pc1
|
||||
product_qty: 5.0
|
||||
product_uom: product.product_uom_unit
|
||||
date_expected : !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
location_id : stock.stock_location_suppliers
|
||||
name : '[PC1] Basic PC'
|
||||
company_id: base.main_company
|
||||
product_uos_qty : 5.0
|
||||
name: IN/00010
|
||||
state: assigned
|
||||
|
||||
-
|
||||
I Check onchange function of stock.move object
|
||||
-
|
||||
!python {model: stock.move }: |
|
||||
self.onchange_lot_id(cr, uid, [ref("stock_move_test0")], ref("stock.stock_production_lot0"), 5, ref("stock.stock_location_suppliers"), ref("product.product_product_pc1"), ref("product.product_uom_unit"), None)
|
||||
self.onchange_quantity(cr, uid, [ref("stock_move_test0")], ref("product.product_product_pc1"), 10, ref("product.product_uom_unit"), ref("product.product_uom_unit"))
|
||||
self.onchange_uos_quantity(cr, uid, [ref("stock_move_test0")], ref("product.product_product_pc1"), 10, ref("product.product_uom_unit"), ref("product.product_uom_unit"))
|
||||
self.onchange_product_id(cr, uid, [ref("stock_move_test0")], ref("product.product_product_pc1"), ref("stock.stock_location_suppliers"), ref("stock.stock_location_shop0"), False)
|
||||
|
||||
-
|
||||
I Check _getSSCC and action_partial_move function of stock.move object
|
||||
-
|
||||
!python {model: stock.move }: |
|
||||
context = {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
|
||||
"stock.move", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("stock_move_test0")], "tz": False, "active_id":ref("stock_move_test0")}
|
||||
self._getSSCC(cr, uid , context)
|
||||
self.action_partial_move(cr, uid , [ref("stock_move_test0")], context)
|
||||
|
||||
-
|
||||
I check write function
|
||||
-
|
||||
!python {model: stock.move }: |
|
||||
vals = {"product_qty" : 2, "product_uos_qty": 2}
|
||||
self.write(cr, uid, [ref("stock_move_test0")], vals, {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
|
||||
"ir.ui.menu", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("stock_move_tree")], "tz": False, "active_id":ref("stock_move_tree")})
|
||||
|
||||
-
|
||||
I check default function
|
||||
-
|
||||
!python {model: stock.move }: |
|
||||
self.name_get(cr, uid, [ref("stock_move_test0")], {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
|
||||
"stock.move", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("stock_move_test0")], "tz": False, "active_id":ref("stock_move_test0")})
|
||||
ctx = {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
|
||||
"ir.ui.menu", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("view_move_form_reception_picking")], "tz": False, "active_id":ref("view_move_form_reception_picking")}
|
||||
self._default_location_destination(cr, uid, ctx)
|
||||
self._default_location_source(cr, uid, ctx)
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ class stock_fill_inventory(osv.osv_memory):
|
||||
|
||||
if fill_inventory.recursive:
|
||||
location_ids = location_obj.search(cr, uid, [('location_id',
|
||||
'child_of', [fill_inventory.location_id.id])], order="id",
|
||||
'child_of', [fill_inventory.location_id.id])], order="id",
|
||||
context=context)
|
||||
else:
|
||||
location_ids = [fill_inventory.location_id.id]
|
||||
|
||||
@@ -34,6 +34,7 @@ class stock_move_consume(osv.osv_memory):
|
||||
'location_id': fields.many2one('stock.location', 'Location', required=True)
|
||||
}
|
||||
|
||||
#TOFIX: product_uom should not have differemt category of default UOM of product. Qty should be convert into UOM of original move line before going in consume and scrap
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
""" Get default values
|
||||
@param self: The object pointer.
|
||||
|
||||
@@ -42,8 +42,8 @@ class action_traceability(osv.osv_memory):
|
||||
lot_id = ids
|
||||
if context is None:
|
||||
context = {}
|
||||
type1 = context['type'] or 'move_history_ids2'
|
||||
field = context['field'] or 'tracking_id'
|
||||
type1 = context.get('type', 'move_history_ids2')
|
||||
field = context.get('field', 'tracking_id')
|
||||
obj = self.pool.get('stock.move')
|
||||
ids = obj.search(cr, uid, [(field, 'in',lot_id)])
|
||||
cr.execute('select id from ir_ui_view where model=%s and field_parent=%s and type=%s', ('stock.move', type1, 'tree'))
|
||||
|
||||
@@ -6,20 +6,15 @@
|
||||
-
|
||||
!record {model: stock.picking, id: stock_picking_out0}:
|
||||
address_id: base.res_partner_address_3000
|
||||
company_id: base.main_company
|
||||
invoice_state: 2binvoiced
|
||||
move_lines:
|
||||
- company_id: base.main_company
|
||||
date_expected: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
location_id: stock.stock_location_stock
|
||||
product_id: product.product_product_pc1
|
||||
product_qty: 3.0
|
||||
product_uom: product.product_uom_unit
|
||||
location_dest_id: stock.stock_location_customers
|
||||
name: '[PC1] Basic PC'
|
||||
move_type: direct
|
||||
name: OUT/00006
|
||||
type: out
|
||||
-
|
||||
I need to check the availability of the product so I make my picking order for processing later.
|
||||
|
||||
@@ -253,5 +253,6 @@
|
||||
I check whether the procurement orders are created or not.
|
||||
-
|
||||
!python {model: procurement.order}: |
|
||||
proc_ids = self.search(cr, uid, [('origin','=','MPS(admin) 2011, week 29'),('product_id','=',ref("product.product_product_pc1"))])
|
||||
import datetime
|
||||
proc_ids = self.search(cr, uid, [('origin','=','MPS(admin) %s, week 29' % (datetime.datetime.now().year)),('product_id','=',ref("product.product_product_pc1"))])
|
||||
assert proc_ids,'No Procurements!'
|
||||
|
||||
@@ -563,7 +563,7 @@ class survey_question_wiz(osv.osv_memory):
|
||||
surv_name_wiz.write(cr, uid, [context.get('sur_name_id',False)], {'response' : tools.ustr(response_id)})
|
||||
|
||||
#click first time on next button then increemnet on total start suvey
|
||||
if not sur_name_read['store_ans']:
|
||||
if not safe_eval(sur_name_read['store_ans']):
|
||||
his_id = self.pool.get('survey.history').create(cr, uid, {'user_id': uid, \
|
||||
'date': strftime('%Y-%m-%d %H:%M:%S'), 'survey_id': sur_name_read['survey_id'][0]})
|
||||
survey_id = sur_name_read['survey_id'][0]
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">ir.attachment</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="domain" eval="[('parent_id','=',ref('dir_sale'))]"></field>
|
||||
<field name="context" eval="{'default_parent_id':ref('dir_sale')}"/>
|
||||
<field name="help">Documents give you access to all files attached to any record. It is a repository of all documents such as emails, project-related attachments or any other documents. From this view, you can search through the content of the documents. OpenERP automatically assign meta data based on the record like the related partner and indexes the content of .DOC, .ODT, .TXT, .SXW and .PDF documents.</field>
|
||||
</record>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user