Compare commits
5 Commits
master-ref
...
master
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
10e0f06f22 |
[IMP] Inventory: Bringing least packages current
closes odoo/documentation#15810
X-original-commit:
|
||
|
|
5a31c48763 |
[IMP] Payroll - Salary rule form details
closes odoo/documentation#15802
X-original-commit:
|
||
|
|
a7977c8019 |
[ADD] l10n_OM: new omani localization page
task-5359713
closes odoo/documentation#15798
X-original-commit:
|
||
|
|
3369a800fb |
[IMP] reference/user_interface: update Odoo UI icons list
This commit updates the `Odoo UI icons` library in order to showcase all the new icons recently added. This should ease adoptions by developers as well as providing a clear overview about whether an icon is available or not. task-5430888 closes odoo/documentation#15796 Signed-off-by: Chrysanthe Gomrée (chgo) <chgo@odoo.com> |
||
|
|
7a618ff0ca |
[IMP] odoo sh: settings update
closes odoo/documentation#15772
X-original-commit:
|
|
|
@@ -28,7 +28,7 @@ and add them to your addons path automatically so you can install them in your d
|
|||
If you add private repositories as submodules in your branches,
|
||||
you need to configure a deploy key in your Odoo.sh project settings and in your repository settings.
|
||||
Otherwise Odoo.sh won't be allowed to download them.
|
||||
The procedure is detailed in the chapter :ref:`Settings > Submodules <odoosh-gettingstarted-settings-submodules>`.
|
||||
The procedure is detailed in the chapter :ref:`Settings > Submodules <odoo-sh/settings/submodules>`.
|
||||
|
||||
Adding a submodule
|
||||
==================
|
||||
|
|
@@ -38,7 +38,7 @@ With Odoo.sh (simple)
|
|||
|
||||
.. warning::
|
||||
For now it is not possible to add **private** repositories with this method. You can nevertheless
|
||||
do so :ref:`with Git <odoosh-advanced-submodules-withgit>`.
|
||||
do so :ref:`with Git <odoo-sh/settings/submodules>`.
|
||||
|
||||
On Odoo.sh, in the branches view of your project, choose the branch in which you want to add a submodule.
|
||||
|
||||
|
|
|
|||
|
|
@@ -2,7 +2,7 @@
|
|||
Branches
|
||||
========
|
||||
|
||||
The branches view provides an overview of the different branches in your repository.
|
||||
The :guilabel:`Branches` view provides an overview of the different branches in your repository.
|
||||
|
||||
.. _odoo-sh/branches/stages:
|
||||
|
||||
|
|
@@ -109,9 +109,14 @@ documentation <odoo-sh/module/add>` to view examples.
|
|||
|
||||
Staging databases are not automatically backed up. Nevertheless, you can restore a backup of the
|
||||
production database in a staging branch for testing purposes or to manually recover data that has
|
||||
been accidently deleted from the production database. It is possible to create manual backups of
|
||||
been accidentally deleted from the production database. It is possible to create manual backups of
|
||||
staging databases.
|
||||
|
||||
.. warning::
|
||||
Databases created for staging branches are intended to last up to three months. After that, they
|
||||
can be automatically blocked without prior notice. Only rebuilding the branch will allow you to
|
||||
use that specific branch again.
|
||||
|
||||
.. _odoo-sh/branches/stages/development:
|
||||
|
||||
Development
|
||||
|
|
@@ -704,7 +709,9 @@ Clone
|
|||
The clone command is used to create a local copy of your Git repository.
|
||||
|
||||
.. example::
|
||||
:command:`git clone --recurse-submodules --branch development git@github.com:my-organization/my-repository.git`
|
||||
.. code-block:: shell
|
||||
|
||||
git clone --recurse-submodules --branch development git@github.com:my-organization/my-repository.git
|
||||
|
||||
- `--recurse-submodules` to download the submodules of your repository
|
||||
- `--branch main` to check out to a specific branch of the repository (e.g., `development`)
|
||||
|
|
@@ -720,11 +727,13 @@ Fork
|
|||
The fork command is used to create a new branch based on the current one.
|
||||
|
||||
.. example::
|
||||
:command:`git checkout -b main-1 development && git push -u origin development-1`
|
||||
.. code-block:: shell
|
||||
|
||||
- :command:`git checkout -b main-1 main` a command to create a new branch (e.g., `development-1`)
|
||||
git checkout -b main-1 development && git push -u origin development-1
|
||||
|
||||
- `git checkout -b main-1 main` a command to create a new branch (e.g., `development-1`)
|
||||
based on the current branch (e.g., `development`)
|
||||
- :command:`git push -u origin development-1` a command to upload the new branch (e.g.,
|
||||
- `git push -u origin development-1` a command to upload the new branch (e.g.,
|
||||
`development-1`) to the remote repository
|
||||
|
||||
.. _odoo-sh/branches/shell-commands/merge:
|
||||
|
|
@@ -735,11 +744,13 @@ Merge
|
|||
The merge command is used to combine changes on one branch into another branch.
|
||||
|
||||
.. example::
|
||||
:command:`git merge staging-1 && git push -u origin staging`
|
||||
.. code-block:: shell
|
||||
|
||||
- :command:`git merge staging-1` a command to merge the changes of the current branch into
|
||||
git merge staging-1 && git push -u origin staging
|
||||
|
||||
- `git merge staging-1` a command to merge the changes of the current branch into
|
||||
another branch (e.g., `staging-1`)
|
||||
- :command:`git push -u origin staging` a command to upload the merged changes to the remote
|
||||
- `git push -u origin staging` a command to upload the merged changes to the remote
|
||||
repository branch (e.g., `staging`)
|
||||
|
||||
.. _odoo-sh/branches/shell-commands/ssh:
|
||||
|
|
@@ -764,13 +775,15 @@ To use the SSH command, it is necessary to set up an SSH key first. To do so:
|
|||
:alt: Adding an SSH key manually
|
||||
|
||||
.. example::
|
||||
:command:`ssh 25004381@my-user-my-repository-staging-25004381.dev.odoo.com`
|
||||
.. code-block:: shell
|
||||
|
||||
ssh 25004381@my-user-my-repository-staging-25004381.dev.odoo.com
|
||||
|
||||
- `25004381` the build ID
|
||||
- `my-user-my-repository-staging-25004381.dev.odoo.com` the domain used to connect to the build
|
||||
|
||||
Provided you have the necessary :ref:`access rights <odoosh-gettingstarted-settings-collaborators>`
|
||||
on the project, you will be granted SSH access to the build.
|
||||
Provided you have the necessary :ref:`access rights <odoo-sh/settings/collaborators>` on the
|
||||
project, you will be granted SSH access to the build.
|
||||
|
||||
.. note::
|
||||
Long-running SSH connections are not guaranteed. Idle connections can be disconnected to free up
|
||||
|
|
@@ -788,13 +801,15 @@ submodule.
|
|||
:doc:`Submodules documentation <../advanced/submodules>`
|
||||
|
||||
.. example::
|
||||
:command:`git submodule add -b master <URL> <PATH> && git commit -a && git push -u origin staging`
|
||||
.. code-block:: shell
|
||||
|
||||
- :command:`git submodule add -b master <URL> <PATH>` a command to add a specific branch (e.g.,
|
||||
git submodule add -b master <URL> <PATH> && git commit -a && git push -u origin staging
|
||||
|
||||
- `git submodule add -b master <URL> <PATH>` a command to add a specific branch (e.g.,
|
||||
`master`) of a repository (`<URL>`) as a submodule under the specified path (`<PATH>`) in
|
||||
your current branch.
|
||||
- :command:`git commit -a` a command to commit all current changes
|
||||
- :command:`git push -u origin staging` a command to upload the changes of the current branch
|
||||
- `git commit -a` a command to commit all current changes
|
||||
- `git push -u origin staging` a command to upload the changes of the current branch
|
||||
(e.g., `staging`) to the remote repository.
|
||||
|
||||
.. _odoo-sh/branches/shell-commands/delete:
|
||||
|
|
@@ -809,11 +824,13 @@ The delete command is used to delete a branch from your repository.
|
|||
are not automatically backed up, but can be manually. Development branches cannot be backed up.
|
||||
|
||||
.. example::
|
||||
:command:`git push origin :staging && git branch -D staging`
|
||||
.. code-block:: shell
|
||||
|
||||
- :command:`git push origin :staging` a command to delete a specific branch (e.g., `staging`) on
|
||||
git push origin :staging && git branch -D staging
|
||||
|
||||
- `git push origin :staging` a command to delete a specific branch (e.g., `staging`) on
|
||||
the remote repository
|
||||
- :command:`git branch -D staging` a command to delete the specific branch on your local copy of
|
||||
- `git branch -D staging` a command to delete the specific branch on your local copy of
|
||||
the repository
|
||||
|
||||
.. warning::
|
||||
|
|
|
|||
|
|
@@ -16,7 +16,7 @@ Overview
|
|||
.. image:: builds/builds-overview.png
|
||||
:alt: Overiew of the builds
|
||||
|
||||
In the :guilabel:`Builds` overview, a row represents a branch, and a cell within that row represents
|
||||
In the :guilabel:`Builds` view, a row represents a branch, and a cell within that row represents
|
||||
a build of that branch.
|
||||
|
||||
Most builds are created after pushes to your GitHub repository branches. They can also be created
|
||||
|
|
|
|||
|
|
@@ -2,338 +2,375 @@
|
|||
Settings
|
||||
========
|
||||
|
||||
Overview
|
||||
========
|
||||
The :guilabel:`Settings` view allow you to manage the configuration of your project.
|
||||
|
||||
The settings allow you to manage the configuration of your project.
|
||||
|
||||
.. image:: settings/interface-settings.png
|
||||
:align: center
|
||||
.. _odoo-sh/settings/name:
|
||||
|
||||
Project name
|
||||
============
|
||||
|
||||
The name of your project.
|
||||
The name of your project defines the address used to access your production database. The addresses
|
||||
of your staging and development builds are automatically derived from this name. If you change the
|
||||
project name, only future builds will use the new name.
|
||||
|
||||
.. image:: settings/interface-settings-projectname.png
|
||||
:align: center
|
||||
.. image:: settings/project-name.png
|
||||
:alt: The project name setting
|
||||
|
||||
This defines the address that will be used to access your production database.
|
||||
|
||||
Addresses of your staging and development builds are derived from this name and assigned
|
||||
automatically. However, when you change your project name, only future builds will use the new name.
|
||||
|
||||
.. _odoosh-gettingstarted-settings-collaborators:
|
||||
.. _odoo-sh/settings/collaborators:
|
||||
|
||||
Collaborators
|
||||
=============
|
||||
|
||||
Manage the Github users who can access your project.
|
||||
To grant access to a GitHub user, enter their username and click :guilabel:`Add`. By default, the
|
||||
user is is granted the :guilabel:`Developer` role. Click the dropdown menu to select another one:
|
||||
|
||||
.. image:: settings/interface-settings-collaborators.png
|
||||
:align: center
|
||||
- :guilabel:`Admin`: full access to all Odoo.sh features and tools. This role is dedicated to
|
||||
project management and has exclusive access to the project's settings.
|
||||
- :guilabel:`Tester`: access to staging and development databases and their tools. This role is
|
||||
intended for users performing user acceptance testing (UAT). Testers can work with copies of
|
||||
production data, but they cannot access the production database through Odoo.sh's tools.
|
||||
- :guilabel:`Developer`: no access to the production and staging databases. This role is intended
|
||||
for users who modify the code but should not access production data. Developers cannot connect to
|
||||
the production or staging databases and do not have access to the web shell or server logs.
|
||||
|
||||
There are three levels of users:
|
||||
.. image:: settings/collaborators.png
|
||||
:alt: The collaborators setting
|
||||
|
||||
- :guilabel:`Admin`: has access to all features of an Odoo.sh project.
|
||||
.. _odoo-sh/settings/collaborators/table:
|
||||
|
||||
- :guilabel:`Tester`: has access to the *Staging* and *Development* databases and their tooling.
|
||||
This role is for users conducting User Acceptance Tests. Testers can work with copies of
|
||||
production data but cannot access the production database through the Odoo.sh tooling.
|
||||
|
||||
- :guilabel:`Developer`: has access only to the *Development* databases and their tooling. This
|
||||
role is for developers who propose code modifications but are not allowed to access production
|
||||
and staging databases through the Odoo.sh tooling.
|
||||
Feature access by stage and role
|
||||
--------------------------------
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
:widths: auto
|
||||
|
||||
* -
|
||||
-
|
||||
* - Stage
|
||||
- Feature
|
||||
- Developer
|
||||
- Tester
|
||||
- Admin
|
||||
* - Development
|
||||
- History
|
||||
- Connect + / Connect as
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- 1-click connect
|
||||
- :ref:`History <odoo-sh/branches/tabs/history>`
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Logs
|
||||
- :ref:`Mails <odoo-sh/branches/tabs/mails>`
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Shell/SSH
|
||||
- :ref:`Editor <odoo-sh/branches/tabs/editor>`
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Mails
|
||||
- :ref:`Monitor <odoo-sh/branches/tabs/monitor>`
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Settings
|
||||
- :ref:`Logs <odoo-sh/branches/tabs/logs>`
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- :ref:`Upgrade <odoo-sh/branches/tabs/upgrade>`
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- :ref:`Settings <odoo-sh/branches/tabs/settings>`
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Status
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* - Staging
|
||||
- History
|
||||
- Connect + / Connect as
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- 1-click connect
|
||||
-
|
||||
- :ref:`History <odoo-sh/branches/tabs/history>`
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Logs
|
||||
-
|
||||
- :ref:`Mails <odoo-sh/branches/tabs/mails>`
|
||||
- |red|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Shell/SSH
|
||||
-
|
||||
- :ref:`Shell <odoo-sh/branches/tabs/shell>`
|
||||
- |red|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Mails
|
||||
-
|
||||
- :ref:`Editor <odoo-sh/branches/tabs/editor>`
|
||||
- |red|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Monitoring
|
||||
-
|
||||
- :ref:`Monitor <odoo-sh/branches/tabs/monitor>`
|
||||
- |red|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Backups
|
||||
-
|
||||
-
|
||||
- |green|
|
||||
* -
|
||||
- Upgrade
|
||||
-
|
||||
- :ref:`Logs <odoo-sh/branches/tabs/logs>`
|
||||
- |red|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Settings
|
||||
-
|
||||
- :ref:`Upgrade <odoo-sh/branches/tabs/upgrade>`
|
||||
- |red|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- :ref:`Settings <odoo-sh/branches/tabs/settings>`
|
||||
- |red|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Status
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* - Production
|
||||
- History
|
||||
- Connect + / Connect as
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- 1-click connect
|
||||
-
|
||||
-
|
||||
- :ref:`History <odoo-sh/branches/tabs/history>`
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Logs
|
||||
-
|
||||
-
|
||||
- :ref:`Shell <odoo-sh/branches/tabs/shell>`
|
||||
- |red|
|
||||
- |red|
|
||||
- |green|
|
||||
* -
|
||||
- Shell/SSH
|
||||
-
|
||||
-
|
||||
- :ref:`Editor <odoo-sh/branches/tabs/editor>`
|
||||
- |red|
|
||||
- |red|
|
||||
- |green|
|
||||
* -
|
||||
- Mails
|
||||
-
|
||||
-
|
||||
- :ref:`Monitor <odoo-sh/branches/tabs/monitor>`
|
||||
- |red|
|
||||
- |red|
|
||||
- |green|
|
||||
* -
|
||||
- Monitoring
|
||||
-
|
||||
-
|
||||
- :ref:`Logs <odoo-sh/branches/tabs/logs>`
|
||||
- |red|
|
||||
- |red|
|
||||
- |green|
|
||||
* -
|
||||
- Backups
|
||||
-
|
||||
-
|
||||
- :ref:`Backups <odoo-sh/branches/tabs/backups>`
|
||||
- |red|
|
||||
- |red|
|
||||
- |green|
|
||||
* -
|
||||
- Upgrade
|
||||
-
|
||||
-
|
||||
- :ref:`Upgrade <odoo-sh/branches/tabs/upgrade>`
|
||||
- |red|
|
||||
- |red|
|
||||
- |green|
|
||||
* -
|
||||
- Settings
|
||||
-
|
||||
-
|
||||
- :ref:`Settings <odoo-sh/branches/tabs/settings>`
|
||||
- |red|
|
||||
- |red|
|
||||
- |green|
|
||||
* - Status
|
||||
-
|
||||
* -
|
||||
- Status
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
* - Settings
|
||||
-
|
||||
-
|
||||
-
|
||||
- |green|
|
||||
|
||||
.. warning::
|
||||
Those roles only apply to the usage of Odoo.sh. It is important to reflect the user roles
|
||||
attribution within the repository on GitHub. Please refer to the GitHub documentation section on
|
||||
`Managing a branch protection rule <https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule>`_
|
||||
for detailed guidance.
|
||||
.. admonition:: Legend
|
||||
|
||||
|green| : Available
|
||||
|
||||
|red| : Not available
|
||||
|
||||
.. |green| raw:: html
|
||||
|
||||
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
|
||||
.. |orange| raw:: html
|
||||
|
||||
<span class="text-warning" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
<span class="text-success" style="font-size: 32px; line-height: 32px; display: inline-block; vertical-align: middle;">●</span>
|
||||
|
||||
.. |red| raw:: html
|
||||
|
||||
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
<span class="text-danger" style="font-size: 32px; line-height: 32px; display: inline-block; vertical-align: middle;">●</span>
|
||||
|
||||
Public Access
|
||||
.. note::
|
||||
- Only admins can access the audit logs and the project settings.
|
||||
- All roles can access the :doc:`builds page <builds>`, but the features available are specific
|
||||
to each role.
|
||||
|
||||
.. _odoo-sh/settings/public:
|
||||
|
||||
Public access
|
||||
=============
|
||||
|
||||
Allow public access to your development builds.
|
||||
When enabling :guilabel:`Allow public access`, the :doc:`builds page <builds>` becomes publicly
|
||||
accessible, allowing visitors to connect to development builds. Visitors can also access :ref:`logs
|
||||
<odoo-sh/branches/tabs/logs>`, the :ref:`shell <odoo-sh/branches/tabs/shell>`, and :ref:`mails
|
||||
<odoo-sh/branches/tabs/mails>` for development builds. Production and staging builds remain private;
|
||||
visitors can only view their status.
|
||||
|
||||
.. image:: settings/interface-settings-public.png
|
||||
:align: center
|
||||
.. image:: settings/public-access.png
|
||||
:alt: The public access setting
|
||||
|
||||
If activated, this option exposes the Builds page publicly, allowing visitors to view logs of development builds.
|
||||
|
||||
Production and staging builds are excluded, visitors can only see their status.
|
||||
|
||||
.. _odoosh-gettingstarted-settings-modules-installation:
|
||||
.. _odoo-sh/settings/commit:
|
||||
|
||||
GitHub commit statuses
|
||||
======================
|
||||
|
||||
This option enables Odoo.sh to push commit statuses to your GitHub repository when a build is
|
||||
created or updated. It requires a GitHub token with permissions to push commit statuses to the
|
||||
repository. Refer to `GitHub's documentation on personal access tokens <https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens>`_
|
||||
for instructions to create yours.
|
||||
You can add a GitHub token to allow Odoo.sh to push commit statuses back to GitHub. The token must
|
||||
have the *commit statuses (write)* repository permission.
|
||||
|
||||
.. image:: settings/commit-statuses.png
|
||||
:alt: The GitHub commit statuses setting
|
||||
|
||||
.. seealso::
|
||||
For more information, refer to `GitHub’s documentation on managing access tokens <https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens>`_.
|
||||
|
||||
.. _odoo-sh/settings/key-webhook:
|
||||
|
||||
GitHub key and webhook
|
||||
======================
|
||||
|
||||
A deploy key and a webhook are automatically created on your GitHub repository to allow Odoo.sh to
|
||||
fetch code and receive commit notifications. As they can be unintentionally modified or deleted,
|
||||
you can use the :guilabel:`Verify Deploy Key` and :guilabel:`Verify Webhook` buttons below to verify
|
||||
their configuration.
|
||||
|
||||
.. image:: settings/key-webhook.png
|
||||
:alt: The GitHub key and webhook setting
|
||||
|
||||
.. note::
|
||||
GitHub's **fine-grained personal tokens** have an expiration date and will be disabled if they
|
||||
fail to update the commit status. You can replace the token at any time on Odoo.sh.
|
||||
Administrative rights on the GitHub repository are necessary.
|
||||
|
||||
The commit statuses pushed to GitHub can have the following contexts:
|
||||
|
||||
- :guilabel:`ci/odoo.sh (dev)`: status of a development build
|
||||
- :guilabel:`ci/odoo.sh (staging)`: status of a staging build
|
||||
- :guilabel:`ci/odoo.sh (production)`: status of a production build
|
||||
- :guilabel:`ci/odoo.sh (test_ci)`: testing the token from the Settings page will push a test
|
||||
status on the last commit of your repository
|
||||
|
||||
Custom domains
|
||||
==============
|
||||
|
||||
To configure additional domains please refer to the corresponding branch's :ref:`settings tab
|
||||
<odoo-sh/branches/tabs/settings>`.
|
||||
|
||||
.. _odoosh-gettingstarted-settings-submodules:
|
||||
.. _odoo-sh/settings/submodules:
|
||||
|
||||
Submodules
|
||||
==========
|
||||
|
||||
Configure the deploy keys for the private repositories you use
|
||||
as submodules in your branches to allow Odoo.sh to download them.
|
||||
The `git submodule` command allows you to `integrate other Git projects
|
||||
<https://git-scm.com/book/en/v2/Git-Tools-Submodules>`_ into your codebase without copying the code
|
||||
directly.
|
||||
|
||||
.. warning::
|
||||
These settings are required for **private repositories** only. If you are looking on how to set
|
||||
up your submodules, instructions are available in the chapter :ref:`Submodules
|
||||
<odoosh-advanced-submodules>` of this documentation.
|
||||
.. image:: settings/submodules.png
|
||||
:alt: The submodules setting
|
||||
:scale: 50%
|
||||
|
||||
.. image:: settings/interface-settings-submodules.png
|
||||
:align: center
|
||||
.. note::
|
||||
A Git repository containing Odoo modules, for example from the `Odoo Apps Store
|
||||
<https://apps.odoo.com/apps>`_ or `community modules <https://github.com/OCA>`_, is necessary.
|
||||
|
||||
When a repository is private, it is not possible to publicly download its branches and revisions.
|
||||
For that reason, you need to configure a deploy key for Odoo.sh,
|
||||
so the remote Git server allows our platform to download the revisions
|
||||
of this private repository.
|
||||
.. admonition:: Private repositories
|
||||
|
||||
To configure the deploy key for a private repository, proceed as follows:
|
||||
Before adding `private GitHub repository
|
||||
<https://help.github.com/articles/making-a-public-repository-private/>`_ as a submodule, it is
|
||||
necessary to add a deploy key:
|
||||
|
||||
* in the input, paste the SSH URL of your private sub-repository and click on *Add*,
|
||||
#. Paste the SSH URL of the sub-repository (e.g., `git@github.com:USERNAME/REPOSITORY.git`) and
|
||||
click :guilabel:`Add`.
|
||||
#. Copy the generated :guilabel:`Public Key`.
|
||||
#. On the sub-repository's GitHub, go to :menuselection:`Settings --> Deploy keys`.
|
||||
#. Click :menuselection:`Add deploy key`, enter a :guilabel:`Title`, paste the public key into
|
||||
the :guilabel:`Key` field, and click :guilabel:`Add key`.
|
||||
|
||||
* e.g. *git@github.com:USERNAME/REPOSITORY.git*
|
||||
* it can be another Git server than Github, such as Bitbucket, Gitlab or even your own self-hosted
|
||||
server
|
||||
To add a public repository or private repository with a deploy key as a submodule:
|
||||
|
||||
* copy the public key,
|
||||
#. Add the submodule to your project.
|
||||
|
||||
* it should look like *ssh-rsa some...random...characters...here...==*
|
||||
.. code-block:: shell
|
||||
|
||||
* in the settings of the private sub-repository, add the public key amongst the deploy keys.
|
||||
git submodule add -b BRANCH git@github.com:USERNAME/REPOSITORY.git PATH
|
||||
|
||||
* Github.com: :menuselection:`Settings --> Deploy keys --> Add deploy key`
|
||||
* Bitbucket.com: :menuselection:`Settings --> Access keys --> Add key`
|
||||
* Gitlab.com: :menuselection:`Settings --> Repository --> Deploy Keys`
|
||||
* Self-hosted: append the key to the git user’s authorized_keys file in its .ssh directory
|
||||
#. Commit and push the change.
|
||||
|
||||
Storage Size
|
||||
============
|
||||
.. code-block:: shell
|
||||
|
||||
This section shows the storage size used by your project.
|
||||
git commit -a && git push -u origin master
|
||||
|
||||
.. image:: settings/interface-settings-storage.png
|
||||
:align: center
|
||||
#. Wait for Odoo.sh to rebuild the project.
|
||||
|
||||
Storage size is computed as follows:
|
||||
.. _odoo-sh/settings/storage:
|
||||
|
||||
* the size of the PostgreSQL database
|
||||
Production database size
|
||||
========================
|
||||
|
||||
* the size of the disk files available in your container: database filestore, sessions storage directory...
|
||||
This section displays the total storage used by the project. It includes the PostgreSQL database
|
||||
size and disk files in your container (database filestore, session storage, etc.). If the production
|
||||
database exceeds the storage included in your subscription, the plan will be automatically adjusted.
|
||||
|
||||
.. warning::
|
||||
In case you want to analyze disk usage, you can run the tool `ncdu
|
||||
<https://dev.yorhel.nl/ncdu/man>`_ in your Web Shell.
|
||||
.. image:: settings/database-size.png
|
||||
:alt: The production database size setting
|
||||
|
||||
Should your production database size grow to exceed what's provisioned in your subscription, it
|
||||
will automatically be synchronized with it.
|
||||
.. tip::
|
||||
To analyze disk usage, run the `Ncdu tool <https://dev.yorhel.nl/ncdu/man>`_ in the :ref:`web
|
||||
shell <odoo-sh/branches/tabs/shell>`.
|
||||
|
||||
Database Workers
|
||||
.. _odoo-sh/settings/workers:
|
||||
|
||||
Database workers
|
||||
================
|
||||
|
||||
Additional database workers can be configured here. More workers help increase the load your
|
||||
production database is able to handle. If you add more, it will automatically be synchronized
|
||||
with your subscription.
|
||||
Additional database workers can be configured to allow your production database to handle higher
|
||||
concurrent loads.
|
||||
|
||||
.. image:: settings/interface-settings-workers.png
|
||||
:align: center
|
||||
.. image:: settings/database-workers.png
|
||||
:alt: The database workers setting
|
||||
|
||||
.. Warning::
|
||||
Adding more workers will not magically solve all performance issues. It only allows the server
|
||||
to handle more connections at the same time. If some operations are unusually slow, it's most
|
||||
likely a problem with the code, if it's not due to your own customizations you can open a ticket
|
||||
`here <https://www.odoo.com/help>`_.
|
||||
To add more workers, contact your account manager. After payment, the new worker(s) will be added to
|
||||
your project.
|
||||
|
||||
Staging Branches
|
||||
.. note::
|
||||
Adding more workers does not automatically fix performance issues. It only increases the number
|
||||
of concurrent connections the server can handle. If some operations remain slow, the issue is
|
||||
likely code-related. If it is not due to your customizations, contact `Odoo Support
|
||||
<https://www.odoo.com/help>`_.
|
||||
|
||||
.. _odoo-sh/settings/staging:
|
||||
|
||||
Staging branches
|
||||
================
|
||||
|
||||
Additional staging branches allow you to develop and test more features at the same time. If you
|
||||
add more, it will automatically be synchronized with your subscription.
|
||||
Additional staging branches allow you to develop and test multiple features simultaneously. To add
|
||||
more staging branches, request a product increase directly from your Odoo.sh project. A widget will
|
||||
guide you to the subscription portal to complete the purchase. After payment, synchronization with
|
||||
Odoo.sh will occur automatically, and the number of available staging branches will be updated.
|
||||
|
||||
.. image:: settings/interface-settings-staging-branches.png
|
||||
:align: center
|
||||
.. image:: settings/staging-branches.png
|
||||
:alt: The staging branches setting
|
||||
|
||||
.. _odoo-sh/settings/activation:
|
||||
|
||||
Activation
|
||||
==========
|
||||
|
||||
Shows the status of the project's activation. You can change the project's activation code if
|
||||
needed.
|
||||
This section shows the activation status of the project. You can change the activation code if
|
||||
necessary, provided the new code is not already assigned to another project.
|
||||
|
||||
.. image:: settings/interface-settings-activation.png
|
||||
:align: center
|
||||
.. image:: settings/activation.png
|
||||
:alt: The staging branches setting
|
||||
|
||||
.. warning::
|
||||
You cannot change the activation code to:
|
||||
|
||||
- A code already used in another project
|
||||
- A trial code (downgrading from paid to trial is not allowed)
|
||||
- An invalid code (not linked to an Odoo.sh custom plan)
|
||||
|
||||
For any other issue, contact `Odoo Support <https://www.odoo.com/help>`_.
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
|
@@ -114,6 +114,7 @@ Fiscal localization modules are available for the countries listed below.
|
|||
- Niger
|
||||
- Nigeria
|
||||
- Norway
|
||||
- :doc:`Oman <fiscal_localizations/oman>`
|
||||
- Pakistan
|
||||
- Panama
|
||||
- :doc:`Peru <fiscal_localizations/peru>`
|
||||
|
|
@@ -176,6 +177,7 @@ Fiscal localization modules are available for the countries listed below.
|
|||
fiscal_localizations/mexico
|
||||
fiscal_localizations/netherlands
|
||||
fiscal_localizations/new_zealand
|
||||
fiscal_localizations/oman
|
||||
fiscal_localizations/peru
|
||||
fiscal_localizations/philippines
|
||||
fiscal_localizations/romania
|
||||
|
|
|
|||
98
content/applications/finance/fiscal_localizations/oman.rst
Normal file
|
|
@@ -0,0 +1,98 @@
|
|||
====
|
||||
Oman
|
||||
====
|
||||
|
||||
.. _localizations/oman/modules:
|
||||
|
||||
Modules
|
||||
=======
|
||||
|
||||
The following modules related to the Omani localization are available:
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 25 25 50
|
||||
|
||||
* - Name
|
||||
- Technical name
|
||||
- Description
|
||||
* - :guilabel:`Oman - Accounting`
|
||||
- `l10n_om`
|
||||
- Omani :ref:`fiscal localization package <fiscal_localizations/packages>`, complete with the
|
||||
local chart of accounts, taxes, tax report, and fiscal positions.
|
||||
* - :guilabel:`Oman - Accounting Reports`
|
||||
- `l10n_om_reports`
|
||||
- Accounting reports for Oman.
|
||||
|
||||
.. note::
|
||||
The module automatically installs core configurations. A manual :doc:`update
|
||||
</applications/general/apps_modules>` may be required for missing elements or updates.
|
||||
|
||||
.. _localizations/oman/loc-review:
|
||||
|
||||
Localization overview
|
||||
=====================
|
||||
|
||||
The Omani localization package provides the necessary accounting setup for companies operating in
|
||||
Oman, including a pre-configured chart of accounts, taxes, fiscal positions, and a standard tax
|
||||
report format. It ensures alignment with Oman VAT regulations and Royal Decree requirements.
|
||||
|
||||
The Omani localization package provides the following key features to ensure compliance with local
|
||||
fiscal and accounting regulations:
|
||||
|
||||
- :ref:`Chart of Accounts <localizations/oman/chart-of-accounts>`: based on Omani standards, with
|
||||
mapped account groups and default account mappings.
|
||||
- :ref:`Taxes <localizations/oman/taxes>`: standard 5% VAT, zero-rated domestic as well as exports,
|
||||
exempt, imports, and reverse charge taxes.
|
||||
- :doc:`Fiscal Positions <../accounting/taxes/fiscal_positions>`: automated tax adjustments based
|
||||
on customer or supplier registration status.
|
||||
- :ref:`Tax Report <localizations/oman/tax-report>`: structured according to the Oman VAT return
|
||||
format, as issued by the Tax Authority.
|
||||
|
||||
.. _localizations/oman/chart-of-accounts:
|
||||
|
||||
Chart of accounts
|
||||
-----------------
|
||||
|
||||
The Omani :doc:`chart of accounts <../accounting/get_started/chart_of_accounts>` is based on the
|
||||
local rules and regulations. This includes pre-configured account groups and mapped default
|
||||
accounts. Use the :ref:`predefined structure <chart-of-account/create>` or create new accounts, as
|
||||
needed.
|
||||
|
||||
.. note::
|
||||
Accounts are grouped under relevant categories such as assets, liabilities, income, and expenses
|
||||
in line with local standards.
|
||||
|
||||
.. _localizations/oman/taxes:
|
||||
|
||||
Taxes
|
||||
-----
|
||||
|
||||
The following :doc:`Taxes <../accounting/taxes>`, included in the Omani VAT system, are available by
|
||||
default with the Omani localization package:
|
||||
|
||||
- Standard Rate 5%: Applies to the sale of most goods and services within Oman.
|
||||
- Zero-Rated Supplies (0%): Applies to essential supplies where the seller can still reclaim input
|
||||
VAT.
|
||||
- Exports (0%): Applies to the supply of goods and services that are exported outside Oman.
|
||||
- Exempt Supplies: Applies to supplies that are not subject to VAT, and for which the supplier
|
||||
cannot reclaim input VAT on related purchases.
|
||||
- Reverse Charge Mechanism (RCM): Applies to taxable businesses in Oman receiving services or goods
|
||||
from non-resident suppliers not registered for VAT in Oman.
|
||||
- Import VAT (5%): Applies to the importation of most goods into Oman, charged at the customs
|
||||
point of entry.
|
||||
|
||||
.. _localizations/oman/tax-report:
|
||||
|
||||
Tax report
|
||||
----------
|
||||
|
||||
The :ref:`VAT return <accounting/tax-returns/report>` provides a consolidated overview of the
|
||||
taxable sales and purchases, VAT collected and paid, and the total amount owed or refundable for the
|
||||
reporting period.
|
||||
|
||||
.. important::
|
||||
- The tax return aligns with official declarations required by `Oman's Tax Authority
|
||||
<https://tms.taxoman.gov.om/portal/web/taxportal/home>`_.
|
||||
- `VAT Taxpayer Guide
|
||||
<https://tms.taxoman.gov.om/portal/documents/20126/1414820/VAT+Taxpayer+Guide+-+VAT+Return+Filing.pdf/fae31d0c-e7e7-0014-9f28-a4c506b36614?t=1733169613409>`_.
|
||||
|
|
@@ -103,7 +103,7 @@ completed, click :guilabel:`Save & Close`.
|
|||
|
||||
- :guilabel:`Name`: Type in the name for the new default working hours. This should be descriptive
|
||||
and clear to understand, such as `Standard 20 Hours/Week`.
|
||||
- :guilabel:`Flexible Hours`: Tick the checkbox to let employees adjust their start and end times
|
||||
- :guilabel:`Flexible Hours`: Check the checkbox to let employees adjust their start and end times
|
||||
while maintaining the same total daily hours.
|
||||
- :guilabel:`Company Full Time`: Enter the number of hours per week an employee needs to work to be
|
||||
considered a full-time employee. Typically, this is approximately 40 hours, and this number
|
||||
|
|
@@ -184,73 +184,236 @@ pay. These rules are configured by the localization and affect the computation o
|
|||
To view all the rules, go to :menuselection:`Payroll app --> Configuration --> Rules`. Click on a
|
||||
structure (such as :guilabel:`Regular Pay`) to view all the rules.
|
||||
|
||||
To make a new rule, click :guilabel:`New`. A new rule form appears. Enter the following information
|
||||
in the fields.
|
||||
|
||||
Top section
|
||||
-----------
|
||||
|
||||
- :guilabel:`Rule Name`: Enter a name for the rule. This field is required.
|
||||
- :guilabel:`Category`: Select a category the rule applies to from the drop-down menu, or enter a
|
||||
new one. This field is required.
|
||||
- :guilabel:`Code`: Enter a code to be used for this new rule. This field is required.
|
||||
- :guilabel:`Sequence`: Enter a number indicating when this rule is calculated in the sequence of
|
||||
all other rules.
|
||||
- :guilabel:`Salary Structure`: Select a salary structure the rule applies to from the drop-down
|
||||
menu, or enter a new one. This field is required.
|
||||
- :guilabel:`Active`: Enable this toggle so the rule is available for use. Disable the toggle to
|
||||
continue to show it on the payslip, but skip the computation.
|
||||
- :guilabel:`Appears on payslip`: Disabling the toggle will still show the rule on the payslip, it
|
||||
will just not be computed.
|
||||
- :guilabel:`View on Employer Cost Dashboard`: Tick the checkbox to have the rule appear on the
|
||||
*Employer Cost* report, located on the *Payroll* app dashboard.
|
||||
- :guilabel:`View on Payroll Reporting`: Tick the checkbox to have the rule appear on payroll
|
||||
reports.
|
||||
|
||||
.. image:: salaries/new-rule.png
|
||||
:alt: Enter the information for the new rule on the new rule form.
|
||||
|
||||
General tab
|
||||
-----------
|
||||
|
||||
Conditions
|
||||
~~~~~~~~~~
|
||||
|
||||
- :guilabel:`Condition Based on`: Select from the drop-down menu whether the rule is
|
||||
:guilabel:`Always True` (always applies), a :guilabel:`Range` (applies to a specific range, which
|
||||
is entered beneath the selection), :guilabel:`Other Input` (the condition is entered beneath the
|
||||
field), or a :guilabel:`Python Expression` (the code is entered beneath the selection). This field
|
||||
is required.
|
||||
|
||||
Computation
|
||||
~~~~~~~~~~~
|
||||
|
||||
- :guilabel:`Amount Type`: Select from the drop-down menu whether the amount is a :guilabel:`Fixed
|
||||
Amount`, a :guilabel:`Percentage (%)`, :guilabel:`Other Input`, or a :guilabel:`Python Code`.
|
||||
Depending on what is selected, the fixed amount, percentage, other input, or Python code needs to
|
||||
be entered next. This field is required.
|
||||
|
||||
Company contribution
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- :guilabel:`Partner`: If another company financially contributes to this rule, select the company
|
||||
from the drop-down menu.
|
||||
|
||||
Description tab
|
||||
---------------
|
||||
|
||||
Provide any additional information in this tab to help clarify the rule. This tab only appears in
|
||||
the rule form.
|
||||
|
||||
Accounting tab
|
||||
Add a new rule
|
||||
--------------
|
||||
|
||||
- :guilabel:`Debit Account`: Select the debit account from the drop-down menu the rule affects.
|
||||
- :guilabel:`Credit Account`: Select the credit account from the drop-down menu the rule affects.
|
||||
- :guilabel:`Split account line based on name`: Tick the checkbox to split the accounting entry
|
||||
according to the payslip line name.
|
||||
- :guilabel:`Not computed in net accountability`: If checked, the amount of the rule is shown
|
||||
independently from the net salary, to allow for better reporting in the **Accounting** app.
|
||||
To make a new rule, click :guilabel:`New` and a blank :guilabel:`Salary Rules` form loads. Enter the
|
||||
following information in the top half of the form:
|
||||
|
||||
- :guilabel:`Rule Name`: Enter a name for the rule. This is the name displayed in the payslip.
|
||||
- :guilabel:`Code`: Enter a code to be used for the new rule. This is case sensitive and is used as
|
||||
the *rule ID*. This field is **required**.
|
||||
- :guilabel:`Category`: Using the drop-down menu, select the category the rule applies to, or enter
|
||||
a new category. The category is used to group rules and access their total sum.
|
||||
- :guilabel:`Salary Structure`: Using the drop-down menu, select the salary structure the rule
|
||||
applies to, or enter a new one. This field is **required**.
|
||||
- :guilabel:`Sequence`: Enter a number indicating *when* the rule is calculated, in the sequence of
|
||||
all other rules. Rules are processed one after another based on their sequence number. Rules with
|
||||
a lower sequence number are calculated first, and their results can be used by rules with a higher
|
||||
sequence number. This field is **required**.
|
||||
- :guilabel:`Appears on Payslip`: Check the checkbox to have the rule visible on the employee
|
||||
payslip PDF.
|
||||
- :guilabel:`Contributes to Employer Cost`: Check the checkbox to include the rule when computing
|
||||
the *employer cost* of a payslip.
|
||||
|
||||
General tab
|
||||
~~~~~~~~~~~
|
||||
|
||||
Fill out the following sections of the :guilabel:`General` tab. These configurations determine
|
||||
*when* and *how* the rule is calculated.
|
||||
|
||||
Conditions
|
||||
**********
|
||||
|
||||
- :guilabel:`Condition Based on`: Using the drop-down menu, select if the rule is calculated and
|
||||
displayed as a line in the payslip form view. Choose from one of the following options:
|
||||
|
||||
- :guilabel:`Always True`: The rule is always calculated. No other configurations are needed for
|
||||
this section.
|
||||
- :guilabel:`Salary Input`: This introduces a dynamic benefit to the structure. This appears as a
|
||||
field in the *Payroll* tab of the *Employee* form, the *Inputs* tab of the payslip, or both. The
|
||||
value of this field is added to the amount of the rule. If selected, the following additional
|
||||
fields appear and must be configured:
|
||||
|
||||
- :guilabel:`Input on`: Specify where this field should appear and which object it should belong
|
||||
to, the :guilabel:`Employee`, the :guilabel:`Payslip`, or both. If both are selected, the
|
||||
value on the payslip automatically defaults to the value from the employee record, but it can
|
||||
be overwritten directly on the payslip for a specific payroll run.
|
||||
- :guilabel:`Section`: This groups several inputs into one expandable section on the form view.
|
||||
Only one option is available by default, :guilabel:`Inputs`.
|
||||
- :guilabel:`Unit`: Click the corresponding radio button to determine how the benefit is
|
||||
displayed. The available options are:
|
||||
|
||||
- :guilabel:`Monetary`: A number with currency.
|
||||
- :guilabel:`Quantity`: A number.
|
||||
- :guilabel:`Percentage`: A number with a % sign.
|
||||
- :guilabel:`Checkbox`: Indicates boolean values.
|
||||
|
||||
- :guilabel:`Input Description`: Enter a short explanation of when the input is applicable.
|
||||
- :guilabel:`Default Value`: Enter the default value, either a monetary amount, quantity, or
|
||||
percentage. This is determined by what is selected for the :guilabel:`Unit`. If necessary, add
|
||||
a :guilabel:`Suffix` in the field to the right of this value, such as `per km`.
|
||||
|
||||
.. note::
|
||||
If :guilabel:`Checkbox` is selected for the :guilabel:`Unit`, this field changes to
|
||||
:guilabel:`Selected by Default`. Click the checkbox to have the rule active by default.
|
||||
|
||||
- :guilabel:`Depends On`: Select another rule that has a salary input, and use its value to
|
||||
determine whether this rule should be hidden.
|
||||
|
||||
- :guilabel:`Other Input`: Select this to check if a payslip line exists with the same *type*.
|
||||
When selected, a :guilabel:`Condition Other Input` field appears. Using the drop-down menu,
|
||||
select the type of input the rule is based on, such as :guilabel:`Deduction`,
|
||||
:guilabel:`Reimbursement`, etc.
|
||||
- :guilabel:`Python Expression`: Select this to have the rule calculated using a Python script.
|
||||
The script is evaluated using the local dictionary. The right side lists the
|
||||
:guilabel:`Available variables` and the :guilabel:`Output`:
|
||||
|
||||
- :guilabel:`Available variables`:
|
||||
|
||||
- :guilabel:`payslip`: The `hr.payslip` object.
|
||||
- :guilabel:`employee`: The `hr.employee` object.
|
||||
- :guilabel:`version`: The `hr.version` object.
|
||||
- :guilabel:`result_rules`: A dictionary containing the rules amounts, quantities, rates and
|
||||
totals (previously computed).
|
||||
- :guilabel:`categories`: A dictionary containing the computed salary rule categories (the sum
|
||||
of the amount of all the rules belonging to that category):
|
||||
|
||||
- :guilabel:`total`: rule total
|
||||
- :guilabel:`amount`: rule amount
|
||||
- :guilabel:`quantity`: rule quantity
|
||||
- :guilabel:`rate`: rule rate
|
||||
- :guilabel:`ytd`: rule year to date value
|
||||
|
||||
- :guilabel:`worked_days`: A dictionary containing the computed worked days, where each key is
|
||||
a work entry type code, and each value is a `worked_days` object. This object contains many
|
||||
variables, with the most important ones being:
|
||||
|
||||
- :guilabel:`number_of_days`: The number of days registered in the payslip duration with
|
||||
this work entry type.
|
||||
- :guilabel:`number_of_hours`: The number of hours registered in the payslip duration with
|
||||
this work entry type.
|
||||
- :guilabel:`is_paid`: Whether or not this work entry type is added as an unpaid work entry
|
||||
on this payslip structure.
|
||||
|
||||
- :guilabel:`inputs`: A dictionary containing the computed inputs where *key* is the other
|
||||
input type code and *value* is the sum of the payslip input lines with the same code.
|
||||
|
||||
- :guilabel:`Output`:
|
||||
|
||||
- :guilabel:`result`: The boolean is *True* if the rule should be calculated, or *False* if
|
||||
otherwise.
|
||||
|
||||
- :guilabel:`Domain`: Select this option to apply the rule *only* if it matches the configured
|
||||
:guilabel:`Applicability Domain`. Configure the :guilabel:`Applicability Domain` that appears
|
||||
beneath this option when selected.
|
||||
|
||||
Computation
|
||||
***********
|
||||
|
||||
This section determines the final value of the rule, which consists of the base amount, the
|
||||
quantity, and the rate. The total of the rule is `total = amount * quantity * (rate/100)`.
|
||||
|
||||
.. important::
|
||||
This field does **not** appear if the :guilabel:`Condition Based on` field is set to
|
||||
:guilabel:`Salary Input`.
|
||||
|
||||
Using the drop-down menu, select one of the following options for the :guilabel:`Amount Type` field:
|
||||
|
||||
- :guilabel:`Percentage (%)`: Defines the values for the total calculation. When selected, configure
|
||||
the following fields:
|
||||
|
||||
- :guilabel:`Percentage based on`: A Python expression is evaluated using the `localdict`, and its
|
||||
value is assigned to the rule amount.
|
||||
- :guilabel:`Quantity`: A Python expression is evaluated using the `localdict`, and its value is
|
||||
assigned to the rule quantity.
|
||||
- :guilabel:`Percentage (%)`: A decimal number assigned to the rule rate.
|
||||
|
||||
- :guilabel:`Fixed Amount`: The amount and quantity is defined, with a rate of 100%.
|
||||
|
||||
- :guilabel:`Quantity`: A Python expression is evaluated using the `localdict`, and its value is
|
||||
assigned to the rule quantity.
|
||||
- :guilabel:`Fixed Amount`: Enter a decimal number which is assigned to the rule amount.
|
||||
|
||||
- :guilabel:`Other Input`: Select this to fetch the rule amount from the payslip input lines that
|
||||
have the same *other input type* with rate of `100%` and quantity of `1.0`. When selected, an
|
||||
:guilabel:`Amount Other Input` field appears beneath it. Using the drop-down menu, select the
|
||||
*type* of input it is, such as :guilabel:`Deduction`, :guilabel:`Tips`, or :guilabel:`Expenses`.
|
||||
|
||||
- :guilabel:`Python Code`: This is the more complex version of the :guilabel:`Percentage (%)`
|
||||
option, where a whole Python script is written then evaluated using the `localdict`. This includes
|
||||
a list of :guilabel:`Available variables` and an :guilabel:`Output` list.
|
||||
|
||||
- :guilabel:`Available variables`:
|
||||
|
||||
- :guilabel:`payslip`: hr.payslip object
|
||||
- :guilabel:`employee`: hr.employee object
|
||||
- :guilabel:`version`: hr.version object
|
||||
- :guilabel:`result_rules`: A dict containing the rules amounts, quantities, rates and totals
|
||||
(previously computed), where the key is the rule code, and the value is dict with the
|
||||
following keys:
|
||||
|
||||
- :guilabel:`total`: rule total
|
||||
- :guilabel:`amount`: rule amount
|
||||
- :guilabel:`quantity`: rule quantity
|
||||
- :guilabel:`rate`: rule rate
|
||||
- :guilabel:`ytd`: rule year to date value
|
||||
|
||||
- :guilabel:`categories`: A dict containing the computed salary rule categories (sum of amount
|
||||
of all rules belonging to that category) where key is the category code and value is the sum
|
||||
of the rules total values.
|
||||
- :guilabel:`worked_days`: A dict containing the computed worked days where *key* is the work
|
||||
entry type code and *value* is the `worked_days` object contain many variables, but most
|
||||
important ones are:
|
||||
|
||||
- :guilabel:`number_of_days`: The number of days registered in the payslip duration with this
|
||||
work entry type.
|
||||
- :guilabel:`number_of_hours`: The number of hours registered in the payslip duration with
|
||||
this work entry type.
|
||||
- :guilabel:`is_paid`: Dictates whether or not this work entry type is added as unpaid work
|
||||
entry on this payslip structure.
|
||||
|
||||
- :guilabel:`inputs`: A dict containing the computed inputs Where *key** is the other input type
|
||||
code and *value* is the sum of the payslip input lines with the same code.
|
||||
|
||||
- :guilabel:`Output`:
|
||||
|
||||
- :guilabel:`result`: float, base amount of the rule
|
||||
- :guilabel:`result_rate`: float, which defaults to 100.0 (%)
|
||||
- :guilabel:`result_qty`: float, quantity, which defaults to 1
|
||||
- :guilabel:`result_name`: string, name of the line. This defaults to the name field of the
|
||||
salary rule (useful if the name depends or should depend on something computed in the rule).
|
||||
|
||||
Company contribution
|
||||
********************
|
||||
|
||||
Using the drop-down menu, select the eventual third party involved in the salary payment to the
|
||||
employees.
|
||||
|
||||
Display tab
|
||||
~~~~~~~~~~~
|
||||
|
||||
This section determines the appearance of the rule on the payslip PDF available to the employee, and
|
||||
defines the rule aesthetics.
|
||||
|
||||
First, select a :guilabel:`Color` for the rule using the color picker. Next, check the
|
||||
:guilabel:`Title` checkbox to **only** display the salary rule's *title* and *description*, and hide
|
||||
any numerical values.
|
||||
|
||||
Check the :guilabel:`Indented`, :guilabel:`Space Above`, :guilabel:`Bold`, :guilabel:`Underline`,
|
||||
and :guilabel:`Italic` checkboxes to activate the options.
|
||||
|
||||
Finally, enter a :guilabel:`Description` for the rule, which is displayed below the rule name.
|
||||
|
||||
Accounting tab
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
This section determines how the rule affects the various accounting journals and how the Net salary
|
||||
is calculated for employees. Configure the following fields in this section:
|
||||
|
||||
- :guilabel:`Debit Account`: Using the drop-down menu, select the debit account for the rule.
|
||||
- :guilabel:`Credit Account`: Using the drop-down menu, select the credit account for the rule.
|
||||
- :guilabel:`Split on names`: Enable this option to split the accounting entries for this rule
|
||||
according to the payslip line name. Splitting the entries provides more visibility for deductions
|
||||
and reimbursements, or for salary adjustments.
|
||||
- :guilabel:`Excluded from Net`: Check this checkbox to exclude the rule's calculations from the net
|
||||
salary rule in journal entries. A specific debit and credit account should be set to independently
|
||||
classify it.
|
||||
- :guilabel:`Set employee on account line`: Check this checkbox to have the employee's name visible
|
||||
on the journal items.
|
||||
|
||||
.. important::
|
||||
This tab is **only** available if the **Accounting** app is installed.
|
||||
|
||||
.. _payroll/rule-parameters:
|
||||
|
||||
|
|
@@ -286,7 +449,7 @@ If a new input type is needed that does not appear on the list, click the :guila
|
|||
create a new input type. Enter the :guilabel:`Description`, the :guilabel:`Code`, and select which
|
||||
structure it applies to in the :guilabel:`Availability in Structure` field.
|
||||
|
||||
Tick the :guilabel:`Available in attachments` checkbox if the input should be a salary attachment.
|
||||
Check the :guilabel:`Available in attachments` checkbox if the input should be a salary attachment.
|
||||
|
||||
.. important::
|
||||
The :guilabel:`Code` is used in the salary rules to compute payslips. If the
|
||||
|
|
|
|||
|
|
@@ -5,68 +5,130 @@ Least packages removal
|
|||
The *Least Packages* removal strategy fulfills an order by opening the fewest number of packages,
|
||||
which is ideal for maintaining organized stock without needing to open multiple boxes.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`About removal strategies <../removal_strategies>`
|
||||
- `Odoo Tutorials: Least Packages <https://www.odoo.com/slides/slide/5477/share>`_
|
||||
|
||||
To understand how the removal strategy works, consider the following example, featuring a warehouse
|
||||
that stores packages of flour in bulk packages of `100 kg`.
|
||||
|
||||
To minimize moisture, and/or prevent pests from entering open packages, the least packages removal
|
||||
strategy is used to pick from a single, opened package.
|
||||
|
||||
.. _inventory/warehouses_storage/pkg-qty:
|
||||
|
||||
.. example::
|
||||
|
||||
To understand how the removal strategy works, consider the following example, featuring a
|
||||
warehouse that stores packages of flour in bulk packages of `100 kg`.
|
||||
|
||||
To minimize moisture and prevent possible loss of product due to spillage and repacking, the
|
||||
least packages removal strategy is used to fill the order by opening the fewest packages of
|
||||
flour, instead of opening multiple packages.
|
||||
|
||||
A package of `100 kg` of flour is depleted to `54 kg` after fulfilling some orders. There are
|
||||
other packages of `100 kg` in stock.
|
||||
|
||||
#. When an order for `14 kg` of flour is placed, the package of `54 kg` is selected.
|
||||
#. When an order for *more* than `54 kg` of flour is placed, an unopened `100 kg` package is used
|
||||
to fulfill the order. While this temporarily results in two open packages, these open packages
|
||||
are prioritized in the next picking.
|
||||
When an order for `14 kg` of flour is placed, the package of `54 kg` is selected, leaving `40 kg`
|
||||
of flour in the bag. Another order for `80 kg` of flour is placed. An unopened `100 kg` package
|
||||
is used to fulfill the order.
|
||||
|
||||
While this temporarily results in two open packages, one for `40 kg` and another for `20 kg`,
|
||||
these open packages are prioritized in the next pickings that are those sizes or smaller.
|
||||
|
||||
Enabling the least packages removal strategy
|
||||
============================================
|
||||
|
||||
A *package* is a physical container holding one or more products. Packages can also be used to store
|
||||
items in bulk.
|
||||
|
||||
The packages feature is used to group products together and is required for the *least packages*
|
||||
removal strategy.
|
||||
|
||||
Navigate to :menuselection:`Inventory app --> Configuration --> Settings` and in the
|
||||
:guilabel:`Operations` section, select the check box for the :guilabel:`Packages` feature.
|
||||
|
||||
Store products in packages
|
||||
--------------------------
|
||||
|
||||
First, products are received either in packages or individually. Next, the received products are
|
||||
stored in packages created :ref:`during a transfer <inventory/warehouses_storage/pack>`.
|
||||
|
||||
Set the removal strategy
|
||||
------------------------
|
||||
|
||||
After you have configured your product inventory, set the removal strategy on the :ref:`storage
|
||||
location <inventory/warehouses_storage/lp-location>` or :ref:`product category
|
||||
<inventory/warehouses_storage/lp-category>`.
|
||||
|
||||
.. _inventory/warehouses_storage/lp-location:
|
||||
|
||||
On the storage location
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To set a removal strategy on a storage location, you must first enable a couple settings in the
|
||||
**Inventory** configuration settings. Open :menuselection:`Inventory app --> Configuration -->
|
||||
Settings`, and in the :guilabel:`Warehouse` section, enable :guilabel:`Storage Locations` and
|
||||
:guilabel:`Multi-Step Routes`.
|
||||
|
||||
Next, open :menuselection:`Inventory app --> Configuration --> Locations`. Open an existing location
|
||||
or create a new location. On the location form, under the :guilabel:`Logistics` heading, set
|
||||
the :guilabel:`Removal Strategy`. to :guilabel:`Least Packages`
|
||||
|
||||
.. image:: least_packages/location-removal-strategy.png
|
||||
:alt: Set Least Packages as the location's removal strategy.
|
||||
|
||||
.. _inventory/warehouses_storage/lp-category:
|
||||
|
||||
On the product category
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Configure removal strategies on product categories by going to :menuselection:`Inventory app -->
|
||||
Configuration --> Categories` and selecting the intended product category. Next, in the
|
||||
:guilabel:`Force Removal Strategy` field, select :guilabel:`Least Packages`.
|
||||
|
||||
.. image:: least_packages/category-removal-strategy.png
|
||||
:alt: Set Least Packages as the category's removal strategy.
|
||||
|
||||
.. important::
|
||||
When there are different removal strategies applied on both the location and product category for
|
||||
a product, the value set on the :guilabel:`Force Removal Strategy` field set on a product
|
||||
category form is applied as top priority.
|
||||
|
||||
For example, flour is stored in 100-kilogram packages. It is stored in a location with other
|
||||
heavy items. To minimize how far pickers have to walk, the location uses the :doc:`closest
|
||||
location removal strategy <closest_location>`. To further optimize the picking time, and to
|
||||
reduce the number of packages opened during picking, the flour's product category, `Baking
|
||||
Materials`, uses the least packages removal strategy.
|
||||
|
||||
Workflow
|
||||
========
|
||||
|
||||
Using the least package removal strategy, the fewest number of packages is used to fulfill an order.
|
||||
Using the *least packages* removal strategy, the fewest number of packages is used to fulfill an
|
||||
order.
|
||||
|
||||
.. important::
|
||||
The :ref:`Packages feature <inventory/warehouses_storage/pack-setup>` **must** be enabled to use
|
||||
this strategy.
|
||||
|
||||
Consider the following example, featuring the product, `Flour`. The product's :guilabel:`Units of
|
||||
Measure` field, located on the product form, is set to `kg`. The product is stored in packages of
|
||||
`100 kg`, with one remaining package containing `54 kg`. The product category's :guilabel:`Force
|
||||
Removal Strategy` is set to :guilabel:`Least Packages`.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`Set removal strategy on product category <inventory/warehouses_storage/removal-config>`
|
||||
Consider the following example, featuring the product, `Flour (kg)`. The product's
|
||||
:doc:`unit of measure <../../product_management/configure/uom>`, located on the product form, is set
|
||||
to `kg`. The product is stored in packages of `100 kg`, with one remaining package containing `54
|
||||
kg`. The product category's :guilabel:`Force Removal Strategy` is set to :guilabel:`Least Packages`.
|
||||
|
||||
.. tip::
|
||||
To check the product's on-hand stock, navigate to the product form, and click the :guilabel:`On
|
||||
Hand` smart button.
|
||||
You can verify the product's on-hand stock in the :guilabel:`Locations` report. Open
|
||||
:menuselection:`Inventory app --> Reporting --> Locations`. Click in the :guilabel:`Search` field
|
||||
to filter by :guilabel:`On Hand`, as well as product.
|
||||
|
||||
.. image:: least_packages/on-hand-flour.png
|
||||
:align: center
|
||||
.. image:: least_packages/on-hand-quantities.png
|
||||
:alt: Show on-hand stock in each package.
|
||||
|
||||
Create a :ref:`delivery order <inventory/delivery/one-step>` for eighty kilograms of flour by going
|
||||
to the :menuselection:`Sales app` and creating a new quotation. After clicking :guilabel:`Confirm`,
|
||||
the delivery order is created.
|
||||
A sales order is created for eighty kilograms of flour by going to the :menuselection:`Sales app`
|
||||
and creating a new quotation. After clicking :guilabel:`Confirm`, the :ref:`delivery order
|
||||
<inventory/delivery/one-step>` is created.
|
||||
|
||||
On the delivery order, the :guilabel:`Quantity` field displays the amount automatically picked,
|
||||
according to the removal strategy.
|
||||
|
||||
For more details about *where* the units were picked, select the :guilabel:`⦙≣ (bulleted list)`
|
||||
icon, located on the far-right. Doing so opens the :guilabel:`Open: Stock move` pop-up window,
|
||||
displaying how the reserved items were picked, according to the removal strategy.
|
||||
For more details about *where* the units were picked, click :guilabel:`Details` on the product
|
||||
line. Doing so opens the :guilabel:`Detailed Operations` pop-up window, displaying how the reserved
|
||||
items were picked, according to the removal strategy.
|
||||
|
||||
In the :guilabel:`Open: Stock move` pop-up window, the :guilabel:`Pick from` field displays where
|
||||
the quantities to fulfill the :guilabel:`Demand` are picked. Since the order demanded eighty
|
||||
In the :guilabel:`Detailed Operations` pop-up window, the :guilabel:`Pick From` field displays where
|
||||
the quantities to fulfill the :guilabel:`Demand` are picked. Because the order demands eighty
|
||||
kilograms, which exceeds the quantity in the opened package of `54 kg`, an unopened package of `100
|
||||
kg` is selected.
|
||||
|
||||
.. image:: least_packages/least-package.png
|
||||
:align: center
|
||||
:alt: Show which package was picked in the *Pick From* field.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`About removal strategies <../removal_strategies>`
|
||||
- `Odoo Tutorials: Least Packages <https://www.odoo.com/slides/slide/5477/share>`_
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
|
@@ -294,6 +294,243 @@ class.
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-food-delivery h1 p-4"></i>
|
||||
<code>oi-food-delivery</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-activity h1 p-4"></i>
|
||||
<code>oi-activity</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-activity-plus h1 p-4"></i>
|
||||
<code>oi-activity-plus</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-schedule-today h1 p-4"></i>
|
||||
<code>oi-schedule-today</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-schedule-tomorrow h1 p-4"></i>
|
||||
<code>oi-schedule-tomorrow</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-schedule-later h1 p-4"></i>
|
||||
<code>oi-schedule-later</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-backspace-o h1 p-4"></i>
|
||||
<code>oi-backspace-o</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-numpad h1 p-4"></i>
|
||||
<code>oi-numpad</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-record h1 p-4"></i>
|
||||
<code>oi-record</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-merge h1 p-4"></i>
|
||||
<code>oi-merge</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-transfer h1 p-4"></i>
|
||||
<code>oi-transfer</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-suitcase h1 p-4"></i>
|
||||
<code>oi-suitcase</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-suitcase-plus h1 p-4"></i>
|
||||
<code>oi-suitcase-plus</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-user h1 p-4"></i>
|
||||
<code>oi-user</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-user-plus h1 p-4"></i>
|
||||
<code>oi-user-plus</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-users h1 p-4"></i>
|
||||
<code>oi-users</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-ellipsis-v h1 p-4"></i>
|
||||
<code>oi-ellipsis-v</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-ellipsis-h h1 p-4"></i>
|
||||
<code>oi-ellipsis-h</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-plus h1 p-4"></i>
|
||||
<code>oi-plus</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-minus h1 p-4"></i>
|
||||
<code>oi-minus</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-star-plus h1 p-4"></i>
|
||||
<code>oi-star-plus</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-subtitle h1 p-4"></i>
|
||||
<code>oi-subtitle</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-bluesky h1 p-4"></i>
|
||||
<code>oi-bluesky</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-tiktok h1 p-4"></i>
|
||||
<code>oi-tiktok</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-discord h1 p-4"></i>
|
||||
<code>oi-discord</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-google-play h1 p-4"></i>
|
||||
<code>oi-google-play</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-kickstarter h1 p-4"></i>
|
||||
<code>oi-kickstarter</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-strava h1 p-4"></i>
|
||||
<code>oi-strava</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-threads h1 p-4"></i>
|
||||
<code>oi-threads</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-x h1 p-4"></i>
|
||||
<code>oi-x</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-x-square h1 p-4"></i>
|
||||
<code>oi-x-square</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-life-ring-plus h1 p-4"></i>
|
||||
<code>oi-life-ring-plus</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-send-back h1 p-4"></i>
|
||||
<code>oi-send-back</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_icon_card col-6 col-sm-4 col-md-3 mb-3">
|
||||
<div class="card text-center">
|
||||
<i class="oi oi-bring-front h1 p-4"></i>
|
||||
<code>oi-bring-front</code>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
RTL adaptations
|
||||
|
|
|
|||
|
|
@@ -60,6 +60,39 @@
|
|||
.oi-smile-add:before { content: '\e84e'; }
|
||||
.oi-close:before { content: '\e852'; }
|
||||
.oi-food-delivery:before { content: '\e82a'; }
|
||||
.oi-schedule-today:before { content: '\e82c'; }
|
||||
.oi-schedule-tomorrow:before { content: '\e82d'; }
|
||||
.oi-schedule-later:before { content: '\e804'; }
|
||||
.oi-activity:before { content: '\e82f'; }
|
||||
.oi-activity-plus:before { content: '\e830'; }
|
||||
.oi-numpad:before { content: '\e833'; }
|
||||
.oi-transfer:before { content: '\e834'; }
|
||||
.oi-suitcase:before { content: '\e835'; }
|
||||
.oi-suitcase-plus:before { content: '\e832'; }
|
||||
.oi-merge:before { content: '\e836'; }
|
||||
.oi-record:before { content: '\e837'; }
|
||||
.oi-backspace-o:before { content: '\e838'; }
|
||||
.oi-user:before { content: '\e805'; }
|
||||
.oi-user-plus:before { content: '\e831'; }
|
||||
.oi-users:before { content: '\e807'; }
|
||||
.oi-ellipsis-h:before { content: '\e867'; }
|
||||
.oi-ellipsis-v:before { content: '\e868'; }
|
||||
.oi-plus:before { content: '\e809'; }
|
||||
.oi-minus:before { content: '\e80b'; }
|
||||
.oi-star-plus:before { content: '\e87c'; }
|
||||
.oi-subtitle:before { content: '\e80e'; }
|
||||
.oi-threads:before { content: '\e818'; }
|
||||
.oi-kickstarter:before { content: '\e819'; }
|
||||
.oi-x:before { content: '\e81a'; }
|
||||
.oi-x-square:before { content: '\e848'; }
|
||||
.oi-tiktok:before { content: '\e81b'; }
|
||||
.oi-bluesky:before { content: '\e81c'; }
|
||||
.oi-google-play:before { content: '\e81d'; }
|
||||
.oi-strava:before { content: '\e80f'; }
|
||||
.oi-discord:before { content: '\e811'; }
|
||||
.oi-bring-front:before { content: '\e84c'; }
|
||||
.oi-send-back:before { content: '\e84d'; }
|
||||
.oi-life-ring-plus:before { content: '\e849'; }
|
||||
|
||||
/* RTL adaptations. */
|
||||
/* Flip directional icons by 180 degree. */
|
||||
|
|
|
|||