[MERGE] sync with trunk
bzr revid: mat@openerp.com-20130911094257-yu17yffdawc45v2a
This commit is contained in:
commit
1f30f78fab
|
@ -37,7 +37,6 @@ There are two types of views:
|
|||
|
||||
.. note:: Since OpenERP 4.1, form views can also contain graphs.
|
||||
|
||||
|
||||
Form views
|
||||
----------
|
||||
|
||||
|
@ -388,6 +387,33 @@ The easiest method to compute real statistics on objects is:
|
|||
You can get en example in all modules of the form: report\_.... Example: report_crm.
|
||||
|
||||
|
||||
Controlling view actions
|
||||
------------------------
|
||||
|
||||
When defining a view, the following attributes can be added on the
|
||||
opening element of the view (i.e. ``<form>``, ``<tree>``...)
|
||||
|
||||
``create``
|
||||
set to ``false`` to hide the link / button which allows to create a new
|
||||
record.
|
||||
|
||||
``delete``
|
||||
set to ``false`` to hide the link / button which allows to remove a
|
||||
record.
|
||||
|
||||
``edit``
|
||||
set to ``false`` to hide the link / button which allows to
|
||||
edit a record.
|
||||
|
||||
|
||||
These attributes are available on form, tree, kanban and gantt
|
||||
views. They are normally automatically set from the access rights of
|
||||
the users, but can be forced globally in the view definition. A
|
||||
possible use case for these attributes is to define an inner tree view
|
||||
for a one2many relation inside a form view, in which the user cannot
|
||||
add or remove related records, but only edit the existing ones (which
|
||||
are presumably created through another way, such as a wizard).
|
||||
|
||||
|
||||
Calendar Views
|
||||
--------------
|
||||
|
@ -680,6 +706,7 @@ toolbar
|
|||
its descendants will be displayed in the main tree. The value is ignored
|
||||
for flat lists.
|
||||
|
||||
|
||||
Grouping Elements
|
||||
+++++++++++++++++
|
||||
|
||||
|
@ -1351,12 +1378,22 @@ When you add a one2many field in a form view, you do something like this :
|
|||
|
||||
If you want to specify the views to use, you can add a *context* attribute, and
|
||||
specify a view id for each type of view supported, exactly like the action's
|
||||
*view_id* attribute:
|
||||
*view_id* attribute, except that the provided view id must always be
|
||||
fully-qualified with the module name, even if it belongs to the same module:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<field name="order_line" colspan="4" nolabel="1"
|
||||
context="{'form_view_ref' : 'module.view_id', 'tree_view_ref' : 'model.view_id'}"/>
|
||||
context="{'form_view_ref': 'module.view_id',
|
||||
'tree_view_ref': 'module.view_id'}"/>
|
||||
|
||||
.. note::
|
||||
|
||||
You *have to* put the module name in the view_id, because this
|
||||
is evaluated when the view is displayed, and not when the XML file
|
||||
is parsed, so the module name information is not available. Failing
|
||||
to do so will result in the default view being selected (see
|
||||
below).
|
||||
|
||||
If you don't specify the views, OpenERP will choose one in this order :
|
||||
|
||||
|
|
|
@ -6,6 +6,16 @@ Changelog
|
|||
`trunk`
|
||||
-------
|
||||
|
||||
- Improved ``html_email_clean`` in tools: better quote and signature finding,
|
||||
added shortening.
|
||||
- Cleaned and slightly refactored ``ir.actions.server``. The ``loop``, ``sms``
|
||||
and ``dummy`` server actions have been removed; ``object_create`` and
|
||||
``object_copy`` have been merged into ``object_create``; ``other`` is now ``multi``
|
||||
and raises in case of loops. See :ref:`ir-actions-server` for more details.
|
||||
- Removed ``sms_send`` method.
|
||||
- Added checking of recursions in many2many loops using ``_check_m2m_recursion``.
|
||||
- Added MONTHS attribute on fields.date and fields.datetime, holding the list
|
||||
(month_number, month_name)
|
||||
- Almost removed ``LocalService()``. For reports,
|
||||
``openerp.osv.orm.Model.print_report()`` can be used. For workflows, see
|
||||
:ref:`orm-workflows`.
|
||||
|
@ -21,5 +31,15 @@ Changelog
|
|||
``openerp.exceptions.RedirectWarning``.
|
||||
- Give a pair of new methods to ``res.config.settings`` and a helper to make
|
||||
them easier to use: ``get_config_warning()``.
|
||||
- Path to webkit report files (field ``report_file``) must be writen with the
|
||||
Unix way (with ``/`` and not ``\``)
|
||||
- Path to webkit report files (field ``report_file``) must be written the
|
||||
Unix way (with ``/`` and not ``\``)
|
||||
|
||||
|
||||
`7.0`
|
||||
-----
|
||||
|
||||
- Modules may now include an ``i18n_extra`` directory that will be treated like the
|
||||
default ``i18n`` directory. This is typically useful for manual translation files
|
||||
that are not managed by Launchpad's translation system. An example is l10n modules
|
||||
that depend on ``l10n_multilang``.
|
||||
|
||||
|
|
|
@ -14,11 +14,13 @@ OpenERP Server
|
|||
02_architecture
|
||||
03_module_dev
|
||||
04_security
|
||||
workflows
|
||||
05_test_framework
|
||||
06_misc
|
||||
deployment-gunicorn
|
||||
deployment-mod-wsgi
|
||||
form-view-guidelines
|
||||
ir_actions
|
||||
|
||||
OpenERP Command
|
||||
'''''''''''''''
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
.. _ir-actions:
|
||||
|
||||
Ir Actions
|
||||
===========
|
||||
|
||||
.. _ir-actions-server:
|
||||
|
||||
Server actions
|
||||
++++++++++++++
|
||||
|
||||
.. versionchanged:: 8.0
|
||||
|
||||
.. currentmodule:: openerp.addons.base.ir.ir_actions
|
||||
|
||||
.. autoclass:: actions_server
|
||||
:noindex:
|
||||
|
||||
Adding a new sever action
|
||||
-------------------------
|
||||
|
||||
The ``state`` field holds the various available types of server action. In order
|
||||
to add a new server action, the first thing to do is to override the ``_get_states``
|
||||
method that returns the list of values available for the selection field.
|
||||
|
||||
.. automethod:: actions_server._get_states
|
||||
:noindex:
|
||||
|
||||
The method called when executing the server action is the ``run`` method. This
|
||||
method calls ``run_action_<STATE>``. When adding a new server action type, you
|
||||
have to define the related method that will be called upon execution.
|
||||
|
||||
.. automethod:: actions_server.run
|
||||
:noindex:
|
||||
|
||||
Changelog
|
||||
---------
|
||||
|
||||
`8.0`
|
||||
'''''
|
||||
|
||||
The refactoring of OpenERP 8.0 server actions removed the following types of
|
||||
server action:
|
||||
|
||||
- ``loop``: can be replaced by a ``code`` action
|
||||
- ``dummy``: can be replaced by a void ``code`` action
|
||||
- ``object_create`` and ``object_copy`` have been merged into a single and
|
||||
more understandable ``object_create`` action
|
||||
- ``other`` is renamed ``multi`` and raises in case of loops
|
|
@ -0,0 +1,306 @@
|
|||
.. _workflows:
|
||||
|
||||
Workflows
|
||||
=========
|
||||
|
||||
In OpenERP, a workflow is a technical artefact to manage a set of "things to do"
|
||||
associated to the records of some data model. The workflow provides a higher-
|
||||
level way to organize the things to do on a record.
|
||||
|
||||
More specifically, a workflow is a directed graph where the nodes are called
|
||||
"activities" and the arcs are called "transitions".
|
||||
|
||||
- Activities define work that should be done within the OpenERP server, such as
|
||||
changing the state of some records, or sending emails.
|
||||
|
||||
- Transitions control how the workflow progresses from activity to activity.
|
||||
|
||||
In the definition of a workflow, one can attach conditions, signals, and
|
||||
triggers to transitions, so that the behavior of the workflow depends on user
|
||||
actions (such as clicking on a button), changes to records, or arbitrary Python
|
||||
code.
|
||||
|
||||
Basics
|
||||
------
|
||||
|
||||
Defining a workflow with data files is straightforward: a record "workflow" is
|
||||
given together with records for the activities and the transitions. For
|
||||
instance, here is a simple sequence of two activities defined in XML::
|
||||
|
||||
<record id="test_workflow" model="workflow">
|
||||
<field name="name">test.workflow</field>
|
||||
<field name="osv">test.workflow.model</field>
|
||||
<field name="on_create">True</field>
|
||||
</record>
|
||||
|
||||
<record id="activity_a" model="workflow.activity">
|
||||
<field name="wkf_id" ref="test_workflow"/>
|
||||
<field name="flow_start">True</field>
|
||||
<field name="name">a</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">print_a()</field>
|
||||
</record>
|
||||
<record id="activity_b" model="workflow.activity">
|
||||
<field name="wkf_id" ref="test_workflow"/>
|
||||
<field name="flow_stop">True</field>
|
||||
<field name="name">b</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">print_b()</field>
|
||||
</record>
|
||||
|
||||
<record id="trans_a_b" model="workflow.transition">
|
||||
<field name="act_from" ref="activity_a"/>
|
||||
<field name="act_to" ref="activity_b"/>
|
||||
</record>
|
||||
|
||||
A worfklow is always defined with respect to a particular model (the model is
|
||||
given by the attribute ``osv`` on the model ``workflow``). Methods specified in
|
||||
the activities or transitions will be called on that model.
|
||||
|
||||
In the example code above, a workflow called "test_workflow" is created. It is
|
||||
made up of two activies, named "a" and "b", and one transition, going from "a"
|
||||
to "b".
|
||||
|
||||
The first activity has its attribute ``flow_start`` set to ``True`` so that
|
||||
OpenERP knows where to start the workflow traversal after it is instanciated.
|
||||
Because ``on_create`` is set to True on the workflow record, the workflow is
|
||||
instanciated for each newly created record. (Otherwise, the workflow should be
|
||||
instanciated by other means, such as from some module Python code.)
|
||||
|
||||
When the workflow is instanciated, it begins with activity "a". That activity
|
||||
is of kind ``function``, which means that the action ``print_a()`` is a method
|
||||
call on the model ``test.workflow`` (the usual ``cr, uid, ids, context``
|
||||
arguments are passed for you).
|
||||
|
||||
The transition between "a" and "b" does not specify any condition. This means
|
||||
that the workflow instance immediately goes from "a" to "b" after "a" has been
|
||||
processed, and thus also processes activity "b".
|
||||
|
||||
Transitions
|
||||
-----------
|
||||
|
||||
Transitions provide the control structures to orchestrate a workflow. When an
|
||||
activity is completed, the workflow engine tries to get across transitions
|
||||
departing from the completed activity, towards the next activities. In their
|
||||
simplest form (as in the example above), they link activities sequentially:
|
||||
activities are processed as soon as the activities preceding them are completed.
|
||||
|
||||
Instead of running all activities in one fell swoop, it is also possible to wait
|
||||
on transitions, going through them only when some criteria are met. The criteria
|
||||
are the conditions, the signals, and the triggers. They are detailed in the
|
||||
following sections.
|
||||
|
||||
Conditions
|
||||
''''''''''
|
||||
|
||||
When an activity has been completed, its outgoing transitions are inspected to
|
||||
determine whether it is possible for the workflow instance to proceed through
|
||||
them and reach the next activities. When only a condition is defined (i.e., no
|
||||
signal or trigger is defined), the condition is evaluated by OpenERP, and if it
|
||||
evaluates to ``True``, the worklfow instance progresses through the transition.
|
||||
If the condition is not met, it will be reevaluated every time the associated
|
||||
record is modified, or by an explicit method call to do it.
|
||||
|
||||
By default, the attribute ``condition`` (i.e., the expression to be evaluated)
|
||||
is just "True", which trivially evaluates to ``True``. Note that the condition
|
||||
may be several lines long; in that case, the value of the last one determines
|
||||
whether the transition can be taken.
|
||||
|
||||
In the condition evaluation environment, several symbols are conveniently
|
||||
defined (in addition to the OpenERP ``safe_eval`` environment):
|
||||
|
||||
- all the model column names, and
|
||||
- all the browse record's attributes.
|
||||
|
||||
Signals
|
||||
'''''''
|
||||
|
||||
In addition to a condition, a transition can specify a signal name. When such
|
||||
a signal name is present, the transition is not taken directly, even if the
|
||||
condition evaluates to ``True``. Instead the transition blocks, waiting to be
|
||||
woken up.
|
||||
|
||||
In order to wake up a transition with a defined signal name, the signal must be
|
||||
sent to the workflow instance. A common way to send a signal is to use a button
|
||||
in the user interface, using the element ``<button/>`` with the signal name as
|
||||
the attribute ``name`` of the button. Once the button is clicked, the signal is
|
||||
sent to the workflow instance of the current record.
|
||||
|
||||
.. note:: The condition is still evaluated when the signal is sent to the
|
||||
workflow instance.
|
||||
|
||||
Triggers
|
||||
''''''''
|
||||
|
||||
With conditions that evaluate to ``False``, transitions are not taken (and thus
|
||||
the activity it leads to is not processed immediately). Still, the workflow
|
||||
instance can get new chances to progress across that transition by providing
|
||||
so-called triggers. The idea is that when the condition is not satisfied,
|
||||
triggers are recorded in database. Later, it is possible to wake up
|
||||
specifically the workflow instances that installed those triggers, offering
|
||||
them to reevaluate their transition conditions. This mechanism makes it cheaper
|
||||
to wake up workflow instances by targetting just a few of them (those that have
|
||||
installed the triggers) instead of all of them.
|
||||
|
||||
Triggers are recorded in database as record IDs (together with the model name)
|
||||
and refer to the workflow instance waiting for those records. The transition
|
||||
definition provides a model name (attribute ``trigger_model``) and a Python
|
||||
expression (attribute ``trigger_expression``) that evaluates to a list of record
|
||||
IDs in the given model. Any of those records can wake up the workflow instance
|
||||
they are associated with.
|
||||
|
||||
.. note:: Note that triggers are not re-installed whenever the transition is
|
||||
re-tried.
|
||||
|
||||
Splitting and joining transitions
|
||||
'''''''''''''''''''''''''''''''''
|
||||
|
||||
When multiple transitions leave the same activity, or lead to the same activity,
|
||||
OpenERP provides some control over which transitions are actually taken, or how
|
||||
the reached activity will be processed. The attributes ``split_mode`` and
|
||||
``join_mode`` on the activity are used for such control. The possible values of
|
||||
those attributes are explained below.
|
||||
|
||||
Activities
|
||||
----------
|
||||
|
||||
While the transitions can be seen as the control structures of the workflows,
|
||||
activities are the places where everything happens, from changing record states
|
||||
to sending email.
|
||||
|
||||
Different kinds of activities exist: ``Dummy``, ``Function``, ``Subflow``, and
|
||||
``Stop all``, each doing different things when the activity is processed. In
|
||||
addition to their kind, activies have other properties, detailed in the next
|
||||
sections.
|
||||
|
||||
Flow start and flow stop
|
||||
''''''''''''''''''''''''
|
||||
|
||||
The attribute ``flow_start`` is a boolean value specifying whether the activity
|
||||
is processed when the workflow is instanciated. Multiple activities can have
|
||||
their attribute ``flow_start`` set to ``True``. When instanciating a workflow
|
||||
for a record, OpenERP simply processes all of them, and evaluate all their
|
||||
outgoing transitions afterwards.
|
||||
|
||||
The attribute ``flow_stop`` is a boolean value specifying whether the activity
|
||||
stops the workflow instance. A workflow instance is considered completed when
|
||||
all its activities with the attribute ``flow_stop`` set to ``True`` are
|
||||
completed.
|
||||
|
||||
It is important for OpenERP to know when a workflow instance is completed. A
|
||||
workflow can have an activity that is actually another workflow (called a
|
||||
subflow); that activity is completed when the subflow is completed.
|
||||
|
||||
Subflow
|
||||
'''''''
|
||||
|
||||
An activity can embed a complete workflow, called a subflow (the embedding
|
||||
workflow is called the parent workflow). The workflow to instanciate is
|
||||
specified by attribute ``subflow_id``.
|
||||
|
||||
.. note:: In the GUI, that attribute can not be set unless the kind of the
|
||||
activity is ``Subflow``.
|
||||
|
||||
The activity is considered completed (and its outgoing transitions ready to be
|
||||
evaluated) when the subflow is completed (see attribute ``flow_stop`` above).
|
||||
|
||||
Sending a signal from a subflow
|
||||
'''''''''''''''''''''''''''''''
|
||||
|
||||
When a workflow is embedded in an activity (as a subflow) of a workflow, the
|
||||
sublow can send a signal from its own activities to the parent workflow by
|
||||
giving a signal name in the attribute ``signal_send``. OpenERP processes those
|
||||
activities by sending the value of ``signal_send`` prefixed by "subflow." to
|
||||
the parent workflow instance.
|
||||
|
||||
In other words, it is possible to react and get transitions in the parent
|
||||
workflow as activities are executed in the sublow.
|
||||
|
||||
Server actions
|
||||
''''''''''''''
|
||||
|
||||
An activity can run a "Server Action" by specifying its ID in the attribute
|
||||
``action_id``.
|
||||
|
||||
Python action
|
||||
'''''''''''''
|
||||
|
||||
An activity can execute some Python code, given by the attribute ``action``.
|
||||
The evaluation environment is the same as the one explained in the section
|
||||
`Conditions`_.
|
||||
|
||||
Split mode
|
||||
''''''''''
|
||||
|
||||
After an activity has been processed, its outgoing transitions are evaluated.
|
||||
Normally, if a transition can be taken, OpenERP traverses it and proceed to the
|
||||
activity the transition leads to.
|
||||
|
||||
Actually, when more than a single transition is leaving an activity, OpenERP may
|
||||
proceed or not, depending on the other transitions. That is, the conditions on
|
||||
the transitions can be combined together, and the combined result instructs
|
||||
OpenERP to traverse zero, one, or all the transitions. The way they are combined
|
||||
is controlled by the attribute ``split_mode``.
|
||||
|
||||
There are three possible split modes: ``XOR``, ``OR`` and ``AND``.
|
||||
|
||||
``XOR``
|
||||
When the transitions are combined with a ``XOR`` split mode, as soon as a
|
||||
transition has a satisfied condition, the transition is traversed and the
|
||||
others are skipped.
|
||||
|
||||
``OR``
|
||||
With the ``OR`` mode, all the transitions with a satisfied condition are
|
||||
traversed. The remaining transitions will not be evaluated later.
|
||||
|
||||
``AND``
|
||||
With the ``AND`` mode, OpenERP will wait for all outgoing transition
|
||||
conditions to be satisfied, then traverse all of them at once.
|
||||
|
||||
Join mode
|
||||
'''''''''
|
||||
|
||||
Just like outgoing transition conditions can be combined together to decide
|
||||
whether they can be traversed or not, incoming transitions can be combined
|
||||
together to decide if and when an activity may be processed. The attribute
|
||||
``join_mode`` controls that behavior.
|
||||
|
||||
There are two possible join modes: ``XOR`` and ``AND``.
|
||||
|
||||
``XOR``
|
||||
With the ``XOR`` mode, an incoming transition with a satisfied condition is
|
||||
traversed immediately, and enables the processing of the activity.
|
||||
|
||||
``AND``
|
||||
With the ``AND`` mode, OpenERP will wait until all incoming transitions have
|
||||
been traversed before enabling the processing of the activity.
|
||||
|
||||
Kinds
|
||||
'''''
|
||||
|
||||
Activities can be of different kinds: ``dummy``, ``function``, ``subflow``, or
|
||||
``stopall``. The kind defines what type of work an activity can do.
|
||||
|
||||
Dummy
|
||||
The ``dummy`` kind is for activities that do nothing, or for activities that
|
||||
only call a server action. Activities that do nothing can be used as hubs to
|
||||
gather/dispatch transitions.
|
||||
|
||||
Function
|
||||
The ``function`` kind is for activities that only need to run some Python
|
||||
code, and possibly a server action.
|
||||
|
||||
Stop all
|
||||
The ``stopall`` kind is for activities that will completely stop the
|
||||
workflow instance and mark it as completed. In addition they can also run
|
||||
some Python code.
|
||||
|
||||
Subflow
|
||||
When the kind of the activity is ``subflow``, the activity embeds another
|
||||
workflow instance. When the subflow is completed, the activity is also
|
||||
considered completed.
|
||||
|
||||
By default, the subflow is instanciated for the same record as the parent
|
||||
workflow. It is possible to change that behavior by providing Python code
|
||||
that returns a record ID (of the same data model as the subflow). The
|
||||
embedded subflow instance is then the one of the given record.
|
|
@ -940,18 +940,6 @@
|
|||
<field name="rate">18.89</field>
|
||||
</record>
|
||||
|
||||
<record id="EEK" model="res.currency">
|
||||
<field name="name">EEK</field>
|
||||
<field name="symbol">kr</field>
|
||||
<field name="rounding">0.01</field>
|
||||
<field name="accuracy">4</field>
|
||||
</record>
|
||||
<record id="rateEEK" model="res.currency.rate">
|
||||
<field name="currency_id" ref="EEK" />
|
||||
<field eval="time.strftime('%Y-01-01')" name="name"/>
|
||||
<field name="rate">14.41</field>
|
||||
</record>
|
||||
|
||||
<record id="ETB" model="res.currency">
|
||||
<field name="name">ETB</field>
|
||||
<field name="symbol">Br</field>
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -58,7 +58,7 @@ msgstr ""
|
|||
#: field:ir.ui.view,arch:0
|
||||
#: field:ir.ui.view.custom,arch:0
|
||||
msgid "View Architecture"
|
||||
msgstr "عرض المنصة (الهيكلة)"
|
||||
msgstr "عرض الهيكلية"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_sale_stock
|
||||
|
@ -91,7 +91,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_point_of_sale
|
||||
msgid "Touchscreen Interface for Shops"
|
||||
msgstr ""
|
||||
msgstr "واجهة شاشة اللمس للمتاجر"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:34+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -1098,7 +1098,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_fleet
|
||||
msgid "Fleet Management"
|
||||
msgstr ""
|
||||
msgstr "Автопарк"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.server.object.lines,value:0
|
||||
|
@ -8854,6 +8854,8 @@ msgid ""
|
|||
"* Show all costs associated to a vehicle or to a type of service\n"
|
||||
"* Analysis graph for costs\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Превозни средства, лизинг, застраховки, разходи\n"
|
||||
|
||||
#. module: base
|
||||
#: field:multi_company.default,company_dest_id:0
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:34+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:34+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Poedit-Language: Czech\n"
|
||||
|
||||
#. module: base
|
||||
|
@ -173,7 +173,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:res.partner,ref:0
|
||||
msgid "Reference"
|
||||
msgstr "Odkaz"
|
||||
msgstr "Značka"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_be_invoice_bba
|
||||
|
@ -419,13 +419,12 @@ msgid ""
|
|||
"line.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Umožňuje vám přidat metody dopravy do potvrzení objednávek a vyzvednutí.\n"
|
||||
"Umožňuje vám přidat metody dopravy zakázek a dodávek.\n"
|
||||
"==============================================================\n"
|
||||
"\n"
|
||||
"Můžete nadefinovat vlastní přepravce a tarifní pásma přepravy. Když "
|
||||
"vytváříte \n"
|
||||
"faktury z vyzvednutí, OpenERP je schopno přidat a spočítat řádek s "
|
||||
"dopravou.\n"
|
||||
"faktury z dodávek, OpenERP je schopno přidat a spočítat řádek s dopravou.\n"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_filters.py:80
|
||||
|
@ -733,7 +732,7 @@ msgstr "Kolumbie"
|
|||
#. module: base
|
||||
#: model:res.partner.title,name:base.res_partner_title_mister
|
||||
msgid "Mister"
|
||||
msgstr "mistr"
|
||||
msgstr "pan"
|
||||
|
||||
#. module: base
|
||||
#: help:res.country,code:0
|
||||
|
@ -1109,7 +1108,7 @@ msgstr "Sdílená úložiště (WebDAV)"
|
|||
#. module: base
|
||||
#: view:res.users:0
|
||||
msgid "Email Preferences"
|
||||
msgstr "Předvolby Emailu"
|
||||
msgstr "Předvolby emailu"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_fields.py:195
|
||||
|
@ -2446,8 +2445,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Můžete si zvolit flexibilní fakturační metody:\n"
|
||||
"\n"
|
||||
"* *Na vyžádání*: Faktury jsou vytvářeny manuálně z potvrzení objednávek "
|
||||
"podle potřeby\n"
|
||||
"* *Na vyžádání*: Faktury jsou vytvářeny manuálně ze zakázek podle potřeby\n"
|
||||
"* *Při dodání*: Faktury jsou vytvářeny při vyzvednutí (dodání)\n"
|
||||
"* *Před dodáním*: Je vytvořena proforma faktura, která musí být uhrazena "
|
||||
"před dodáním\n"
|
||||
|
@ -2514,7 +2512,7 @@ msgid ""
|
|||
"and sales orders."
|
||||
msgstr ""
|
||||
"Zobrazit tento bankovní učet v patičce tištěných dokumentů jako jsou faktury "
|
||||
"a potvrzení objednávek."
|
||||
"a zakázky."
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -2963,11 +2961,11 @@ msgid ""
|
|||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Základní modul pro správu analytické distribuce a potvrzení objednávek.\n"
|
||||
"Základní modul pro správu analytické distribuce a zakázek.\n"
|
||||
"=================================================================\n"
|
||||
"\n"
|
||||
"Při použití tohoto modulu bude schopni propojit analytické účty s "
|
||||
"potvrzeními objednávek.\n"
|
||||
"Při použití tohoto modulu bude schopni propojit analytické účty se "
|
||||
"zakázkami.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
|
@ -3092,11 +3090,11 @@ msgstr ""
|
|||
"==================================\n"
|
||||
"\n"
|
||||
"Tato aplikace vám umožňuje efektivně spravovat prodejní cíle sledováním "
|
||||
"všech potvrzení objednávek a historie.\n"
|
||||
"všech zakázek a historie.\n"
|
||||
"\n"
|
||||
"Aplikace spravuje ceý postup prodejte:\n"
|
||||
"Aplikace spravuje celý postup prodejte:\n"
|
||||
"\n"
|
||||
"* **Nabídka** -> **Potvrzení objednávky** -> **Faktura**\n"
|
||||
"* **Nabídka** -> **Zakázka** -> **Faktura**\n"
|
||||
"\n"
|
||||
"Předvolby (pouze s nainstalovaným skladovým hospodářstvím)\n"
|
||||
"------------------------------------------------------\n"
|
||||
|
@ -3110,14 +3108,13 @@ msgstr ""
|
|||
"\n"
|
||||
"Můžete si zvolit flexibilní fakturační metody:\n"
|
||||
"\n"
|
||||
"* *Na vyžádání*: Faktury jsou vytvářeny manuálně z potvrzení objednávek "
|
||||
"podle potřeby\n"
|
||||
"* *Na vyžádání*: Faktury jsou vytvářeny manuálně ze zakázek podle potřeby\n"
|
||||
"* *Při dodání*: Faktury jsou vytvářeny při vyzvednutí (dodání)\n"
|
||||
"* *Před dodáním*: Je vytvořena proforma faktura, která musí být uhrazena "
|
||||
"před dodáním\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Dashboard pro manažera prodejů zahrnuje\n"
|
||||
"Přehled pro vedoucího odbytu zahrnuje\n"
|
||||
"------------------------------------------------\n"
|
||||
"* Moje nabídky\n"
|
||||
"* Měsíční obrat (graf)\n"
|
||||
|
@ -4900,7 +4897,7 @@ msgstr "Objednávka obědů, stravování, potraviny"
|
|||
#: field:ir.model.fields,required:0
|
||||
#: field:res.partner.bank.type.field,required:0
|
||||
msgid "Required"
|
||||
msgstr "Požadováno"
|
||||
msgstr "Povinné"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.ro
|
||||
|
@ -5200,10 +5197,10 @@ msgid ""
|
|||
" * Effective Date\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Přidejte dodatečná data do potvrzení objednávky.\n"
|
||||
"Přidejte dodatečná data do zakázky\n"
|
||||
"===================================================\n"
|
||||
"\n"
|
||||
"Do potvrzení objednávky můžete přidat následující dodatečná data:\n"
|
||||
"Do zakázky můžete přidat následující dodatečná data:\n"
|
||||
"------------------------------------------------------------\n"
|
||||
" * Datum požadavku\n"
|
||||
" * Datum závazku\n"
|
||||
|
@ -7073,7 +7070,7 @@ msgid ""
|
|||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Tento modul přidává pole 'Marže' k potvrzení objednávek.\n"
|
||||
"Tento modul přidává pole 'Marže' k zakázkám.\n"
|
||||
"=============================================\n"
|
||||
"\n"
|
||||
"Díky tomu lze zjistit ziskovost spočtením rozdílu mezi cenou položky\n"
|
||||
|
@ -7937,7 +7934,7 @@ msgstr "Zleva doprava"
|
|||
#: view:res.lang:0
|
||||
#: field:res.lang,translatable:0
|
||||
msgid "Translatable"
|
||||
msgstr "Přeložitelný"
|
||||
msgstr "Přeložitelné"
|
||||
|
||||
#. module: base
|
||||
#: help:base.language.import,code:0
|
||||
|
@ -10058,7 +10055,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Dle našich záznamů nebyly některé vaše platby stále uhrazeny. Podrobnosti "
|
||||
"jsou níže.\n"
|
||||
"Pokud jste platby již uhradily, považujte tuto zprávu za bezpředmětnou. V "
|
||||
"Pokud jste platby již uhradili, považujte tuto zprávu za bezpředmětnou. V "
|
||||
"opačném případě vás žádáme o uhrazení částek uvedených níže.\n"
|
||||
"V případě jakýchkoli dotazů nás neváhejte kontaktovat..\n"
|
||||
"\n"
|
||||
|
@ -12856,7 +12853,7 @@ msgstr "Druh sestavy"
|
|||
#: view:res.partner.bank:0
|
||||
#: view:res.users:0
|
||||
msgid "State"
|
||||
msgstr "Stav"
|
||||
msgstr "Stát"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -13274,7 +13271,7 @@ msgstr "Uživatel průvodce změnou hesla"
|
|||
#. module: base
|
||||
#: model:res.groups,name:base.group_no_one
|
||||
msgid "Technical Features"
|
||||
msgstr "Technické rysy"
|
||||
msgstr "Technická nastavení"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_ve
|
||||
|
@ -14120,7 +14117,7 @@ msgstr "Závislosti :"
|
|||
#. module: base
|
||||
#: field:res.company,vat:0
|
||||
msgid "Tax ID"
|
||||
msgstr "ID daně"
|
||||
msgstr "DIČ"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_account_bank_statement_extensions
|
||||
|
@ -14738,7 +14735,7 @@ msgstr ""
|
|||
#: field:ir.actions.server,trigger_obj_id:0
|
||||
#: field:ir.model.fields,relation_field:0
|
||||
msgid "Relation Field"
|
||||
msgstr "?!?Související pole"
|
||||
msgstr "Pole relace"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_portal_project
|
||||
|
@ -15032,7 +15029,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.model.fields,relation:0
|
||||
msgid "Object Relation"
|
||||
msgstr "Vztah objektu"
|
||||
msgstr "Relace objektu"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_account_voucher
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:34+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -64,12 +64,12 @@ msgstr "Vis arkitektur"
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_sale_stock
|
||||
msgid "Quotation, Sale Orders, Delivery & Invoicing Control"
|
||||
msgstr ""
|
||||
msgstr "Tilbud, Salgs ordre, Følgeseddel og Faktura kontrol"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.sequence,implementation:0
|
||||
msgid "No gap"
|
||||
msgstr ""
|
||||
msgstr "Ingen forskel"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -98,7 +98,7 @@ msgstr "Touchscreen-grænseflade for butikker"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll
|
||||
msgid "Indian Payroll"
|
||||
msgstr ""
|
||||
msgstr "Indisk Løn"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.cron,model:0
|
||||
|
@ -166,6 +166,9 @@ msgid ""
|
|||
"specified as a Python expression defining a list of triplets. For example: "
|
||||
"[('color','=','red')]"
|
||||
msgstr ""
|
||||
"Valgfrit domæne til at begrænse mulige værdier for forholdsfelter, angivet "
|
||||
"som et Python-udtryk definerer en liste af trillinger. For eksempel: "
|
||||
"[('color', '=', 'red')]"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner,ref:0
|
||||
|
@ -175,7 +178,7 @@ msgstr "Reference"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_be_invoice_bba
|
||||
msgid "Belgium - Structured Communication"
|
||||
msgstr ""
|
||||
msgstr "Belgisk struktureret kommunikation"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.act_window,target:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -8452,15 +8452,15 @@ msgstr ""
|
|||
"\n"
|
||||
"Jeder Mitarbeiter kann seine aufgewendete Zeit für verschiedene Projekte "
|
||||
"kodieren und verfolgen.\n"
|
||||
"Ein Projekt ist eine analytische Rechnung und die Zeit, die jemand an diesem "
|
||||
"Projekt verbracht hat,\n"
|
||||
"verursacht Kosten auf dem entsprechenden Konto. \n"
|
||||
"Ein Projekt wird automatisch zur Kostenstelle. Die Zeit, die jemand an "
|
||||
"diesem Projekt verbracht hat,\n"
|
||||
"verursacht dementsprechend Kosten auf dieser Projektkostenstelle. \n"
|
||||
"\n"
|
||||
"Viele Berichterstattungen über die Verfolgung von Zeit und Mitarbeiter "
|
||||
"werden bereitgestellt.\n"
|
||||
"Es ist vollständig in die Kostenrechnung integriert. Es ermöglicht Ihnen die "
|
||||
"Einrichtung einer \n"
|
||||
"Betriebsführung nach Angelegenheit.\n"
|
||||
"Das Modul bietet außerdem Auswertungen zur Rückverfolgung der Mitarbeiter "
|
||||
"Arbeitszeit in Projekten.\n"
|
||||
"Es ist dadurch vollständig in die OpenERP Kostenrechnung integriert und "
|
||||
"ermöglicht dem Management \n"
|
||||
"ein effizientes Projektcontrolling.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
|
@ -14211,7 +14211,7 @@ msgstr "Berichtsart"
|
|||
#: view:res.partner.bank:0
|
||||
#: view:res.users:0
|
||||
msgid "State"
|
||||
msgstr "Status"
|
||||
msgstr "Bundesland"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
|
|
@ -12,8 +12,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Poedit-Country: GREECE\n"
|
||||
"X-Poedit-Language: Greek\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -25,6 +25,10 @@ msgid ""
|
|||
"================================================\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Module for the Check Writing and Check Printing.\n"
|
||||
"================================================\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.sh
|
||||
|
@ -60,7 +64,7 @@ msgstr "View Architecture"
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_sale_stock
|
||||
msgid "Quotation, Sale Orders, Delivery & Invoicing Control"
|
||||
msgstr ""
|
||||
msgstr "Quotation, Sale Orders, Delivery & Invoicing Control"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.sequence,implementation:0
|
||||
|
@ -89,12 +93,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_point_of_sale
|
||||
msgid "Touchscreen Interface for Shops"
|
||||
msgstr ""
|
||||
msgstr "Touchscreen Interface for Shops"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll
|
||||
msgid "Indian Payroll"
|
||||
msgstr ""
|
||||
msgstr "Indian Payroll"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.cron,model:0
|
||||
|
@ -138,7 +142,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.actions.client,params:0
|
||||
msgid "Supplementary arguments"
|
||||
msgstr ""
|
||||
msgstr "Supplementary arguments"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_google_base_account
|
||||
|
@ -147,11 +151,14 @@ msgid ""
|
|||
"The module adds google user in res user.\n"
|
||||
"========================================\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"The module adds google user in res user.\n"
|
||||
"========================================\n"
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner,employee:0
|
||||
msgid "Check this box if this contact is an Employee."
|
||||
msgstr ""
|
||||
msgstr "Check this box if this contact is an Employee."
|
||||
|
||||
#. module: base
|
||||
#: help:ir.model.fields,domain:0
|
||||
|
@ -182,7 +189,7 @@ msgstr "Target Window"
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_rml:0
|
||||
msgid "Main Report File Path"
|
||||
msgstr ""
|
||||
msgstr "Main Report File Path"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale_analytic_plans
|
||||
|
@ -203,6 +210,16 @@ msgid ""
|
|||
"revenue\n"
|
||||
"reports."
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Generate your Invoices from Expenses, Timesheet Entries.\n"
|
||||
"========================================================\n"
|
||||
"\n"
|
||||
"Module to generate invoices based on costs (human resources, expenses, "
|
||||
"...).\n"
|
||||
"\n"
|
||||
"You can define price lists in analytic account, make some theoretical "
|
||||
"revenue\n"
|
||||
"reports."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_sequence.py:134
|
||||
|
@ -253,7 +270,7 @@ msgstr "created."
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_xsl:0
|
||||
msgid "XSL Path"
|
||||
msgstr ""
|
||||
msgstr "XSL Path"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_tr
|
||||
|
@ -279,7 +296,7 @@ msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
|
|||
#. module: base
|
||||
#: model:res.groups,name:base.group_multi_currency
|
||||
msgid "Multi Currencies"
|
||||
msgstr ""
|
||||
msgstr "Multi Currencies"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_cl
|
||||
|
@ -291,6 +308,12 @@ msgid ""
|
|||
"\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Chilean accounting chart and tax localisation.\n"
|
||||
"==============================================\n"
|
||||
"Plan contable chileno e impuestos de acuerdo a disposiciones vigentes\n"
|
||||
"\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale
|
||||
|
@ -402,6 +425,8 @@ msgid ""
|
|||
"There is already a shared filter set as default for %(model)s, delete or "
|
||||
"change it before setting a new default"
|
||||
msgstr ""
|
||||
"There is already a shared filter set as default for %(model)s, delete or "
|
||||
"change it before setting a new default"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:2649
|
||||
|
@ -499,12 +524,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.model.relation,name:0
|
||||
msgid "Relation Name"
|
||||
msgstr ""
|
||||
msgstr "Relation Name"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.rule:0
|
||||
msgid "Create Access Right"
|
||||
msgstr ""
|
||||
msgstr "Create Access Right"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.tv
|
||||
|
@ -544,7 +569,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:workflow.transition:0
|
||||
msgid "Workflow Transition"
|
||||
msgstr ""
|
||||
msgstr "Workflow Transition"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.gf
|
||||
|
@ -554,7 +579,7 @@ msgstr "French Guyana"
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_hr
|
||||
msgid "Jobs, Departments, Employees Details"
|
||||
msgstr ""
|
||||
msgstr "Jobs, Departments, Employees Details"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_analytic
|
||||
|
@ -594,7 +619,7 @@ msgid ""
|
|||
"event registration\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Organization and management of Events.\n"
|
||||
"Organisation and management of Events.\n"
|
||||
"======================================\n"
|
||||
"\n"
|
||||
"The event module allows you to efficiently organise events and all related "
|
||||
|
@ -617,7 +642,7 @@ msgstr "Bosnian / bosanski jezik"
|
|||
msgid ""
|
||||
"If you check this, then the second time the user prints with same attachment "
|
||||
"name, it returns the previous report."
|
||||
msgstr "On checking this successive reports are generated from cache."
|
||||
msgstr "With this checked, successive reports are retrieved from cache."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_mrp_byproduct
|
||||
|
@ -775,6 +800,32 @@ msgid ""
|
|||
"module named account_voucher.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Accounting and Financial Management.\n"
|
||||
"====================================\n"
|
||||
"\n"
|
||||
"Financial and accounting module which covers:\n"
|
||||
"---------------------------------------------\n"
|
||||
" * General Accounting\n"
|
||||
" * Cost/Analytic accounting\n"
|
||||
" * Third party accounting\n"
|
||||
" * Taxes management\n"
|
||||
" * Budgets\n"
|
||||
" * Customer and Supplier Invoices\n"
|
||||
" * Bank statements\n"
|
||||
" * Reconciliation process by partner\n"
|
||||
"\n"
|
||||
"Creates a dashboard for accountants that includes:\n"
|
||||
"--------------------------------------------------\n"
|
||||
" * List of Customer Invoices to Approve\n"
|
||||
" * Company Analysis\n"
|
||||
" * Graph of Treasury\n"
|
||||
"\n"
|
||||
"Processes like maintaining the general ledger are done through the defined "
|
||||
"financial Journals (entry move line or grouping is maintained through "
|
||||
"journal) for a particular financial year.\n"
|
||||
"For the preparation of vouchers there is a module named account_voucher.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: view:ir.model:0
|
||||
|
@ -802,13 +853,18 @@ msgid ""
|
|||
"This module provides the Integration of the LinkedIn with OpenERP.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"OpenERP Web LinkedIn module.\n"
|
||||
"============================\n"
|
||||
"This module integrates LinkedIn with OpenERP.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.act_window,src_model:0
|
||||
msgid ""
|
||||
"Optional model name of the objects on which this action should be visible"
|
||||
msgstr ""
|
||||
"Optional model name of the objects on which this action should be visible"
|
||||
"Optional model name of the objects for which this action should be visible"
|
||||
|
||||
#. module: base
|
||||
#: field:workflow.transition,trigger_expr_id:0
|
||||
|
@ -823,7 +879,7 @@ msgstr "Jordan"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_hr
|
||||
msgid "Croatia - RRIF 2012 COA"
|
||||
msgstr ""
|
||||
msgstr "Croatia - RRIF 2012 COA"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.cron,nextcall:0
|
||||
|
@ -952,6 +1008,30 @@ msgid ""
|
|||
"also possible in order to automatically create a meeting when a holiday "
|
||||
"request is accepted by setting up a type of meeting in Leave Type.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Manage leaves and allocation requests\n"
|
||||
"=====================================\n"
|
||||
"\n"
|
||||
"This application controls the holiday schedule of your company. It allows "
|
||||
"employees to request holidays. Then, managers can review requests for "
|
||||
"holidays and approve or reject them. This way, you can control the overall "
|
||||
"holiday planning for the company or department.\n"
|
||||
"\n"
|
||||
"You can configure several kinds of leaves (sickness, holiday, paid days, "
|
||||
"...) and quickly allocate leaves to an employee or department via allocation "
|
||||
"requests. An employee can also make a request for more days off by making a "
|
||||
"new Allocation. This will increase the total available days for that leave "
|
||||
"type (if the request is accepted).\n"
|
||||
"\n"
|
||||
"You can keep track of leaves in different ways by the following reports: \n"
|
||||
"\n"
|
||||
"* Leaves Summary\n"
|
||||
"* Leaves by Department\n"
|
||||
"* Leaves Analysis\n"
|
||||
"\n"
|
||||
"Synchronisation with an internal agenda (Meetings of the CRM module) is also "
|
||||
"possible. In order to automatically create a meeting when a holiday request "
|
||||
"is accepted, set up the type of meeting in Leave Type.\n"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -1182,6 +1262,35 @@ msgid ""
|
|||
"* Planned Revenue by Stage and User (graph)\n"
|
||||
"* Opportunities by Stage (graph)\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"The generic OpenERP Customer Relationship Management\n"
|
||||
"====================================================\n"
|
||||
"\n"
|
||||
"This application enables a group of people to intelligently and efficiently "
|
||||
"manage leads, opportunities, meetings and phone calls.\n"
|
||||
"\n"
|
||||
"It manages key tasks such as communication, identification, prioritisation, "
|
||||
"assignment, resolution and notification.\n"
|
||||
"\n"
|
||||
"OpenERP ensures that all cases are successfully tracked by users, customers "
|
||||
"and suppliers. It can automatically send reminders, escalate the request, "
|
||||
"trigger specific methods and many other actions based on your own enterprise "
|
||||
"rules.\n"
|
||||
"\n"
|
||||
"The greatest thing about this system is that users don't need to do anything "
|
||||
"special. The CRM module has an email gateway for the synchronisation "
|
||||
"interface between mails and OpenERP. That way, users can just send emails to "
|
||||
"the request tracker.\n"
|
||||
"\n"
|
||||
"OpenERP will take care of thanking them for their message, automatically "
|
||||
"routing it to the appropriate staff and make sure all future correspondence "
|
||||
"gets to the right place.\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Dashboard for CRM will include:\n"
|
||||
"-------------------------------\n"
|
||||
"* Planned Revenue by Stage and User (graph)\n"
|
||||
"* Opportunities by Stage (graph)\n"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.export,format:0
|
||||
|
@ -1278,6 +1387,48 @@ msgid ""
|
|||
"come with any additional paid permission for online use of 'private "
|
||||
"modules'.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Base module for the Brazilian localisation\n"
|
||||
"==========================================\n"
|
||||
"\n"
|
||||
"This module consists in:\n"
|
||||
"\n"
|
||||
" - Generic Brazilian chart of accounts\n"
|
||||
" - Brazilian taxes such as:\n"
|
||||
"\n"
|
||||
" - IPI\n"
|
||||
" - ICMS\n"
|
||||
" - PIS\n"
|
||||
" - COFINS\n"
|
||||
" - ISS\n"
|
||||
" - IR\n"
|
||||
" - IRPJ\n"
|
||||
" - CSLL\n"
|
||||
"\n"
|
||||
"The field tax_discount has also been added in the account.tax.template and \n"
|
||||
"account.tax objects to allow the proper computation of some Brazilian VATs \n"
|
||||
"such as ICMS. The chart of account creation wizard has been extended to \n"
|
||||
"propagate those new data properly.\n"
|
||||
"\n"
|
||||
"It's important to note however that this module lack many implementations to "
|
||||
"\n"
|
||||
"use OpenERP properly in Brazil. Those implementations (such as the "
|
||||
"electronic \n"
|
||||
"fiscal Invoicing which is already operational) are brought by more than 15 \n"
|
||||
"additional modules of the Brazilian Launchpad localisation project \n"
|
||||
"https://launchpad.net/openerp.pt-br-localiz and their dependencies in the \n"
|
||||
"extra addons branch. Those modules aim at not breaking with the remarkable \n"
|
||||
"OpenERP modularity, this is why they are numerous but small. One of the \n"
|
||||
"reasons for maintaining those modules apart is that Brazilian Localisation \n"
|
||||
"leaders need commit rights agility to complete the localisation as companies "
|
||||
"\n"
|
||||
"fund the remaining legal requirements (such as soon fiscal ledgers, \n"
|
||||
"accounting SPED, fiscal SPED and PAF ECF that are still missing as September "
|
||||
"\n"
|
||||
"2011). Those modules are also strictly licensed under AGPL V3 and today "
|
||||
"don't \n"
|
||||
"come with any additional paid permission for online use of 'private "
|
||||
"modules'.\n"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:406
|
||||
|
@ -1286,8 +1437,8 @@ msgid ""
|
|||
"Language with code \"%s\" is not defined in your system !\n"
|
||||
"Define it through the Administration menu."
|
||||
msgstr ""
|
||||
"Language with code \"%s\" is not defined in your system !\n"
|
||||
"Define it through the Administration menu."
|
||||
"Language with code \"%s\" is not defined in your system!\n"
|
||||
"Define it through the Settings menu."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.gu
|
||||
|
@ -1729,6 +1880,26 @@ msgid ""
|
|||
"in their pockets, this module is essential.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"The base module to manage lunch.\n"
|
||||
"================================\n"
|
||||
"\n"
|
||||
"Many companies order sandwiches, pizzas and more from regular suppliers for "
|
||||
"their employees providing them with extra facilities. \n"
|
||||
"\n"
|
||||
"However lunch management within a company requires proper administration "
|
||||
"especially when the number of employees or suppliers is large. \n"
|
||||
"\n"
|
||||
"The “Lunch Order” module has been developed to make this management easier "
|
||||
"and also to offer employees more tools and better usability. \n"
|
||||
"\n"
|
||||
"In addition to full meal and supplier management, this module offers the "
|
||||
"possibility to display warnings and provide quick order selection based on "
|
||||
"employees' preferences.\n"
|
||||
"\n"
|
||||
"If you want to save your employees' time and the need to always have coins "
|
||||
"in their pockets, this module is essential.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: view:wizard.ir.model.menu.create:0
|
||||
|
@ -2014,6 +2185,22 @@ msgid ""
|
|||
"synchronization with other companies.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"This module adds generic sharing tools to your current OpenERP database.\n"
|
||||
"========================================================================\n"
|
||||
"\n"
|
||||
"It specifically adds a 'share' button that is available in the Web client "
|
||||
"to\n"
|
||||
"share any kind of OpenERP data with colleagues, customers, friends.\n"
|
||||
"\n"
|
||||
"The system will work by creating new users and groups on the fly, and by\n"
|
||||
"combining the appropriate access rights and ir.rules to ensure that the "
|
||||
"shared\n"
|
||||
"users only have access to the data that has been shared with them.\n"
|
||||
"\n"
|
||||
"This is extremely useful for collaborative work, knowledge sharing,\n"
|
||||
"synchronisation with other companies.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_process
|
||||
|
@ -2546,7 +2733,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"\n"
|
||||
" \n"
|
||||
"Belgian localization for in/outgoing invoices (prereq to account_coda):\n"
|
||||
"Belgian localisation for in/outgoing invoices (prereq to account_coda):\n"
|
||||
"=========================================================================\n"
|
||||
" - Rename 'reference' field labels to 'Communication'\n"
|
||||
" - Add support for Belgian Structured Communication\n"
|
||||
|
@ -2641,10 +2828,10 @@ msgstr ""
|
|||
"Helpdesk Management.\n"
|
||||
"====================\n"
|
||||
"\n"
|
||||
"Like records and processing of claims, Helpdesk and Support are good tools\n"
|
||||
"Like records and claims processing, Helpdesk and Support are good tools\n"
|
||||
"to trace your interventions. This menu is more adapted to oral "
|
||||
"communication,\n"
|
||||
"which is not necessarily related to a claim. Select a customer, add notes\n"
|
||||
"communication\n"
|
||||
"that is not necessarily related to a claim. Select a customer, add notes\n"
|
||||
"and categorise your interventions with a channel and a priority level.\n"
|
||||
" "
|
||||
|
||||
|
@ -2993,6 +3180,15 @@ msgid ""
|
|||
"\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Peruvian accounting chart and tax localisation. In accordance with PCGE "
|
||||
"2010.\n"
|
||||
"========================================================================\n"
|
||||
"\n"
|
||||
"Plan contable peruano e impuestos de acuerdo a disposiciones vigentes de la\n"
|
||||
"SUNAT 2011 (PCGE 2010).\n"
|
||||
"\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.server:0
|
||||
|
@ -3153,6 +3349,19 @@ msgid ""
|
|||
" * Unlimited \"Group By\" levels (not stacked), two cross level analysis "
|
||||
"(stacked)\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Graph Views for Web Client.\n"
|
||||
"===========================\n"
|
||||
"\n"
|
||||
" * Parse a <graph> view allowing the presentation to be changed "
|
||||
"dynamically\n"
|
||||
" * Graph Types: pie, line, area, bar, radar\n"
|
||||
" * Stacked/Not Stacked for areas and bars\n"
|
||||
" * Legends: top, inside (top/left), hidden\n"
|
||||
" * Features: download as PNG or CSV, browse data grid, switch "
|
||||
"orientation\n"
|
||||
" * Unlimited \"Group By\" levels (not stacked), two cross level analysis "
|
||||
"(stacked)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:res.groups:0
|
||||
|
@ -3231,6 +3440,25 @@ msgid ""
|
|||
"purchase price and fixed product standard price are booked on a separate \n"
|
||||
"account."
|
||||
msgstr ""
|
||||
"\n"
|
||||
"This module supports the Anglo-Saxon accounting methodology by changing the "
|
||||
"accounting logic for stock transactions.\n"
|
||||
"============================================================================="
|
||||
"=======================================\n"
|
||||
"\n"
|
||||
"The difference between the Anglo-Saxon accounting countries and the Rhine \n"
|
||||
"(or also called Continental accounting) countries is the timing of taking \n"
|
||||
"the Cost of Goods Sold versus the Cost of Sales. Anglo-Saxon accounting \n"
|
||||
"takes the cost when a sales invoice is created whereas Continental "
|
||||
"accounting will \n"
|
||||
"take the cost at the moment the goods are shipped.\n"
|
||||
"\n"
|
||||
"This module adds the functionality by using an interim account to \n"
|
||||
"store the value of shipped goods. It also contra-books the interim \n"
|
||||
"account at creation to transfer the amount to the \n"
|
||||
"debtor or creditor account. Additionally, price differences between actual \n"
|
||||
"purchase prices and fixed product standard prices are booked on a separate \n"
|
||||
"account."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.si
|
||||
|
@ -3297,7 +3525,7 @@ msgstr "French RIB Bank Details"
|
|||
#. module: base
|
||||
#: view:res.lang:0
|
||||
msgid "%p - Equivalent of either AM or PM."
|
||||
msgstr "%p - Equivalent of either AM or PM."
|
||||
msgstr "%p - Writes either AM or PM."
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.server:0
|
||||
|
@ -3315,6 +3543,7 @@ msgid ""
|
|||
"the user will have an access to the sales configuration as well as statistic "
|
||||
"reports."
|
||||
msgstr ""
|
||||
"the user will have access to the sales configuration and statistic reports."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.nz
|
||||
|
@ -3379,6 +3608,18 @@ msgid ""
|
|||
" above. Specify the interval information and partner to be invoice.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Create recurring documents.\n"
|
||||
"===========================\n"
|
||||
"\n"
|
||||
"This module allows the creation of new documents and their subscriptions.\n"
|
||||
"\n"
|
||||
"e.g. To have an invoice generated automatically periodically:\n"
|
||||
"-------------------------------------------------------------\n"
|
||||
" * Define a document type based on an Invoice object.\n"
|
||||
" * Define a subscription whose source document is the document defined\n"
|
||||
" above. Specify the repeat interval and the partner to be invoiced.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: field:res.company,rml_header1:0
|
||||
|
@ -3401,6 +3642,8 @@ msgid ""
|
|||
"the user will have an access to the human resources configuration as well as "
|
||||
"statistic reports."
|
||||
msgstr ""
|
||||
"the user will have access to the human resources configuration as well as "
|
||||
"statistics reports."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_pl
|
||||
|
@ -3524,6 +3767,22 @@ msgid ""
|
|||
" - Yearly Salary by Head and Yearly Salary by Employee Report\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Indian Payroll Salary Rules.\n"
|
||||
"============================\n"
|
||||
"\n"
|
||||
" -Configuration of hr_payroll for India localisation\n"
|
||||
" -All main contributions rules for India payslip.\n"
|
||||
" * New payslip report\n"
|
||||
" * Employee Contracts\n"
|
||||
" * Allow to configure Basic / Gross / Net Salary\n"
|
||||
" * Employee PaySlip\n"
|
||||
" * Allowance / Deduction\n"
|
||||
" * Integrated with Holiday Management\n"
|
||||
" * Medical Allowance, Travel Allowance, Child Allowance, ...\n"
|
||||
" - Payroll Advice and Report\n"
|
||||
" - Yearly Salary by Head and Yearly Salary by Employee Report\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:3871
|
||||
|
@ -3632,8 +3891,8 @@ msgid ""
|
|||
"way you want to print them in letters and other documents. Some example: "
|
||||
"Mr., Mrs. "
|
||||
msgstr ""
|
||||
"Manage the contact titles you want to have available in your system and the "
|
||||
"way you want to print them in letters and other documents. Some example: "
|
||||
"Manage the contact titles you wish to have available in your system and how "
|
||||
"you want them to be printed in letters and other documents. Some examples: "
|
||||
"Mr., Mrs. "
|
||||
|
||||
#. module: base
|
||||
|
@ -3690,7 +3949,7 @@ msgid ""
|
|||
"If you use a formula type, use a python expression using the variable "
|
||||
"'object'."
|
||||
msgstr ""
|
||||
"If you use a formula type, use a python expression using the variable "
|
||||
"If you use a formula type, use a python expression with the variable "
|
||||
"'object'."
|
||||
|
||||
#. module: base
|
||||
|
@ -3712,7 +3971,7 @@ msgstr "Contact Titles"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_product_manufacturer
|
||||
msgid "Products Manufacturers"
|
||||
msgstr "Products Manufacturers"
|
||||
msgstr "Product Manufacturer Info"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_mail_server.py:240
|
||||
|
@ -3885,6 +4144,38 @@ msgid ""
|
|||
"* Work Order Analysis\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Manage the Manufacturing process in OpenERP\n"
|
||||
"===========================================\n"
|
||||
"\n"
|
||||
"The manufacturing module allows you to cover planning, ordering, stock and "
|
||||
"the manufacturing or assembly of products from raw materials and components. "
|
||||
"It handles the consumption and production of products according to a bill of "
|
||||
"materials, the necessary operations by machinery and tools, and the aid of "
|
||||
"human resources, all via the use of routings.\n"
|
||||
"\n"
|
||||
"It supports the complete integration and planning of stockable goods, "
|
||||
"consumables and services. Services are completely integrated with the rest "
|
||||
"of the software. For instance, you can set up a sub-contracting service in a "
|
||||
"bill of materials which, on order, automatically purchases your product "
|
||||
"assembly.\n"
|
||||
"\n"
|
||||
"Key Features\n"
|
||||
"------------\n"
|
||||
"* Make to Stock/Make to Order\n"
|
||||
"* Multi-level bill of materials, no limit\n"
|
||||
"* Multi-level routing, no limit\n"
|
||||
"* Routing and work centre integrated with analytic accounting\n"
|
||||
"* Periodic scheduler computation \n"
|
||||
"* Allows browsing bills of materials in a complete structure including child "
|
||||
"and phantom bills of materials\n"
|
||||
"\n"
|
||||
"Dashboard / Reports for MRP includes:\n"
|
||||
"-------------------------------------\n"
|
||||
"* Procurements in Exception (Graph)\n"
|
||||
"* Stock Value Variation (Graph)\n"
|
||||
"* Work Order Analysis\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: view:ir.attachment:0
|
||||
|
@ -3984,8 +4275,8 @@ msgid ""
|
|||
"For one2many fields, the field on the target model that implement the "
|
||||
"opposite many2one relationship"
|
||||
msgstr ""
|
||||
"For one2many fields, the field on the target model that implements the "
|
||||
"opposite many2one relationship"
|
||||
"For one2many fields, the field in the target model that implements the "
|
||||
"reverse many2one relationship"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.rule:0
|
||||
|
@ -4080,6 +4371,24 @@ msgid ""
|
|||
"\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"This module allows you to define the default timesheet function of a user on "
|
||||
"a given account.\n"
|
||||
"============================================================================="
|
||||
"================\n"
|
||||
"\n"
|
||||
"This is useful when a user encodes their timesheet: the values are "
|
||||
"retrieved\n"
|
||||
"and the fields are auto-filled. However the possibility to change these "
|
||||
"values is\n"
|
||||
"still available.\n"
|
||||
"\n"
|
||||
"Obviously if no data has been recorded for the current account, the default\n"
|
||||
"value is given as usual from the employee data so that this module is "
|
||||
"perfectly\n"
|
||||
"compatible with older configurations.\n"
|
||||
"\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: view:ir.model:0
|
||||
|
@ -4311,7 +4620,7 @@ msgid ""
|
|||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Italian accounting chart and localization.\n"
|
||||
"Italian accounting chart and localisation.\n"
|
||||
"================================================\n"
|
||||
" "
|
||||
|
||||
|
@ -4542,7 +4851,7 @@ msgstr "Account Charts"
|
|||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_event_main
|
||||
msgid "Events Organization"
|
||||
msgstr ""
|
||||
msgstr "Events Organisation"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_partner_customer_form
|
||||
|
@ -7991,6 +8300,16 @@ msgid ""
|
|||
"shortcut.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Enable shortcut feature in the web client.\n"
|
||||
"==========================================\n"
|
||||
"\n"
|
||||
"Add a Shortcut icon to the systray in order to access the user's shortcuts "
|
||||
"(if any).\n"
|
||||
"\n"
|
||||
"Add a Shortcut icon beside the views title in order to add/remove a "
|
||||
"shortcut.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: field:res.company,rml_header2:0
|
||||
|
@ -8249,6 +8568,14 @@ msgid ""
|
|||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to add a contact to your address book.\n"
|
||||
" </p><p>\n"
|
||||
" OpenERP helps you easily track all activities related to\n"
|
||||
" a customer: discussions, history of business opportunities,\n"
|
||||
" documents, etc.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.bank_account_update
|
||||
|
@ -16655,9 +16982,6 @@ msgstr ""
|
|||
#~ msgid "maintenance.contract"
|
||||
#~ msgstr "maintenance.contract"
|
||||
|
||||
#~ msgid "Last Connection"
|
||||
#~ msgstr "Copy text \t Last Connection"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "If you need another language than the official ones available, you can "
|
||||
#~ "import a language pack from here. Other OpenERP languages than the official "
|
||||
|
@ -16753,10 +17077,6 @@ msgstr ""
|
|||
#~ msgid "SMS Send"
|
||||
#~ msgstr "SMS Send"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Object %s does not exists"
|
||||
#~ msgstr "Copy text \t Object %s does not exist"
|
||||
|
||||
#~ msgid "Waiting"
|
||||
#~ msgstr "Waiting"
|
||||
|
||||
|
@ -16764,9 +17084,6 @@ msgstr ""
|
|||
#~ msgid "Could not load base module"
|
||||
#~ msgstr "Could not load base module"
|
||||
|
||||
#~ msgid "Secondary Log"
|
||||
#~ msgstr "Copy text \t Secondary Log"
|
||||
|
||||
#~ msgid "Ignore"
|
||||
#~ msgstr "Ignore"
|
||||
|
||||
|
@ -16869,9 +17186,6 @@ msgstr ""
|
|||
#~ "you can add translations manually or perform a complete export (as a "
|
||||
#~ "template for a new language example)."
|
||||
|
||||
#~ msgid "Publisher warranty contract successfully registered!"
|
||||
#~ msgstr "Copy text \t Publisher warranty contract successfully registered!"
|
||||
|
||||
#~ msgid "state"
|
||||
#~ msgstr "state"
|
||||
|
||||
|
@ -17293,6 +17607,19 @@ msgstr ""
|
|||
#~ msgid "key '%s' not found in selection field '%s'"
|
||||
#~ msgstr "key '%s' not found in selection field '%s'"
|
||||
|
||||
#~ msgid "Last Connection"
|
||||
#~ msgstr "Last Connection"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Object %s does not exists"
|
||||
#~ msgstr "Object %s does not exist"
|
||||
|
||||
#~ msgid "Secondary Log"
|
||||
#~ msgstr "Secondary Log"
|
||||
|
||||
#~ msgid "Publisher warranty contract successfully registered!"
|
||||
#~ msgstr "Publisher warranty contract successfully registered!"
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Group(s) cannot be deleted, because some user(s) still belong to them: %s !"
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -8712,6 +8712,30 @@ msgid ""
|
|||
" are scheduled with taking the phase's start date.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Módulo de gestión de proyectos a largo plazo que registra la planificación, "
|
||||
"la programación, la asignación de recursos.\n"
|
||||
"============================================================================="
|
||||
"==============\n"
|
||||
"Características:\n"
|
||||
"---------\n"
|
||||
" * Gestión de grandes proyectos\n"
|
||||
" * Definición de varias fases de proyecto\n"
|
||||
" * Calculo de programación de fase: Calcula la fecha de inicio y fin de "
|
||||
"las fases \n"
|
||||
" del proyecto que están en estado borrador, abierto y pendiente. Si no "
|
||||
"se especifica el proyecto\n"
|
||||
" entonces se tomarán todas las fases en estado borrador, abierto y "
|
||||
"pendiente.\n"
|
||||
" * Calculo de programación de tareas: Funciona igual que el botón de "
|
||||
"planificador en\n"
|
||||
" project.phase. Toma el proyecto como argumento y calcula todas las "
|
||||
"tareas en borrador,\n"
|
||||
" abiertas y pendientes.\n"
|
||||
" * Programación de tareas: todas las tareas que están en estado "
|
||||
"borrador, abierto y pendiente\n"
|
||||
" se programan tomando la fecha de inicio de la fase.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:2021
|
||||
|
@ -14802,7 +14826,7 @@ msgstr "Nueva Caledonia (Francesa)"
|
|||
#. module: base
|
||||
#: field:ir.model,osv_memory:0
|
||||
msgid "Transient Model"
|
||||
msgstr "Model transitorio"
|
||||
msgstr "Modelo transitorio"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.cy
|
||||
|
@ -17702,6 +17726,25 @@ msgid ""
|
|||
"depending on the product's configuration.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Éste es el módulo para calcular abastecimientos.\n"
|
||||
"==============================================\n"
|
||||
"\n"
|
||||
"En el proceso de reaprovisionamiento (MRP), los pedidos de abastecimiento se "
|
||||
"crean para lanzar órdenes de fabricación, pedidos de compra o asignaciones "
|
||||
"de existencias. Los pedidos de abastecimientos se generan de forma "
|
||||
"automática por ele sistema y, a menos que haya un problema, el usuario no "
|
||||
"será notificado. En caso de problemas, el sistema lanzará excepciones de "
|
||||
"abastecimiento para informar al usuario acerca de los problemas bloqueantes "
|
||||
"que necesitan ser resueltos manualmente (como por ejemplo, listas de "
|
||||
"materiales (LdM) ausentes o proveedores no existentes).\n"
|
||||
"\n"
|
||||
"El pedido de abastecimiento planificará una propuesta para un abastecimiento "
|
||||
"automático para el producto que requiere reposición. Este abastecimiento "
|
||||
"comenzará una tarea, bien un formulario de pedido de compra para el "
|
||||
"proveedor, o bien una orden de fabricación, dependiendo de la configuración "
|
||||
"del producto.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.open_module_tree
|
||||
|
@ -23501,3 +23544,115 @@ msgstr "Registro"
|
|||
#~ "que hacer, y se puede concentrar en la realización efectiva de dichas "
|
||||
#~ "tareas.\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "This module allows to use several analytic plans, according to the general "
|
||||
#~ "journal.\n"
|
||||
#~ "============================================================================="
|
||||
#~ "======\n"
|
||||
#~ "\n"
|
||||
#~ "Here multiple analytic lines are created when the invoice or the entries\n"
|
||||
#~ "are confirmed.\n"
|
||||
#~ "\n"
|
||||
#~ "For example, you can define the following analytic structure:\n"
|
||||
#~ " Projects\n"
|
||||
#~ " Project 1\n"
|
||||
#~ " SubProj 1.1\n"
|
||||
#~ " SubProj 1.2\n"
|
||||
#~ "\n"
|
||||
#~ " Project 2\n"
|
||||
#~ " Salesman\n"
|
||||
#~ " Eric\n"
|
||||
#~ " Fabien\n"
|
||||
#~ "\n"
|
||||
#~ "Here, we have two plans: Projects and Salesman. An invoice line must\n"
|
||||
#~ "be able to write analytic entries in the 2 plans: SubProj 1.1 and\n"
|
||||
#~ "Fabien. The amount can also be split. The following example is for\n"
|
||||
#~ "an invoice that touches the two subproject and assigned to one salesman:\n"
|
||||
#~ "\n"
|
||||
#~ "Plan1:\n"
|
||||
#~ " SubProject 1.1 : 50%\n"
|
||||
#~ " SubProject 1.2 : 50%\n"
|
||||
#~ "Plan2:\n"
|
||||
#~ " Eric: 100%\n"
|
||||
#~ "\n"
|
||||
#~ "So when this line of invoice will be confirmed, it will generate 3 analytic "
|
||||
#~ "lines,\n"
|
||||
#~ "for one account entry.\n"
|
||||
#~ "The analytic plan validates the minimum and maximum percentage at the time "
|
||||
#~ "of creation\n"
|
||||
#~ "of distribution models.\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Este módulo permite usar varios planes analíticos, según el diario general.\n"
|
||||
#~ "============================================================================="
|
||||
#~ "======\n"
|
||||
#~ "\n"
|
||||
#~ "Se crean varias líneas analíticas cuando la factura o las entradas se "
|
||||
#~ "confirman.\n"
|
||||
#~ "\n"
|
||||
#~ "Por ejemplo, se puede definir la siguiente estructura analítica:\n"
|
||||
#~ " Proyectos\n"
|
||||
#~ " Proyecto 1\n"
|
||||
#~ " SubProyecto 1.1\n"
|
||||
#~ " SubProyecto 1.2\n"
|
||||
#~ " Proyecto 2\n"
|
||||
#~ "\n"
|
||||
#~ " Comercial\n"
|
||||
#~ " Eric\n"
|
||||
#~ " Fabien\n"
|
||||
#~ "\n"
|
||||
#~ "Como vemos, hay dos planes: Proyectos y Comercial.\n"
|
||||
#~ "Una lñinea de factura debe ser capaz de escribir entradas analíticas\n"
|
||||
#~ "en dos planes: SubProyecto 1.1 y Fabien. También se puede repartir la "
|
||||
#~ "cantidad.\n"
|
||||
#~ "\n"
|
||||
#~ "El siguiente ejemplo es para una factura que afecta a los dos subproyectos\n"
|
||||
#~ "y se asigna a uno de los comerciales:\n"
|
||||
#~ "\n"
|
||||
#~ "Plan1:\n"
|
||||
#~ " SubProyecto 1.1 : 50%\n"
|
||||
#~ " SubProyecto 1.2 : 50%\n"
|
||||
#~ "Plan2:\n"
|
||||
#~ " Eric: 100%\n"
|
||||
#~ "\n"
|
||||
#~ "Así, cuando se confirme la línea de factura, se generarán 3 líneas "
|
||||
#~ "analíticas,\n"
|
||||
#~ "para un asiento contable.\n"
|
||||
#~ "El plan analítico valida los porcentajes mínimo y máximo en el momento de "
|
||||
#~ "creación\n"
|
||||
#~ "de los modelos distribuidos.\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "This module allows you to produce several products from one production "
|
||||
#~ "order.\n"
|
||||
#~ "============================================================================="
|
||||
#~ "\n"
|
||||
#~ "\n"
|
||||
#~ "You can configure sub-products in the bill of material.\n"
|
||||
#~ "\n"
|
||||
#~ "Without this module:\n"
|
||||
#~ " A + B + C -> D\n"
|
||||
#~ "\n"
|
||||
#~ "With this module:\n"
|
||||
#~ " A + B + C -> D + E\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Este módulo permite producir varios productos desde una única orden de "
|
||||
#~ "producción.\n"
|
||||
#~ "============================================================================="
|
||||
#~ "\n"
|
||||
#~ "\n"
|
||||
#~ "Se pueden configurar subproductos en la lista de materiales.\n"
|
||||
#~ "\n"
|
||||
#~ "Sin este módulo:\n"
|
||||
#~ " A + B + C -> D\n"
|
||||
#~ "\n"
|
||||
#~ "Con este módulo:\n"
|
||||
#~ " A + B + C -> D + E\n"
|
||||
#~ " "
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"Language: \n"
|
||||
|
||||
#. module: base
|
||||
|
@ -191,7 +191,7 @@ msgstr "Ventana destino"
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_rml:0
|
||||
msgid "Main Report File Path"
|
||||
msgstr ""
|
||||
msgstr "Ruta de archivo principal del informe"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale_analytic_plans
|
||||
|
@ -212,6 +212,15 @@ msgid ""
|
|||
"revenue\n"
|
||||
"reports."
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Genere facturas desde los gastos y partes de horas.\n"
|
||||
"========================================================\n"
|
||||
"\n"
|
||||
"Módulo para generar facturas basadas en los costes (recursos humanos, "
|
||||
"gastos, ...).\n"
|
||||
"\n"
|
||||
"Puede definir tarifas en la contabilidad analítica, realizando algún informe "
|
||||
"teórico de beneficios."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_sequence.py:134
|
||||
|
@ -263,7 +272,7 @@ msgstr "creado."
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_xsl:0
|
||||
msgid "XSL Path"
|
||||
msgstr ""
|
||||
msgstr "Ruta XSL"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_tr
|
||||
|
@ -289,7 +298,7 @@ msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
|
|||
#. module: base
|
||||
#: model:res.groups,name:base.group_multi_currency
|
||||
msgid "Multi Currencies"
|
||||
msgstr ""
|
||||
msgstr "Multidivisa"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_cl
|
||||
|
@ -301,6 +310,12 @@ msgid ""
|
|||
"\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Plan de cuentas y localización de impuestos chilenos.\n"
|
||||
"==============================================\n"
|
||||
"Plan contable chileno e impuestos de acuerdo a disposiciones vigentes\n"
|
||||
"\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale
|
||||
|
@ -313,6 +328,7 @@ msgid ""
|
|||
"The internal user that is in charge of communicating with this contact if "
|
||||
"any."
|
||||
msgstr ""
|
||||
"El usuario interno encargado de comunicarse con este contacto si lo hubiese."
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -8,14 +8,15 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-server\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2012-09-07 01:11+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2013-07-25 03:08+0000\n"
|
||||
"Last-Translator: Federico Manuel Echeverri Choux - ( Vauxoo ) "
|
||||
"<echeverrifm@gmail.com>\n"
|
||||
"Language-Team: Spanish (Mexico) <es_MX@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: 2013-06-18 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -613,7 +614,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:res.country,name:0
|
||||
msgid "Country Name"
|
||||
msgstr ""
|
||||
msgstr "Nombre del país"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.co
|
||||
|
@ -14300,7 +14301,7 @@ msgstr ""
|
|||
#: field:res.partner,vat:0
|
||||
#, python-format
|
||||
msgid "TIN"
|
||||
msgstr ""
|
||||
msgstr "RFC"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.aw
|
||||
|
@ -14316,7 +14317,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.ar
|
||||
msgid "Argentina"
|
||||
msgstr ""
|
||||
msgstr "Argentina"
|
||||
|
||||
#. module: base
|
||||
#: field:res.groups,full_name:0
|
||||
|
@ -14357,7 +14358,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_report_designer
|
||||
msgid "Advanced Reporting"
|
||||
msgstr ""
|
||||
msgstr "Informes avanzados"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_purchase
|
||||
|
@ -14405,7 +14406,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_fr
|
||||
msgid "France - Accounting"
|
||||
msgstr ""
|
||||
msgstr "Francia - Contabilidad"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.todo:0
|
||||
|
@ -14549,7 +14550,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Czech / Čeština"
|
||||
msgstr ""
|
||||
msgstr "Checo / Čeština"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_generic_modules
|
||||
|
@ -14608,7 +14609,7 @@ msgstr ""
|
|||
#: model:ir.module.category,name:base.module_category_hidden
|
||||
#: view:res.users:0
|
||||
msgid "Technical Settings"
|
||||
msgstr ""
|
||||
msgstr "Configuración técnica"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,description:base.module_category_accounting_and_finance
|
||||
|
@ -14616,6 +14617,8 @@ msgid ""
|
|||
"Helps you handle your accounting needs, if you are not an accountant, we "
|
||||
"suggest you to install only the Invoicing."
|
||||
msgstr ""
|
||||
"Le ayuda a manejar sus necesidades contables. Si no es un contable, le "
|
||||
"recomendamos que sólo instale el módulo 'invoicing'."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_plugin_thunderbird
|
||||
|
@ -14625,7 +14628,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_event
|
||||
msgid "Trainings, Conferences, Meetings, Exhibitions, Registrations"
|
||||
msgstr ""
|
||||
msgstr "Formaciones, conferencias, reuniones, exhibiciones, inscripciones"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_res_country
|
||||
|
@ -14688,7 +14691,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_nl
|
||||
msgid "Netherlands - Accounting"
|
||||
msgstr ""
|
||||
msgstr "Holanda - Contabilidad"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.gs
|
||||
|
@ -14713,6 +14716,11 @@ msgid ""
|
|||
"1,06,500;[1,2,-1] will represent it to be 106,50,0;[3] will represent it as "
|
||||
"106,500. Provided ',' as the thousand separator in each case."
|
||||
msgstr ""
|
||||
"El formato de separación debería ser como [,n] dónde 0 < n, empezando por "
|
||||
"el dígito unidad. -1 terminará la separación. Por ej. [3,2,-1] representará "
|
||||
"106500 como 1,06,500; [1,2,-1] lo representará como 106,50,0; [3] lo "
|
||||
"representará como 106,500. Siempre que ',' sea el separador de mil en cada "
|
||||
"caso."
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.module,auto_install:0
|
||||
|
@ -14732,6 +14740,12 @@ msgid ""
|
|||
"taxes\n"
|
||||
"and the Lempira currency."
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Éste es el módulo base para gestionar el plan de cuentas para Honduras.\n"
|
||||
"====================================================================\n"
|
||||
" \n"
|
||||
"Agrega una nomenclatura contable para Honduras. También incluye impuestos y "
|
||||
"la moneda Lempira."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.jp
|
||||
|
@ -14798,12 +14812,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_ca
|
||||
msgid "Canada - Accounting"
|
||||
msgstr ""
|
||||
msgstr "Canada - Contabilidad"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_co
|
||||
msgid "Colombian - Accounting"
|
||||
msgstr ""
|
||||
msgstr "Contabilidad colombiana"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_voucher
|
||||
|
@ -14870,7 +14884,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_ve
|
||||
msgid "Venezuela - Accounting"
|
||||
msgstr ""
|
||||
msgstr "Venezuela - Contabilidad"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.cl
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -9,8 +9,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:40+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
|
||||
"X-Poedit-Language: Persian\n"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:28+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -1006,7 +1006,7 @@ msgstr "Sécurité et authentification"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_web_calendar
|
||||
msgid "Web Calendar"
|
||||
msgstr "Calendrier Web"
|
||||
msgstr "Calendrier web"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -8819,7 +8819,7 @@ msgstr "Traduisible"
|
|||
#. module: base
|
||||
#: help:base.language.import,code:0
|
||||
msgid "ISO Language and Country code, e.g. en_US"
|
||||
msgstr ""
|
||||
msgstr "Code ISO de la langue et du pays, ex: en_US"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.vn
|
||||
|
@ -8891,7 +8891,7 @@ msgstr "Sur plusieurs documents"
|
|||
#: view:res.users:0
|
||||
#: view:wizard.ir.model.menu.create:0
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
msgstr "ou"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_account_accountant
|
||||
|
@ -9204,7 +9204,7 @@ msgstr "Cette fenêtre"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_portal_anonymous
|
||||
msgid "Anonymous portal"
|
||||
msgstr ""
|
||||
msgstr "Portail anonyme"
|
||||
|
||||
#. module: base
|
||||
#: field:base.language.export,format:0
|
||||
|
@ -9261,7 +9261,7 @@ msgstr "Mot de passe"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_portal_claim
|
||||
msgid "Portal Claim"
|
||||
msgstr ""
|
||||
msgstr "Portail Réclamation"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_pe
|
||||
|
@ -9275,6 +9275,9 @@ msgid ""
|
|||
"Allow users to login through OAuth2 Provider.\n"
|
||||
"=============================================\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Permettre aux utilisateurs de se connecter via un fournisseur OAuth2.\n"
|
||||
"=============================================\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_model_fields
|
||||
|
@ -9528,7 +9531,7 @@ msgstr "Comptabilité financière et analytique"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_portal_project
|
||||
msgid "Portal Project"
|
||||
msgstr ""
|
||||
msgstr "Portail Projet"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.cc
|
||||
|
@ -9591,7 +9594,7 @@ msgstr ""
|
|||
" </p><p>\n"
|
||||
" OpenERP vous aide à suivre toutes les activités avec un "
|
||||
"client : \n"
|
||||
" les discussions, l'historiques des opportunités, \n"
|
||||
" les discussions, l'historique des opportunités, \n"
|
||||
" les documents, etc.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
@ -9690,6 +9693,8 @@ msgid ""
|
|||
"Select this if you want to set company's address information for this "
|
||||
"contact"
|
||||
msgstr ""
|
||||
"Sélecionnez ceci si vous voulez indiquer l'adresse de la société de ce "
|
||||
"contact."
|
||||
|
||||
#. module: base
|
||||
#: field:ir.default,field_name:0
|
||||
|
@ -9728,6 +9733,8 @@ msgid ""
|
|||
"This field holds the image used as avatar for this contact, limited to "
|
||||
"1024x1024px"
|
||||
msgstr ""
|
||||
"Ce champ contient l'image utilisée comme photo d'identité pour ce contact, "
|
||||
"de taille limitée à 1024x1024px."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.to
|
||||
|
@ -9942,6 +9949,9 @@ msgid ""
|
|||
"The kernel of OpenERP, needed for all installation.\n"
|
||||
"===================================================\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Le noyau d'OpenERP, nécessaire pour toute installation.\n"
|
||||
"===================================================\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_server_object_lines
|
||||
|
@ -10040,7 +10050,7 @@ msgstr "Recherche toujours possible"
|
|||
#. module: base
|
||||
#: help:res.country.state,code:0
|
||||
msgid "The state code in max. three chars."
|
||||
msgstr ""
|
||||
msgstr "Code de l'état, avec au plus trois caractères."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.hk
|
||||
|
@ -10050,7 +10060,7 @@ msgstr "Hong-Kong"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_portal_sale
|
||||
msgid "Portal Sale"
|
||||
msgstr ""
|
||||
msgstr "Portail Vente"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.default,ref_id:0
|
||||
|
@ -10288,6 +10298,9 @@ msgid ""
|
|||
"If the selected language is loaded in the system, all documents related to "
|
||||
"this contact will be printed in this language. If not, it will be English."
|
||||
msgstr ""
|
||||
"Si la langue sélectionnée est chargée dans le système, tous les documents "
|
||||
"pour ce contact seront imprimés dans cette langue. Dans le cas contraire, "
|
||||
"ils le seront en anglais."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_hr_evaluation
|
||||
|
@ -10502,7 +10515,7 @@ msgstr "Actions multiples"
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_mail
|
||||
msgid "Discussions, Mailing Lists, News"
|
||||
msgstr ""
|
||||
msgstr "Discussions, listes de diffusion, nouvelles"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_fleet
|
||||
|
@ -10976,7 +10989,7 @@ msgstr "Mali"
|
|||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_project_config_project
|
||||
msgid "Stages"
|
||||
msgstr ""
|
||||
msgstr "Étapes"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -11088,7 +11101,7 @@ msgstr "Raccourcis personnalisés"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_si
|
||||
msgid "Slovenian - Accounting"
|
||||
msgstr ""
|
||||
msgstr "Comptabilité - Slovénie"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_cancel
|
||||
|
@ -11102,6 +11115,15 @@ msgid ""
|
|||
"If set to true it allows user to cancel entries & invoices.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Autoriser l'annulation d'écritures comptables.\n"
|
||||
"====================================\n"
|
||||
"\n"
|
||||
"Ce module ajoute un champ \"Autoriser l'annulation d'écriture\" sur la vue "
|
||||
"formulaire d'un journal de compte.\n"
|
||||
"Lorsque ce champ est coché, un utilisateur peut annuler des écritures et des "
|
||||
"factures.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_plugin
|
||||
|
@ -11249,7 +11271,7 @@ msgstr "Annuler"
|
|||
#: code:addons/orm.py:1507
|
||||
#, python-format
|
||||
msgid "Unknown database identifier '%s'"
|
||||
msgstr ""
|
||||
msgstr "Identifiant de base de données inconnu '%s'"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.export,format:0
|
||||
|
@ -11402,7 +11424,7 @@ msgstr "Allemagne"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_auth_oauth
|
||||
msgid "OAuth2 Authentication"
|
||||
msgstr ""
|
||||
msgstr "Identification OAuth2"
|
||||
|
||||
#. module: base
|
||||
#: view:workflow:0
|
||||
|
@ -11581,7 +11603,7 @@ msgstr "Regrouper par..."
|
|||
#. module: base
|
||||
#: view:base.module.update:0
|
||||
msgid "Module Update Result"
|
||||
msgstr ""
|
||||
msgstr "Résultat de la mise à jour des modules"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_analytic_contract_hr_expense
|
||||
|
@ -11596,7 +11618,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.attachment,store_fname:0
|
||||
msgid "Stored Filename"
|
||||
msgstr ""
|
||||
msgstr "Nom du fichier enregistré"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner,use_parent_address:0
|
||||
|
@ -11653,6 +11675,14 @@ msgid ""
|
|||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
"Cliquez pour ajouter un contact dans votre carnet d'adresses.\n"
|
||||
"</p><p>\n"
|
||||
"OpenERP vous aide à suivre toutes les activités d'un fournisseur :\n"
|
||||
"les discussions, l'historique des achats,\n"
|
||||
"les documents, etc.\n"
|
||||
"</p>\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.lr
|
||||
|
@ -11820,7 +11850,7 @@ msgstr "Unité de l'intervalle"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_portal_stock
|
||||
msgid "Portal Stock"
|
||||
msgstr ""
|
||||
msgstr "Portail Stock"
|
||||
|
||||
#. module: base
|
||||
#: field:workflow.activity,kind:0
|
||||
|
@ -11903,7 +11933,7 @@ msgstr "res.request"
|
|||
#. module: base
|
||||
#: field:res.partner,image_medium:0
|
||||
msgid "Medium-sized image"
|
||||
msgstr ""
|
||||
msgstr "Image de taille moyenne"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.model:0
|
||||
|
@ -11988,7 +12018,7 @@ msgstr "Règles sur les enregistrements"
|
|||
#. module: base
|
||||
#: view:multi_company.default:0
|
||||
msgid "Multi Company"
|
||||
msgstr ""
|
||||
msgstr "Multi société"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_portal
|
||||
|
@ -12005,7 +12035,7 @@ msgstr ""
|
|||
#: code:addons/base/ir/ir_fields.py:294
|
||||
#, python-format
|
||||
msgid "See all possible values"
|
||||
msgstr ""
|
||||
msgstr "Voir toutes les valeurs possibles"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_claim_from_delivery
|
||||
|
@ -12066,7 +12096,7 @@ msgstr "Guinée Bissau"
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,header:0
|
||||
msgid "Add RML Header"
|
||||
msgstr ""
|
||||
msgstr "Ajouter l'en-tête RML"
|
||||
|
||||
#. module: base
|
||||
#: help:res.company,rml_footer:0
|
||||
|
@ -12201,7 +12231,7 @@ msgstr "A Faire"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_portal_hr_employees
|
||||
msgid "Portal HR employees"
|
||||
msgstr ""
|
||||
msgstr "Portail RH Employés"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -12321,6 +12351,8 @@ msgstr ""
|
|||
msgid ""
|
||||
"Please contact your system administrator if you think this is an error."
|
||||
msgstr ""
|
||||
"Vous pouvez contacter votre administrateur système si vous pensez qu'il "
|
||||
"s'agit d'une erreur."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/module/module.py:545
|
||||
|
@ -12368,6 +12400,8 @@ msgid ""
|
|||
"One of the documents you are trying to access has been deleted, please try "
|
||||
"again after refreshing."
|
||||
msgstr ""
|
||||
"L'un des documents que vous voulez consulter a été supprimé : actualisez la "
|
||||
"page puis réessayez."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_mail_server
|
||||
|
@ -12539,7 +12573,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: help:res.partner,ean13:0
|
||||
msgid "BarCode"
|
||||
msgstr ""
|
||||
msgstr "Code-barres"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.model.fields,model_id:0
|
||||
|
@ -12561,6 +12595,7 @@ msgstr "Martinique (Française)"
|
|||
#: help:res.partner,is_company:0
|
||||
msgid "Check if the contact is a company, otherwise it is a person"
|
||||
msgstr ""
|
||||
"Cochez si ce contact est une société, sinon il s'agit d'un particulier"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.sequence.type:0
|
||||
|
@ -12570,7 +12605,7 @@ msgstr "Type de séquences"
|
|||
#. module: base
|
||||
#: view:res.partner:0
|
||||
msgid "Mobile:"
|
||||
msgstr ""
|
||||
msgstr "Portable :"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/res/res_bank.py:195
|
||||
|
@ -12637,7 +12672,7 @@ msgstr ""
|
|||
#: code:addons/base/ir/ir_model.py:1031
|
||||
#, python-format
|
||||
msgid "Permission Denied"
|
||||
msgstr ""
|
||||
msgstr "Permission refusée"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.ui.menu,child_id:0
|
||||
|
@ -12758,7 +12793,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.bl
|
||||
msgid "Saint Barthélémy"
|
||||
msgstr ""
|
||||
msgstr "Saint Barthélémy"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.module.module,license:0
|
||||
|
@ -12830,13 +12865,13 @@ msgstr "Arabe / الْعَرَبيّة"
|
|||
#. module: base
|
||||
#: selection:ir.translation,state:0
|
||||
msgid "Translated"
|
||||
msgstr ""
|
||||
msgstr "Traduit"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_inventory_form
|
||||
#: model:ir.ui.menu,name:base.menu_action_inventory_form
|
||||
msgid "Default Company per Object"
|
||||
msgstr ""
|
||||
msgstr "Société par défaut par objet"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_web_hello
|
||||
|
@ -12866,7 +12901,7 @@ msgstr "Domaine"
|
|||
#: code:addons/base/ir/ir_fields.py:166
|
||||
#, python-format
|
||||
msgid "Use '1' for yes and '0' for no"
|
||||
msgstr ""
|
||||
msgstr "Utilisez \"1\" pour oui et \"0\" pour non"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_marketing_campaign
|
||||
|
@ -13004,6 +13039,9 @@ msgid ""
|
|||
"Allow users to sign up through OAuth2 Provider.\n"
|
||||
"===============================================\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Permettre aux utilisateurs de se connecter via un fournisseur OAuth2.\n"
|
||||
"===============================================\n"
|
||||
|
||||
#. module: base
|
||||
#: field:change.password.user,user_id:0
|
||||
|
@ -13062,7 +13100,7 @@ msgstr "Grenade"
|
|||
#. module: base
|
||||
#: help:res.partner,customer:0
|
||||
msgid "Check this box if this contact is a customer."
|
||||
msgstr ""
|
||||
msgstr "Cochez cette case si le contact est un client."
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.server:0
|
||||
|
@ -13142,7 +13180,7 @@ msgstr ""
|
|||
#: field:ir.actions.report.xml,report_rml_content:0
|
||||
#: field:ir.actions.report.xml,report_rml_content_data:0
|
||||
msgid "RML Content"
|
||||
msgstr ""
|
||||
msgstr "Contenu RML"
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
|
@ -13383,7 +13421,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_fields_converter
|
||||
msgid "ir.fields.converter"
|
||||
msgstr ""
|
||||
msgstr "ir.fields.converter"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/res/res_partner.py:439
|
||||
|
@ -13411,12 +13449,12 @@ msgstr "Annuler l'installation"
|
|||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_model_relation
|
||||
msgid "ir.model.relation"
|
||||
msgstr ""
|
||||
msgstr "ir.model.relation"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_account_check_writing
|
||||
msgid "Check Writing"
|
||||
msgstr ""
|
||||
msgstr "Écriture de chèques"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_plugin_outlook
|
||||
|
@ -13641,7 +13679,7 @@ msgstr "Grande Bretagne - Comptabilité"
|
|||
#. module: base
|
||||
#: model:res.partner.title,shortcut:base.res_partner_title_madam
|
||||
msgid "Mrs."
|
||||
msgstr ""
|
||||
msgstr "Mme"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_model.py:432
|
||||
|
@ -13663,6 +13701,7 @@ msgstr "Réf. utilisateur"
|
|||
#, python-format
|
||||
msgid "'%s' does not seem to be a valid datetime for field '%%(field)s'"
|
||||
msgstr ""
|
||||
"'%s' ne semble pas être une date/heure valide pour le champ '%%(fields)s'"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.bank.type.field,name:base.bank_normal_field_bic
|
||||
|
@ -13813,7 +13852,7 @@ msgstr "Informations sur la connexion"
|
|||
#. module: base
|
||||
#: model:res.partner.title,name:base.res_partner_title_prof
|
||||
msgid "Professor"
|
||||
msgstr ""
|
||||
msgstr "Professeur"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.hm
|
||||
|
@ -13842,7 +13881,7 @@ msgstr "Vous aide à gérer vos devis, commandes et factures"
|
|||
#. module: base
|
||||
#: field:res.users,login_date:0
|
||||
msgid "Latest connection"
|
||||
msgstr ""
|
||||
msgstr "Dernière connexion"
|
||||
|
||||
#. module: base
|
||||
#: field:res.groups,implied_ids:0
|
||||
|
@ -13859,7 +13898,7 @@ msgstr "Sélection"
|
|||
#: model:ir.actions.act_window,name:base.change_password_wizard_action
|
||||
#: view:res.users:0
|
||||
msgid "Change Password"
|
||||
msgstr ""
|
||||
msgstr "Modifier le mot de passe"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_es
|
||||
|
@ -13927,7 +13966,7 @@ msgstr "Binaire"
|
|||
#. module: base
|
||||
#: model:res.partner.title,name:base.res_partner_title_doctor
|
||||
msgid "Doctor"
|
||||
msgstr ""
|
||||
msgstr "Docteur"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_mrp_repair
|
||||
|
@ -14136,12 +14175,12 @@ msgstr "Mois de création"
|
|||
#. module: base
|
||||
#: field:ir.module.module,demo:0
|
||||
msgid "Demo Data"
|
||||
msgstr ""
|
||||
msgstr "Données de démonstration"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.title,shortcut:base.res_partner_title_mister
|
||||
msgid "Mr."
|
||||
msgstr ""
|
||||
msgstr "M."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.mv
|
||||
|
@ -14261,7 +14300,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_sxw:0
|
||||
msgid "SXW Path"
|
||||
msgstr ""
|
||||
msgstr "Emplacement SXW"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_asset
|
||||
|
@ -14294,7 +14333,7 @@ msgstr "Banque"
|
|||
#: model:ir.module.category,name:base.module_category_point_of_sale
|
||||
#: model:ir.module.module,shortdesc:base.module_point_of_sale
|
||||
msgid "Point of Sale"
|
||||
msgstr ""
|
||||
msgstr "Point de vente"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_mail
|
||||
|
@ -14544,7 +14583,7 @@ msgstr "Gabon"
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_stock
|
||||
msgid "Inventory, Logistic, Storage"
|
||||
msgstr ""
|
||||
msgstr "Inventaire, logistique, stockage"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.act_window:0
|
||||
|
@ -15202,7 +15241,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:res.partner:0
|
||||
msgid "Fax:"
|
||||
msgstr ""
|
||||
msgstr "Fax :"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.ui.view,type:0
|
||||
|
@ -15480,7 +15519,7 @@ msgstr "Modules d'installation"
|
|||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_import_crm
|
||||
msgid "Import & Synchronize"
|
||||
msgstr ""
|
||||
msgstr "Importer et synchroniser"
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
|
@ -15680,7 +15719,7 @@ msgstr "Action due plusieurs documents"
|
|||
#: model:ir.actions.act_window,name:base.action_partner_title_partner
|
||||
#: model:ir.ui.menu,name:base.menu_partner_title_partner
|
||||
msgid "Titles"
|
||||
msgstr ""
|
||||
msgstr "Civilités et Formes juridiques"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_anonymization
|
||||
|
@ -15968,7 +16007,7 @@ msgstr "Modules à mettre à jour"
|
|||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_custom_multicompany
|
||||
msgid "Multi-Companies"
|
||||
msgstr ""
|
||||
msgstr "Multi-sociétés"
|
||||
|
||||
#. module: base
|
||||
#: field:workflow,osv:0
|
||||
|
@ -16288,7 +16327,7 @@ msgstr "Accès"
|
|||
#: field:res.partner,vat:0
|
||||
#, python-format
|
||||
msgid "TIN"
|
||||
msgstr ""
|
||||
msgstr "Numéro fiscal"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.aw
|
||||
|
@ -16388,7 +16427,7 @@ msgstr "Services après vente"
|
|||
#. module: base
|
||||
#: field:base.language.import,code:0
|
||||
msgid "ISO Code"
|
||||
msgstr ""
|
||||
msgstr "Code ISO"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_fr
|
||||
|
@ -16567,6 +16606,9 @@ msgid ""
|
|||
"Allow users to login through OpenID.\n"
|
||||
"====================================\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Permettre aux utilisateurs de se connecter via OpenID.\n"
|
||||
"====================================\n"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.mail_server,smtp_port:0
|
||||
|
@ -16809,7 +16851,7 @@ msgstr "Canada - Comptabilité"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_co
|
||||
msgid "Colombian - Accounting"
|
||||
msgstr ""
|
||||
msgstr "Colombie - Comptabilité"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_voucher
|
||||
|
@ -16991,12 +17033,12 @@ msgstr "Mise à jour du système"
|
|||
#: field:ir.actions.report.xml,report_sxw_content:0
|
||||
#: field:ir.actions.report.xml,report_sxw_content_data:0
|
||||
msgid "SXW Content"
|
||||
msgstr ""
|
||||
msgstr "Contenu SXW"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.attachment,file_size:0
|
||||
msgid "File Size"
|
||||
msgstr ""
|
||||
msgstr "Taille du fichier"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.sequence,prefix:0
|
||||
|
@ -17011,7 +17053,7 @@ msgstr "Seychelles"
|
|||
#. module: base
|
||||
#: model:res.partner.category,name:base.res_partner_category_4
|
||||
msgid "Gold"
|
||||
msgstr ""
|
||||
msgstr "Or"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/res/res_company.py:173
|
||||
|
@ -17038,7 +17080,7 @@ msgstr "Informations générales"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_pt
|
||||
msgid "Portugal - Chart of Accounts"
|
||||
msgstr ""
|
||||
msgstr "Portugal - Plan comptable"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.model.data,complete_name:0
|
||||
|
@ -17088,6 +17130,8 @@ msgid ""
|
|||
"Tax Identification Number. Check the box if this contact is subjected to "
|
||||
"taxes. Used by the some of the legal statements."
|
||||
msgstr ""
|
||||
"Numéro fiscal. Cochez cette case si ce contact est soumis au paiement de "
|
||||
"taxe. Utilisé dans certains documents légaux."
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner.bank,partner_id:0
|
||||
|
@ -17269,6 +17313,14 @@ msgid ""
|
|||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
"Cliquez pour ajouter un contact dans votre carnet d'adresses.\n"
|
||||
"</p><p>\n"
|
||||
"OpenERP vous aide à suivre toutes les activités d'un client :\n"
|
||||
"les discussions, l'historique des opportunités,\n"
|
||||
"les documents, etc.\n"
|
||||
"</p>\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.category,name:base.res_partner_category_2
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -29,12 +29,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.sh
|
||||
msgid "Saint Helena"
|
||||
msgstr ""
|
||||
msgstr "સંત હેલેના"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.report.xml:0
|
||||
msgid "Other Configuration"
|
||||
msgstr "બીજા કન્ફિગ્યુરેશન"
|
||||
msgstr "અન્ય રેખાંકન"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
|
@ -232,7 +232,7 @@ msgstr "સ્પાર્સ ફિલ્ડ \"%s\" નુ નામ બદલ
|
|||
#. module: base
|
||||
#: model:res.country,name:base.sz
|
||||
msgid "Swaziland"
|
||||
msgstr "સ્વાઝિલેન્ડ"
|
||||
msgstr "સ્વાઝીલેન્ડ"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:4485
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"Language: hr\n"
|
||||
|
||||
#. module: base
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -9,8 +9,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -42,7 +42,7 @@ msgstr "Konfigurasi Lainnya"
|
|||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
msgid "DateTime"
|
||||
msgstr ""
|
||||
msgstr "DateTime"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/fields.py:652
|
||||
|
@ -51,6 +51,8 @@ msgid ""
|
|||
"The second argument of the many2many field %s must be a SQL table !You used "
|
||||
"%s, which is not a valid SQL table name."
|
||||
msgstr ""
|
||||
"Argumen kedua dari field many2many %s harus merupakan tabel SQL ! Anda "
|
||||
"menggunakan %s, yang mana bukan table SQL."
|
||||
|
||||
#. module: base
|
||||
#: field:ir.ui.view,arch:0
|
||||
|
@ -66,7 +68,7 @@ msgstr "Kontrol Penawaran, Pesanan Penjualan, Pengiriman & Faktur"
|
|||
#. module: base
|
||||
#: selection:ir.sequence,implementation:0
|
||||
msgid "No gap"
|
||||
msgstr ""
|
||||
msgstr "Tidak ada gap"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -76,7 +78,7 @@ msgstr "Bahasa Hungaria"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Spanish (PY) / Español (PY)"
|
||||
msgstr ""
|
||||
msgstr "Bahasa Spanyol"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,description:base.module_category_project_management
|
||||
|
@ -84,27 +86,30 @@ msgid ""
|
|||
"Helps you manage your projects and tasks by tracking them, generating "
|
||||
"plannings, etc..."
|
||||
msgstr ""
|
||||
"Memungkinkan Anda untuk mengelola proyek dan tugas dengan cara melacaknya, "
|
||||
"menghasilkan perencanaan dan lain sebagainya ..."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_point_of_sale
|
||||
msgid "Touchscreen Interface for Shops"
|
||||
msgstr ""
|
||||
msgstr "Antarmuka layar sentuh untuk digunakan di toko"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll
|
||||
msgid "Indian Payroll"
|
||||
msgstr ""
|
||||
msgstr "Payroll untuk India"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.cron,model:0
|
||||
msgid ""
|
||||
"Model name on which the method to be called is located, e.g. 'res.partner'."
|
||||
msgstr ""
|
||||
"Sebutkan nama model yang mana metode ini akan dipanggil, misal 'res.partner'."
|
||||
|
||||
#. module: base
|
||||
#: view:ir.module.module:0
|
||||
msgid "Created Views"
|
||||
msgstr "View Tercipta"
|
||||
msgstr "View yang diciptakan"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_product_manufacturer
|
||||
|
@ -121,11 +126,24 @@ msgid ""
|
|||
" * Product Attributes\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Modul ini berfungsi untuk menambahkan nama produsen beserta atributnya pada "
|
||||
"formulir produk.\n"
|
||||
"============================================================================="
|
||||
"==\n"
|
||||
"\n"
|
||||
"Anda dapat mengisi data-data berikut pada produk:\n"
|
||||
"------------------------------------------------\n"
|
||||
"* Nama produsen\n"
|
||||
"* Nama produk produsen\n"
|
||||
"* Code produk produsen\n"
|
||||
"* Atribut produk\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.client,params:0
|
||||
msgid "Supplementary arguments"
|
||||
msgstr ""
|
||||
msgstr "Argumen tambahan"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_google_base_account
|
||||
|
@ -134,11 +152,14 @@ msgid ""
|
|||
"The module adds google user in res user.\n"
|
||||
"========================================\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Modul ini akan menambahkan google user dalam obyek res.user\n"
|
||||
"====================================================\n"
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner,employee:0
|
||||
msgid "Check this box if this contact is an Employee."
|
||||
msgstr ""
|
||||
msgstr "Centang kotak ini jika kontak adalah pegawai"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.model.fields,domain:0
|
||||
|
@ -147,6 +168,9 @@ msgid ""
|
|||
"specified as a Python expression defining a list of triplets. For example: "
|
||||
"[('color','=','red')]"
|
||||
msgstr ""
|
||||
"Sebuah domain (opsional) untuk membatasi nilai untuk field yang terelasi, "
|
||||
"dimana merupakan ekspresi Python yang mendefinisikan daftar triplet. Sebagai "
|
||||
"contoh: [('color', '=', 'merah')]"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner,ref:0
|
||||
|
@ -156,7 +180,7 @@ msgstr "Referensi"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_be_invoice_bba
|
||||
msgid "Belgium - Structured Communication"
|
||||
msgstr ""
|
||||
msgstr "Belgia - Komunikasi terstruktur"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.act_window,target:0
|
||||
|
@ -166,12 +190,12 @@ msgstr "Jendela Sasaran"
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_rml:0
|
||||
msgid "Main Report File Path"
|
||||
msgstr ""
|
||||
msgstr "Path (lokasi) file laporan"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale_analytic_plans
|
||||
msgid "Sales Analytic Distribution"
|
||||
msgstr ""
|
||||
msgstr "Untuk mendistribusikan data analisis pada proses Penjualan"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_hr_timesheet_invoice
|
||||
|
@ -203,12 +227,14 @@ msgid ""
|
|||
"Properties of base fields cannot be altered in this manner! Please modify "
|
||||
"them through Python code, preferably through a custom addon!"
|
||||
msgstr ""
|
||||
"Sifat field basis tidak dapat diubah dengan cara ini! Silahkan "
|
||||
"memodifikasinya melalui kode Python, sebaiknya dibuat modul terpisah."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/osv.py:151
|
||||
#, python-format
|
||||
msgid "Constraint Error"
|
||||
msgstr ""
|
||||
msgstr "Kesalahan"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_ui_view_custom
|
||||
|
@ -219,7 +245,7 @@ msgstr "ir.ui.view.custom"
|
|||
#: code:addons/base/ir/ir_model.py:374
|
||||
#, python-format
|
||||
msgid "Renaming sparse field \"%s\" is not allowed"
|
||||
msgstr ""
|
||||
msgstr "Mengganti nama field \"%s\" tidak diperbolehkan"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.sz
|
||||
|
@ -235,12 +261,12 @@ msgstr "dibuat"
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_xsl:0
|
||||
msgid "XSL Path"
|
||||
msgstr ""
|
||||
msgstr "Lokasi file XSL"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_tr
|
||||
msgid "Turkey - Accounting"
|
||||
msgstr ""
|
||||
msgstr "Turki - Akunting"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.sequence,number_increment:0
|
||||
|
@ -256,12 +282,12 @@ msgstr "Struktur Perusahaan"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
|
||||
msgstr ""
|
||||
msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
|
||||
|
||||
#. module: base
|
||||
#: model:res.groups,name:base.group_multi_currency
|
||||
msgid "Multi Currencies"
|
||||
msgstr ""
|
||||
msgstr "Multi Mata Uang"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_cl
|
||||
|
@ -277,7 +303,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale
|
||||
msgid "Sales Management"
|
||||
msgstr ""
|
||||
msgstr "Manajemen Penjualan"
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner,user_id:0
|
||||
|
@ -285,6 +311,7 @@ msgid ""
|
|||
"The internal user that is in charge of communicating with this contact if "
|
||||
"any."
|
||||
msgstr ""
|
||||
"Pengguna/user yang ditugaskan berhubungan dengan kontak ini, jika ada."
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
|
@ -299,7 +326,7 @@ msgstr "Jumlah Modul"
|
|||
#. module: base
|
||||
#: help:multi_company.default,company_dest_id:0
|
||||
msgid "Company to store the current record"
|
||||
msgstr ""
|
||||
msgstr "Perusahaan untuk menyimpan data ini"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner.bank.type.field,size:0
|
||||
|
@ -312,6 +339,8 @@ msgid ""
|
|||
"Database ID of record to open in form view, when ``view_mode`` is set to "
|
||||
"'form' only"
|
||||
msgstr ""
|
||||
"Database ID dari data yang akan dibuka dalam tampilan formulir (form view), "
|
||||
"dimana \"view_mode\" diberi nilai \"form\"."
|
||||
|
||||
#. module: base
|
||||
#: help:ir.values,key2:0
|
||||
|
@ -327,7 +356,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: sql_constraint:res.lang:0
|
||||
msgid "The name of the language must be unique !"
|
||||
msgstr ""
|
||||
msgstr "Nama bahasa harus unik"
|
||||
|
||||
#. module: base
|
||||
#: selection:res.request,state:0
|
||||
|
@ -355,7 +384,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_customer_relationship_management
|
||||
msgid "Customer Relationship Management"
|
||||
msgstr ""
|
||||
msgstr "Manajemen Hubungan Pelanggan"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_delivery
|
||||
|
@ -377,40 +406,42 @@ msgid ""
|
|||
"There is already a shared filter set as default for %(model)s, delete or "
|
||||
"change it before setting a new default"
|
||||
msgstr ""
|
||||
"Sudah ada filter yang telah ditetapkan untuk %(model)s, silakan hapus atau "
|
||||
"rubah dulu sebelum menetapkan nilai baru."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:2649
|
||||
#, python-format
|
||||
msgid "Invalid group_by"
|
||||
msgstr ""
|
||||
msgstr "group_by salah"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.category,child_ids:0
|
||||
msgid "Child Applications"
|
||||
msgstr ""
|
||||
msgstr "Aplikasi Anak"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner,credit_limit:0
|
||||
msgid "Credit Limit"
|
||||
msgstr ""
|
||||
msgstr "Batas Kredit"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.model.constraint,date_update:0
|
||||
#: field:ir.model.data,date_update:0
|
||||
#: field:ir.model.relation,date_update:0
|
||||
msgid "Update Date"
|
||||
msgstr "Tanggal Pembaharuan"
|
||||
msgstr "Pembaharuan Tanggal"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_base_action_rule
|
||||
msgid "Automated Action Rules"
|
||||
msgstr ""
|
||||
msgstr "Aturan Aksi Otomatis"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.attachment:0
|
||||
#: field:ir.attachment,create_uid:0
|
||||
msgid "Owner"
|
||||
msgstr ""
|
||||
msgstr "Pemilik"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.act_window:0
|
||||
|
@ -420,7 +451,7 @@ msgstr "Sumber Obyek"
|
|||
#. module: base
|
||||
#: model:res.partner.bank.type,format_layout:base.bank_normal
|
||||
msgid "%(bank_name)s: %(acc_number)s"
|
||||
msgstr ""
|
||||
msgstr "%(bank_name)s: %(acc_number)s"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.todo:0
|
||||
|
@ -445,6 +476,8 @@ msgid ""
|
|||
"Invalid date/time format directive specified. Please refer to the list of "
|
||||
"allowed directives, displayed when you edit a language."
|
||||
msgstr ""
|
||||
"Penetapan format data/time salah. Silakan contoh yang ditampilkan ketika "
|
||||
"mengedit bahasa."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:4153
|
||||
|
@ -452,7 +485,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"One of the records you are trying to modify has already been deleted "
|
||||
"(Document type: %s)."
|
||||
msgstr ""
|
||||
msgstr "Data yang akan Anda modifikasi sudah dihapus (Jenis Dokumen: %s)."
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.act_window,views:0
|
||||
|
@ -466,12 +499,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.model.relation,name:0
|
||||
msgid "Relation Name"
|
||||
msgstr ""
|
||||
msgstr "Nama Relasi"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.rule:0
|
||||
msgid "Create Access Right"
|
||||
msgstr ""
|
||||
msgstr "Membuat Hak Akses"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.tv
|
||||
|
@ -481,7 +514,7 @@ msgstr "Tuvalu"
|
|||
#. module: base
|
||||
#: field:ir.actions.configuration.wizard,note:0
|
||||
msgid "Next Wizard"
|
||||
msgstr ""
|
||||
msgstr "Wizard berikutnya"
|
||||
|
||||
#. module: base
|
||||
#: field:res.lang,date_format:0
|
||||
|
@ -491,7 +524,7 @@ msgstr "Format Tanggal"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_base_report_designer
|
||||
msgid "OpenOffice Report Designer"
|
||||
msgstr ""
|
||||
msgstr "Untuk mendesign Laporan dengan OpenOffice"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.an
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -32,7 +32,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.country,name:base.sh
|
||||
msgid "Saint Helena"
|
||||
msgstr "Saint Helena"
|
||||
msgstr "Sant'Elena"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.report.xml:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -80,12 +80,12 @@ msgstr "スペイン語(パラグアイ)/ Español (PY)"
|
|||
msgid ""
|
||||
"Helps you manage your projects and tasks by tracking them, generating "
|
||||
"plannings, etc..."
|
||||
msgstr "プロジェクトやタスクを追跡,計画生成などすることにより、あなたのプロジェクトとタスクの管理を補助します。"
|
||||
msgstr "追跡や計画生成などで、プロジェクトとタスクの管理を補助します。"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_point_of_sale
|
||||
msgid "Touchscreen Interface for Shops"
|
||||
msgstr ""
|
||||
msgstr "店舗用タッチスクリーン画面"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll
|
||||
|
@ -234,7 +234,7 @@ msgstr "作成済"
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_xsl:0
|
||||
msgid "XSL Path"
|
||||
msgstr ""
|
||||
msgstr "XLSパス"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_tr
|
||||
|
@ -260,7 +260,7 @@ msgstr "イヌクウティトット語 / Inuktitut"
|
|||
#. module: base
|
||||
#: model:res.groups,name:base.group_multi_currency
|
||||
msgid "Multi Currencies"
|
||||
msgstr ""
|
||||
msgstr "多通貨"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_cl
|
||||
|
@ -276,7 +276,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale
|
||||
msgid "Sales Management"
|
||||
msgstr "受注管理"
|
||||
msgstr "販売管理"
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner,user_id:0
|
||||
|
@ -654,7 +654,7 @@ msgstr "パラオ"
|
|||
#. module: base
|
||||
#: view:res.partner:0
|
||||
msgid "Sales & Purchases"
|
||||
msgstr "受注と発注"
|
||||
msgstr "販売・購買"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.translation:0
|
||||
|
@ -1535,7 +1535,7 @@ msgstr ""
|
|||
#: model:ir.module.category,name:base.module_category_purchase_management
|
||||
#: model:ir.ui.menu,name:base.menu_purchase_root
|
||||
msgid "Purchases"
|
||||
msgstr "発注"
|
||||
msgstr "購買"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.md
|
||||
|
@ -1635,7 +1635,7 @@ msgstr "コード %s を持つ言語が存在しません。"
|
|||
#: model:ir.module.category,name:base.module_category_social_network
|
||||
#: model:ir.module.module,shortdesc:base.module_mail
|
||||
msgid "Social Network"
|
||||
msgstr ""
|
||||
msgstr "ソーシャルネットワーク"
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
|
@ -4589,7 +4589,7 @@ msgstr "ヒンディー語 / हिंदी"
|
|||
#: model:ir.actions.act_window,name:base.action_view_base_language_install
|
||||
#: model:ir.ui.menu,name:base.menu_view_base_language_install
|
||||
msgid "Load a Translation"
|
||||
msgstr ""
|
||||
msgstr "言語の追加"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.module,latest_version:0
|
||||
|
@ -5316,7 +5316,7 @@ msgstr "レート"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_email_template
|
||||
msgid "Email Templates"
|
||||
msgstr ""
|
||||
msgstr "Eメールテンプレート"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.sy
|
||||
|
@ -9728,7 +9728,7 @@ msgstr "受注オーダーのマージン"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_purchase
|
||||
msgid "Purchase Management"
|
||||
msgstr "発注管理"
|
||||
msgstr "購買管理"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.module,published_version:0
|
||||
|
@ -9993,7 +9993,7 @@ msgstr "インストールする"
|
|||
#: model:ir.module.module,shortdesc:base.module_base
|
||||
#: field:res.currency,base:0
|
||||
msgid "Base"
|
||||
msgstr "基本"
|
||||
msgstr "ベース"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.model.data,model:0
|
||||
|
@ -14274,7 +14274,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_custom_multicompany
|
||||
msgid "Multi-Companies"
|
||||
msgstr ""
|
||||
msgstr "複数会社設定"
|
||||
|
||||
#. module: base
|
||||
#: field:workflow,osv:0
|
||||
|
@ -15190,7 +15190,7 @@ msgstr "条件"
|
|||
#: model:ir.actions.client,name:base.modules_updates_act_cl
|
||||
#: model:ir.ui.menu,name:base.menu_module_updates
|
||||
msgid "Updates"
|
||||
msgstr ""
|
||||
msgstr "アップデート"
|
||||
|
||||
#. module: base
|
||||
#: help:res.currency,rate:0
|
||||
|
@ -15402,7 +15402,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:base.open_module_tree
|
||||
#: model:ir.ui.menu,name:base.menu_module_tree
|
||||
msgid "Installed Modules"
|
||||
msgstr ""
|
||||
msgstr "インストール済モジュール"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/res/res_users.py:170
|
||||
|
@ -15465,7 +15465,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:res.partner:0
|
||||
msgid "Internal Notes"
|
||||
msgstr ""
|
||||
msgstr "内部注記"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.title,name:base.res_partner_title_pvt_ltd
|
||||
|
@ -15476,7 +15476,7 @@ msgstr "会社"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_purchase_requisition
|
||||
msgid "Purchase Requisitions"
|
||||
msgstr "発注依頼"
|
||||
msgstr "購買依頼"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.actions.act_window,target:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -9702,7 +9702,7 @@ msgstr "Gebruikersinterface"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_mrp_byproduct
|
||||
msgid "MRP Byproducts"
|
||||
msgstr "productie bijproducten"
|
||||
msgstr "Productie bijproducten"
|
||||
|
||||
#. module: base
|
||||
#: field:res.request,ref_partner_id:0
|
||||
|
@ -15682,7 +15682,7 @@ msgid ""
|
|||
"Do you confirm the uninstallation of this module? This will permanently "
|
||||
"erase all data currently stored by the module!"
|
||||
msgstr ""
|
||||
"Wilt u de deinstllatie van deze module bevestigen? Dit zal alle gegevens "
|
||||
"Wilt u de deinstallatie van deze module bevestigen? Dit zal alle gegevens "
|
||||
"opgeslagen door de module verwijderen!"
|
||||
|
||||
#. module: base
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:40+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -2052,7 +2052,7 @@ msgstr "Turkmenistan"
|
|||
#. module: base
|
||||
#: view:res.lang:0
|
||||
msgid "7. %H:%M:%S ==> 18:25:20"
|
||||
msgstr ""
|
||||
msgstr "7. %H:%M:%S ==> 18:25:20"
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
|
@ -2579,7 +2579,7 @@ msgstr "Dodatkowe"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.st
|
||||
msgid "Saint Tome (Sao Tome) and Principe"
|
||||
msgstr ""
|
||||
msgstr "Wyspy Świętego Tomasza i Książęca"
|
||||
|
||||
#. module: base
|
||||
#: selection:res.partner,type:0
|
||||
|
@ -4261,7 +4261,7 @@ msgstr "Wymagana grupa"
|
|||
#. module: base
|
||||
#: view:res.lang:0
|
||||
msgid "6. %d, %m ==> 05, 12"
|
||||
msgstr ""
|
||||
msgstr "6. %d, %m ==> 05, 12"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_it
|
||||
|
@ -5146,7 +5146,7 @@ msgstr "Ścieżka XML"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.bj
|
||||
msgid "Benin"
|
||||
msgstr ""
|
||||
msgstr "Benin"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_res_partner_bank_type_form
|
||||
|
@ -5340,7 +5340,7 @@ msgstr "Syria"
|
|||
#. module: base
|
||||
#: view:res.lang:0
|
||||
msgid "======================================================"
|
||||
msgstr ""
|
||||
msgstr "======================================================"
|
||||
|
||||
#. module: base
|
||||
#: sql_constraint:ir.model:0
|
||||
|
@ -5453,6 +5453,7 @@ msgstr "Nazwa posiadacza konta"
|
|||
#, python-format
|
||||
msgid "Cannot rename column to %s, because that column already exists!"
|
||||
msgstr ""
|
||||
"Nie można zmienić nazwy kolumny na %s, ponieważ ta kolumna już istnieje!"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.attachment:0
|
||||
|
@ -5578,7 +5579,7 @@ msgstr "Wenezuela"
|
|||
#. module: base
|
||||
#: view:res.lang:0
|
||||
msgid "9. %j ==> 340"
|
||||
msgstr ""
|
||||
msgstr "9. %j ==> 340"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.zm
|
||||
|
@ -5943,7 +5944,7 @@ msgstr "Pogrupuj wg"
|
|||
#. module: base
|
||||
#: view:res.config.installer:0
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "tytuł"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_fields.py:146
|
||||
|
@ -5969,7 +5970,7 @@ msgstr "Tłumaczenie"
|
|||
#. module: base
|
||||
#: selection:res.request,state:0
|
||||
msgid "closed"
|
||||
msgstr ""
|
||||
msgstr "zamknięte"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.export,state:0
|
||||
|
@ -12108,7 +12109,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: selection:ir.translation,type:0
|
||||
msgid "XSL"
|
||||
msgstr ""
|
||||
msgstr "XSL"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_model.py:85
|
||||
|
@ -15906,10 +15907,6 @@ msgstr ""
|
|||
#~ msgid "On delete"
|
||||
#~ msgstr "Przy usuwaniu"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Not Implemented"
|
||||
#~ msgstr "Nie zaimplementowane"
|
||||
|
||||
#~ msgid "Textile Suppliers"
|
||||
#~ msgstr "Dostawca tekstyliów"
|
||||
|
||||
|
@ -17034,3 +17031,58 @@ msgstr ""
|
|||
#~ "======================================\n"
|
||||
#~ "\n"
|
||||
#~ "Moduł umożliwia planowanie wsteczne zarządzające twoimi wydarzeniami.\n"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Not Implemented"
|
||||
#~ msgstr "Niezaimplementowane"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "OpenERP translations (core, modules, clients) are managed through "
|
||||
#~ "Launchpad.net, our open source project management facility. We use their "
|
||||
#~ "online interface to synchronize all translations efforts."
|
||||
#~ msgstr ""
|
||||
#~ "Tłumaczenia OpenERP (jądro, moduły, klient) są zarządzane poprzez "
|
||||
#~ "Launchpad.net. Używamy ich interfejsu online by synchronizować wszelkie "
|
||||
#~ "tłumaczenia."
|
||||
|
||||
#~ msgid ","
|
||||
#~ msgstr ","
|
||||
|
||||
#~ msgid "S. Georgia & S. Sandwich Isls."
|
||||
#~ msgstr "Georgia Południowa i Sandwich Południowy"
|
||||
|
||||
#~ msgid "-"
|
||||
#~ msgstr "-"
|
||||
|
||||
#~ msgid "https://help.launchpad.net/Translations"
|
||||
#~ msgstr "https://help.launchpad.net/Translations"
|
||||
|
||||
#~ msgid "Portugese (BR) / Português (BR)"
|
||||
#~ msgstr "Portugalski (BR) / Português (BR)"
|
||||
|
||||
#~ msgid "Facebook"
|
||||
#~ msgstr "Facebook"
|
||||
|
||||
#~ msgid "Openstuff.net"
|
||||
#~ msgstr "Openstuff.net"
|
||||
|
||||
#~ msgid "Portugese / Português"
|
||||
#~ msgstr "Portugalski / Português"
|
||||
|
||||
#~ msgid "M."
|
||||
#~ msgstr "M."
|
||||
|
||||
#~ msgid "XML ID"
|
||||
#~ msgstr "XML ID"
|
||||
|
||||
#~ msgid "XML Id"
|
||||
#~ msgstr "XML Id"
|
||||
|
||||
#~ msgid "FYROM"
|
||||
#~ msgstr "FYROM"
|
||||
|
||||
#~ msgid "Serial Key"
|
||||
#~ msgstr "Klucz seryjny"
|
||||
|
||||
#~ msgid "Widget Wizard"
|
||||
#~ msgstr "Kreator widżetów"
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:40+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -24,6 +24,10 @@ msgid ""
|
|||
"================================================\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Módulo para Verificar a Escrita e Verificar a Impresaão.\n"
|
||||
"================================================\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.sh
|
||||
|
@ -122,6 +126,18 @@ msgid ""
|
|||
" * Product Attributes\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Um modulo que acrescenta a identificação de fabricantes e atributos ao "
|
||||
"formulário de produtos.\n"
|
||||
"====================================================================\n"
|
||||
"\n"
|
||||
"Agora é possível definir o seguinte para cada produto:\n"
|
||||
"\n"
|
||||
" Fabricante\n"
|
||||
" Nome do produto atribuído pelo fabricante\n"
|
||||
" Código do produto atribuído pelo fabricante\n"
|
||||
" Atributos do produto\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.client,params:0
|
||||
|
@ -135,6 +151,8 @@ msgid ""
|
|||
"The module adds google user in res user.\n"
|
||||
"========================================\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"O modulo acrescenta utilizador google em \"res user\".\n"
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner,employee:0
|
||||
|
@ -170,7 +188,7 @@ msgstr "Janela alvo"
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_rml:0
|
||||
msgid "Main Report File Path"
|
||||
msgstr ""
|
||||
msgstr "Caminho para o ficheiro do relatório principal"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale_analytic_plans
|
||||
|
@ -191,6 +209,15 @@ msgid ""
|
|||
"revenue\n"
|
||||
"reports."
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Gerar faturas através de Despesas, Folhas de Horas\n"
|
||||
"========================================================\n"
|
||||
"\n"
|
||||
"Modulo que gera faturas baseadas em custos (recursos humanos, despesas, "
|
||||
"...).\n"
|
||||
"\n"
|
||||
"Pode definir tabelas de preços na conta analítica, criar analises teoréticas "
|
||||
"de vendas."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_sequence.py:134
|
||||
|
@ -226,7 +253,7 @@ msgstr "ir.ui.view.custom"
|
|||
#: code:addons/base/ir/ir_model.py:374
|
||||
#, python-format
|
||||
msgid "Renaming sparse field \"%s\" is not allowed"
|
||||
msgstr ""
|
||||
msgstr "Não é permitido mudar o nome de sparse field \"%s\""
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.sz
|
||||
|
@ -292,6 +319,8 @@ msgid ""
|
|||
"The internal user that is in charge of communicating with this contact if "
|
||||
"any."
|
||||
msgstr ""
|
||||
"O utilizador interno responsável pela comunicação com este contacto (se "
|
||||
"houver)"
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
|
@ -376,6 +405,15 @@ msgid ""
|
|||
"invoices from picking, OpenERP is able to add and compute the shipping "
|
||||
"line.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Permite adicionar métodos de entrega nas ordens de venda e ordens de "
|
||||
"preparação de encomendas.\n"
|
||||
"==============================================================\n"
|
||||
"\n"
|
||||
"Assim é possível definir transportadores adicionais e tabelas de preços para "
|
||||
"entregas. No acto de criar \n"
|
||||
"uma fatura através um ordem de preparação de encomenda, OpenERP consegue "
|
||||
"adicionar e calcular custos de entrega.\n"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_filters.py:80
|
||||
|
@ -384,6 +422,8 @@ msgid ""
|
|||
"There is already a shared filter set as default for %(model)s, delete or "
|
||||
"change it before setting a new default"
|
||||
msgstr ""
|
||||
"Um filtro partilhado já está definido para %(model)s, apague ou modifique o "
|
||||
"filtro existente antes de criar um novo."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:2649
|
||||
|
@ -452,8 +492,8 @@ msgid ""
|
|||
"Invalid date/time format directive specified. Please refer to the list of "
|
||||
"allowed directives, displayed when you edit a language."
|
||||
msgstr ""
|
||||
"Data inválida/especifique diretiva do formato da hora. Por favor, consulte a "
|
||||
"lista de diretivas permitidas, exibida quando se edita uma linguagem."
|
||||
"A diretiva data/hora especificada é invalida. Por favor, consulte a lista de "
|
||||
"diretivas permitidas, exibida quando se edita uma linguagem."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:4153
|
||||
|
@ -462,7 +502,7 @@ msgid ""
|
|||
"One of the records you are trying to modify has already been deleted "
|
||||
"(Document type: %s)."
|
||||
msgstr ""
|
||||
"Um dos registos que está a tentar modificar já deve ter sido excluído "
|
||||
"Um dos registos que está a tentar modificar já deve ter sido apagado "
|
||||
"(Document type: %s)."
|
||||
|
||||
#. module: base
|
||||
|
@ -552,6 +592,15 @@ msgid ""
|
|||
"that have no counterpart in the general financial accounts.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Modulo para definir objetos de contabilidade analítica.\n"
|
||||
"===============================================\n"
|
||||
"\n"
|
||||
"Na OpenERP, contas analíticas estão ligados a contas gerais embora são "
|
||||
"tratados \n"
|
||||
"de uma forma independente. Assim é possível adicionar operações analíticas \n"
|
||||
"mesmo quando não tenham homólogos nas contas gerais.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_idea
|
||||
|
@ -575,6 +624,19 @@ msgid ""
|
|||
"* Use emails to automatically confirm and send acknowledgements for any "
|
||||
"event registration\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Organização e gestão de Eventos.\n"
|
||||
"======================================\n"
|
||||
"\n"
|
||||
"O modulo de gestão de eventos permite gerir todos as tarefas associadas a "
|
||||
"organização de eventos: planificação, controlo de inscrições, "
|
||||
"comparecimento, etc.\n"
|
||||
"\n"
|
||||
"Principais Funções\n"
|
||||
"------------\n"
|
||||
"* Gerir os seus Eventos e Inscrições\n"
|
||||
"* Utilizar e-mail para enviar confirmações de forma automática para "
|
||||
"inscrições nos seus eventos.\n"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -774,6 +836,11 @@ msgid ""
|
|||
"This module provides the Integration of the LinkedIn with OpenERP.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Módulo OpenERP Web LinkedIn.\n"
|
||||
"============================\n"
|
||||
"Este módulo disponibiliza a integração do LinkedIn com o OpenERP.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.act_window,src_model:0
|
||||
|
@ -839,6 +906,9 @@ msgid ""
|
|||
"image, with aspect ratio preserved. Use this field anywhere a small image is "
|
||||
"required."
|
||||
msgstr ""
|
||||
"Imagem em pequeno formato para este contacto. É automaticamente "
|
||||
"redimensionada para 64x64px com o racio do aspect preservado. Utilize este "
|
||||
"campo onde quer que uma imagem pequena seja necessária."
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.server,mobile:0
|
||||
|
@ -1327,7 +1397,7 @@ msgstr "Contribuintes"
|
|||
#. module: base
|
||||
#: field:ir.rule,perm_unlink:0
|
||||
msgid "Apply for Delete"
|
||||
msgstr ""
|
||||
msgstr "Aplicar para Apagar"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
|
@ -1465,7 +1535,7 @@ msgstr "Haiti"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_fr_hr_payroll
|
||||
msgid "French Payroll"
|
||||
msgstr ""
|
||||
msgstr "Folha de pagamentos Francesa"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.ui.view:0
|
||||
|
@ -1996,6 +2066,8 @@ msgid ""
|
|||
"Check this box if this contact is a supplier. If it's not checked, purchase "
|
||||
"people will not see it when encoding a purchase order."
|
||||
msgstr ""
|
||||
"Assinala nesta caixa se o contacto é fornecedor. Se não for assinalado, o "
|
||||
"contacto não será visível no acto de criar uma nota de encomenda."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_hr_evaluation
|
||||
|
@ -2173,6 +2245,27 @@ msgid ""
|
|||
"* *Before Delivery*: A Draft invoice is created and must be paid before "
|
||||
"delivery\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Gerir orçamentos e encomendas\n"
|
||||
"==================================\n"
|
||||
"\n"
|
||||
"Este modulo liga a aplicação de vendas com a de gestão de armazéns.\n"
|
||||
"\n"
|
||||
"Preferências\n"
|
||||
"-----------\n"
|
||||
"* Envios: Escolha entre a entrega total ou parcial de uma encomenda.\n"
|
||||
"* Faturação: Escolha o prazo de pagamento da fatura\n"
|
||||
"* Incoterms: Escolha os termos de entrega da mercadoria (EXW, DDU, FOB, "
|
||||
"etc.)\n"
|
||||
"\n"
|
||||
"Escolhe entre varias maneiras flexíveis de faturação:\n"
|
||||
"\n"
|
||||
"* *Manualmente*: As faturas são criados manualmente das notas de encomenda "
|
||||
"quando necessário\n"
|
||||
"* *Através de Ordem de Entrega*: As faturas são geradas das ordens de "
|
||||
"entrega (pickings)\n"
|
||||
"* *Antes de Entrega*: Uma fatura pro-forma é criado e tem de ser liquidada "
|
||||
"antes de efetuar a entrega\n"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.ui.menu,complete_name:0
|
||||
|
@ -2198,7 +2291,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:base.language.export:0
|
||||
msgid "PO(T) format: you should edit it with a PO editor such as"
|
||||
msgstr ""
|
||||
msgstr "Formato PO(T): deve editá-lo com um editor de PO tal como"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_administration
|
||||
|
@ -2287,7 +2380,7 @@ msgstr "Bahamas"
|
|||
#. module: base
|
||||
#: field:ir.rule,perm_create:0
|
||||
msgid "Apply for Create"
|
||||
msgstr ""
|
||||
msgstr "Aplicar para Criar"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_tools
|
||||
|
@ -2310,6 +2403,8 @@ msgid ""
|
|||
"Appears by default on the top right corner of your printed documents (report "
|
||||
"header)."
|
||||
msgstr ""
|
||||
"Aparece por defeito no campo superior direito dos documentos impressos "
|
||||
"(cabeçalho do relatório)."
|
||||
|
||||
#. module: base
|
||||
#: field:base.module.update,update:0
|
||||
|
@ -2357,6 +2452,31 @@ msgid ""
|
|||
"* Maximal difference between timesheet and attendances\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Gravar e validar folhas de horas e comparecimento/assiduidade com "
|
||||
"facilidade\n"
|
||||
"=====================================================\n"
|
||||
"\n"
|
||||
"Esta aplicação cria uma nova ecrã que permite gerir comparecimento (entradas "
|
||||
"e saídas) e o preenchimento de folhas de horas por período. Entradas na "
|
||||
"folha de horas são efetuadas pelos funcionários diariamente. No fim do "
|
||||
"período estipulado, o funcionário valida a folha de horas. De seguida a "
|
||||
"folha é sujeito a aprovação da gerente de equipa. A definição do tempo de "
|
||||
"cada período é feito nas configurações da empresa e podem ser efetuados "
|
||||
"mensalmente ou semanalmente.\n"
|
||||
"\n"
|
||||
"O processo de validação da folha de horas é feito assim:\n"
|
||||
"---------------------------------------------\n"
|
||||
"* Preencher folha (funcionário)\n"
|
||||
"* Confirmar a folha no fim do período (funcionário)\n"
|
||||
"* Validação da folha pelo gestor da equipa\n"
|
||||
"\n"
|
||||
"As preferências de validação podem ser escolhidos nas configurações da "
|
||||
"empresa:\n"
|
||||
"------------------------------------------------\n"
|
||||
"Periodicidade (Dia, Semana, Mês)\n"
|
||||
"Diferenciação máxima permitida entre a folha de horas e comparecimento\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_fields.py:341
|
||||
|
@ -2429,6 +2549,9 @@ msgid ""
|
|||
"=================================\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Permite que um utilizador anónimo aceda ao portal.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.ge
|
||||
|
@ -2677,6 +2800,12 @@ msgid ""
|
|||
"orders.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"O modulo base para gerir distribuição analítica e notas de encomenda.\n"
|
||||
"=================================================================\n"
|
||||
"\n"
|
||||
"Este modulo permite ligar contas analíticas a notas de encomenda.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_us
|
||||
|
@ -2817,6 +2946,9 @@ msgid ""
|
|||
"Module to attach a google document to any model.\n"
|
||||
"================================================\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Módulo para anexar um documento google a qualquer modelo.\n"
|
||||
"=========================================================\n"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_fields.py:333
|
||||
|
@ -5010,7 +5142,7 @@ msgstr "ir.needaction_mixin"
|
|||
#. module: base
|
||||
#: view:base.language.export:0
|
||||
msgid "This file was generated using the universal"
|
||||
msgstr ""
|
||||
msgstr "Este ficheiro foi gerado usando o universal"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.category,name:base.res_partner_category_7
|
||||
|
@ -5082,7 +5214,7 @@ msgstr "Saltar"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_event_sale
|
||||
msgid "Events Sales"
|
||||
msgstr ""
|
||||
msgstr "Vendas dos Eventos"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.ls
|
||||
|
@ -5269,7 +5401,7 @@ msgstr "Apenas se a conta bancária pertencer à sua empresa"
|
|||
#: code:addons/base/ir/ir_fields.py:337
|
||||
#, python-format
|
||||
msgid "Unknown sub-field '%s'"
|
||||
msgstr ""
|
||||
msgstr "Sub-campo '%s' desconhecido"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.za
|
||||
|
@ -5385,6 +5517,10 @@ msgid ""
|
|||
"================\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Openerp Web API.\n"
|
||||
"================\n"
|
||||
"\n"
|
||||
|
||||
#. module: base
|
||||
#: selection:res.request,state:0
|
||||
|
@ -6154,6 +6290,8 @@ msgid ""
|
|||
"How many times the method is called,\n"
|
||||
"a negative number indicates no limit."
|
||||
msgstr ""
|
||||
"Quantas vezes o método é chamado,\n"
|
||||
"um número negativo sem limite."
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner.bank.type.field,bank_type_id:0
|
||||
|
@ -6280,7 +6418,7 @@ msgstr ""
|
|||
#: code:addons/base/ir/ir_fields.py:182
|
||||
#, python-format
|
||||
msgid "'%s' does not seem to be a number for field '%%(field)s'"
|
||||
msgstr ""
|
||||
msgstr "'%s' não parece ser um número para o campo '%%(field)s'"
|
||||
|
||||
#. module: base
|
||||
#: help:res.country.state,name:0
|
||||
|
@ -8013,7 +8151,7 @@ msgstr "Campo Personalizado"
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_account_accountant
|
||||
msgid "Financial and Analytic Accounting"
|
||||
msgstr ""
|
||||
msgstr "Contabilidade Financeira e Analítica"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_portal_project
|
||||
|
@ -8352,7 +8490,7 @@ msgstr "Finlândia"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_web_shortcuts
|
||||
msgid "Web Shortcuts"
|
||||
msgstr ""
|
||||
msgstr "Atalhos web"
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
|
@ -8558,6 +8696,8 @@ msgid ""
|
|||
"Translation features are unavailable until you install an extra OpenERP "
|
||||
"translation."
|
||||
msgstr ""
|
||||
"As opções de tradução estão indisponíveis até que instale uma tradução extra "
|
||||
"do OpenERP."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_nl
|
||||
|
@ -8752,6 +8892,9 @@ msgid ""
|
|||
"If the selected language is loaded in the system, all documents related to "
|
||||
"this contact will be printed in this language. If not, it will be English."
|
||||
msgstr ""
|
||||
"Se o idioma seleccionado está carregado no sistema, todos os documentos "
|
||||
"relacionados com este contacto serão impressos neste idioma. Caso contrário "
|
||||
"serão impressos em Inglês."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_hr_evaluation
|
||||
|
@ -8860,7 +9003,7 @@ msgstr "Esloveno / slovenščina"
|
|||
#. module: base
|
||||
#: field:res.currency,position:0
|
||||
msgid "Symbol Position"
|
||||
msgstr ""
|
||||
msgstr "Posição do Símbolo"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_de
|
||||
|
@ -10007,7 +10150,7 @@ msgstr "Agrupar por..."
|
|||
#. module: base
|
||||
#: view:base.module.update:0
|
||||
msgid "Module Update Result"
|
||||
msgstr ""
|
||||
msgstr "Resultado da actualização do módulo"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_analytic_contract_hr_expense
|
||||
|
@ -10469,7 +10612,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:res.company:0
|
||||
msgid "Click to set your company logo."
|
||||
msgstr ""
|
||||
msgstr "Clique para definir o logo da empresa."
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
|
@ -10792,6 +10935,8 @@ msgid ""
|
|||
"One of the documents you are trying to access has been deleted, please try "
|
||||
"again after refreshing."
|
||||
msgstr ""
|
||||
"Um dos documentos a que tenta aceder foi removido, tente novamente depois de "
|
||||
"actualizar."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_mail_server
|
||||
|
@ -11300,7 +11445,7 @@ msgstr "Ficheiro binário ou URL"
|
|||
#: code:addons/base/ir/ir_fields.py:313
|
||||
#, python-format
|
||||
msgid "Invalid database id '%s' for the field '%%(field)s'"
|
||||
msgstr ""
|
||||
msgstr "Id de base de dados '%s' inválido para o campo '%%(field)s'"
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
|
@ -11444,7 +11589,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:workflow.transition,signal:0
|
||||
msgid "Signal (Button Name)"
|
||||
msgstr ""
|
||||
msgstr "Sinal (Nome do botão)"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.act_window:0
|
||||
|
@ -11819,7 +11964,7 @@ msgstr "ir.model.relation"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_account_check_writing
|
||||
msgid "Check Writing"
|
||||
msgstr ""
|
||||
msgstr "Verificar escrita"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_plugin_outlook
|
||||
|
@ -12387,7 +12532,7 @@ msgstr "Outros Parceiros"
|
|||
#: view:workflow.workitem:0
|
||||
#: field:workflow.workitem,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
msgstr "Estado"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_currency_form
|
||||
|
@ -13376,7 +13521,7 @@ msgstr "ir.sequence.type"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_be_hr_payroll_account
|
||||
msgid "Belgium - Payroll with Accounting"
|
||||
msgstr ""
|
||||
msgstr "Bélgica - Folha de pagamentos com Contabildade"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.export,format:0
|
||||
|
@ -15269,7 +15414,7 @@ msgstr "Chile"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_web_view_editor
|
||||
msgid "View Editor"
|
||||
msgstr ""
|
||||
msgstr "Ver o Editor"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.cron:0
|
||||
|
@ -15349,6 +15494,8 @@ msgid ""
|
|||
"Do you confirm the uninstallation of this module? This will permanently "
|
||||
"erase all data currently stored by the module!"
|
||||
msgstr ""
|
||||
"Confirma a desinstalação deste módulo? Esta acção apaga todos os dados "
|
||||
"guardados neste momento por este módulo!"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.server,mobile:0
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:40+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-01-24 13:14+0000\n"
|
||||
"PO-Revision-Date: 2013-08-16 11:16+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\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: 2013-06-18 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -3428,7 +3428,7 @@ msgstr "Периодические оценки, оценки, опросы"
|
|||
#: model:ir.actions.act_window,name:base.ir_property_form
|
||||
#: model:ir.ui.menu,name:base.menu_ir_property_form_all
|
||||
msgid "Configuration Parameters"
|
||||
msgstr "Конфигурационные параметры:"
|
||||
msgstr "Параметры конфигурации"
|
||||
|
||||
#. module: base
|
||||
#: constraint:ir.cron:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:28+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -2465,6 +2465,8 @@ msgstr ""
|
|||
msgid ""
|
||||
"No matching record found for %(field_type)s '%(value)s' in field '%%(field)s'"
|
||||
msgstr ""
|
||||
"'%%(field)s' Alanında %(field_type)s '%(value)s' için eşleşen kayıt "
|
||||
"bulunamadı"
|
||||
|
||||
#. module: base
|
||||
#: field:change.password.user,new_passwd:0
|
||||
|
@ -7493,7 +7495,7 @@ msgstr "Tam Adı"
|
|||
#. module: base
|
||||
#: view:ir.attachment:0
|
||||
msgid "on"
|
||||
msgstr ""
|
||||
msgstr "bunda"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.property:0
|
||||
|
@ -9538,6 +9540,17 @@ msgid ""
|
|||
"Thank you in advance for your cooperation.\n"
|
||||
"Best Regards,"
|
||||
msgstr ""
|
||||
"Sayın Yetkili,\n"
|
||||
"\n"
|
||||
"Kayıtlarımıza göre hesabınızda halen yapılmamış ödemeler bulunmaktadır. "
|
||||
"Lütfen aşağıdaki ayrıntıları inceleyin.\n"
|
||||
"Eğer ödeme yaptıysanız, lütfen bu yazımızı dikkate almayın. Aksi durumda, "
|
||||
"aşağıda belirtilen tutarı tarafımıza ödemenizi rica ederiz.\n"
|
||||
"Hesabınızla ilgili herhangi bir sorunuz olursa, lütfen bize danışın.\n"
|
||||
"\n"
|
||||
"İşbirliğiniz için şimdiden teşekkür ederiz.\n"
|
||||
"\n"
|
||||
"Saygılarımızla,"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.module.category:0
|
||||
|
@ -11262,7 +11275,7 @@ msgstr "E-Mail"
|
|||
#. module: base
|
||||
#: model:res.partner.category,name:base.res_partner_category_12
|
||||
msgid "Office Supplies"
|
||||
msgstr ""
|
||||
msgstr "Büro Malzemeleri"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.attachment,res_model:0
|
||||
|
@ -12547,7 +12560,7 @@ msgstr "Grup adı tekil olmalı !"
|
|||
#. module: base
|
||||
#: help:ir.translation,module:0
|
||||
msgid "Module this term belongs to"
|
||||
msgstr ""
|
||||
msgstr "Bu terimin ait olduğu modül"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_web_view_editor
|
||||
|
@ -12761,6 +12774,8 @@ msgid ""
|
|||
"Here is what we got instead:\n"
|
||||
" %s"
|
||||
msgstr ""
|
||||
"Yerine elimize geçen:\n"
|
||||
" %s"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_model_data
|
||||
|
@ -13124,7 +13139,7 @@ msgstr "Yeni Kaledonya"
|
|||
#. module: base
|
||||
#: field:ir.model,osv_memory:0
|
||||
msgid "Transient Model"
|
||||
msgstr ""
|
||||
msgstr "Geçici Model"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.cy
|
||||
|
@ -13386,7 +13401,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_account_test
|
||||
msgid "Accounting Consistency Tests"
|
||||
msgstr ""
|
||||
msgstr "Muhasebe Tutarlılık Testleri"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_purchase_double_validation
|
||||
|
@ -14091,6 +14106,8 @@ msgid ""
|
|||
"Invalid group_by specification: \"%s\".\n"
|
||||
"A group_by specification must be a list of valid fields."
|
||||
msgstr ""
|
||||
"Geçersiz group_by özellikleri: \"%s\".\n"
|
||||
"Bir group_by özellikler geçerli alanların bir listesi olmalı."
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.mail_server,smtp_encryption:0
|
||||
|
@ -14248,7 +14265,7 @@ msgstr "Hata ! iç içe çağırılan menü oluşturamazsınız."
|
|||
#. module: base
|
||||
#: view:ir.translation:0
|
||||
msgid "Web-only translations"
|
||||
msgstr ""
|
||||
msgstr "Yalnızca-web çevirileri"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.rule:0
|
||||
|
@ -14716,6 +14733,10 @@ msgid ""
|
|||
"\n"
|
||||
"(Document type: %s, Operation: %s)"
|
||||
msgstr ""
|
||||
"Güvenlik sınırlamalarından dolayı istenen işlem tamamlanamıyor. Lütfen "
|
||||
"sistem yöneticinize danışın.\n"
|
||||
"\n"
|
||||
"(Belge tipi: %s, İşlem: %s)"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_idea
|
||||
|
@ -15574,6 +15595,8 @@ msgid ""
|
|||
"Tax Identification Number. Check the box if this contact is subjected to "
|
||||
"taxes. Used by the some of the legal statements."
|
||||
msgstr ""
|
||||
"Vergi Kimlik Numarası. Bu kişi vergiye tabiyse kutuyu işaretleyin. Bazı "
|
||||
"yasal belgelerde kullanılır."
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner.bank,partner_id:0
|
||||
|
@ -15642,6 +15665,8 @@ msgid ""
|
|||
"Manage relations with prospects and customers using leads, opportunities, "
|
||||
"requests or issues."
|
||||
msgstr ""
|
||||
"Adayları, fırsatları, istekleri ya da sorunları kullanarak potansiyeller ve "
|
||||
"müşterilerle ilişkileri yönetin."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_project
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -25,7 +25,7 @@ msgid ""
|
|||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"此模块用于开支票和支票打印\n"
|
||||
"此模块用于支票填写和打印\n"
|
||||
"================================================\n"
|
||||
" "
|
||||
|
||||
|
@ -384,6 +384,12 @@ msgid ""
|
|||
"document and Wiki based Hidden.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"知识管理的隐藏依赖模块\n"
|
||||
"=====================================\n"
|
||||
"\n"
|
||||
"在安装文档管理和wiki等知识管理应用的时候所依赖的隐藏模块\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_customer_relationship_management
|
||||
|
@ -991,6 +997,21 @@ msgid ""
|
|||
"also possible in order to automatically create a meeting when a holiday "
|
||||
"request is accepted by setting up a type of meeting in Leave Type.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"休假申请和假期分配\n"
|
||||
"=====================================\n"
|
||||
"\n"
|
||||
"此模块管理公司员工的休假。员工可以申请休假,然后等待经理批准,当然也可能拒绝。这样就可以使公司或部门的整体休假计划得到管控。\n"
|
||||
"\n"
|
||||
"可以配置多种休假类型(病假、法定假日、带薪休假等)并通过分配申请分配给单个员工或部门。员工也可以申请\n"
|
||||
"增加假期天数,这需要填写一个额外的假期申请。如果增加假期天数的申请被批准,这个类型假期的可用天数会自动增加。\n"
|
||||
"\n"
|
||||
"以下报表用于对假期进行跟踪:\n"
|
||||
"* 休假总览\n"
|
||||
"* 按部门休假\n"
|
||||
"* 休假分析\n"
|
||||
"\n"
|
||||
"如果为休假设置了一种日程类型,就可以与CRM中的日程同步,也就是说休假批准后会在日程上标识出此员工正在休假中。\n"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -1216,6 +1237,20 @@ msgid ""
|
|||
"* Planned Revenue by Stage and User (graph)\n"
|
||||
"* Opportunities by Stage (graph)\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"通用客户关系管理(CRM)模块\n"
|
||||
"====================================================\n"
|
||||
"此模块能让群组人员合理有效地管理线索、商机、会谈以及电话访问等活动。\n"
|
||||
"管理涉及的重要功能包括:通信、身份识别、优先级设定、任务委派、投诉解决及通知等。\n"
|
||||
"OpenERP可以有效跟踪用户、客户和供应商的所有的活动案例。根据设定的规则,可以自动发送提醒、请求,触发各种动作。\n"
|
||||
"最重要的好处是,用户不需要做任何特殊的事。此模块集成了电子邮件网关,邮件在OpenERP中自动同步,用户只需在OpenERP中根据系统反馈,按需发送和回复"
|
||||
"邮件。\n"
|
||||
"OpenERP将接管其余的事,诸如发送感谢信、自动转发到相关人员并确保之后相应的回复能准确送达。\n"
|
||||
"\n"
|
||||
"CRM 仪表盘(Dashboard) 包括:\n"
|
||||
"---------------------------------------\n"
|
||||
"* 可按阶段和用户分类的预计收益图表\n"
|
||||
"* 按阶段分类的商机图表\n"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.export,format:0
|
||||
|
@ -1991,15 +2026,13 @@ msgid ""
|
|||
"rights to the Demo user. \n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"会计访问权限\n"
|
||||
"会计访问权限管理\n"
|
||||
"\n"
|
||||
"========================\n"
|
||||
"\n"
|
||||
"It gives the Administrator user access to all accounting features such as "
|
||||
"journal items and the chart of accounts.\n"
|
||||
"此模块用来管理所有会计功能的访问权限,如凭证行归类(journal items)和会计科目(chart of accounts)等。\n"
|
||||
"\n"
|
||||
"It assigns manager and user access rights to the Administrator and only user "
|
||||
"rights to the Demo user。 \n"
|
||||
"默认设置管理员(Administrator)拥有经理和一般用户的访问权限,而演示用户(Demo user)仅拥有一般用户的权限。 \n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.sequence:0
|
||||
|
@ -2059,7 +2092,7 @@ msgstr "读权限"
|
|||
#. module: base
|
||||
#: help:ir.attachment,res_id:0
|
||||
msgid "The record id this is attached to"
|
||||
msgstr ""
|
||||
msgstr "附件相关的数据记录id"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_share
|
||||
|
@ -2160,6 +2193,11 @@ msgid ""
|
|||
"with the effect of creating, editing and deleting either ways.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"项目进度与工时记录的集成\n"
|
||||
"====================================================================\n"
|
||||
"安装了此模块,项目进度的添加删除和修改会自动同步到工时表上。\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_model_access
|
||||
|
@ -2179,6 +2217,11 @@ msgid ""
|
|||
" templates to target objects.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" * 科目表、税、税项、凭证类型、科目模版、成本要素和成本凭证类型的多语言支持。\n"
|
||||
" * 对设置向导的修改\n"
|
||||
" - 从模版复制科目表、税、税项和替换规则到目标数据表。\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: field:workflow.transition,act_from:0
|
||||
|
@ -2934,6 +2977,36 @@ msgid ""
|
|||
"* Monthly Turnover (Graph)\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"报价单和销售订单管理\n"
|
||||
"==================================\n"
|
||||
"此模块用来有效记录和跟踪所有销售订单及其历史,从而有效管理你的销售目标。\n"
|
||||
"\n"
|
||||
"整个销售流程包括:\n"
|
||||
"\n"
|
||||
"* **报价单** -> **销售订单** -> **发票**\n"
|
||||
"\n"
|
||||
"参数设置(仅在安装了仓库管理模块的情况下):\n"
|
||||
"------------------------------------------------------\n"
|
||||
"\n"
|
||||
"如果安装了仓库管理模块,您可以设置以下参数:\n"
|
||||
"\n"
|
||||
"* 发货:选择一次性发货或部分发货\n"
|
||||
"* 发票:选择发票是如何被支付\n"
|
||||
"* Incoterms:选择所使用的国际贸易术语\n"
|
||||
"\n"
|
||||
"您可以选择灵活的开票方式:\n"
|
||||
"\n"
|
||||
"* *按需开具*:需要时,手动从销售订单开具发票\n"
|
||||
"* *按发货单*:按发货单自动生成发票\n"
|
||||
"* *发运前*:先创建发票草稿,待支付后发货\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"销售经理的仪表盘(Dashboard)包括:\n"
|
||||
"------------------------------------------------\n"
|
||||
"* 我的报价单\n"
|
||||
"* 月成交量(图表)\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.act_window,res_id:0
|
||||
|
@ -8779,6 +8852,13 @@ msgid ""
|
|||
"\n"
|
||||
"Notes can be found in the 'Home' menu.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"此模块能让用户在OpenERP中创建他们自己的笔记(Notes)\n"
|
||||
"=================================================================\n"
|
||||
"Notes可用来记录会议纪要、即时的想法和创意、个人待办事项等等。每个用户管理其自己的个人笔记。笔记只能由创建者自己看到,但可通过分享笔记给其它用户,以便"
|
||||
"多人协作实时更新同一笔记。这对诸如分享会议纪要等十分有效。\n"
|
||||
"\n"
|
||||
"Notes菜单可在“消息”菜单中找到\n"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.dm
|
||||
|
@ -11918,7 +11998,7 @@ msgstr "ir.model.relation"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_account_check_writing
|
||||
msgid "Check Writing"
|
||||
msgstr "检查写作"
|
||||
msgstr "支票填写"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_plugin_outlook
|
||||
|
@ -12355,7 +12435,7 @@ msgstr "选中内容"
|
|||
#: model:ir.actions.act_window,name:base.change_password_wizard_action
|
||||
#: view:res.users:0
|
||||
msgid "Change Password"
|
||||
msgstr ""
|
||||
msgstr "更改密码"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_es
|
||||
|
@ -12665,7 +12745,7 @@ msgstr "地址格式"
|
|||
#. module: base
|
||||
#: model:ir.model,name:base.model_change_password_user
|
||||
msgid "Change Password Wizard User"
|
||||
msgstr ""
|
||||
msgstr "密码更改向导"
|
||||
|
||||
#. module: base
|
||||
#: model:res.groups,name:base.group_no_one
|
||||
|
@ -13458,7 +13538,7 @@ msgstr "ir.sequence.type"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_be_hr_payroll_account
|
||||
msgid "Belgium - Payroll with Accounting"
|
||||
msgstr ""
|
||||
msgstr "比利时 - 工资与会计"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.export,format:0
|
||||
|
@ -14304,7 +14384,7 @@ msgstr "泰国"
|
|||
#. module: base
|
||||
#: model:ir.model,name:base.model_change_password_wizard
|
||||
msgid "Change Password Wizard"
|
||||
msgstr ""
|
||||
msgstr "密码更改向导"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_account_voucher
|
||||
|
@ -15618,7 +15698,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:res.partner:0
|
||||
msgid "Internal Notes"
|
||||
msgstr "内部单据"
|
||||
msgstr "内部备注"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.title,name:base.res_partner_title_pvt_ltd
|
||||
|
@ -15639,7 +15719,7 @@ msgstr "行内编辑"
|
|||
#. module: base
|
||||
#: selection:ir.cron,interval_type:0
|
||||
msgid "Months"
|
||||
msgstr "月末"
|
||||
msgstr "月"
|
||||
|
||||
#. module: base
|
||||
#: view:workflow.instance:0
|
||||
|
@ -15662,7 +15742,7 @@ msgstr "是一个公司?"
|
|||
#: field:res.partner.bank,name:0
|
||||
#, python-format
|
||||
msgid "Bank Account"
|
||||
msgstr "银行账户"
|
||||
msgstr "银行账号"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.kp
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -19,20 +19,20 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
from functools import partial
|
||||
import logging
|
||||
import operator
|
||||
import os
|
||||
import re
|
||||
from socket import gethostname
|
||||
import time
|
||||
|
||||
import openerp
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp import tools
|
||||
from openerp import workflow
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.osv.orm import browse_record
|
||||
import openerp.report.interface
|
||||
from openerp.report.report_sxw import report_sxw, report_rml
|
||||
from openerp.tools.config import config
|
||||
from openerp.tools.safe_eval import safe_eval as eval
|
||||
from openerp.tools.translate import _
|
||||
import openerp.workflow
|
||||
|
@ -429,121 +429,177 @@ class server_object_lines(osv.osv):
|
|||
_name = 'ir.server.object.lines'
|
||||
_sequence = 'ir_actions_id_seq'
|
||||
_columns = {
|
||||
'server_id': fields.many2one('ir.actions.server', 'Object Mapping'),
|
||||
'col1': fields.many2one('ir.model.fields', 'Destination', required=True),
|
||||
'server_id': fields.many2one('ir.actions.server', 'Related Server Action'),
|
||||
'col1': fields.many2one('ir.model.fields', 'Field', required=True),
|
||||
'value': fields.text('Value', required=True, help="Expression containing a value specification. \n"
|
||||
"When Formula type is selected, this field may be a Python expression "
|
||||
" that can use the same values as for the condition field on the server action.\n"
|
||||
"If Value type is selected, the value will be used directly without evaluation."),
|
||||
'type': fields.selection([
|
||||
('value','Value'),
|
||||
('equation','Formula')
|
||||
], 'Type', required=True, size=32, change_default=True),
|
||||
('value', 'Value'),
|
||||
('equation', 'Python expression')
|
||||
], 'Evaluation Type', required=True, change_default=True),
|
||||
}
|
||||
_defaults = {
|
||||
'type': 'equation',
|
||||
'type': 'value',
|
||||
}
|
||||
server_object_lines()
|
||||
|
||||
|
||||
##
|
||||
# Actions that are run on the server side
|
||||
#
|
||||
class actions_server(osv.osv):
|
||||
""" Server actions model. Server action work on a base model and offer various
|
||||
type of actions that can be executed automatically, for example using base
|
||||
action rules, of manually, by adding the action in the 'More' contextual
|
||||
menu.
|
||||
|
||||
def _select_signals(self, cr, uid, context=None):
|
||||
cr.execute("""SELECT distinct w.osv, t.signal FROM wkf w, wkf_activity a, wkf_transition t
|
||||
WHERE w.id = a.wkf_id AND
|
||||
(t.act_from = a.id OR t.act_to = a.id) AND
|
||||
t.signal IS NOT NULL""")
|
||||
result = cr.fetchall() or []
|
||||
res = []
|
||||
for rs in result:
|
||||
if rs[0] is not None and rs[1] is not None:
|
||||
line = rs[1], "%s - (%s)" % (rs[1], rs[0])
|
||||
res.append(line)
|
||||
return res
|
||||
Since OpenERP 8.0 a button 'Create Menu Action' button is available on the
|
||||
action form view. It creates an entry in the More menu of the base model.
|
||||
This allows to create server actions and run them in mass mode easily through
|
||||
the interface.
|
||||
|
||||
def _select_objects(self, cr, uid, context=None):
|
||||
model_pool = self.pool.get('ir.model')
|
||||
ids = model_pool.search(cr, uid, [('name','not ilike','.')])
|
||||
res = model_pool.read(cr, uid, ids, ['model', 'name'])
|
||||
return [(r['model'], r['name']) for r in res] + [('','')]
|
||||
|
||||
def change_object(self, cr, uid, ids, copy_object, state, context=None):
|
||||
if state == 'object_copy' and copy_object:
|
||||
if context is None:
|
||||
context = {}
|
||||
model_pool = self.pool.get('ir.model')
|
||||
model = copy_object.split(',')[0]
|
||||
mid = model_pool.search(cr, uid, [('model','=',model)])
|
||||
return {
|
||||
'value': {'srcmodel_id': mid[0]},
|
||||
'context': context
|
||||
}
|
||||
else:
|
||||
return {}
|
||||
The available actions are :
|
||||
|
||||
- 'Execute Python Code': a block of python code that will be executed
|
||||
- 'Trigger a Workflow Signal': send a signal to a workflow
|
||||
- 'Run a Client Action': choose a client action to launch
|
||||
- 'Create or Copy a new Record': create a new record with new values, or
|
||||
copy an existing record in your database
|
||||
- 'Write on a Record': update the values of a record
|
||||
- 'Execute several actions': define an action that triggers several other
|
||||
server actions
|
||||
"""
|
||||
_name = 'ir.actions.server'
|
||||
_table = 'ir_act_server'
|
||||
_inherit = 'ir.actions.actions'
|
||||
_sequence = 'ir_actions_id_seq'
|
||||
_order = 'sequence,name'
|
||||
|
||||
def _select_objects(self, cr, uid, context=None):
|
||||
model_pool = self.pool.get('ir.model')
|
||||
ids = model_pool.search(cr, uid, [('name', 'not ilike', '.')])
|
||||
res = model_pool.read(cr, uid, ids, ['model', 'name'])
|
||||
return [(r['model'], r['name']) for r in res] + [('', '')]
|
||||
|
||||
def _get_states(self, cr, uid, context=None):
|
||||
""" Override me in order to add new states in the server action. Please
|
||||
note that the added key length should not be higher than already-existing
|
||||
ones. """
|
||||
return [('code', 'Execute Python Code'),
|
||||
('trigger', 'Trigger a Workflow Signal'),
|
||||
('client_action', 'Run a Client Action'),
|
||||
('object_create', 'Create or Copy a new Record'),
|
||||
('object_write', 'Write on a Record'),
|
||||
('multi', 'Execute several actions')]
|
||||
|
||||
def _get_states_wrapper(self, cr, uid, context=None):
|
||||
return self._get_states(cr, uid, context)
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Action Name', required=True, size=64, translate=True),
|
||||
'condition' : fields.char('Condition', size=256, required=True,
|
||||
help="Condition that is tested before the action is executed, "
|
||||
"and prevent execution if it is not verified.\n"
|
||||
"Example: object.list_price > 5000\n"
|
||||
"It is a Python expression that can use the following values:\n"
|
||||
" - self: ORM model of the record on which the action is triggered\n"
|
||||
" - object or obj: browse_record of the record on which the action is triggered\n"
|
||||
" - pool: ORM model pool (i.e. self.pool)\n"
|
||||
" - time: Python time module\n"
|
||||
" - cr: database cursor\n"
|
||||
" - uid: current user id\n"
|
||||
" - context: current context"),
|
||||
'state': fields.selection([
|
||||
('client_action','Client Action'),
|
||||
('dummy','Dummy'),
|
||||
('loop','Iteration'),
|
||||
('code','Python Code'),
|
||||
('trigger','Trigger'),
|
||||
('email','Email'),
|
||||
('sms','SMS'),
|
||||
('object_create','Create Object'),
|
||||
('object_copy','Copy Object'),
|
||||
('object_write','Write Object'),
|
||||
('other','Multi Actions'),
|
||||
], 'Action Type', required=True, size=32, help="Type of the Action that is to be executed"),
|
||||
'code':fields.text('Python Code', help="Python code to be executed if condition is met.\n"
|
||||
"It is a Python block that can use the same values as for the condition field"),
|
||||
'sequence': fields.integer('Sequence', help="Important when you deal with multiple actions, the execution order will be decided based on this, low number is higher priority."),
|
||||
'model_id': fields.many2one('ir.model', 'Object', required=True, help="Select the object on which the action will work (read, write, create).", ondelete='cascade'),
|
||||
'action_id': fields.many2one('ir.actions.actions', 'Client Action', help="Select the Action Window, Report, Wizard to be executed."),
|
||||
'trigger_name': fields.selection(_select_signals, string='Trigger Signal', size=128, help="The workflow signal to trigger"),
|
||||
'wkf_model_id': fields.many2one('ir.model', 'Target Object', help="The object that should receive the workflow signal (must have an associated workflow)"),
|
||||
'trigger_obj_id': fields.many2one('ir.model.fields','Relation Field', help="The field on the current object that links to the target object record (must be a many2one, or an integer field with the record ID)"),
|
||||
'email': fields.char('Email Address', size=512, help="Expression that returns the email address to send to. Can be based on the same values as for the condition field.\n"
|
||||
"Example: object.invoice_address_id.email, or 'me@example.com'"),
|
||||
'subject': fields.char('Subject', size=1024, translate=True, help="Email subject, may contain expressions enclosed in double brackets based on the same values as those "
|
||||
"available in the condition field, e.g. `Hello [[ object.partner_id.name ]]`"),
|
||||
'message': fields.text('Message', translate=True, help="Email contents, may contain expressions enclosed in double brackets based on the same values as those "
|
||||
"available in the condition field, e.g. `Dear [[ object.partner_id.name ]]`"),
|
||||
'mobile': fields.char('Mobile No', size=512, help="Provides fields that be used to fetch the mobile number, e.g. you select the invoice, then `object.invoice_address_id.mobile` is the field which gives the correct mobile number"),
|
||||
'sms': fields.char('SMS', size=160, translate=True),
|
||||
'child_ids': fields.many2many('ir.actions.server', 'rel_server_actions', 'server_id', 'action_id', 'Other Actions'),
|
||||
'condition': fields.char('Condition',
|
||||
help="Condition verified before executing the server action. If it "
|
||||
"is not verified, the action will not be executed. The condition is "
|
||||
"a Python expression, like 'object.list_price > 5000'. A void "
|
||||
"condition is considered as always True. Help about python expression "
|
||||
"is given in the help tab."),
|
||||
'state': fields.selection(_get_states_wrapper, 'Action To Do', required=True,
|
||||
help="Type of server action. The following values are available:\n"
|
||||
"- 'Execute Python Code': a block of python code that will be executed\n"
|
||||
"- 'Trigger a Workflow Signal': send a signal to a workflow\n"
|
||||
"- 'Run a Client Action': choose a client action to launch\n"
|
||||
"- 'Create or Copy a new Record': create a new record with new values, or copy an existing record in your database\n"
|
||||
"- 'Write on a Record': update the values of a record\n"
|
||||
"- 'Execute several actions': define an action that triggers several other server actions\n"
|
||||
"- 'Send Email': automatically send an email (available in email_template)"),
|
||||
'usage': fields.char('Action Usage', size=32),
|
||||
'type': fields.char('Action Type', size=32, required=True),
|
||||
'srcmodel_id': fields.many2one('ir.model', 'Model', help="Object in which you want to create / write the object. If it is empty then refer to the Object field."),
|
||||
'fields_lines': fields.one2many('ir.server.object.lines', 'server_id', 'Field Mappings.'),
|
||||
'record_id':fields.many2one('ir.model.fields', 'Create Id', help="Provide the field name where the record id is stored after the create operations. If it is empty, you can not track the new record."),
|
||||
'write_id':fields.char('Write Id', size=256, help="Provide the field name that the record id refers to for the write operation. If it is empty it will refer to the active id of the object."),
|
||||
'loop_action':fields.many2one('ir.actions.server', 'Loop Action', help="Select the action that will be executed. Loop action will not be avaliable inside loop."),
|
||||
'expression':fields.char('Loop Expression', size=512, help="Enter the field/expression that will return the list. E.g. select the sale order in Object, and you can have loop on the sales order line. Expression = `object.order_line`."),
|
||||
'copy_object': fields.reference('Copy Of', selection=_select_objects, size=256),
|
||||
# Generic
|
||||
'sequence': fields.integer('Sequence',
|
||||
help="When dealing with multiple actions, the execution order is "
|
||||
"based on the sequence. Low number means high priority."),
|
||||
'model_id': fields.many2one('ir.model', 'Base Model', required=True, ondelete='cascade',
|
||||
help="Base model on which the server action runs."),
|
||||
'menu_ir_values_id': fields.many2one('ir.values', 'More Menu entry', readonly=True,
|
||||
help='More menu entry.'),
|
||||
# Client Action
|
||||
'action_id': fields.many2one('ir.actions.actions', 'Client Action',
|
||||
help="Select the client action that has to be executed."),
|
||||
# Python code
|
||||
'code': fields.text('Python Code',
|
||||
help="Write Python code that the action will execute. Some variables are "
|
||||
"available for use; help about pyhon expression is given in the help tab."),
|
||||
# Workflow signal
|
||||
'use_relational_model': fields.selection([('base', 'Use the base model of the action'),
|
||||
('relational', 'Use a relation field on the base model')],
|
||||
string='Target Model', required=True),
|
||||
'wkf_transition_id': fields.many2one('workflow.transition', string='Signal to Trigger',
|
||||
help="Select the workflow signal to trigger."),
|
||||
'wkf_model_id': fields.many2one('ir.model', 'Target Model',
|
||||
help="The model that will receive the workflow signal. Note that it should have a workflow associated with it."),
|
||||
'wkf_model_name': fields.related('wkf_model_id', 'model', type='char', string='Target Model Name', store=True, readonly=True),
|
||||
'wkf_field_id': fields.many2one('ir.model.fields', string='Relation Field',
|
||||
oldname='trigger_obj_id',
|
||||
help="The field on the current object that links to the target object record (must be a many2one, or an integer field with the record ID)"),
|
||||
# Multi
|
||||
'child_ids': fields.many2many('ir.actions.server', 'rel_server_actions',
|
||||
'server_id', 'action_id',
|
||||
string='Child Actions',
|
||||
help='Child server actions that will be executed. Note that the last return returned action value will be used as global return value.'),
|
||||
# Create/Copy/Write
|
||||
'use_create': fields.selection([('new', 'Create a new record in the Base Model'),
|
||||
('new_other', 'Create a new record in another model'),
|
||||
('copy_current', 'Copy the current record'),
|
||||
('copy_other', 'Choose and copy a record in the database')],
|
||||
string="Creation Policy", required=True,
|
||||
help=""),
|
||||
'crud_model_id': fields.many2one('ir.model', 'Target Model',
|
||||
oldname='srcmodel_id',
|
||||
help="Model for record creation / update. Set this field only to specify a different model than the base model."),
|
||||
'crud_model_name': fields.related('crud_model_id', 'model', type='char',
|
||||
string='Create/Write Target Model Name',
|
||||
store=True, readonly=True),
|
||||
'ref_object': fields.reference('Reference record', selection=_select_objects, size=128,
|
||||
oldname='copy_object'),
|
||||
'link_new_record': fields.boolean('Attach the new record',
|
||||
help="Check this if you want to link the newly-created record "
|
||||
"to the current record on which the server action runs."),
|
||||
'link_field_id': fields.many2one('ir.model.fields', 'Link using field',
|
||||
oldname='record_id',
|
||||
help="Provide the field where the record id is stored after the operations."),
|
||||
'use_write': fields.selection([('current', 'Update the current record'),
|
||||
('expression', 'Update a record linked to the current record using python'),
|
||||
('other', 'Choose and Update a record in the database')],
|
||||
string='Update Policy', required=True,
|
||||
help=""),
|
||||
'write_expression': fields.char('Expression',
|
||||
oldname='write_id',
|
||||
help="Provide an expression that, applied on the current record, gives the field to update."),
|
||||
'fields_lines': fields.one2many('ir.server.object.lines', 'server_id',
|
||||
string='Value Mapping',
|
||||
help=""),
|
||||
|
||||
# Fake fields used to implement the placeholder assistant
|
||||
'model_object_field': fields.many2one('ir.model.fields', string="Field",
|
||||
help="Select target field from the related document model.\n"
|
||||
"If it is a relationship field you will be able to select "
|
||||
"a target field at the destination of the relationship."),
|
||||
'sub_object': fields.many2one('ir.model', 'Sub-model', readonly=True,
|
||||
help="When a relationship field is selected as first field, "
|
||||
"this field shows the document model the relationship goes to."),
|
||||
'sub_model_object_field': fields.many2one('ir.model.fields', 'Sub-field',
|
||||
help="When a relationship field is selected as first field, "
|
||||
"this field lets you select the target field within the "
|
||||
"destination document model (sub-model)."),
|
||||
'copyvalue': fields.char('Placeholder Expression', help="Final placeholder expression, to be copy-pasted in the desired template field."),
|
||||
# Fake fields used to implement the ID finding assistant
|
||||
'id_object': fields.reference('Record', selection=_select_objects, size=128),
|
||||
'id_value': fields.char('Record ID'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'state': 'dummy',
|
||||
'state': 'code',
|
||||
'condition': 'True',
|
||||
'type': 'ir.actions.server',
|
||||
'sequence': 5,
|
||||
|
@ -551,246 +607,427 @@ class actions_server(osv.osv):
|
|||
# - self: ORM model of the record on which the action is triggered
|
||||
# - object: browse_record of the record on which the action is triggered if there is one, otherwise None
|
||||
# - pool: ORM model pool (i.e. self.pool)
|
||||
# - time: Python time module
|
||||
# - cr: database cursor
|
||||
# - uid: current user id
|
||||
# - context: current context
|
||||
# If you plan to return an action, assign: action = {...}
|
||||
""",
|
||||
# - time: Python time module
|
||||
# If you plan to return an action, assign: action = {...}""",
|
||||
'use_relational_model': 'base',
|
||||
'use_create': 'new',
|
||||
'use_write': 'current',
|
||||
}
|
||||
|
||||
def get_email(self, cr, uid, action, context):
|
||||
def _check_expression(self, cr, uid, expression, model_id, context):
|
||||
""" Check python expression (condition, write_expression). Each step of
|
||||
the path must be a valid many2one field, or an integer field for the last
|
||||
step.
|
||||
|
||||
:param str expression: a python expression, beginning by 'obj' or 'object'
|
||||
:param int model_id: the base model of the server action
|
||||
:returns tuple: (is_valid, target_model_name, error_msg)
|
||||
"""
|
||||
if not model_id:
|
||||
return (False, None, 'Your expression cannot be validated because the Base Model is not set.')
|
||||
# fetch current model
|
||||
current_model_name = self.pool.get('ir.model').browse(cr, uid, model_id, context).model
|
||||
# transform expression into a path that should look like 'object.many2onefield.many2onefield'
|
||||
path = expression.split('.')
|
||||
initial = path.pop(0)
|
||||
if initial not in ['obj', 'object']:
|
||||
return (False, None, 'Your expression should begin with obj or object.\nAn expression builder is available in the help tab.')
|
||||
# analyze path
|
||||
while path:
|
||||
step = path.pop(0)
|
||||
column_info = self.pool[current_model_name]._all_columns.get(step)
|
||||
if not column_info:
|
||||
return (False, None, 'Part of the expression (%s) is not recognized as a column in the model %s.' % (step, current_model_name))
|
||||
column_type = column_info.column._type
|
||||
if column_type not in ['many2one', 'int']:
|
||||
return (False, None, 'Part of the expression (%s) is not a valid column type (is %s, should be a many2one or an int)' % (step, column_type))
|
||||
if column_type == 'int' and path:
|
||||
return (False, None, 'Part of the expression (%s) is an integer field that is only allowed at the end of an expression' % (step))
|
||||
if column_type == 'many2one':
|
||||
current_model_name = column_info.column._obj
|
||||
return (True, current_model_name, None)
|
||||
|
||||
def _check_write_expression(self, cr, uid, ids, context=None):
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
if record.write_expression and record.model_id:
|
||||
correct, model_name, message = self._check_expression(cr, uid, record.write_expression, record.model_id.id, context=context)
|
||||
if not correct:
|
||||
_logger.warning('Invalid expression: %s' % message)
|
||||
return False
|
||||
return True
|
||||
|
||||
_constraints = [
|
||||
(_check_write_expression,
|
||||
'Incorrect Write Record Expression',
|
||||
['write_expression']),
|
||||
(partial(osv.Model._check_m2m_recursion, field_name='child_ids'),
|
||||
'Recursion found in child server actions',
|
||||
['child_ids']),
|
||||
]
|
||||
|
||||
def on_change_model_id(self, cr, uid, ids, model_id, wkf_model_id, crud_model_id, context=None):
|
||||
""" When changing the action base model, reset workflow and crud config
|
||||
to ease value coherence. """
|
||||
values = {
|
||||
'use_create': 'new',
|
||||
'use_write': 'current',
|
||||
'use_relational_model': 'base',
|
||||
'wkf_model_id': model_id,
|
||||
'wkf_field_id': False,
|
||||
'crud_model_id': model_id,
|
||||
}
|
||||
return {'value': values}
|
||||
|
||||
def on_change_wkf_wonfig(self, cr, uid, ids, use_relational_model, wkf_field_id, wkf_model_id, model_id, context=None):
|
||||
""" Update workflow type configuration
|
||||
|
||||
- update the workflow model (for base (model_id) /relational (field.relation))
|
||||
- update wkf_transition_id to False if workflow model changes, to force
|
||||
the user to choose a new one
|
||||
"""
|
||||
values = {}
|
||||
if use_relational_model == 'relational' and wkf_field_id:
|
||||
field = self.pool['ir.model.fields'].browse(cr, uid, wkf_field_id, context=context)
|
||||
new_wkf_model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', field.relation)], context=context)[0]
|
||||
values['wkf_model_id'] = new_wkf_model_id
|
||||
else:
|
||||
values['wkf_model_id'] = model_id
|
||||
return {'value': values}
|
||||
|
||||
def on_change_wkf_model_id(self, cr, uid, ids, wkf_model_id, context=None):
|
||||
""" When changing the workflow model, update its stored name also """
|
||||
wkf_model_name = False
|
||||
if wkf_model_id:
|
||||
wkf_model_name = self.pool.get('ir.model').browse(cr, uid, wkf_model_id, context).model
|
||||
values = {'wkf_transition_id': False, 'wkf_model_name': wkf_model_name}
|
||||
return {'value': values}
|
||||
|
||||
def on_change_crud_config(self, cr, uid, ids, state, use_create, use_write, ref_object, crud_model_id, model_id, context=None):
|
||||
""" Wrapper on CRUD-type (create or write) on_change """
|
||||
if state == 'object_create':
|
||||
return self.on_change_create_config(cr, uid, ids, use_create, ref_object, crud_model_id, model_id, context=context)
|
||||
elif state == 'object_write':
|
||||
return self.on_change_write_config(cr, uid, ids, use_write, ref_object, crud_model_id, model_id, context=context)
|
||||
else:
|
||||
return {}
|
||||
|
||||
def on_change_create_config(self, cr, uid, ids, use_create, ref_object, crud_model_id, model_id, context=None):
|
||||
""" When changing the object_create type configuration:
|
||||
|
||||
- `new` and `copy_current`: crud_model_id is the same as base model
|
||||
- `new_other`: user choose crud_model_id
|
||||
- `copy_other`: disassemble the reference object to have its model
|
||||
- if the target model has changed, then reset the link field that is
|
||||
probably not correct anymore
|
||||
"""
|
||||
values = {}
|
||||
if use_create == 'new':
|
||||
values['crud_model_id'] = model_id
|
||||
elif use_create == 'new_other':
|
||||
pass
|
||||
elif use_create == 'copy_current':
|
||||
values['crud_model_id'] = model_id
|
||||
elif use_create == 'copy_other' and ref_object:
|
||||
ref_model, ref_id = ref_object.split(',')
|
||||
ref_model_id = self.pool['ir.model'].search(cr, uid, [('model', '=', ref_model)], context=context)[0]
|
||||
values['crud_model_id'] = ref_model_id
|
||||
|
||||
if values.get('crud_model_id') != crud_model_id:
|
||||
values['link_field_id'] = False
|
||||
return {'value': values}
|
||||
|
||||
def on_change_write_config(self, cr, uid, ids, use_write, ref_object, crud_model_id, model_id, context=None):
|
||||
""" When changing the object_write type configuration:
|
||||
|
||||
- `current`: crud_model_id is the same as base model
|
||||
- `other`: disassemble the reference object to have its model
|
||||
- `expression`: has its own on_change, nothing special here
|
||||
"""
|
||||
values = {}
|
||||
if use_write == 'current':
|
||||
values['crud_model_id'] = model_id
|
||||
elif use_write == 'other' and ref_object:
|
||||
ref_model, ref_id = ref_object.split(',')
|
||||
ref_model_id = self.pool['ir.model'].search(cr, uid, [('model', '=', ref_model)], context=context)[0]
|
||||
values['crud_model_id'] = ref_model_id
|
||||
elif use_write == 'expression':
|
||||
pass
|
||||
|
||||
if values.get('crud_model_id') != crud_model_id:
|
||||
values['link_field_id'] = False
|
||||
return {'value': values}
|
||||
|
||||
def on_change_write_expression(self, cr, uid, ids, write_expression, model_id, context=None):
|
||||
""" Check the write_expression and update crud_model_id accordingly """
|
||||
values = {}
|
||||
valid, model_name, message = self._check_expression(cr, uid, write_expression, model_id, context=context)
|
||||
if valid:
|
||||
ref_model_id = self.pool['ir.model'].search(cr, uid, [('model', '=', model_name)], context=context)[0]
|
||||
values['crud_model_id'] = ref_model_id
|
||||
return {'value': values}
|
||||
if not message:
|
||||
message = 'Invalid expression'
|
||||
return {
|
||||
'warning': {
|
||||
'title': 'Incorrect expression',
|
||||
'message': message,
|
||||
}
|
||||
}
|
||||
|
||||
def on_change_crud_model_id(self, cr, uid, ids, crud_model_id, context=None):
|
||||
""" When changing the CRUD model, update its stored name also """
|
||||
crud_model_name = False
|
||||
if crud_model_id:
|
||||
crud_model_name = self.pool.get('ir.model').browse(cr, uid, crud_model_id, context).model
|
||||
values = {'link_field_id': False, 'crud_model_name': crud_model_name}
|
||||
return {'value': values}
|
||||
|
||||
def _build_expression(self, field_name, sub_field_name):
|
||||
""" Returns a placeholder expression for use in a template field,
|
||||
based on the values provided in the placeholder assistant.
|
||||
|
||||
:param field_name: main field name
|
||||
:param sub_field_name: sub field name (M2O)
|
||||
:return: final placeholder expression
|
||||
"""
|
||||
expression = ''
|
||||
if field_name:
|
||||
expression = "object." + field_name
|
||||
if sub_field_name:
|
||||
expression += "." + sub_field_name
|
||||
return expression
|
||||
|
||||
def onchange_sub_model_object_value_field(self, cr, uid, ids, model_object_field, sub_model_object_field=False, context=None):
|
||||
result = {
|
||||
'sub_object': False,
|
||||
'copyvalue': False,
|
||||
'sub_model_object_field': False,
|
||||
}
|
||||
if model_object_field:
|
||||
fields_obj = self.pool.get('ir.model.fields')
|
||||
field_value = fields_obj.browse(cr, uid, model_object_field, context)
|
||||
if field_value.ttype in ['many2one', 'one2many', 'many2many']:
|
||||
res_ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', field_value.relation)], context=context)
|
||||
sub_field_value = False
|
||||
if sub_model_object_field:
|
||||
sub_field_value = fields_obj.browse(cr, uid, sub_model_object_field, context)
|
||||
if res_ids:
|
||||
result.update({
|
||||
'sub_object': res_ids[0],
|
||||
'copyvalue': self._build_expression(field_value.name, sub_field_value and sub_field_value.name or False),
|
||||
'sub_model_object_field': sub_model_object_field or False,
|
||||
})
|
||||
else:
|
||||
result.update({
|
||||
'copyvalue': self._build_expression(field_value.name, False),
|
||||
})
|
||||
return {'value': result}
|
||||
|
||||
def onchange_id_object(self, cr, uid, ids, id_object, context=None):
|
||||
if id_object:
|
||||
ref_model, ref_id = id_object.split(',')
|
||||
return {'value': {'id_value': ref_id}}
|
||||
return {'value': {'id_value': False}}
|
||||
|
||||
def create_action(self, cr, uid, ids, context=None):
|
||||
""" Create a contextual action for each of the server actions. """
|
||||
for action in self.browse(cr, uid, ids, context=context):
|
||||
ir_values_id = self.pool.get('ir.values').create(cr, SUPERUSER_ID, {
|
||||
'name': _('Run %s') % action.name,
|
||||
'model': action.model_id.model,
|
||||
'key2': 'client_action_multi',
|
||||
'value': "ir.actions.server,%s" % action.id,
|
||||
}, context)
|
||||
action.write({
|
||||
'menu_ir_values_id': ir_values_id,
|
||||
})
|
||||
|
||||
return True
|
||||
|
||||
def unlink_action(self, cr, uid, ids, context=None):
|
||||
""" Remove the contextual actions created for the server actions. """
|
||||
for action in self.browse(cr, uid, ids, context=context):
|
||||
if action.menu_ir_values_id:
|
||||
try:
|
||||
self.pool.get('ir.values').unlink(cr, SUPERUSER_ID, action.menu_ir_values_id.id, context)
|
||||
except Exception:
|
||||
raise osv.except_osv(_('Warning'), _('Deletion of the action record failed.'))
|
||||
return True
|
||||
|
||||
def run_action_client_action(self, cr, uid, action, eval_context=None, context=None):
|
||||
if not action.action_id:
|
||||
raise osv.except_osv(_('Error'), _("Please specify an action to launch!"))
|
||||
return self.pool[action.action_id.type].read(cr, uid, action.action_id.id, context=context)
|
||||
|
||||
def run_action_code(self, cr, uid, action, eval_context=None, context=None):
|
||||
eval(action.code.strip(), eval_context, mode="exec", nocopy=True) # nocopy allows to return 'action'
|
||||
if 'action' in eval_context:
|
||||
return eval_context['action']
|
||||
|
||||
def run_action_trigger(self, cr, uid, action, eval_context=None, context=None):
|
||||
""" Trigger a workflow signal, depending on the use_relational_model:
|
||||
|
||||
- `base`: base_model_pool.signal_<TRIGGER_NAME>(cr, uid, context.get('active_id'))
|
||||
- `relational`: find the related model and object, using the relational
|
||||
field, then target_model_pool.signal_<TRIGGER_NAME>(cr, uid, target_id)
|
||||
"""
|
||||
obj_pool = self.pool[action.model_id.model]
|
||||
id = context.get('active_id')
|
||||
obj = obj_pool.browse(cr, uid, id)
|
||||
if action.use_relational_model == 'base':
|
||||
target_id = context.get('active_id')
|
||||
target_pool = obj_pool
|
||||
else:
|
||||
value = getattr(obj_pool.browse(cr, uid, context.get('active_id'), context=context), action.wkf_field_id.name)
|
||||
if action.wkf_field_id.ttype == 'many2one':
|
||||
target_id = value.id
|
||||
else:
|
||||
target_id = value
|
||||
target_pool = self.pool[action.wkf_model_id.model]
|
||||
|
||||
fields = None
|
||||
trigger_name = action.wkf_transition_id.signal
|
||||
|
||||
if '/' in action.email.complete_name:
|
||||
fields = action.email.complete_name.split('/')
|
||||
elif '.' in action.email.complete_name:
|
||||
fields = action.email.complete_name.split('.')
|
||||
workflow.trg_validate(uid, target_pool._name, target_id, trigger_name, cr)
|
||||
|
||||
for field in fields:
|
||||
try:
|
||||
obj = getattr(obj, field)
|
||||
except Exception:
|
||||
_logger.exception('Failed to parse: %s', field)
|
||||
def run_action_multi(self, cr, uid, action, eval_context=None, context=None):
|
||||
res = []
|
||||
for act in action.child_ids:
|
||||
result = self.run(cr, uid, [act.id], context)
|
||||
if result:
|
||||
res.append(result)
|
||||
return res and res[0] or False
|
||||
|
||||
return obj
|
||||
def run_action_object_write(self, cr, uid, action, eval_context=None, context=None):
|
||||
""" Write server action.
|
||||
|
||||
def get_mobile(self, cr, uid, action, context):
|
||||
obj_pool = self.pool[action.model_id.model]
|
||||
id = context.get('active_id')
|
||||
obj = obj_pool.browse(cr, uid, id)
|
||||
- 1. evaluate the value mapping
|
||||
- 2. depending on the write configuration:
|
||||
|
||||
fields = None
|
||||
- `current`: id = active_id
|
||||
- `other`: id = from reference object
|
||||
- `expression`: id = from expression evaluation
|
||||
"""
|
||||
res = {}
|
||||
for exp in action.fields_lines:
|
||||
if exp.type == 'equation':
|
||||
expr = eval(exp.value, eval_context)
|
||||
else:
|
||||
expr = exp.value
|
||||
res[exp.col1.name] = expr
|
||||
|
||||
if '/' in action.mobile.complete_name:
|
||||
fields = action.mobile.complete_name.split('/')
|
||||
elif '.' in action.mobile.complete_name:
|
||||
fields = action.mobile.complete_name.split('.')
|
||||
if action.use_write == 'current':
|
||||
model = action.model_id.model
|
||||
ref_id = context.get('active_id')
|
||||
elif action.use_write == 'other':
|
||||
model = action.crud_model_id.model
|
||||
ref_id = action.ref_object.id
|
||||
elif action.use_write == 'expression':
|
||||
model = action.crud_model_id.model
|
||||
ref = eval(action.write_expression, eval_context)
|
||||
if isinstance(ref, browse_record):
|
||||
ref_id = getattr(ref, 'id')
|
||||
else:
|
||||
ref_id = int(ref)
|
||||
|
||||
for field in fields:
|
||||
try:
|
||||
obj = getattr(obj, field)
|
||||
except Exception:
|
||||
_logger.exception('Failed to parse: %s', field)
|
||||
obj_pool = self.pool[model]
|
||||
obj_pool.write(cr, uid, [ref_id], res, context=context)
|
||||
|
||||
return obj
|
||||
def run_action_object_create(self, cr, uid, action, eval_context=None, context=None):
|
||||
""" Create and Copy server action.
|
||||
|
||||
def merge_message(self, cr, uid, keystr, action, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
- 1. evaluate the value mapping
|
||||
- 2. depending on the write configuration:
|
||||
|
||||
def merge(match):
|
||||
obj_pool = self.pool[action.model_id.model]
|
||||
id = context.get('active_id')
|
||||
obj = obj_pool.browse(cr, uid, id)
|
||||
exp = str(match.group()[2:-2]).strip()
|
||||
result = eval(exp,
|
||||
{
|
||||
'object': obj,
|
||||
'context': dict(context), # copy context to prevent side-effects of eval
|
||||
'time': time,
|
||||
})
|
||||
if result in (None, False):
|
||||
return str("--------")
|
||||
return tools.ustr(result)
|
||||
- `new`: new record in the base model
|
||||
- `copy_current`: copy the current record (id = active_id) + gives custom values
|
||||
- `new_other`: new record in target model
|
||||
- `copy_other`: copy the current record (id from reference object)
|
||||
+ gives custom values
|
||||
"""
|
||||
res = {}
|
||||
for exp in action.fields_lines:
|
||||
if exp.type == 'equation':
|
||||
expr = eval(exp.value, eval_context)
|
||||
else:
|
||||
expr = exp.value
|
||||
res[exp.col1.name] = expr
|
||||
|
||||
com = re.compile('(\[\[.+?\]\])')
|
||||
message = com.sub(merge, keystr)
|
||||
if action.use_create in ['new', 'copy_current']:
|
||||
model = action.model_id.model
|
||||
elif action.use_create in ['new_other', 'copy_other']:
|
||||
model = action.crud_model_id.model
|
||||
|
||||
return message
|
||||
obj_pool = self.pool[model]
|
||||
if action.use_create == 'copy_current':
|
||||
ref_id = context.get('active_id')
|
||||
res_id = obj_pool.copy(cr, uid, ref_id, res, context=context)
|
||||
elif action.use_create == 'copy_other':
|
||||
ref_id = action.ref_object.id
|
||||
res_id = obj_pool.copy(cr, uid, ref_id, res, context=context)
|
||||
else:
|
||||
res_id = obj_pool.create(cr, uid, res, context=context)
|
||||
|
||||
# Context should contains:
|
||||
# ids : original ids
|
||||
# id : current id of the object
|
||||
# OUT:
|
||||
# False : Finished correctly
|
||||
# ACTION_ID : Action to launch
|
||||
if action.link_new_record and action.link_field_id:
|
||||
self.pool[action.model_id.model].write(cr, uid, [context.get('active_id')], {action.link_field_id.name: res_id})
|
||||
|
||||
# FIXME: refactor all the eval() calls in run()!
|
||||
def run(self, cr, uid, ids, context=None):
|
||||
""" Run the server action. For each server action, the condition is
|
||||
checked. Note that A void (aka False) condition is considered as always
|
||||
valid. If it is verified, the run_action_<STATE> method is called. This
|
||||
allows easy inheritance of the server actions.
|
||||
|
||||
:param dict context: context should contain following keys
|
||||
|
||||
- active_id: id of the current object (single mode)
|
||||
- active_model: current model that should equal the action's model
|
||||
|
||||
The following keys are optional:
|
||||
|
||||
- active_ids: ids of the current records (mass mode). If active_ids
|
||||
and active_id are present, active_ids is given precedence.
|
||||
|
||||
:return: an action_id to be executed, or False is finished correctly without
|
||||
return action
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
res = False
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid)
|
||||
active_ids = context.get('active_ids', [context.get('active_id', None)])
|
||||
for action in self.browse(cr, uid, ids, context):
|
||||
obj = None
|
||||
obj_pool = self.pool[action.model_id.model]
|
||||
if context.get('active_model') == action.model_id.model and context.get('active_id'):
|
||||
obj = obj_pool.browse(cr, uid, context['active_id'], context=context)
|
||||
cxt = {
|
||||
'self': obj_pool,
|
||||
'object': obj,
|
||||
'obj': obj,
|
||||
'pool': self.pool,
|
||||
'time': time,
|
||||
'cr': cr,
|
||||
'context': dict(context), # copy context to prevent side-effects of eval
|
||||
'uid': uid,
|
||||
'user': user
|
||||
}
|
||||
expr = eval(str(action.condition), cxt)
|
||||
if not expr:
|
||||
continue
|
||||
for active_id in active_ids:
|
||||
if context.get('active_model') == action.model_id.model and active_id:
|
||||
obj = obj_pool.browse(cr, uid, context['active_id'], context=context)
|
||||
# run context dedicated to a particular active_id
|
||||
run_context = dict(context, active_ids=[active_id], active_id=active_id)
|
||||
# evaluation context for python strings to evaluate
|
||||
eval_context = {
|
||||
'self': obj_pool,
|
||||
'object': obj,
|
||||
'obj': obj,
|
||||
'pool': self.pool,
|
||||
'time': time,
|
||||
'cr': cr,
|
||||
'context': dict(run_context), # copy context to prevent side-effects of eval
|
||||
'uid': uid,
|
||||
'user': user
|
||||
}
|
||||
|
||||
if action.state=='client_action':
|
||||
if not action.action_id:
|
||||
raise osv.except_osv(_('Error'), _("Please specify an action to launch!"))
|
||||
return self.pool[action.action_id.type].read(cr, uid, action.action_id.id, context=context)
|
||||
|
||||
if action.state=='code':
|
||||
eval(action.code.strip(), cxt, mode="exec", nocopy=True) # nocopy allows to return 'action'
|
||||
if 'action' in cxt:
|
||||
return cxt['action']
|
||||
|
||||
if action.state == 'email':
|
||||
email_from = config['email_from']
|
||||
if not email_from:
|
||||
_logger.debug('--email-from command line option is not specified, using a fallback value instead.')
|
||||
if user.email:
|
||||
email_from = user.email
|
||||
else:
|
||||
email_from = "%s@%s" % (user.login, gethostname())
|
||||
|
||||
try:
|
||||
address = eval(str(action.email), cxt)
|
||||
except Exception:
|
||||
address = str(action.email)
|
||||
|
||||
if not address:
|
||||
_logger.info('No partner email address specified, not sending any email.')
|
||||
# evaluate the condition, with the specific case that a void (aka False) condition is considered as True
|
||||
condition = action.condition
|
||||
if action.condition is False:
|
||||
condition = True
|
||||
expr = eval(str(condition), eval_context)
|
||||
if not expr:
|
||||
continue
|
||||
# call the method related to the action: run_action_<STATE>
|
||||
if hasattr(self, 'run_action_%s' % action.state):
|
||||
res = getattr(self, 'run_action_%s' % action.state)(cr, uid, action, eval_context=eval_context, context=run_context)
|
||||
return res
|
||||
|
||||
# handle single and multiple recipient addresses
|
||||
addresses = address if isinstance(address, (tuple, list)) else [address]
|
||||
subject = self.merge_message(cr, uid, action.subject, action, context)
|
||||
body = self.merge_message(cr, uid, action.message, action, context)
|
||||
|
||||
ir_mail_server = self.pool.get('ir.mail_server')
|
||||
msg = ir_mail_server.build_email(email_from, addresses, subject, body)
|
||||
res_email = ir_mail_server.send_email(cr, uid, msg)
|
||||
if res_email:
|
||||
_logger.info('Email successfully sent to: %s', addresses)
|
||||
else:
|
||||
_logger.warning('Failed to send email to: %s', addresses)
|
||||
|
||||
if action.state == 'trigger':
|
||||
model = action.wkf_model_id.model
|
||||
m2o_field_name = action.trigger_obj_id.name
|
||||
target_id = obj_pool.read(cr, uid, context.get('active_id'), [m2o_field_name])[m2o_field_name]
|
||||
target_id = target_id[0] if isinstance(target_id,tuple) else target_id
|
||||
openerp.workflow.trg_validate(uid, model, int(target_id), action.trigger_name, cr)
|
||||
|
||||
if action.state == 'sms':
|
||||
#TODO: set the user and password from the system
|
||||
# for the sms gateway user / password
|
||||
# USE smsclient module from extra-addons
|
||||
_logger.warning('SMS Facility has not been implemented yet. Use smsclient module!')
|
||||
|
||||
if action.state == 'other':
|
||||
res = []
|
||||
for act in action.child_ids:
|
||||
context['active_id'] = context['active_ids'][0]
|
||||
result = self.run(cr, uid, [act.id], context)
|
||||
if result:
|
||||
res.append(result)
|
||||
return res
|
||||
|
||||
if action.state == 'loop':
|
||||
expr = eval(str(action.expression), cxt)
|
||||
context['object'] = obj
|
||||
for i in expr:
|
||||
context['active_id'] = i.id
|
||||
self.run(cr, uid, [action.loop_action.id], context)
|
||||
|
||||
if action.state == 'object_write':
|
||||
res = {}
|
||||
for exp in action.fields_lines:
|
||||
euq = exp.value
|
||||
if exp.type == 'equation':
|
||||
expr = eval(euq, cxt)
|
||||
else:
|
||||
expr = exp.value
|
||||
res[exp.col1.name] = expr
|
||||
|
||||
if not action.write_id:
|
||||
if not action.srcmodel_id:
|
||||
obj_pool = self.pool[action.model_id.model]
|
||||
obj_pool.write(cr, uid, [context.get('active_id')], res)
|
||||
else:
|
||||
write_id = context.get('active_id')
|
||||
obj_pool = self.pool[action.srcmodel_id.model]
|
||||
obj_pool.write(cr, uid, [write_id], res)
|
||||
|
||||
elif action.write_id:
|
||||
obj_pool = self.pool[action.srcmodel_id.model]
|
||||
rec = self.pool[action.model_id.model].browse(cr, uid, context.get('active_id'))
|
||||
id = eval(action.write_id, {'object': rec})
|
||||
try:
|
||||
id = int(id)
|
||||
except:
|
||||
raise osv.except_osv(_('Error'), _("Problem in configuration `Record Id` in Server Action!"))
|
||||
|
||||
if type(id) != type(1):
|
||||
raise osv.except_osv(_('Error'), _("Problem in configuration `Record Id` in Server Action!"))
|
||||
write_id = id
|
||||
obj_pool.write(cr, uid, [write_id], res)
|
||||
|
||||
if action.state == 'object_create':
|
||||
res = {}
|
||||
for exp in action.fields_lines:
|
||||
euq = exp.value
|
||||
if exp.type == 'equation':
|
||||
expr = eval(euq, cxt)
|
||||
else:
|
||||
expr = exp.value
|
||||
res[exp.col1.name] = expr
|
||||
|
||||
obj_pool = self.pool[action.srcmodel_id.model]
|
||||
res_id = obj_pool.create(cr, uid, res)
|
||||
if action.record_id:
|
||||
self.pool[action.model_id.model].write(cr, uid, [context.get('active_id')], {action.record_id.name:res_id})
|
||||
|
||||
if action.state == 'object_copy':
|
||||
res = {}
|
||||
for exp in action.fields_lines:
|
||||
euq = exp.value
|
||||
if exp.type == 'equation':
|
||||
expr = eval(euq, cxt)
|
||||
else:
|
||||
expr = exp.value
|
||||
res[exp.col1.name] = expr
|
||||
|
||||
model = action.copy_object.split(',')[0]
|
||||
cid = action.copy_object.split(',')[1]
|
||||
obj_pool = self.pool[model]
|
||||
obj_pool.copy(cr, uid, int(cid), res)
|
||||
|
||||
return False
|
||||
|
||||
actions_server()
|
||||
|
||||
class act_window_close(osv.osv):
|
||||
_name = 'ir.actions.act_window_close'
|
||||
|
|
|
@ -309,86 +309,208 @@
|
|||
<field name="model">ir.actions.server</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Server Action" version="7.0">
|
||||
<group>
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1><field name="name"/></h1>
|
||||
</div>
|
||||
<div class="oe_right oe_button_box" name="buttons">
|
||||
<field name="menu_ir_values_id" invisible="1"/>
|
||||
<button name="create_action" string="Add in the 'More' menu" type="object"
|
||||
attrs="{'invisible':[('menu_ir_values_id','!=',False)]}"
|
||||
help="Display an option on related documents to run this sever action"/>
|
||||
<button name="unlink_action" string="Remove from the 'More' menu" type="object"
|
||||
attrs="{'invisible':[('menu_ir_values_id','=',False)]}"
|
||||
help="Remove the contextual action related to this server action"/>
|
||||
</div>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="model_id"/>
|
||||
<field name="state"/>
|
||||
<group>
|
||||
<field name="type" invisible="1"/>
|
||||
<field name="model_id"
|
||||
on_change="on_change_model_id(model_id, wkf_model_id, crud_model_id)"/>
|
||||
<field name="state"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="condition"/>
|
||||
<field name="sequence"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="condition"/>
|
||||
<field name="sequence"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Python Code" attrs="{'invisible':[('state','!=','code')]}">
|
||||
<field name="code"/>
|
||||
</page>
|
||||
<page string="Trigger" attrs="{'invisible':[('state','!=','trigger')]}">
|
||||
<group string="Trigger Configuration" col="4">
|
||||
<field name="wkf_model_id" attrs="{'required':[('state','=','trigger')]}"/>
|
||||
<field name="trigger_obj_id" context="{'key':''}"
|
||||
domain="[('model_id','=',model_id),('ttype','in',['many2one','int'])]"
|
||||
attrs="{'required':[('state','=','trigger')]}"/>
|
||||
<field name="trigger_name" attrs="{'required':[('state','=','trigger')]}"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Action to Launch" attrs="{'invisible':[('state','!=','client_action')]}">
|
||||
<group>
|
||||
<field name="action_id" attrs="{'required':[('state','=','client_action')]}"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Email Configuration" attrs="{'invisible':[('state','!=','email')]}">
|
||||
<group>
|
||||
<field name="email" domain="[('model_id','=',model_id)]" attrs="{'required':[('state','=','email')]}"/>
|
||||
<field name="subject" attrs="{'required':[('state','=','email')]}"/>
|
||||
<field name="message" attrs="{'required':[('state','=','email')]}"/>
|
||||
<newline/>
|
||||
<label colspan="2" string="Access all the fields related to the current object using expressions, i.e. object.partner_id.name " align="0.0"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="SMS Configuration" attrs="{'invisible':[('state','!=','sms')]}">
|
||||
<group>
|
||||
<field name="mobile" domain="[('model_id','=',model_id)]" attrs="{'required':[('state','=','sms')]}"/>
|
||||
<field name="sms" attrs="{'required':[('state','=','sms')]}"/>
|
||||
</group>
|
||||
<label string="Access all the fields related to the current object using expressions, i.e. object.partner_id.name " align="0.0"/>
|
||||
</page>
|
||||
<page string="Create / Write / Copy" attrs="{'invisible':[('state','!=','object_create'), ('state','!=','object_write'), ('state','!=','object_copy')]}">
|
||||
<group col="4" string="Fields Mapping">
|
||||
<field name="srcmodel_id" attrs="{'required':[('state','!=','dummy'), ('state','!=','sms'), ('state','!=','code'), ('state','!=','loop'), ('state','!=','trigger'), ('state','!=','object_copy'), ('state','!=','client_action'), ('state','!=','email'), ('state','!=','sms'), ('state','!=','other')]}"/>
|
||||
<field name="copy_object" on_change="change_object(copy_object, state)" attrs="{'required':[('state','!=','dummy'), ('state','!=','sms'), ('state','!=','code'), ('state','!=','loop'), ('state','!=','trigger'), ('state','!=','object_write'), ('state','!=','object_create'), ('state','!=','client_action'), ('state','!=','email'), ('state','!=','sms'), ('state','!=','other')]}"/>
|
||||
<field name="fields_lines" nolabel="1" colspan="2">
|
||||
<tree string="Field Mappings" editable="top">
|
||||
<field name="col1" domain="[('model_id','=',parent.srcmodel_id or parent.model_id)]"/>
|
||||
<field name="type"/>
|
||||
<field name="value" colspan="4"/>
|
||||
</tree>
|
||||
<form string="Field Mapping" version="7.0">
|
||||
<group col="4">
|
||||
<field name="col1" domain="[('model_id','=',parent.srcmodel_id or parent.model_id)]"/>
|
||||
<field name="type"/>
|
||||
<field name="value" colspan="4"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Python Code" name='code' autofocus="autofocus"
|
||||
attrs="{'invisible': [('state', '!=', 'code')]}">
|
||||
<field name="code" placeholder="Enter Python code here. Help about Python expression is available in the help tab of this document."/>
|
||||
</page>
|
||||
|
||||
<page string="Worflow Signal" autofocus="autofocus"
|
||||
attrs="{'invisible': [('state', '!=', 'trigger')]}">
|
||||
<p attrs="{'invisible': [('model_id', '!=', False)]}">
|
||||
Please set the Base Model before setting the action details.
|
||||
</p>
|
||||
<group attrs="{'invisible': [('model_id', '=', False)]}">
|
||||
<field name="use_relational_model" widget="radio"
|
||||
on_change="on_change_wkf_wonfig(use_relational_model, wkf_field_id, wkf_model_id, model_id)"
|
||||
attrs="{'readonly': [('model_id', '=', False)]}"/>
|
||||
<field name="wkf_field_id" context="{'key': ''}"
|
||||
on_change="on_change_wkf_wonfig(use_relational_model, wkf_field_id, wkf_model_id, model_id)"
|
||||
attrs="{'required': [('state', '=', 'trigger'), ('use_relational_model', '=', 'relational')],
|
||||
'invisible': [('use_relational_model', '=', 'base')]}"
|
||||
domain="[('model_id', '=', model_id), ('ttype', 'in', ['many2one'])]"/>
|
||||
<field name="wkf_model_id" invisible="1"
|
||||
on_change="on_change_wkf_model_id(wkf_model_id)"/>
|
||||
<field name="wkf_model_name" invisible="1"/>
|
||||
<field name="wkf_transition_id" attrs="{'required': [('state', '=', 'trigger')]}"
|
||||
domain="[('wkf_id.osv', '=', wkf_model_name)]"/>
|
||||
</group>
|
||||
</page>
|
||||
|
||||
<page string="Client" autofocus="autofocus"
|
||||
attrs="{'invisible': [('state', '!=', 'client_action')]}">
|
||||
<group>
|
||||
<field name="action_id" attrs="{'required':[('state', '=', 'client_action')]}"/>
|
||||
</group>
|
||||
</page>
|
||||
|
||||
|
||||
<page string="Create / Write / Copy" autofocus="autofocus"
|
||||
attrs="{'invisible':[('state', 'not in', ['object_create', 'object_write'])]}">
|
||||
<p attrs="{'invisible': [('model_id', '!=', False)]}">
|
||||
Please set the Base Model before setting the action details.
|
||||
</p>
|
||||
<group attrs="{'invisible': [('model_id', '=', False)]}">
|
||||
<field name="use_create" widget="radio"
|
||||
on_change="on_change_crud_config(state, use_create, use_write, ref_object, crud_model_id, model_id)"
|
||||
attrs="{'invisible': [('state', '!=', 'object_create')]}"/>
|
||||
|
||||
<field name="use_write" widget="radio"
|
||||
on_change="on_change_crud_config(state, use_create, use_write, ref_object, crud_model_id, model_id)"
|
||||
attrs="{'invisible': [('state', '!=', 'object_write')]}"/>
|
||||
|
||||
<label for="ref_object" string=" "
|
||||
attrs="{'invisible': ['&',
|
||||
'|', ('state', '!=', 'object_write'), ('use_write', '!=', 'other'),
|
||||
'|', ('state', '!=', 'object_create'), ('use_create', '!=', 'copy_other')]}"/>
|
||||
<div style="margin-left: 24px;"
|
||||
attrs="{'invisible': ['&',
|
||||
'|', ('state', '!=', 'object_write'), ('use_write', '!=', 'other'),
|
||||
'|', ('state', '!=', 'object_create'), ('use_create', '!=', 'copy_other')]}">
|
||||
<field name="ref_object" nolabel="1"
|
||||
on_change="on_change_crud_config(state, use_create, use_write, ref_object, crud_model_id, model_id)"/>
|
||||
</div>
|
||||
|
||||
<field name="crud_model_id"
|
||||
on_change="on_change_crud_model_id(crud_model_id)"
|
||||
attrs="{'invisible': ['|', ('state', '!=', 'object_create'), ('use_create', '!=', 'new_other')]}"/>
|
||||
<field name="crud_model_name" invisible="1"/>
|
||||
|
||||
<label for="link_new_record" attrs="{'invisible': [('state', '!=', 'object_create')]}"/>
|
||||
<div attrs="{'invisible': [('state', '!=', 'object_create')]}">
|
||||
<field name="link_new_record" nolabel="1" style="display: inline-block;"/>
|
||||
<p class="oe_grey oe_edit_only" style="display: inline-block; margin: 0px 0px 0px 8px;">
|
||||
Check to attach the newly created record to the record on which the server action runs.
|
||||
</p>
|
||||
<group>
|
||||
<field name="link_field_id"
|
||||
domain="[('model_id', '=', model_id), ('relation', '=', crud_model_name), ('ttype', 'in', ['many2one'])]"
|
||||
attrs="{'required': [('state', '=', 'object_create'), ('link_new_record', '=', True)],
|
||||
'invisible': ['|', ('state', '!=', 'object_create'), ('link_new_record', '=', False)]}"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
<field name="record_id" attrs="{'readonly':[('state','!=','object_create')]}" domain="[('model_id','in',[model_id])]"/>
|
||||
<field name="write_id" attrs="{'readonly':[('state','!=','object_write')]}"/>
|
||||
</group>
|
||||
<label string="If you use a formula type, use a python expression using the variable 'object'." align="0.0"/>
|
||||
</page>
|
||||
<page string="Iteration Actions" attrs="{'invisible':[('state','!=','loop')]}">
|
||||
<group col="4">
|
||||
<field name="expression" attrs="{'required':[('state','=','loop')]}"/>
|
||||
<field name="loop_action" domain="[('state','!=','loop')]" attrs="{'required':[('state','=','loop')]}"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Multi Actions" attrs="{'invisible':[('state','!=','other')]}">
|
||||
<field name="child_ids"/>
|
||||
<label string="Only one client action will be executed, last client action will be considered in case of multiple client actions." align="0.0"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<field name="type" readonly="1"/>
|
||||
</div>
|
||||
|
||||
<label for="link_new_record" attrs="{'invisible': ['|', ('state', '!=', 'object_write'), ('use_write', '!=', 'expression')]}"/>
|
||||
<div attrs="{'invisible': ['|', ('state', '!=', 'object_write'), ('use_write', '!=', 'expression')]}">
|
||||
<p class="oe_grey oe_edit_only" style="margin: 0px;">
|
||||
Write a python expression, beginning with object, that gives the record to update. An expression builder is available in the help tab. Examples:
|
||||
</p>
|
||||
<ul class="oe_grey oe_edit_only">
|
||||
<li>object.partner_id</li>
|
||||
<li>object.partner_id.currency_id</li>
|
||||
</ul>
|
||||
<field name="write_expression"
|
||||
on_change="on_change_write_expression(write_expression, model_id)"
|
||||
attrs="{'required': [('state', '=', 'object_write'), ('use_write', '=', 'expression')]}"/>
|
||||
</div>
|
||||
|
||||
<field name="fields_lines">
|
||||
<tree string="Field Mappings" editable="top">
|
||||
<field name="col1" domain="[('model_id', '=', parent.crud_model_id)]"/>
|
||||
<field name="type"/>
|
||||
<field name="value"/>
|
||||
</tree>
|
||||
<form string="Field Mapping" version="7.0">
|
||||
<group >
|
||||
<field name="col1" domain="[('model_id', '=', parent.crud_model_id)]"/>
|
||||
<field name="type"/>
|
||||
<field name="value"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</group>
|
||||
</page>
|
||||
|
||||
<page string="Execute several actions" autofocus="autofocus"
|
||||
attrs="{'invisible': [('state', '!=', 'multi')]}">
|
||||
<p class="oe_grey">
|
||||
If several child actions return an action, only the last one will be executed.
|
||||
This may happen when having server actions executing code that returns an action, or server actions returning a client action.
|
||||
</p>
|
||||
<field name="child_ids"
|
||||
domain="[('model_id', '=', model_id)]"/>
|
||||
</page>
|
||||
|
||||
<page string="Help">
|
||||
<group>
|
||||
<div style="margin-top: 4px;">
|
||||
<h3>Help with Python expressions.</h3>
|
||||
<p>Various fields may use Python code or Python expressions. The following variables can be used:</p>
|
||||
<ul>
|
||||
<li>self: ORM model of the record on which the action is triggered</li>
|
||||
<li>object or obj: browse_record of the record on which the action is triggered</li>
|
||||
<li>pool: ORM model pool (i.e. self.pool)</li>
|
||||
<li>time: Python time module</li>
|
||||
<li>cr: database cursor</li>
|
||||
<li>uid: current user id</li>
|
||||
<li>context: current context</li>
|
||||
</ul>
|
||||
<div>
|
||||
<p>Example of condition expression using Python</p>
|
||||
<ul>
|
||||
<li>condition: True</li>
|
||||
<li>condition: object.list_price > 5000</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div attrs="{'invisible': [('state', '!=', 'code')]}">
|
||||
<p>Example of python code</p>
|
||||
<code>
|
||||
partner_name = obj.name + '_code'
|
||||
self.pool["res.partner"].create(cr, uid, {"name": partner_name}, context=context)
|
||||
</code>
|
||||
</div>
|
||||
</div>
|
||||
<group>
|
||||
<h3 colspan="2">Dynamic expression builder</h3>
|
||||
<p colspan="2" attrs="{'invisible': [('model_id', '!=', False)]}">
|
||||
Please set the Base Model of the action to enable the dynamic expression buidler.
|
||||
</p>
|
||||
<field name="model_object_field"
|
||||
attrs="{'invisible': [('model_id', '=', False)]}"
|
||||
domain="[('model_id', '=', model_id), ('ttype', '!=', 'one2many'), ('ttype', '!=', 'many2many')]"
|
||||
on_change="onchange_sub_model_object_value_field(model_object_field)"/>
|
||||
<field name="sub_object" readonly="1" attrs="{'invisible': [('model_id', '=', False)]}"/>
|
||||
<field name="sub_model_object_field"
|
||||
domain="[('model_id', '=', sub_object), ('ttype', '!=', 'one2many'), ('ttype', '!=', 'many2many')]"
|
||||
attrs="{'readonly':[('sub_object','=',False)],
|
||||
'required':[('sub_object','!=',False)],
|
||||
'invisible': [('model_id', '=', False)]}"
|
||||
on_change="onchange_sub_model_object_value_field(model_object_field,sub_model_object_field)"/>
|
||||
<field name="copyvalue" attrs="{'invisible': [('model_id', '=', False)]}"/>
|
||||
<h3 colspan="2">Find the ID of a record in the database</h3>
|
||||
<field name="id_object" on_change="onchange_id_object(id_object)"/>
|
||||
<field name="id_value" />
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -233,10 +233,10 @@ class ir_attachment(osv.osv):
|
|||
targets = cr.dictfetchall()
|
||||
model_attachments = {}
|
||||
for target_dict in targets:
|
||||
if not (target_dict['res_id'] and target_dict['res_model']):
|
||||
if not target_dict['res_model']:
|
||||
continue
|
||||
# model_attachments = { 'model': { 'res_id': [id1,id2] } }
|
||||
model_attachments.setdefault(target_dict['res_model'],{}).setdefault(target_dict['res_id'],set()).add(target_dict['id'])
|
||||
model_attachments.setdefault(target_dict['res_model'],{}).setdefault(target_dict['res_id'] or 0, set()).add(target_dict['id'])
|
||||
|
||||
# To avoid multiple queries for each attachment found, checks are
|
||||
# performed in batch as much as possible.
|
||||
|
@ -250,7 +250,7 @@ class ir_attachment(osv.osv):
|
|||
|
||||
# filter ids according to what access rules permit
|
||||
target_ids = targets.keys()
|
||||
allowed_ids = self.pool[model].search(cr, uid, [('id', 'in', target_ids)], context=context)
|
||||
allowed_ids = [0] + self.pool[model].search(cr, uid, [('id', 'in', target_ids)], context=context)
|
||||
disallowed_ids = set(target_ids).difference(allowed_ids)
|
||||
for res_id in disallowed_ids:
|
||||
for attach_id in targets[res_id]:
|
||||
|
|
|
@ -76,7 +76,7 @@
|
|||
<filter string="Owner" icon="terp-personal" domain="[]" context="{'group_by':'create_uid'}"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type'}" groups="base.group_no_one"/>
|
||||
<filter string="Company" icon="terp-gtk-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Month" help="Creation Month" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/>
|
||||
<filter string="Creation Month" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
|
|
@ -195,7 +195,8 @@ class ir_model(osv.osv):
|
|||
ctx = dict(context,
|
||||
field_name=vals['name'],
|
||||
field_state='manual',
|
||||
select=vals.get('select_level', '0'))
|
||||
select=vals.get('select_level', '0'),
|
||||
update_custom_fields=True)
|
||||
self.pool[vals['model']]._auto_init(cr, ctx)
|
||||
openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname)
|
||||
return res
|
||||
|
|
|
@ -247,6 +247,7 @@
|
|||
<field name="complete_name"/>
|
||||
<field name="display_name"/>
|
||||
<field name="model" groups="base.group_no_one"/>
|
||||
<field name="module" invisible="1"/>
|
||||
<field name="res_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
|
|
@ -84,7 +84,7 @@ class ir_sequence(openerp.osv.osv.osv):
|
|||
|
||||
_columns = {
|
||||
'name': openerp.osv.fields.char('Name', size=64, required=True),
|
||||
'code': openerp.osv.fields.selection(_code_get, 'Code', size=64),
|
||||
'code': openerp.osv.fields.selection(_code_get, 'Sequence Type', size=64),
|
||||
'implementation': openerp.osv.fields.selection( # TODO update the view
|
||||
[('standard', 'Standard'), ('no_gap', 'No gap')],
|
||||
'Implementation', required=True,
|
||||
|
|
|
@ -445,6 +445,13 @@ class ir_translation(osv.osv):
|
|||
tools.trans_load(cr, base_trans_file, lang, verbose=False, module_name=module_name, context=context)
|
||||
context['overwrite'] = True # make sure the requested translation will override the base terms later
|
||||
|
||||
# i18n_extra folder is for additional translations handle manually (eg: for l10n_be)
|
||||
base_trans_extra_file = openerp.modules.get_module_resource(module_name, 'i18n_extra', base_lang_code + '.po')
|
||||
if base_trans_extra_file:
|
||||
_logger.info('module %s: loading extra base translation file %s for language %s', module_name, base_lang_code, lang)
|
||||
tools.trans_load(cr, base_trans_extra_file, lang, verbose=False, module_name=module_name, context=context)
|
||||
context['overwrite'] = True # make sure the requested translation will override the base terms later
|
||||
|
||||
# Step 2: then load the main translation file, possibly overriding the terms coming from the base language
|
||||
trans_file = openerp.modules.get_module_resource(module_name, 'i18n', lang_code + '.po')
|
||||
if trans_file:
|
||||
|
@ -452,6 +459,11 @@ class ir_translation(osv.osv):
|
|||
tools.trans_load(cr, trans_file, lang, verbose=False, module_name=module_name, context=context)
|
||||
elif lang_code != 'en_US':
|
||||
_logger.warning('module %s: no translation for language %s', module_name, lang_code)
|
||||
|
||||
trans_extra_file = openerp.modules.get_module_resource(module_name, 'i18n_extra', lang_code + '.po')
|
||||
if trans_extra_file:
|
||||
_logger.info('module %s: loading extra translation file (%s) for language %s', module_name, lang_code, lang)
|
||||
tools.trans_load(cr, trans_extra_file, lang, verbose=False, module_name=module_name, context=context)
|
||||
return True
|
||||
|
||||
|
||||
|
|
|
@ -187,7 +187,7 @@ class view(osv.osv):
|
|||
if self.pool._init:
|
||||
# Module init currently in progress, only consider views from modules whose code was already loaded
|
||||
query = """SELECT v.id FROM ir_ui_view v LEFT JOIN ir_model_data md ON (md.model = 'ir.ui.view' AND md.res_id = v.id)
|
||||
WHERE v.inherit_id=%s AND v.model=%s AND md.module in %s
|
||||
WHERE v.inherit_id=%s AND v.model=%s AND (md.module IS NULL or md.module in %s)
|
||||
ORDER BY priority"""
|
||||
query_params = (view_id, model, tuple(self.pool._init_modules))
|
||||
else:
|
||||
|
|
|
@ -32,6 +32,7 @@ import urllib
|
|||
import urllib2
|
||||
import zipfile
|
||||
import zipimport
|
||||
import lxml.html
|
||||
|
||||
try:
|
||||
from cStringIO import StringIO
|
||||
|
@ -152,9 +153,19 @@ class module(osv.osv):
|
|||
def _get_desc(self, cr, uid, ids, field_name=None, arg=None, context=None):
|
||||
res = dict.fromkeys(ids, '')
|
||||
for module in self.browse(cr, uid, ids, context=context):
|
||||
overrides = dict(embed_stylesheet=False, doctitle_xform=False, output_encoding='unicode')
|
||||
output = publish_string(source=module.description, settings_overrides=overrides, writer=MyWriter())
|
||||
res[module.id] = output
|
||||
path = addons.get_module_resource(module.name, 'static/description/index.html')
|
||||
if path:
|
||||
with tools.file_open(path, 'rb') as desc_file:
|
||||
doc = desc_file.read()
|
||||
html = lxml.html.document_fromstring(doc)
|
||||
for element, attribute, link, pos in html.iterlinks():
|
||||
if element.get('src') and not '//' in element.get('src') and not 'static/' in element.get('src'):
|
||||
element.set('src', "/%s/static/description/%s" % (module.name, element.get('src')))
|
||||
res[module.id] = lxml.html.tostring(html)
|
||||
else:
|
||||
overrides = dict(embed_stylesheet=False, doctitle_xform=False, output_encoding='unicode')
|
||||
output = publish_string(source=module.description, settings_overrides=overrides, writer=MyWriter())
|
||||
res[module.id] = output
|
||||
return res
|
||||
|
||||
def _get_latest_version(self, cr, uid, ids, field_name=None, arg=None, context=None):
|
||||
|
@ -232,7 +243,7 @@ class module(osv.osv):
|
|||
def _get_icon_image(self, cr, uid, ids, field_name=None, arg=None, context=None):
|
||||
res = dict.fromkeys(ids, '')
|
||||
for module in self.browse(cr, uid, ids, context=context):
|
||||
path = addons.get_module_resource(module.name, 'static', 'src', 'img', 'icon.png')
|
||||
path = addons.get_module_resource(module.name, 'static', 'description', 'icon.png')
|
||||
if path:
|
||||
image_file = tools.file_open(path, 'rb')
|
||||
try:
|
||||
|
@ -472,7 +483,6 @@ class module(osv.osv):
|
|||
function(cr, uid, ids, context=context)
|
||||
|
||||
cr.commit()
|
||||
openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname)
|
||||
registry = openerp.modules.registry.RegistryManager.new(cr.dbname, update_module=True)
|
||||
|
||||
config = registry['res.config'].next(cr, uid, [], context=context) or {}
|
||||
|
|
|
@ -37,15 +37,15 @@
|
|||
<search string="Search modules">
|
||||
<field name="name" filter_domain="['|', '|', ('summary', 'ilike', self), ('shortdesc', 'ilike', self), ('name',
|
||||
'ilike', self)]" string="Module"/>
|
||||
<filter name="app" icon="terp-check" string="Apps" domain="[('application', '=', 1)]"/>
|
||||
<filter name="extra" icon="terp-check" string="Extra" domain="[('application', '=', 0)]"/>
|
||||
<filter name="app" string="Apps" domain="[('application', '=', 1)]"/>
|
||||
<filter name="extra" string="Extra" domain="[('application', '=', 0)]"/>
|
||||
<separator/>
|
||||
<filter name="installed" icon="terp-check" string="Installed" domain="[('state', 'in', ['installed', 'to upgrade', 'to remove'])]"/>
|
||||
<filter icon="terp-dialog-close" string="Not Installed" domain="[('state', 'in', ['uninstalled', 'uninstallable', 'to install'])]"/>
|
||||
<filter name="installed" string="Installed" domain="[('state', 'in', ['installed', 'to upgrade', 'to remove'])]"/>
|
||||
<filter string="Not Installed" domain="[('state', 'in', ['uninstalled', 'uninstallable', 'to install'])]"/>
|
||||
<field name="category_id"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Author" icon="terp-personal" domain="[]" context="{'group_by':'author'}"/>
|
||||
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'category_id'}"/>
|
||||
<filter string="Author" domain="[]" context="{'group_by':'author'}"/>
|
||||
<filter string="Category" domain="[]" context="{'group_by':'category_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -71,36 +71,41 @@
|
|||
<field name="model">ir.module.module</field>
|
||||
<field name="arch" type="xml">
|
||||
<form create="0" edit="0" string="Module" version="7.0">
|
||||
<sheet>
|
||||
<link rel="stylesheet" href="/base/static/src/css/description.css"></link>
|
||||
<sheet>
|
||||
<field name="icon_image" widget="image" class="oe_avatar oe_left"/>
|
||||
<div class="oe_title">
|
||||
<h1><field name="shortdesc"/></h1>
|
||||
<h2 class="oe_fade"><field name="summary"/></h2>
|
||||
<button name="button_immediate_install" states="uninstalled" string="Install" type="object" class="oe_highlight"/>
|
||||
<button name="button_immediate_upgrade" states="installed" string="Upgrade" type="object" class="oe_highlight"/>
|
||||
<button name="button_immediate_uninstall" states="installed" string="Uninstall" type="object"
|
||||
confirm="Do you confirm the uninstallation of this module? This will permanently erase all data currently stored by the module!"/>
|
||||
<button name="button_uninstall_cancel" states="to remove" string="Cancel Uninstall" type="object"/>
|
||||
<button name="button_upgrade_cancel" states="to upgrade" string="Cancel Upgrade" type="object"/>
|
||||
<button name="button_install_cancel" states="to install" string="Cancel Install" type="object"/>
|
||||
<h3 class="oe_fade">
|
||||
By <field name="author" class="oe_inline"/>
|
||||
</h3>
|
||||
<div>
|
||||
<button name="button_immediate_install" states="uninstalled" string="Install" type="object" class="oe_highlight"/>
|
||||
<button name="button_immediate_upgrade" states="installed" string="Upgrade" type="object" class="oe_highlight"/>
|
||||
<button name="button_immediate_uninstall" states="installed" string="Uninstall" type="object"
|
||||
confirm="Do you confirm the uninstallation of this module? This will permanently erase all data currently stored by the module!"/>
|
||||
<button name="button_uninstall_cancel" states="to remove" string="Cancel Uninstall" type="object"/>
|
||||
<button name="button_upgrade_cancel" states="to upgrade" string="Cancel Upgrade" type="object"/>
|
||||
<button name="button_install_cancel" states="to install" string="Cancel Install" type="object"/>
|
||||
</div>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="author"/>
|
||||
<field name="website" widget="url" attrs="{'invisible':[('website','=',False)]}"/>
|
||||
<field name="category_id" widget="selection"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="license"/>
|
||||
<field name="installed_version"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Description">
|
||||
<field name="description_html"/>
|
||||
<div class="oe_clear"/>
|
||||
<notebook groups="base.group_no_one">
|
||||
<page string="Information">
|
||||
<group>
|
||||
<group>
|
||||
<field name="website" widget="url" attrs="{'invisible':[('website','=',False)]}"/>
|
||||
<field name="category_id" widget="selection"/>
|
||||
<field name="summary"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="license"/>
|
||||
<field name="installed_version"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Technical Data" groups="base.group_no_one">
|
||||
<page string="Technical Data">
|
||||
<group col="4">
|
||||
<field name="demo"/>
|
||||
<field name="application"/>
|
||||
|
@ -116,13 +121,14 @@
|
|||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Features" attrs="{'invisible':[('state','!=','installed')]}">
|
||||
<page string="Installed Features" attrs="{'invisible':[('state','!=','installed')]}">
|
||||
<label for="menus_by_module" string="Created Menus"/>
|
||||
<field name="menus_by_module"/>
|
||||
<label for="reports_by_module" string="Defined Reports"/>
|
||||
<field name="reports_by_module"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<field name="description_html" class='oe_styling_v8'/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
</h1>
|
||||
</div>
|
||||
<div attrs="{'invisible' : [('logo','!=',False)]}" class="oe_view_nocontent oe_clear">
|
||||
<p class="oe_view_nocontent_create">
|
||||
<p class="oe_view_nocontent_create oe_edit_only">
|
||||
Click to set your company logo.
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
@ -49,10 +49,10 @@ class res_config_module_installation_mixin(object):
|
|||
to_install_missing_names.append(name)
|
||||
elif module.state == 'uninstalled':
|
||||
to_install_ids.append(module.id)
|
||||
|
||||
result = None
|
||||
if to_install_ids:
|
||||
ir_module.button_immediate_install(cr, uid, to_install_ids, context=context)
|
||||
|
||||
result = ir_module.button_immediate_install(cr, uid, to_install_ids, context=context)
|
||||
#FIXME: if result is not none, the corresponding todo will be skipped because it was just marked done
|
||||
if to_install_missing_names:
|
||||
return {
|
||||
'type': 'ir.actions.client',
|
||||
|
@ -60,7 +60,7 @@ class res_config_module_installation_mixin(object):
|
|||
'params': {'modules': to_install_missing_names},
|
||||
}
|
||||
|
||||
return None
|
||||
return result
|
||||
|
||||
class res_config_configurable(osv.osv_memory):
|
||||
''' Base classes for new-style configuration items
|
||||
|
|
|
@ -330,7 +330,7 @@
|
|||
<record id="ee" model="res.country">
|
||||
<field name="name">Estonia</field>
|
||||
<field name="code">ee</field>
|
||||
<field name="currency_id" ref="EEK"/>
|
||||
<field name="currency_id" ref="EUR"/>
|
||||
</record>
|
||||
<record id="eg" model="res.country">
|
||||
<field name="name">Egypt</field>
|
||||
|
|
|
@ -30,11 +30,13 @@ from openerp.tools.translate import _
|
|||
CURRENCY_DISPLAY_PATTERN = re.compile(r'(\w+)\s*(?:\((.*)\))?')
|
||||
|
||||
class res_currency(osv.osv):
|
||||
|
||||
def _current_rate(self, cr, uid, ids, name, arg, context=None):
|
||||
return self._get_current_rate(cr, uid, ids, name, arg, context=context)
|
||||
return self._get_current_rate(cr, uid, ids, context=context)
|
||||
|
||||
def _get_current_rate(self, cr, uid, ids, name, arg, context=None):
|
||||
def _current_rate_silent(self, cr, uid, ids, name, arg, context=None):
|
||||
return self._get_current_rate(cr, uid, ids, raise_on_no_rate=False, context=context)
|
||||
|
||||
def _get_current_rate(self, cr, uid, ids, raise_on_no_rate=True, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
res = {}
|
||||
|
@ -52,9 +54,12 @@ class res_currency(osv.osv):
|
|||
if cr.rowcount:
|
||||
id, rate = cr.fetchall()[0]
|
||||
res[id] = rate
|
||||
elif not raise_on_no_rate:
|
||||
res[id] = 0
|
||||
else:
|
||||
raise osv.except_osv(_('Error!'),_("No currency rate associated for currency %d for the given period" % (id)))
|
||||
return res
|
||||
|
||||
_name = "res.currency"
|
||||
_description = "Currency"
|
||||
_columns = {
|
||||
|
@ -63,6 +68,10 @@ class res_currency(osv.osv):
|
|||
'symbol': fields.char('Symbol', size=4, help="Currency sign, to be used when printing amounts."),
|
||||
'rate': fields.function(_current_rate, string='Current Rate', digits=(12,6),
|
||||
help='The rate of the currency to the currency of rate 1.'),
|
||||
|
||||
# Do not use for computation ! Same as rate field with silent failing
|
||||
'rate_silent': fields.function(_current_rate_silent, string='Current Rate', digits=(12,6),
|
||||
help='The rate of the currency to the currency of rate 1 (0 if no rate defined).'),
|
||||
'rate_ids': fields.one2many('res.currency.rate', 'currency_id', 'Rates'),
|
||||
'accuracy': fields.integer('Computational Accuracy'),
|
||||
'rounding': fields.float('Rounding Factor', digits=(12,6)),
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="rate_ids" invisible="1"/>
|
||||
<field name="date"/>
|
||||
<field name="rate"/>
|
||||
<field name="rate_silent"/>
|
||||
<field name="rounding"/>
|
||||
<field name="accuracy"/>
|
||||
<field name="position"/>
|
||||
|
@ -37,7 +37,7 @@
|
|||
<form string="Currency" version="7.0">
|
||||
<group col="4">
|
||||
<field name="name"/>
|
||||
<field name="rate"/>
|
||||
<field name="rate_silent"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
|
||||
|
|
|
@ -208,6 +208,8 @@ class res_partner(osv.osv, format_address):
|
|||
return result
|
||||
|
||||
def _display_name_compute(self, cr, uid, ids, name, args, context=None):
|
||||
context = dict(context or {})
|
||||
context.pop('show_address', None)
|
||||
return dict(self.name_get(cr, uid, ids, context=context))
|
||||
|
||||
# indirections to avoid passing a copy of the overridable method when declaring the function field
|
||||
|
@ -479,7 +481,11 @@ class res_partner(osv.osv, format_address):
|
|||
if partner.child_ids:
|
||||
# 2a. Commercial Fields: sync if commercial entity
|
||||
if partner.commercial_partner_id == partner:
|
||||
self._commercial_sync_to_children(cr, uid, partner, context=context)
|
||||
commercial_fields = self._commercial_fields(cr, uid,
|
||||
context=context)
|
||||
if any(field in update_values for field in commercial_fields):
|
||||
self._commercial_sync_to_children(cr, uid, partner,
|
||||
context=context)
|
||||
# 2b. Address fields: sync if address changed
|
||||
address_fields = self._address_fields(cr, uid, context=context)
|
||||
if any(field in update_values for field in address_fields):
|
||||
|
@ -502,6 +508,16 @@ class res_partner(osv.osv, format_address):
|
|||
def write(self, cr, uid, ids, vals, context=None):
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
#res.partner must only allow to set the company_id of a partner if it
|
||||
#is the same as the company of all users that inherit from this partner
|
||||
#(this is to allow the code from res_users to write to the partner!) or
|
||||
#if setting the company_id to False (this is compatible with any user company)
|
||||
if vals.get('company_id'):
|
||||
for partner in self.browse(cr, uid, ids, context=context):
|
||||
if partner.user_ids:
|
||||
user_companies = set([user.company_id.id for user in partner.user_ids])
|
||||
if len(user_companies) > 1 or vals['company_id'] not in user_companies:
|
||||
raise osv.except_osv(_("Warning"),_("You can not change the company as the partner/user has multiple user linked with different companies."))
|
||||
result = super(res_partner,self).write(cr, uid, ids, vals, context=context)
|
||||
for partner in self.browse(cr, uid, ids, context=context):
|
||||
self._fields_sync(cr, uid, partner, vals, context)
|
||||
|
@ -602,14 +618,15 @@ class res_partner(osv.osv, format_address):
|
|||
if operator in ('=ilike', '=like'):
|
||||
operator = operator[1:]
|
||||
query_args = {'name': search_name}
|
||||
limit_str = ''
|
||||
query = ('''SELECT id FROM res_partner
|
||||
WHERE email ''' + operator + ''' %(name)s
|
||||
OR display_name ''' + operator + ''' %(name)s
|
||||
ORDER BY display_name
|
||||
''')
|
||||
if limit:
|
||||
limit_str = ' limit %(limit)s'
|
||||
query += ' limit %(limit)s'
|
||||
query_args['limit'] = limit
|
||||
cr.execute('''SELECT partner.id FROM res_partner partner
|
||||
LEFT JOIN res_partner company ON partner.parent_id = company.id
|
||||
WHERE partner.email ''' + operator +''' %(name)s OR
|
||||
partner.display_name ''' + operator + ' %(name)s ' + limit_str, query_args)
|
||||
cr.execute(query, query_args)
|
||||
ids = map(lambda x: x[0], cr.fetchall())
|
||||
ids = self.search(cr, uid, [('id', 'in', ids)] + args, limit=limit, context=context)
|
||||
if ids:
|
||||
|
|
|
@ -283,6 +283,13 @@ class res_users(osv.osv):
|
|||
|
||||
return result
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
user_id = super(res_users, self).create(cr, uid, vals, context=context)
|
||||
user = self.browse(cr, uid, user_id, context=context)
|
||||
if user.partner_id.company_id:
|
||||
user.partner_id.write({'company_id': user.company_id.id})
|
||||
return user_id
|
||||
|
||||
def write(self, cr, uid, ids, values, context=None):
|
||||
if not hasattr(ids, '__iter__'):
|
||||
ids = [ids]
|
||||
|
@ -297,7 +304,11 @@ class res_users(osv.osv):
|
|||
uid = 1 # safe fields only, so we write as super-user to bypass access rights
|
||||
|
||||
res = super(res_users, self).write(cr, uid, ids, values, context=context)
|
||||
|
||||
if 'company_id' in values:
|
||||
for user in self.browse(cr, uid, ids, context=context):
|
||||
# if partner is global we keep it that way
|
||||
if user.partner_id.company_id and user.partner_id.company_id.id != values['company_id']:
|
||||
user.partner_id.write({'company_id': user.company_id.id})
|
||||
# clear caches linked to the users
|
||||
self.pool['ir.model.access'].call_cache_clearing_methods(cr)
|
||||
clear = partial(self.pool['ir.rule'].clear_cache, cr)
|
||||
|
|
|
@ -110,9 +110,7 @@
|
|||
"access_res_bank_user","res_bank user","model_res_bank","group_user",1,0,0,0
|
||||
"access_multi_company_default user","multi_company_default all","model_multi_company_default",,1,0,0,0
|
||||
"access_multi_company_default manager","multi_company_default Manager","model_multi_company_default","group_erp_manager",1,1,1,1
|
||||
"access_ir_filter all","ir_filters all","model_ir_filters",,1,0,0,0
|
||||
"access_ir_filter employee","ir_filters employee","model_ir_filters","group_user",1,1,1,1
|
||||
"access_ir_filters","ir_filters_all","model_ir_filters",,1,1,1,1
|
||||
"access_ir_filter all","ir_filters all","model_ir_filters",,1,1,1,1
|
||||
"access_ir_config_parameter","ir_config_parameter","model_ir_config_parameter",,1,0,0,0
|
||||
"access_ir_mail_server","ir_mail_server","model_ir_mail_server","group_system",1,1,1,1
|
||||
"access_ir_actions_client","ir_actions_client all","model_ir_actions_client",,1,0,0,0
|
||||
|
|
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
|
@ -0,0 +1,2 @@
|
|||
sass:
|
||||
sass -t expanded --compass --watch --unix-newlines *.sass
|
|
@ -0,0 +1,732 @@
|
|||
@charset "utf-8";
|
||||
/*
|
||||
* This CSS is for the html description of modules
|
||||
* TODO clean
|
||||
*/
|
||||
/* --------------------------------- *
|
||||
* STYLING CONTEXT *
|
||||
* --------------------------------- */
|
||||
/* --- Styling for the V8/Lato/White/Purple design --- */
|
||||
.openerp .oe_form_sheet_width {
|
||||
max-width: 960px;
|
||||
}
|
||||
|
||||
.openerp .oe_form .oe_styling_v8 {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-family: "Open Sans", "Helvetica", Sans;
|
||||
font-weight: 300;
|
||||
color: #646464;
|
||||
background: white;
|
||||
font-size: 16px;
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 .oe_websiteonly {
|
||||
display: none;
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 .oe_website_contents {
|
||||
background: whitesmoke;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 b {
|
||||
font-weight: 600;
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 a {
|
||||
color: #6d57e0;
|
||||
text-decoration: none;
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 a:visited {
|
||||
color: #5b284f;
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 a:hover {
|
||||
color: #0096eb;
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 .oe_title_font {
|
||||
font-family: "Lato", "Open Sans", "Helvetica", Sans;
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 .oe_page {
|
||||
background: white;
|
||||
overflow: hidden;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
-ms-border-radius: 1px;
|
||||
-o-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
|
||||
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 .oe_emph {
|
||||
font-weight: 400;
|
||||
}
|
||||
.openerp .oe_form .oe_styling_v8 .oe_dark {
|
||||
overflow: hidden;
|
||||
background: #fcfcfc;
|
||||
-webkit-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset;
|
||||
-moz-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset;
|
||||
box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset;
|
||||
}
|
||||
|
||||
/* --------------------------------- *
|
||||
* LAYOUT *
|
||||
* --------------------------------- */
|
||||
/* ------ BASE GRID CONSTRUCTS ----- */
|
||||
.oe_page {
|
||||
margin: 0px auto 64px auto;
|
||||
max-width: 992px;
|
||||
}
|
||||
|
||||
.oe_row {
|
||||
width: 928px;
|
||||
margin-top: 16px;
|
||||
margin-bottom: 16px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.oe_row.oe_fit {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.oe_clearfix:after, .oe_row:after {
|
||||
content: ".";
|
||||
display: block;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
line-height: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
[class*='oe_span'] {
|
||||
float: left;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
.oe_span12 {
|
||||
width: 928px;
|
||||
}
|
||||
|
||||
.oe_span10 {
|
||||
width: 773px;
|
||||
}
|
||||
|
||||
.oe_span9 {
|
||||
width: 696px;
|
||||
}
|
||||
|
||||
.oe_span8 {
|
||||
width: 618px;
|
||||
}
|
||||
|
||||
.oe_span6 {
|
||||
width: 464px;
|
||||
}
|
||||
|
||||
.oe_span4 {
|
||||
width: 309px;
|
||||
}
|
||||
|
||||
.oe_span3 {
|
||||
width: 232px;
|
||||
}
|
||||
|
||||
.oe_span2 {
|
||||
width: 154px;
|
||||
}
|
||||
|
||||
[class*='oe_span'].oe_fit {
|
||||
padding-left: 0px !important;
|
||||
padding-right: 0px !important;
|
||||
}
|
||||
|
||||
[class*='oe_span'].oe_right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.oe_row.oe_flex [class*='oe_span'] {
|
||||
display: inline-block;
|
||||
float: none;
|
||||
vertical-align: top;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
padding: 0 16px;
|
||||
width: auto;
|
||||
}
|
||||
.oe_row.oe_flex .oe_span12 {
|
||||
max-width: 928px;
|
||||
}
|
||||
.oe_row.oe_flex .oe_span10 {
|
||||
max-width: 769px;
|
||||
}
|
||||
.oe_row.oe_flex .oe_span9 {
|
||||
max-width: 692px;
|
||||
}
|
||||
.oe_row.oe_flex .oe_span8 {
|
||||
max-width: 614px;
|
||||
}
|
||||
.oe_row.oe_flex .oe_span6 {
|
||||
max-width: 460px;
|
||||
}
|
||||
.oe_row.oe_flex .oe_span4 {
|
||||
max-width: 305px;
|
||||
}
|
||||
.oe_row.oe_flex .oe_span3 {
|
||||
max-width: 228px;
|
||||
}
|
||||
.oe_row.oe_flex .oe_span2 {
|
||||
max-width: 150px;
|
||||
}
|
||||
|
||||
.oe_mb0 {
|
||||
margin-bottom: 0px !important;
|
||||
}
|
||||
|
||||
.oe_mb4 {
|
||||
margin-bottom: 4px !important;
|
||||
}
|
||||
|
||||
.oe_mb8 {
|
||||
margin-bottom: 8px !important;
|
||||
}
|
||||
|
||||
.oe_mb16 {
|
||||
margin-bottom: 16px !important;
|
||||
}
|
||||
|
||||
.oe_mb32 {
|
||||
margin-bottom: 32px !important;
|
||||
}
|
||||
|
||||
.oe_mb48 {
|
||||
margin-bottom: 48px !important;
|
||||
}
|
||||
|
||||
.oe_mb64 {
|
||||
margin-bottom: 64px !important;
|
||||
}
|
||||
|
||||
.oe_mt0 {
|
||||
margin-top: 0px !important;
|
||||
}
|
||||
|
||||
.oe_mt4 {
|
||||
margin-top: 4px !important;
|
||||
}
|
||||
|
||||
.oe_mt8 {
|
||||
margin-top: 8px !important;
|
||||
}
|
||||
|
||||
.oe_mt16 {
|
||||
margin-top: 16px !important;
|
||||
}
|
||||
|
||||
.oe_mt32 {
|
||||
margin-top: 32px !important;
|
||||
}
|
||||
|
||||
.oe_mt48 {
|
||||
margin-top: 48px !important;
|
||||
}
|
||||
|
||||
.oe_mt64 {
|
||||
margin-top: 64px !important;
|
||||
}
|
||||
|
||||
/* ------ GENERIC LAYOUT MODIFIERS ----- */
|
||||
.oe_rightfit {
|
||||
padding-right: 0px !important;
|
||||
}
|
||||
|
||||
.oe_leftfit {
|
||||
padding-left: 0px !important;
|
||||
}
|
||||
|
||||
.oe_leftalign {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.oe_rightalign {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.oe_centeralign {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.oe_centered {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.oe_hidden {
|
||||
display: none !important;
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
.oe_invisible {
|
||||
visibility: hidden !important;
|
||||
}
|
||||
|
||||
.oe_transparent {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
.oe_mb0 {
|
||||
margin-bottom: 0px !important;
|
||||
}
|
||||
|
||||
.oe_mb4 {
|
||||
margin-bottom: 4px !important;
|
||||
}
|
||||
|
||||
.oe_mb8 {
|
||||
margin-bottom: 8px !important;
|
||||
}
|
||||
|
||||
.oe_mb16 {
|
||||
margin-bottom: 16px !important;
|
||||
}
|
||||
|
||||
.oe_mb32 {
|
||||
margin-bottom: 32px !important;
|
||||
}
|
||||
|
||||
.oe_mb64 {
|
||||
margin-bottom: 64px !important;
|
||||
}
|
||||
|
||||
.oe_spaced {
|
||||
margin-top: 32px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.oe_more_spaced {
|
||||
margin-top: 64px;
|
||||
margin-bottom: 64px;
|
||||
}
|
||||
|
||||
.oe_padded {
|
||||
padding-top: 16px;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
|
||||
.oe_more_padded {
|
||||
padding-top: 32px;
|
||||
padding-bottom: 32px;
|
||||
}
|
||||
|
||||
/* --------------------------------- *
|
||||
* WEBPAGE COMPONENTS *
|
||||
* --------------------------------- */
|
||||
/* ------ BUTTONS ----- */
|
||||
.oe_button {
|
||||
position: relative;
|
||||
bottom: 0;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.oe_styling_v8 .oe_button, .oe_styling_v8 a.oe_button {
|
||||
padding: 8px 14px;
|
||||
background: #8b72b6;
|
||||
color: white;
|
||||
-webkit-border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-ms-border-radius: 2px;
|
||||
-o-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
-webkit-box-shadow: 0px 2px 0px #afa8cc;
|
||||
-moz-box-shadow: 0px 2px 0px #afa8cc;
|
||||
box-shadow: 0px 2px 0px #afa8cc;
|
||||
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.44);
|
||||
border: solid 1px rgba(0, 0, 0, 0.09);
|
||||
-webkit-transition-property: bottom, background;
|
||||
-moz-transition-property: bottom, background;
|
||||
-o-transition-property: bottom, background;
|
||||
transition-property: bottom, background;
|
||||
-webkit-transition-duration: 250ms;
|
||||
-moz-transition-duration: 250ms;
|
||||
-o-transition-duration: 250ms;
|
||||
transition-duration: 250ms;
|
||||
}
|
||||
.oe_styling_v8 .oe_button:hover, .oe_styling_v8 a.oe_button:hover {
|
||||
background: #8b5bdd;
|
||||
color: white;
|
||||
}
|
||||
.oe_styling_v8 .oe_button:active, .oe_styling_v8 a.oe_button:active {
|
||||
background: #333333;
|
||||
bottom: -3px;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_big, .oe_styling_v8 a.oe_button.oe_big {
|
||||
font-size: 24px;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_bigger, .oe_styling_v8 a.oe_button.oe_bigger {
|
||||
font-size: 32px;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_small, .oe_styling_v8 a.oe_button.oe_small {
|
||||
font-size: 13px;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_small:active, .oe_styling_v8 a.oe_button.oe_small:active {
|
||||
bottom: -1px;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_medium, .oe_styling_v8 a.oe_button.oe_medium {
|
||||
padding: 5px 12px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_tacky, .oe_styling_v8 a.oe_button.oe_tacky {
|
||||
background: #ff4444;
|
||||
-webkit-box-shadow: 0px 2px 0px #eba8a8;
|
||||
-moz-box-shadow: 0px 2px 0px #eba8a8;
|
||||
box-shadow: 0px 2px 0px #eba8a8;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_tacky:hover, .oe_styling_v8 a.oe_button.oe_tacky:hover {
|
||||
background: #ff1010;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_tacky:active, .oe_styling_v8 a.oe_button.oe_tacky:active {
|
||||
background: black;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_disabled, .oe_styling_v8 a.oe_button.oe_disabled {
|
||||
background: #c8c8c8;
|
||||
-webkit-box-shadow: 0px 2px 0px #b4b4b4;
|
||||
-moz-box-shadow: 0px 2px 0px #b4b4b4;
|
||||
box-shadow: 0px 2px 0px #b4b4b4;
|
||||
cursor: default;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_disabled:hover, .oe_styling_v8 a.oe_button.oe_disabled:hover {
|
||||
background: #c8c8c8;
|
||||
-webkit-box-shadow: 0px 2px 0px #b4b4b4;
|
||||
-moz-box-shadow: 0px 2px 0px #b4b4b4;
|
||||
box-shadow: 0px 2px 0px #b4b4b4;
|
||||
}
|
||||
.oe_styling_v8 .oe_button.oe_disabled:active, .oe_styling_v8 a.oe_button.oe_disabled:active {
|
||||
background: #c8c8c8;
|
||||
bottom: 0px;
|
||||
-webkit-box-shadow: 0px 2px 0px #b4b4b4;
|
||||
-moz-box-shadow: 0px 2px 0px #b4b4b4;
|
||||
box-shadow: 0px 2px 0px #b4b4b4;
|
||||
}
|
||||
|
||||
.oe_styling_v8.oe_styling_black .oe_button {
|
||||
-webkit-box-shadow: 0px 2px 0px #463555;
|
||||
-moz-box-shadow: 0px 2px 0px #463555;
|
||||
box-shadow: 0px 2px 0px #463555;
|
||||
}
|
||||
|
||||
/* ------ FORMS ----- */
|
||||
.oe_styling_v8 {
|
||||
/* FIXME: this is a quick hack for the release */
|
||||
}
|
||||
.oe_styling_v8 .oe_input {
|
||||
padding: 4px 7px;
|
||||
border-radius: 3px;
|
||||
border: solid 1px #d6d6d6;
|
||||
box-shadow: 0px 2px #e6e6e6;
|
||||
background: #fafafa;
|
||||
font-weight: 300;
|
||||
outline: none;
|
||||
-webkit-transition: all 150ms linear;
|
||||
-moz-transition: all 150ms linear;
|
||||
-o-transition: all 150ms linear;
|
||||
transition: all 150ms linear;
|
||||
}
|
||||
.oe_styling_v8 .oe_input:focus {
|
||||
border: solid 1px #969696;
|
||||
box-shadow: 0px 2px #d2d2d2;
|
||||
}
|
||||
.oe_styling_v8 .oe_input.oe_valid {
|
||||
background: #f2ffec;
|
||||
border-color: #b1ebb6;
|
||||
box-shadow: 0px 2px #e1f8e1;
|
||||
color: #0f610f;
|
||||
}
|
||||
.oe_styling_v8 .oe_input.oe_invalid {
|
||||
background: #fff2f2;
|
||||
border-color: #ebb1b1;
|
||||
box-shadow: 0px 2px #f8e1e1;
|
||||
color: #610f0f;
|
||||
}
|
||||
.oe_styling_v8 .oe_input.oe_big {
|
||||
padding: 8px 14px;
|
||||
}
|
||||
.oe_styling_v8 .oe_input_label {
|
||||
font-weight: 300;
|
||||
font-size: 16px;
|
||||
}
|
||||
.oe_styling_v8 .oe_input_label.oe_big {
|
||||
font-size: 20px;
|
||||
}
|
||||
.oe_styling_v8 .oe_textarea {
|
||||
width: 300px;
|
||||
height: 80px;
|
||||
}
|
||||
.oe_styling_v8 .oe_form_layout_table {
|
||||
width: 100%;
|
||||
}
|
||||
.oe_styling_v8 .oe_form_layout_table td {
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
.oe_styling_v8 .oe_form_layout_table td:first-child {
|
||||
text-align: right;
|
||||
padding-right: 16px;
|
||||
}
|
||||
|
||||
/* ------ SLOGANS ----- */
|
||||
.oe_styling_v8 .oe_slogan {
|
||||
color: #333333;
|
||||
font-family: "Lato", "Open Sans", "Helvetica", Sans;
|
||||
text-align: center;
|
||||
margin-top: 32px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
.oe_styling_v8 h1.oe_slogan {
|
||||
font-size: 64px;
|
||||
font-weight: 900;
|
||||
margin-top: 48px;
|
||||
margin-bottom: 48px;
|
||||
}
|
||||
.oe_styling_v8 h2.oe_slogan {
|
||||
font-size: 40px;
|
||||
font-weight: 300;
|
||||
}
|
||||
.oe_styling_v8 h3.oe_slogan {
|
||||
font-size: 26px;
|
||||
font-weight: 300;
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
|
||||
opacity: 0.5;
|
||||
}
|
||||
.oe_styling_v8 h4.oe_slogan {
|
||||
font-size: 24px;
|
||||
font-weight: 300;
|
||||
}
|
||||
.oe_styling_v8 h4.oe_slogan:before, .oe_styling_v8 h4.oe_slogan:after {
|
||||
margin: 0 20px;
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
height: 0px;
|
||||
border-top: solid 1px;
|
||||
vertical-align: middle;
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30);
|
||||
opacity: 0.3;
|
||||
}
|
||||
.oe_styling_v8 h5.oe_slogan {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
/* ------ QUOTES ----- */
|
||||
.oe_quote {
|
||||
margin: 8px;
|
||||
padding: 16px;
|
||||
background: rgba(0, 0, 0, 0.02);
|
||||
border: solid 1px rgba(0, 0, 0, 0.06);
|
||||
-webkit-border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-ms-border-radius: 2px;
|
||||
-o-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.oe_quote .oe_q, .oe_quote q {
|
||||
margin: 10px;
|
||||
display: block;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
color: #4e66e7;
|
||||
}
|
||||
.oe_quote .oe_q:before, .oe_quote .oe_q:after, .oe_quote q:before, .oe_quote q:after {
|
||||
content: '"';
|
||||
font-weight: 900;
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=20);
|
||||
opacity: 0.2;
|
||||
}
|
||||
.oe_quote cite {
|
||||
display: block;
|
||||
font-style: normal;
|
||||
margin-top: 16px;
|
||||
}
|
||||
.oe_quote .oe_photo {
|
||||
float: left;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
-ms-border-radius: 3px;
|
||||
-o-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
margin-right: 16px;
|
||||
}
|
||||
.oe_quote .oe_author {
|
||||
font-size: 20px;
|
||||
padding-top: 6px;
|
||||
color: #8d7bac;
|
||||
}
|
||||
|
||||
.oe_dark .oe_quote {
|
||||
background: white;
|
||||
border: 1px solid #f0f0ff;
|
||||
}
|
||||
|
||||
/* ------ PICTURES ----- */
|
||||
.oe_picture {
|
||||
display: block;
|
||||
max-width: 84%;
|
||||
max-height: 400px;
|
||||
margin: 16px 8%;
|
||||
}
|
||||
|
||||
.oe_screenshot {
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
-ms-border-radius: 3px;
|
||||
-o-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
-webkit-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.oe_pic_ctr {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.oe_pic_ctr > img.oe_picture {
|
||||
width: 100%;
|
||||
max-width: none;
|
||||
max-height: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.oe_pic_ctr > .oe_title {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 38px;
|
||||
}
|
||||
|
||||
.oe_styling_v8 .oe_pic_ctr > .oe_title {
|
||||
font-size: 64px;
|
||||
color: white;
|
||||
font-weight: 600;
|
||||
margin: 0;
|
||||
text-shadow: 0px 2px 0px #494949, 0px 2px 5px rgba(0, 0, 0, 0.33), 0px 0px 60px rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
|
||||
/* ----- Link Image with Footer ----- */
|
||||
/* FIXME: Terrible CSS, rewrite this */
|
||||
div.oe_demo {
|
||||
position: relative;
|
||||
border: 1px solid #dedede;
|
||||
}
|
||||
div.oe_demo span.oe_demo_play {
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 80px;
|
||||
height: 60px;
|
||||
margin-top: -30px;
|
||||
margin-left: -40px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
background: url("../img/layout/play-button.png") no-repeat left top transparent;
|
||||
pointer-events: none;
|
||||
}
|
||||
div.oe_demo img {
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
div.oe_demo div.oe_demo_footer {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
opacity: 0.85;
|
||||
bottom: -1px;
|
||||
width: 100%;
|
||||
padding-top: 7px;
|
||||
padding-bottom: 7px;
|
||||
color: white;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
border-bottom-left-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
div.oe_demo:hover span.oe_demo_play {
|
||||
background: url("../img/layout/play-button-over.png") no-repeat left top transparent;
|
||||
}
|
||||
|
||||
/* ----- SEPARATOR ----- */
|
||||
.oe_styling_v8 .oe_container.oe_separator {
|
||||
height: 64px;
|
||||
margin-bottom: 16px;
|
||||
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0.02)));
|
||||
background: -webkit-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.02));
|
||||
background: -moz-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.02));
|
||||
background: -o-linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.02));
|
||||
background: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.02));
|
||||
-webkit-box-shadow: 0px -3px 10px -5px rgba(0, 0, 0, 0.1) inset;
|
||||
-moz-box-shadow: 0px -3px 10px -5px rgba(0, 0, 0, 0.1) inset;
|
||||
box-shadow: 0px -3px 10px -5px rgba(0, 0, 0, 0.1) inset;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
/* ----- TABS ----- */
|
||||
.oe_row_tabs {
|
||||
text-align: center;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
padding-top: 21px;
|
||||
}
|
||||
|
||||
.oe_row_tab {
|
||||
position: relative;
|
||||
min-width: 120px;
|
||||
padding: 8px;
|
||||
font-size: 20px;
|
||||
display: inline-block;
|
||||
margin: 0px -2px;
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border: solid 1px rgba(0, 0, 0, 0.1);
|
||||
border-bottom: none;
|
||||
background: #fafafa;
|
||||
background-image: +linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.02));
|
||||
box-shadow: 0px -3px 10px -5px rgba(0, 0, 0, 0.1) inset;
|
||||
cursor: pointer;
|
||||
-webkit-transition: all 250ms linear;
|
||||
-moz-transition: all 250ms linear;
|
||||
-o-transition: all 250ms linear;
|
||||
transition: all 250ms linear;
|
||||
}
|
||||
|
||||
.oe_row_tab:hover {
|
||||
padding-bottom: 12px;
|
||||
top: -4px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.oe_row_tab.oe_active {
|
||||
background-color: white;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
border-top-color: #8272b6;
|
||||
border-top-width: 2px;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.oe_row_tab.oe_active:hover {
|
||||
padding-bottom: 8px;
|
||||
top: 0asx;
|
||||
}
|
||||
|
||||
/* ------ CALL TO ACTION ----- */
|
||||
.oe_calltoaction {
|
||||
height: 32px;
|
||||
margin-top: -32px;
|
||||
position: relative;
|
||||
}
|
|
@ -0,0 +1,572 @@
|
|||
@charset "utf-8"
|
||||
@import "compass/css3"
|
||||
@import "compass/css3/user-interface"
|
||||
|
||||
/**
|
||||
* This CSS is for the html description of modules
|
||||
* TODO clean
|
||||
*/
|
||||
|
||||
/* --------------------------------- *
|
||||
* STYLING CONTEXT *
|
||||
* --------------------------------- */
|
||||
|
||||
/* --- Styling for the V8/Lato/White/Purple design --- */
|
||||
|
||||
$v8_title_font_color: rgb(51,51,51)
|
||||
$v8_text_font_color: rgb(100,100,100)
|
||||
$v8_font_paragraph_color: rgb(51,51,51)
|
||||
$v8_body_color: rgb(245,245,245)
|
||||
$v8_bg_color: rgb(255,255,255)
|
||||
$v8_text_font_family: 'Open Sans','Helvetica',Sans
|
||||
$v8_title_font_family: 'Lato','Open Sans','Helvetica',Sans
|
||||
$v8_anchor_color: #6D57E0
|
||||
$v8_anchor_visited_color: rgb(91, 40, 79)
|
||||
|
||||
|
||||
.openerp .oe_form_sheet_width
|
||||
max-width: 960px
|
||||
|
||||
.openerp .oe_form .oe_styling_v8
|
||||
width: 100%
|
||||
padding: 0
|
||||
margin: 0
|
||||
font-family: $v8_text_font_family
|
||||
font-weight: 300
|
||||
color: $v8_text_font_color
|
||||
background: $v8_bg_color
|
||||
font-size: 16px
|
||||
|
||||
.oe_websiteonly
|
||||
display: none
|
||||
|
||||
.oe_website_contents
|
||||
background: $v8_body_color
|
||||
padding-bottom: 1px
|
||||
|
||||
b
|
||||
font-weight: 600
|
||||
a
|
||||
color: $v8_anchor_color
|
||||
text-decoration: none
|
||||
a:visited
|
||||
color: $v8_anchor_visited_color
|
||||
a:hover
|
||||
color: #0096EB
|
||||
|
||||
.oe_title_font
|
||||
font-family: $v8_title_font_family
|
||||
|
||||
|
||||
.oe_page
|
||||
background: $v8_bg_color
|
||||
overflow: hidden
|
||||
+border-radius(1px)
|
||||
+box-shadow(0 1px 3px rgba(0,0,0,0.35))
|
||||
|
||||
.oe_emph
|
||||
font-weight: 400
|
||||
|
||||
.oe_dark
|
||||
overflow: hidden
|
||||
background: #FCFCFC
|
||||
+box-shadow(0px 5px 9px -7px rgba(0,0,255,0.5) inset, 0px -3px 9px -7px rgba(0,0,255,0.5) inset)
|
||||
|
||||
/* --------------------------------- *
|
||||
* LAYOUT *
|
||||
* --------------------------------- */
|
||||
|
||||
/* ------ BASE GRID CONSTRUCTS ----- */
|
||||
|
||||
.oe_page
|
||||
margin: 0px auto 64px auto
|
||||
max-width: 992px
|
||||
|
||||
|
||||
.oe_row
|
||||
width: 928px
|
||||
margin-top: 16px
|
||||
margin-bottom: 16px
|
||||
margin-left: auto
|
||||
margin-right: auto
|
||||
|
||||
.oe_row.oe_fit
|
||||
width: auto
|
||||
|
||||
.oe_clearfix:after, .oe_row:after
|
||||
content: "."
|
||||
display: block
|
||||
clear: both
|
||||
visibility: hidden
|
||||
line-height: 0
|
||||
height: 0
|
||||
|
||||
$oe_span12_width: 928px
|
||||
$oe_span10_width: 773px
|
||||
$oe_span9_width: 696px
|
||||
$oe_span8_width: 618px
|
||||
$oe_span6_width: 464px
|
||||
$oe_span4_width: 309px
|
||||
$oe_span3_width: 232px
|
||||
$oe_span2_width: 154px
|
||||
|
||||
[class*='oe_span']
|
||||
float: left
|
||||
+box-sizing(border-box)
|
||||
padding: 0 16px
|
||||
.oe_span12
|
||||
width: $oe_span12_width
|
||||
.oe_span10
|
||||
width: $oe_span10_width
|
||||
.oe_span9
|
||||
width: $oe_span9_width
|
||||
.oe_span8
|
||||
width: $oe_span8_width
|
||||
.oe_span6
|
||||
width: $oe_span6_width
|
||||
.oe_span4
|
||||
width: $oe_span4_width
|
||||
.oe_span3
|
||||
width: $oe_span3_width
|
||||
.oe_span2
|
||||
width: $oe_span2_width
|
||||
|
||||
[class*='oe_span'].oe_fit
|
||||
padding-left: 0px !important
|
||||
padding-right: 0px !important
|
||||
|
||||
[class*='oe_span'].oe_right
|
||||
float: right
|
||||
|
||||
.oe_row.oe_flex
|
||||
[class*='oe_span']
|
||||
display: inline-block
|
||||
float: none
|
||||
vertical-align: top
|
||||
+box-sizing(border-box)
|
||||
padding: 0 16px
|
||||
width: auto
|
||||
.oe_span12
|
||||
max-width: $oe_span12_width
|
||||
.oe_span10
|
||||
max-width: ($oe_span10_width +-4px)
|
||||
.oe_span9
|
||||
max-width: ($oe_span9_width +-4px)
|
||||
.oe_span8
|
||||
max-width: ($oe_span8_width +-4px)
|
||||
.oe_span6
|
||||
max-width: ($oe_span6_width +-4px)
|
||||
.oe_span4
|
||||
max-width: ($oe_span4_width +-4px)
|
||||
.oe_span3
|
||||
max-width: ($oe_span3_width +-4px)
|
||||
.oe_span2
|
||||
max-width: ($oe_span2_width +-4px)
|
||||
|
||||
.oe_mb0
|
||||
margin-bottom: 0px !important
|
||||
.oe_mb4
|
||||
margin-bottom: 4px !important
|
||||
.oe_mb8
|
||||
margin-bottom: 8px !important
|
||||
.oe_mb16
|
||||
margin-bottom: 16px !important
|
||||
.oe_mb32
|
||||
margin-bottom: 32px !important
|
||||
.oe_mb48
|
||||
margin-bottom: 48px !important
|
||||
.oe_mb64
|
||||
margin-bottom: 64px !important
|
||||
|
||||
.oe_mt0
|
||||
margin-top: 0px !important
|
||||
.oe_mt4
|
||||
margin-top: 4px !important
|
||||
.oe_mt8
|
||||
margin-top: 8px !important
|
||||
.oe_mt16
|
||||
margin-top: 16px !important
|
||||
.oe_mt32
|
||||
margin-top: 32px !important
|
||||
.oe_mt48
|
||||
margin-top: 48px !important
|
||||
.oe_mt64
|
||||
margin-top: 64px !important
|
||||
|
||||
/* ------ GENERIC LAYOUT MODIFIERS ----- */
|
||||
|
||||
.oe_rightfit
|
||||
padding-right: 0px !important
|
||||
.oe_leftfit
|
||||
padding-left: 0px !important
|
||||
.oe_leftalign
|
||||
text-align: left
|
||||
.oe_rightalign
|
||||
text-align: right
|
||||
.oe_centeralign
|
||||
text-align: center
|
||||
.oe_centered
|
||||
margin-left: auto
|
||||
margin-right: auto
|
||||
.oe_hidden
|
||||
display: none !important
|
||||
opacity: 0 !important
|
||||
.oe_invisible
|
||||
visibility: hidden !important
|
||||
.oe_transparent
|
||||
opacity: 0 !important
|
||||
|
||||
.oe_mb0
|
||||
margin-bottom: 0px !important
|
||||
.oe_mb4
|
||||
margin-bottom: 4px !important
|
||||
.oe_mb8
|
||||
margin-bottom: 8px !important
|
||||
.oe_mb16
|
||||
margin-bottom: 16px !important
|
||||
.oe_mb32
|
||||
margin-bottom: 32px !important
|
||||
.oe_mb64
|
||||
margin-bottom: 64px !important
|
||||
|
||||
.oe_spaced
|
||||
margin-top: 32px
|
||||
margin-bottom: 32px
|
||||
.oe_more_spaced
|
||||
margin-top: 64px
|
||||
margin-bottom: 64px
|
||||
.oe_padded
|
||||
padding-top: 16px
|
||||
padding-bottom: 16px
|
||||
.oe_more_padded
|
||||
padding-top: 32px
|
||||
padding-bottom: 32px
|
||||
|
||||
/* --------------------------------- *
|
||||
* WEBPAGE COMPONENTS *
|
||||
* --------------------------------- */
|
||||
|
||||
/* ------ BUTTONS ----- */
|
||||
|
||||
.oe_button
|
||||
position: relative
|
||||
bottom: 0
|
||||
display: inline-block
|
||||
cursor: pointer
|
||||
+user-select(none)
|
||||
|
||||
.oe_styling_v8 .oe_button, .oe_styling_v8 a.oe_button
|
||||
padding: 8px 14px
|
||||
background: rgb(139, 114, 182)
|
||||
color: white
|
||||
+border-radius(2px)
|
||||
+box-shadow(0px 2px 0px rgb(175, 168, 204))
|
||||
+text-shadow(0px 1px 1px rgba(0,0,0, 0.44))
|
||||
border: solid 1px rgba(0,0,0,0.09)
|
||||
+transition-property((bottom, background))
|
||||
+transition-duration(250ms)
|
||||
&:hover
|
||||
background: rgb(139,91,221)
|
||||
color: white
|
||||
&:active
|
||||
background: rgb(51,51,51)
|
||||
bottom: -3px
|
||||
&.oe_big
|
||||
font-size: 24px
|
||||
&.oe_bigger
|
||||
font-size: 32px
|
||||
&.oe_small
|
||||
font-size: 13px
|
||||
padding: 2px 4px
|
||||
&:active
|
||||
bottom: -1px
|
||||
&.oe_medium
|
||||
padding: 5px 12px
|
||||
font-size: 16px
|
||||
&.oe_tacky
|
||||
background: rgb(255,68,68)
|
||||
+box-shadow(0px 2px 0px #eba8a8)
|
||||
&:hover
|
||||
background: rgb(255,16,16)
|
||||
&:active
|
||||
background: black
|
||||
&.oe_disabled
|
||||
background: rgb(200,200,200)
|
||||
+box-shadow(0px 2px 0px rgb(180,180,180))
|
||||
cursor: default
|
||||
&:hover
|
||||
background: rgb(200,200,200)
|
||||
+box-shadow(0px 2px 0px rgb(180,180,180))
|
||||
&:active
|
||||
background: rgb(200,200,200)
|
||||
bottom: 0px
|
||||
+box-shadow(0px 2px 0px rgb(180,180,180))
|
||||
|
||||
.oe_styling_v8.oe_styling_black .oe_button
|
||||
+box-shadow(0px 2px 0px rgb(70,53,85))
|
||||
|
||||
/* ------ FORMS ----- */
|
||||
|
||||
.oe_styling_v8
|
||||
.oe_input
|
||||
padding: 4px 7px
|
||||
border-radius: 3px
|
||||
border: solid 1px rgb(214,214,214)
|
||||
box-shadow: 0px 2px rgb(230,230,230)
|
||||
background: rgb(250,250,250)
|
||||
font-weight: 300
|
||||
outline: none
|
||||
@include transition( all 150ms linear )
|
||||
&:focus
|
||||
border: solid 1px rgb(150,150,150)
|
||||
box-shadow: 0px 2px rgb(210,210,210)
|
||||
|
||||
&.oe_valid
|
||||
background: #F2FFEC
|
||||
border-color: rgb(177,235,182)
|
||||
box-shadow: 0px 2px rgb(225,248,225)
|
||||
color: rgb(15,97,15)
|
||||
|
||||
&.oe_invalid
|
||||
background: rgb(255,242,242)
|
||||
border-color: #EBB1B1
|
||||
box-shadow: 0px 2px #F8E1E1
|
||||
color: #610F0F
|
||||
&.oe_big
|
||||
padding: 8px 14px
|
||||
.oe_input_label
|
||||
font-weight: 300
|
||||
font-size: 16px
|
||||
&.oe_big
|
||||
font-size: 20px
|
||||
|
||||
/* FIXME: this is a quick hack for the release */
|
||||
|
||||
.oe_textarea
|
||||
width: 300px
|
||||
height: 80px
|
||||
.oe_form_layout_table
|
||||
width: 100%
|
||||
td
|
||||
padding-bottom: 16px
|
||||
&:first-child
|
||||
text-align: right
|
||||
padding-right: 16px
|
||||
|
||||
/* ------ SLOGANS ----- */
|
||||
|
||||
.oe_styling_v8
|
||||
.oe_slogan
|
||||
color: $v8_title_font_color
|
||||
font-family: $v8_title_font_family
|
||||
text-align: center
|
||||
margin-top: 32px
|
||||
margin-bottom: 32px
|
||||
|
||||
h1.oe_slogan
|
||||
font-size: 64px
|
||||
font-weight: 900
|
||||
margin-top: 48px
|
||||
margin-bottom: 48px
|
||||
|
||||
h2.oe_slogan
|
||||
font-size: 40px
|
||||
font-weight: 300
|
||||
|
||||
h3.oe_slogan
|
||||
font-size: 26px
|
||||
font-weight: 300
|
||||
+opacity(0.5)
|
||||
|
||||
h4.oe_slogan
|
||||
font-size: 24px
|
||||
font-weight: 300
|
||||
h4.oe_slogan:before, h4.oe_slogan:after
|
||||
margin: 0 20px
|
||||
content: ""
|
||||
display: inline-block
|
||||
width: 100px
|
||||
height: 0px
|
||||
border-top: solid 1px
|
||||
vertical-align: middle
|
||||
+opacity(0.3)
|
||||
|
||||
h5.oe_slogan
|
||||
font-weight: 300
|
||||
//TODO
|
||||
|
||||
/* ------ QUOTES ----- */
|
||||
|
||||
.oe_quote
|
||||
margin: 8px
|
||||
padding: 16px
|
||||
background: rgba(0,0,0,0.02)
|
||||
border: solid 1px rgba(0,0,0,0.06)
|
||||
+border-radius(2px)
|
||||
|
||||
.oe_q,q
|
||||
margin: 10px
|
||||
display: block
|
||||
font-style: italic
|
||||
text-align: center
|
||||
font-size: 20px
|
||||
color: rgb(78, 102, 231)
|
||||
&:before, &:after
|
||||
content: '\"'
|
||||
font-weight: 900
|
||||
+opacity(0.2)
|
||||
|
||||
cite
|
||||
display: block
|
||||
font-style: normal
|
||||
margin-top: 16px
|
||||
|
||||
.oe_photo
|
||||
float: left
|
||||
+border-radius(3px)
|
||||
margin-right: 16px
|
||||
|
||||
.oe_author
|
||||
font-size: 20px
|
||||
padding-top: 6px
|
||||
color: rgb(141, 123, 172)
|
||||
|
||||
.oe_dark .oe_quote
|
||||
background: white
|
||||
border: 1px solid rgb(240,240,255)
|
||||
|
||||
/* ------ PICTURES ----- */
|
||||
|
||||
// display a picture in a span
|
||||
.oe_picture
|
||||
display: block
|
||||
max-width: 84%
|
||||
max-height: 400px
|
||||
margin: 16px 8%
|
||||
|
||||
// style the picture like a screenshot
|
||||
.oe_screenshot
|
||||
+border-radius(3px)
|
||||
+box-shadow(0px 3px 8px rgba(0,0,0,0.2))
|
||||
|
||||
// display a picture taking full width of a row
|
||||
.oe_pic_ctr
|
||||
position: relative
|
||||
|
||||
.oe_pic_ctr > img.oe_picture
|
||||
width: 100%
|
||||
max-width: none
|
||||
max-height: none
|
||||
margin: 0
|
||||
|
||||
// styling of the picture's title
|
||||
.oe_pic_ctr > .oe_title
|
||||
position: absolute
|
||||
top: 15px
|
||||
right: 38px
|
||||
|
||||
.oe_styling_v8 .oe_pic_ctr > .oe_title
|
||||
font-size: 64px
|
||||
color: white
|
||||
font-weight: 600
|
||||
margin: 0
|
||||
+text-shadow( 0px 2px 0px rgb(73, 73, 73), 0px 2px 5px rgba(0, 0, 0, 0.33), 0px 0px 60px rgba(0, 0, 0, 0.22))
|
||||
|
||||
/* ----- Link Image with Footer ----- */
|
||||
/* FIXME: Terrible CSS, rewrite this */
|
||||
|
||||
div.oe_demo
|
||||
position: relative
|
||||
border: 1px solid #dedede
|
||||
span.oe_demo_play
|
||||
top: 50%
|
||||
left: 50%
|
||||
width: 80px
|
||||
height: 60px
|
||||
margin-top: -30px
|
||||
margin-left: -40px
|
||||
display: block
|
||||
position: absolute
|
||||
background: url("../img/layout/play-button.png") no-repeat left top transparent
|
||||
pointer-events: none
|
||||
img
|
||||
max-width: 100%
|
||||
width: 100%
|
||||
div.oe_demo_footer
|
||||
position: absolute
|
||||
left: 0
|
||||
background-color: rgba(0,0,0,0.4)
|
||||
opacity: 0.85
|
||||
bottom: -1px
|
||||
width: 100%
|
||||
padding-top: 7px
|
||||
padding-bottom: 7px
|
||||
color: white
|
||||
font-size: 14px
|
||||
font-weight: bold
|
||||
border-bottom-left-radius: 3px
|
||||
border-bottom-right-radius: 3px
|
||||
pointer-events: none
|
||||
|
||||
div.oe_demo:hover
|
||||
span.oe_demo_play
|
||||
background: url("../img/layout/play-button-over.png") no-repeat left top transparent
|
||||
|
||||
/* ----- SEPARATOR ----- */
|
||||
|
||||
.oe_styling_v8 .oe_container.oe_separator
|
||||
height: 64px
|
||||
margin-bottom: 16px
|
||||
@include background(linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.02)))
|
||||
+box-shadow(0px -3px 10px -5px rgba(0,0,0,0.1) inset)
|
||||
overflow-y: hidden
|
||||
|
||||
/* ----- TABS ----- */
|
||||
|
||||
.oe_row_tabs
|
||||
text-align: center
|
||||
margin-top: 0px
|
||||
margin-bottom: 0px
|
||||
padding-top: 21px
|
||||
|
||||
.oe_row_tab
|
||||
position: relative
|
||||
min-width: 120px
|
||||
padding: 8px
|
||||
font-size: 20px
|
||||
display: inline-block
|
||||
margin: 0px -2px
|
||||
border-top-left-radius: 4px
|
||||
border-top-right-radius: 4px
|
||||
border: solid 1px rgba(0,0,0,0.1)
|
||||
border-bottom: none
|
||||
background: rgb(250,250,250)
|
||||
background-image: +linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0.02))
|
||||
box-shadow: 0px -3px 10px -5px rgba(0,0,0,0.1) inset
|
||||
cursor: pointer
|
||||
@include transition(all 250ms linear)
|
||||
|
||||
.oe_row_tab:hover
|
||||
padding-bottom: 12px
|
||||
top: -4px
|
||||
background-color: white
|
||||
|
||||
.oe_row_tab.oe_active
|
||||
background-color: white
|
||||
background-image: none
|
||||
box-shadow: none
|
||||
border-top-color: rgb(130, 114, 182)
|
||||
border-top-width: 2px
|
||||
cursor: default
|
||||
|
||||
.oe_row_tab.oe_active:hover
|
||||
padding-bottom: 8px
|
||||
top: 0asx
|
||||
|
||||
/* ------ CALL TO ACTION ----- */
|
||||
|
||||
.oe_calltoaction
|
||||
height: 32px
|
||||
margin-top: -32px
|
||||
position: relative
|
||||
|
|
@ -92,7 +92,8 @@ openerp.base = function(instance) {
|
|||
|
||||
start: function() {
|
||||
var self = this;
|
||||
return self.get_client().
|
||||
// desactivated for now because apps does not work anyway due to changes in the framework
|
||||
/*return self.get_client().
|
||||
done(function(client) {
|
||||
client.replace(self.$el).
|
||||
done(function() {
|
||||
|
@ -100,13 +101,13 @@ openerp.base = function(instance) {
|
|||
client.do_action(self.remote_action_id, {hide_breadcrumb: true});
|
||||
});
|
||||
}).
|
||||
fail(function(client) {
|
||||
self.do_warn(_t('OpenERP Apps Unreachable'), _t('Showing locally available modules'), true);
|
||||
fail(function(client) {*/
|
||||
//self.do_warn(_t('OpenERP Apps Unreachable'), _t('Showing locally available modules'), true);
|
||||
self.rpc('/web/action/load', {action_id: self.failback_action_id}).done(function(action) {
|
||||
self.do_action(action);
|
||||
instance.webclient.menu.open_action(action.id);
|
||||
});
|
||||
});
|
||||
//});
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import test_base
|
||||
import test_expression
|
||||
import test_ir_actions
|
||||
import test_ir_attachment
|
||||
import test_ir_values
|
||||
import test_menu
|
||||
|
@ -10,6 +11,7 @@ import test_search
|
|||
checks = [
|
||||
test_base,
|
||||
test_expression,
|
||||
test_ir_actions,
|
||||
test_ir_attachment,
|
||||
test_ir_values,
|
||||
test_menu,
|
||||
|
|
|
@ -0,0 +1,398 @@
|
|||
import unittest2
|
||||
|
||||
from openerp.osv.orm import except_orm
|
||||
import openerp.tests.common as common
|
||||
from openerp.tools import mute_logger
|
||||
|
||||
|
||||
class TestServerActionsBase(common.TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestServerActionsBase, self).setUp()
|
||||
cr, uid = self.cr, self.uid
|
||||
|
||||
# Models
|
||||
self.ir_actions_server = self.registry('ir.actions.server')
|
||||
self.ir_actions_client = self.registry('ir.actions.client')
|
||||
self.ir_values = self.registry('ir.values')
|
||||
self.ir_model = self.registry('ir.model')
|
||||
self.ir_model_fields = self.registry('ir.model.fields')
|
||||
self.res_partner = self.registry('res.partner')
|
||||
self.res_country = self.registry('res.country')
|
||||
|
||||
# Data on which we will run the server action
|
||||
self.test_country_id = self.res_country.create(cr, uid, {
|
||||
'name': 'TestingCountry',
|
||||
'code': 'TY',
|
||||
'address_format': 'SuperFormat',
|
||||
})
|
||||
self.test_country = self.res_country.browse(cr, uid, self.test_country_id)
|
||||
self.test_partner_id = self.res_partner.create(cr, uid, {
|
||||
'name': 'TestingPartner',
|
||||
'city': 'OrigCity',
|
||||
'country_id': self.test_country_id,
|
||||
})
|
||||
self.test_partner = self.res_partner.browse(cr, uid, self.test_partner_id)
|
||||
self.context = {
|
||||
'active_id': self.test_partner_id,
|
||||
'active_model': 'res.partner',
|
||||
}
|
||||
|
||||
# Model data
|
||||
self.res_partner_model_id = self.ir_model.search(cr, uid, [('model', '=', 'res.partner')])[0]
|
||||
self.res_partner_name_field_id = self.ir_model_fields.search(cr, uid, [('model', '=', 'res.partner'), ('name', '=', 'name')])[0]
|
||||
self.res_partner_city_field_id = self.ir_model_fields.search(cr, uid, [('model', '=', 'res.partner'), ('name', '=', 'city')])[0]
|
||||
self.res_partner_country_field_id = self.ir_model_fields.search(cr, uid, [('model', '=', 'res.partner'), ('name', '=', 'country_id')])[0]
|
||||
self.res_partner_parent_field_id = self.ir_model_fields.search(cr, uid, [('model', '=', 'res.partner'), ('name', '=', 'parent_id')])[0]
|
||||
self.res_country_model_id = self.ir_model.search(cr, uid, [('model', '=', 'res.country')])[0]
|
||||
self.res_country_name_field_id = self.ir_model_fields.search(cr, uid, [('model', '=', 'res.country'), ('name', '=', 'name')])[0]
|
||||
self.res_country_code_field_id = self.ir_model_fields.search(cr, uid, [('model', '=', 'res.country'), ('name', '=', 'code')])[0]
|
||||
|
||||
# create server action to
|
||||
self.act_id = self.ir_actions_server.create(cr, uid, {
|
||||
'name': 'TestAction',
|
||||
'condition': 'True',
|
||||
'model_id': self.res_partner_model_id,
|
||||
'state': 'code',
|
||||
'code': 'obj.write({"comment": "MyComment"})',
|
||||
})
|
||||
|
||||
|
||||
class TestServerActions(TestServerActionsBase):
|
||||
|
||||
def test_00_action(self):
|
||||
cr, uid = self.cr, self.uid
|
||||
|
||||
# Do: eval 'True' condition
|
||||
self.ir_actions_server.run(cr, uid, [self.act_id], self.context)
|
||||
self.test_partner.refresh()
|
||||
self.assertEqual(self.test_partner.comment, 'MyComment', 'ir_actions_server: invalid condition check')
|
||||
self.test_partner.write({'comment': False})
|
||||
|
||||
# Do: eval False condition, that should be considered as True (void = True)
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {'condition': False})
|
||||
self.ir_actions_server.run(cr, uid, [self.act_id], self.context)
|
||||
self.test_partner.refresh()
|
||||
self.assertEqual(self.test_partner.comment, 'MyComment', 'ir_actions_server: invalid condition check')
|
||||
|
||||
# Do: create contextual action
|
||||
self.ir_actions_server.create_action(cr, uid, [self.act_id])
|
||||
|
||||
# Test: ir_values created
|
||||
ir_values_ids = self.ir_values.search(cr, uid, [('name', '=', 'Run TestAction')])
|
||||
self.assertEqual(len(ir_values_ids), 1, 'ir_actions_server: create_action should have created an entry in ir_values')
|
||||
ir_value = self.ir_values.browse(cr, uid, ir_values_ids[0])
|
||||
self.assertEqual(ir_value.value, 'ir.actions.server,%s' % self.act_id, 'ir_actions_server: created ir_values should reference the server action')
|
||||
self.assertEqual(ir_value.model, 'res.partner', 'ir_actions_server: created ir_values should be linked to the action base model')
|
||||
|
||||
# Do: remove contextual action
|
||||
self.ir_actions_server.unlink_action(cr, uid, [self.act_id])
|
||||
|
||||
# Test: ir_values removed
|
||||
ir_values_ids = self.ir_values.search(cr, uid, [('name', '=', 'Run TestAction')])
|
||||
self.assertEqual(len(ir_values_ids), 0, 'ir_actions_server: unlink_action should remove the ir_values record')
|
||||
|
||||
def test_10_code(self):
|
||||
cr, uid = self.cr, self.uid
|
||||
self.ir_actions_server.write(cr, uid, self.act_id, {
|
||||
'state': 'code',
|
||||
'code': """partner_name = obj.name + '_code'
|
||||
self.pool["res.partner"].create(cr, uid, {"name": partner_name}, context=context)"""
|
||||
})
|
||||
run_res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
self.assertFalse(run_res, 'ir_actions_server: code server action correctly finished should return False')
|
||||
|
||||
pids = self.res_partner.search(cr, uid, [('name', 'ilike', 'TestingPartner_code')])
|
||||
self.assertEqual(len(pids), 1, 'ir_actions_server: 1 new partner should have been created')
|
||||
|
||||
def test_20_trigger(self):
|
||||
cr, uid = self.cr, self.uid
|
||||
|
||||
# Data: code server action (at this point code-based actions should work)
|
||||
act_id2 = self.ir_actions_server.create(cr, uid, {
|
||||
'name': 'TestAction2',
|
||||
'type': 'ir.actions.server',
|
||||
'condition': 'True',
|
||||
'model_id': self.res_partner_model_id,
|
||||
'state': 'code',
|
||||
'code': 'obj.write({"comment": "MyComment"})',
|
||||
})
|
||||
act_id3 = self.ir_actions_server.create(cr, uid, {
|
||||
'name': 'TestAction3',
|
||||
'type': 'ir.actions.server',
|
||||
'condition': 'True',
|
||||
'model_id': self.res_country_model_id,
|
||||
'state': 'code',
|
||||
'code': 'obj.write({"code": "ZZ"})',
|
||||
})
|
||||
|
||||
# Data: create workflows
|
||||
partner_wf_id = self.registry('workflow').create(cr, uid, {
|
||||
'name': 'TestWorkflow',
|
||||
'osv': 'res.partner',
|
||||
'on_create': True,
|
||||
})
|
||||
partner_act1_id = self.registry('workflow.activity').create(cr, uid, {
|
||||
'name': 'PartnerStart',
|
||||
'wkf_id': partner_wf_id,
|
||||
'flow_start': True
|
||||
})
|
||||
partner_act2_id = self.registry('workflow.activity').create(cr, uid, {
|
||||
'name': 'PartnerTwo',
|
||||
'wkf_id': partner_wf_id,
|
||||
'kind': 'function',
|
||||
'action': 'True',
|
||||
'action_id': act_id2,
|
||||
})
|
||||
partner_trs1_id = self.registry('workflow.transition').create(cr, uid, {
|
||||
'signal': 'partner_trans',
|
||||
'act_from': partner_act1_id,
|
||||
'act_to': partner_act2_id
|
||||
})
|
||||
country_wf_id = self.registry('workflow').create(cr, uid, {
|
||||
'name': 'TestWorkflow',
|
||||
'osv': 'res.country',
|
||||
'on_create': True,
|
||||
})
|
||||
country_act1_id = self.registry('workflow.activity').create(cr, uid, {
|
||||
'name': 'CountryStart',
|
||||
'wkf_id': country_wf_id,
|
||||
'flow_start': True
|
||||
})
|
||||
country_act2_id = self.registry('workflow.activity').create(cr, uid, {
|
||||
'name': 'CountryTwo',
|
||||
'wkf_id': country_wf_id,
|
||||
'kind': 'function',
|
||||
'action': 'True',
|
||||
'action_id': act_id3,
|
||||
})
|
||||
country_trs1_id = self.registry('workflow.transition').create(cr, uid, {
|
||||
'signal': 'country_trans',
|
||||
'act_from': country_act1_id,
|
||||
'act_to': country_act2_id
|
||||
})
|
||||
|
||||
# Data: re-create country and partner to benefit from the workflows
|
||||
self.test_country_id = self.res_country.create(cr, uid, {
|
||||
'name': 'TestingCountry2',
|
||||
'code': 'T2',
|
||||
})
|
||||
self.test_country = self.res_country.browse(cr, uid, self.test_country_id)
|
||||
self.test_partner_id = self.res_partner.create(cr, uid, {
|
||||
'name': 'TestingPartner2',
|
||||
'country_id': self.test_country_id,
|
||||
})
|
||||
self.test_partner = self.res_partner.browse(cr, uid, self.test_partner_id)
|
||||
self.context = {
|
||||
'active_id': self.test_partner_id,
|
||||
'active_model': 'res.partner',
|
||||
}
|
||||
|
||||
# Run the action on partner object itself ('base')
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'state': 'trigger',
|
||||
'use_relational_model': 'base',
|
||||
'wkf_model_id': self.res_partner_model_id,
|
||||
'wkf_model_name': 'res.partner',
|
||||
'wkf_transition_id': partner_trs1_id,
|
||||
})
|
||||
self.ir_actions_server.run(cr, uid, [self.act_id], self.context)
|
||||
self.test_partner.refresh()
|
||||
self.assertEqual(self.test_partner.comment, 'MyComment', 'ir_actions_server: incorrect signal trigger')
|
||||
|
||||
# Run the action on related country object ('relational')
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'use_relational_model': 'relational',
|
||||
'wkf_model_id': self.res_country_model_id,
|
||||
'wkf_model_name': 'res.country',
|
||||
'wkf_field_id': self.res_partner_country_field_id,
|
||||
'wkf_transition_id': country_trs1_id,
|
||||
})
|
||||
self.ir_actions_server.run(cr, uid, [self.act_id], self.context)
|
||||
self.test_country.refresh()
|
||||
self.assertEqual(self.test_country.code, 'ZZ', 'ir_actions_server: incorrect signal trigger')
|
||||
|
||||
# Clear workflow cache, otherwise openerp will try to create workflows even if it has been deleted
|
||||
from openerp.workflow import clear_cache
|
||||
clear_cache(cr, uid)
|
||||
|
||||
def test_30_client(self):
|
||||
cr, uid = self.cr, self.uid
|
||||
client_action_id = self.registry('ir.actions.client').create(cr, uid, {
|
||||
'name': 'TestAction2',
|
||||
'tag': 'Test',
|
||||
})
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'state': 'client_action',
|
||||
'action_id': client_action_id,
|
||||
})
|
||||
res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
self.assertEqual(res['name'], 'TestAction2', 'ir_actions_server: incorrect return result for a client action')
|
||||
|
||||
def test_40_crud_create(self):
|
||||
cr, uid = self.cr, self.uid
|
||||
_city = 'TestCity'
|
||||
_name = 'TestNew'
|
||||
|
||||
# Do: create a new record in the same model and link it
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'state': 'object_create',
|
||||
'use_create': 'new',
|
||||
'link_new_record': True,
|
||||
'link_field_id': self.res_partner_parent_field_id,
|
||||
'fields_lines': [(0, 0, {'col1': self.res_partner_name_field_id, 'value': _name}),
|
||||
(0, 0, {'col1': self.res_partner_city_field_id, 'value': _city})],
|
||||
})
|
||||
run_res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new partner created
|
||||
pids = self.res_partner.search(cr, uid, [('name', 'ilike', _name)])
|
||||
self.assertEqual(len(pids), 1, 'ir_actions_server: TODO')
|
||||
partner = self.res_partner.browse(cr, uid, pids[0])
|
||||
self.assertEqual(partner.city, _city, 'ir_actions_server: TODO')
|
||||
# Test: new partner linked
|
||||
self.test_partner.refresh()
|
||||
self.assertEqual(self.test_partner.parent_id.id, pids[0], 'ir_actions_server: TODO')
|
||||
|
||||
# Do: copy current record
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {'fields_lines': [[5]]})
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'state': 'object_create',
|
||||
'use_create': 'copy_current',
|
||||
'link_new_record': False,
|
||||
'fields_lines': [(0, 0, {'col1': self.res_partner_name_field_id, 'value': 'TestCopyCurrent'}),
|
||||
(0, 0, {'col1': self.res_partner_city_field_id, 'value': 'TestCity'})],
|
||||
})
|
||||
run_res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new partner created
|
||||
pids = self.res_partner.search(cr, uid, [('name', 'ilike', 'TestingPartner (copy)')]) # currently res_partner overrides default['name'] whatever its value
|
||||
self.assertEqual(len(pids), 1, 'ir_actions_server: TODO')
|
||||
partner = self.res_partner.browse(cr, uid, pids[0])
|
||||
self.assertEqual(partner.city, 'TestCity', 'ir_actions_server: TODO')
|
||||
self.assertEqual(partner.country_id.id, self.test_partner.country_id.id, 'ir_actions_server: TODO')
|
||||
|
||||
# Do: create a new record in another model
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {'fields_lines': [[5]]})
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'state': 'object_create',
|
||||
'use_create': 'new_other',
|
||||
'crud_model_id': self.res_country_model_id,
|
||||
'link_new_record': False,
|
||||
'fields_lines': [(0, 0, {'col1': self.res_country_name_field_id, 'value': 'obj.name', 'type': 'equation'}),
|
||||
(0, 0, {'col1': self.res_country_code_field_id, 'value': 'obj.name[0:2]', 'type': 'equation'})],
|
||||
})
|
||||
run_res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new country created
|
||||
cids = self.res_country.search(cr, uid, [('name', 'ilike', 'TestingPartner')])
|
||||
self.assertEqual(len(cids), 1, 'ir_actions_server: TODO')
|
||||
country = self.res_country.browse(cr, uid, cids[0])
|
||||
self.assertEqual(country.code, 'TE', 'ir_actions_server: TODO')
|
||||
|
||||
# Do: copy a record in another model
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {'fields_lines': [[5]]})
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'state': 'object_create',
|
||||
'use_create': 'copy_other',
|
||||
'crud_model_id': self.res_country_model_id,
|
||||
'link_new_record': False,
|
||||
'ref_object': 'res.country,%s' % self.test_country_id,
|
||||
'fields_lines': [(0, 0, {'col1': self.res_country_name_field_id, 'value': 'NewCountry', 'type': 'value'}),
|
||||
(0, 0, {'col1': self.res_country_code_field_id, 'value': 'NY', 'type': 'value'})],
|
||||
})
|
||||
run_res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new country created
|
||||
cids = self.res_country.search(cr, uid, [('name', 'ilike', 'NewCountry')])
|
||||
self.assertEqual(len(cids), 1, 'ir_actions_server: TODO')
|
||||
country = self.res_country.browse(cr, uid, cids[0])
|
||||
self.assertEqual(country.code, 'NY', 'ir_actions_server: TODO')
|
||||
self.assertEqual(country.address_format, 'SuperFormat', 'ir_actions_server: TODO')
|
||||
|
||||
def test_50_crud_write(self):
|
||||
cr, uid = self.cr, self.uid
|
||||
_name = 'TestNew'
|
||||
|
||||
# Do: create a new record in the same model and link it
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'state': 'object_write',
|
||||
'use_write': 'current',
|
||||
'fields_lines': [(0, 0, {'col1': self.res_partner_name_field_id, 'value': _name})],
|
||||
})
|
||||
run_res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new partner created
|
||||
pids = self.res_partner.search(cr, uid, [('name', 'ilike', _name)])
|
||||
self.assertEqual(len(pids), 1, 'ir_actions_server: TODO')
|
||||
partner = self.res_partner.browse(cr, uid, pids[0])
|
||||
self.assertEqual(partner.city, 'OrigCity', 'ir_actions_server: TODO')
|
||||
|
||||
# Do: copy current record
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {'fields_lines': [[5]]})
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'use_write': 'other',
|
||||
'crud_model_id': self.res_country_model_id,
|
||||
'ref_object': 'res.country,%s' % self.test_country_id,
|
||||
'fields_lines': [(0, 0, {'col1': self.res_country_name_field_id, 'value': 'obj.name', 'type': 'equation'})],
|
||||
})
|
||||
run_res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new country created
|
||||
cids = self.res_country.search(cr, uid, [('name', 'ilike', 'TestNew')])
|
||||
self.assertEqual(len(cids), 1, 'ir_actions_server: TODO')
|
||||
|
||||
# Do: copy a record in another model
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {'fields_lines': [[5]]})
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'use_write': 'expression',
|
||||
'crud_model_id': self.res_country_model_id,
|
||||
'write_expression': 'object.country_id',
|
||||
'fields_lines': [(0, 0, {'col1': self.res_country_name_field_id, 'value': 'NewCountry', 'type': 'value'})],
|
||||
})
|
||||
run_res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
self.assertFalse(run_res, 'ir_actions_server: create record action correctly finished should return False')
|
||||
# Test: new country created
|
||||
cids = self.res_country.search(cr, uid, [('name', 'ilike', 'NewCountry')])
|
||||
self.assertEqual(len(cids), 1, 'ir_actions_server: TODO')
|
||||
|
||||
@mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm')
|
||||
def test_60_multi(self):
|
||||
cr, uid = self.cr, self.uid
|
||||
|
||||
# Data: 2 server actions that will be nested
|
||||
act1_id = self.ir_actions_server.create(cr, uid, {
|
||||
'name': 'Subaction1',
|
||||
'model_id': self.res_partner_model_id,
|
||||
'state': 'code',
|
||||
'code': 'action = {"type": "ir.actions.act_window"}',
|
||||
})
|
||||
# Do: create a new record in the same model and link it
|
||||
act2_id = self.ir_actions_server.create(cr, uid, {
|
||||
'name': 'Subaction2',
|
||||
'model_id': self.res_partner_model_id,
|
||||
'state': 'object_create',
|
||||
'use_create': 'copy_current',
|
||||
})
|
||||
self.ir_actions_server.write(cr, uid, [self.act_id], {
|
||||
'state': 'multi',
|
||||
'child_ids': [(6, 0, [act1_id, act2_id])],
|
||||
})
|
||||
|
||||
# Do: run the action
|
||||
res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||
|
||||
# Test: new partner created
|
||||
pids = self.res_partner.search(cr, uid, [('name', 'ilike', 'TestingPartner (copy)')]) # currently res_partner overrides default['name'] whatever its value
|
||||
self.assertEqual(len(pids), 1, 'ir_actions_server: TODO')
|
||||
# Test: action returned
|
||||
self.assertEqual(res.get('type'), 'ir.actions.act_window', '')
|
||||
|
||||
# Test loops
|
||||
self.assertRaises(except_orm, self.ir_actions_server.write, cr, uid, [self.act_id], {
|
||||
'child_ids': [(6, 0, [self.act_id])]
|
||||
})
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest2.main()
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue