diff --git a/.github/README.md b/.github/README.md new file mode 100644 index 00000000..6c3f28d1 --- /dev/null +++ b/.github/README.md @@ -0,0 +1,129 @@ +# Continuous integration + +## Global picture + +Hosts are available through sftp (sftp is using ssh). The +authentication is the SSH one through a private key on the github side +(managed in github secrets) and accessible through +`secrets.sftp_private_key` in the yaml workflow definition. + +All content of the workdir is sent to the hosts (ideally mirrored and +only difference should be sent), but this is not yet the case for +`lftp` limitation over using `sftp` and setting dates +correctly. `rclone` should be able to handle this better but is not +yet used. A simple git push could be studied also. + +To trigger the restart of odoo on the host, we set up a inotify +watcher through `incron`. + +## Host setup + +### odoo + +To add `odoo` services to a compose read host, add this section to +your `compose.yml`: + +```yaml +odoo: + charm: odoo-tecnativa + docker-compose: + command: + - "--dev=xml,qweb,werkzeug" + - "--log-level=debug" + - "--limit-time-cpu=500" + - "--limit-time-real=500" + - "--limit-memory-soft=25273917440" + - "--limit-memory-hard=25273917440" + - "--addons-path=/opt/odoo/auto/lokavaluto,/opt/odoo/auto/addons" + volumes: + - /srv/datastore/data/odoo/opt/odoo/auto/lokavaluto:/opt/odoo/auto/lokavaluto:rw + image: docker.0k.io/mirror/odoo:rc_12.0-MYC-INIT-3.7 + options: + workers: 4 + modules: + - lcc_lokavaluto_app_connection + - lcc_comchain_base + - lcc_cyclos_base + relations: + web-proxy: + frontend: + domain: odoo.mydomain.org +``` + +Notice: + +- the `--addons` path correlates with the `volumes` section. +- the `modules` section list the current modules + +### sftp + +To add `sftp` services to a compose ready host, add this section to +your `compose.yml`: + +```yaml +sftp: + docker-compose: + ports: + - "10322:22" + volumes: + - /srv/datastore/data/odoo/opt/odoo/auto/lokavaluto:/home/monujo/lokavaluto-addons:rw + options: + users: + monujo: + groups: + - monujo-rw:3000 + password: yLzTieeTwJmMlFZG + keys: + - "ssh-rsa AAAAB3N...PUBLICKEYGOESHERE... odoo@example.org" +``` + +The volumes section allows to `publish` and give access to the place +where odoo reads the module's code. + +The public key is the public key part corresponding to the private key +that needs to be sent by the client (in github secrets). + +Note that group `monujo-rw` is important. You should give the right of +all files that are to be modified the group `3000` from the host: + +``` +chown 1000:3000 /srv/datastore/data/odoo/opt/odoo/auto/lokavaluto -R +``` + +### incron + +Incron is the tool used for the github deployement to signal the end +of the upload of the new files. It should trigger a restart of the +odoo docker. + +Directory that allows triggering the event must be created and +permissions should be set so sftp user can write in it: + +```bash +mkdir -p /srv/datastore/data/sftp/home/monujo/lokavaluto-addons.updated +cd /srv/datastore/data/sftp/home/monujo/lokavaluto-addons.updated +chown 1000:3000 -R . +``` + +To install `incron`: + +```bash +apt-get install incron +echo "root" > /etc/incron.allow +``` + +To edit: + +```bash +EDITOR=vim incrontab -e +``` + +Line to create in current installation + +``` +/srv/datastore/data/sftp/home/monujo/lokavaluto-addons.updated IN_CREATE,IN_MODIFY docker restart myc_odoo_1 +``` + +It is expected that the client will delete and add a file in folder: +`lokavaluto-addons.updated` to trigger the reload. + diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..c309004a --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,54 @@ +name: "🚀 deploy CI" +on: + push: + branches: + - demo + - test + - dev1 + - dev2 + - dev3 + paths-ignore: + - 'README*' + +jobs: + deploy: + name: Deploy + runs-on: ubuntu-latest + steps: + - name: 🚚 Get code + uses: actions/checkout@v2 + + ## XXXvlab: contrary two what was expected from ltfp in mirror + ## mode, this setup is highly inefficient: because through sftp, + ## lftp is not able to set correctly dates so it just delete and + ## rewrite everything on the other end. We need to change that + ## with ``rclone`` solution I guess if we don't want to change + ## ``sftp`` protocol. + - name: "📂 SFTP Sync files" + uses: swillner/sftp-sync-action@v1.0 + with: + server: ${{ github.ref_name }}.lokavaluto.fr + port: 10322 + user: monujo + user_private_key: ${{ secrets.sftp_private_key }} + host_public_key: + local: ./ + remote: /lokavaluto-addons + mirror_options: "--exclude-glob=.git*/ --verbose" + ## This part is to ensure that we can trigger actions after + ## the sync occured on the destination host. + - name: 🔨 Prepare last-updated + run: | + mkdir last-updated + date > last-updated/done + - name: "📂 SFTP Send last-updated" + uses: swillner/sftp-sync-action@v1.0 + with: + server: ${{ github.ref_name }}.lokavaluto.fr + port: 10322 + user: monujo + user_private_key: ${{ secrets.sftp_private_key }} + host_public_key: + local: ./last-updated + remote: /lokavaluto-addons.updated + mirror_options: "--verbose" diff --git a/lcc_comchain_base/__manifest__.py b/lcc_comchain_base/__manifest__.py index c1c9cd82..c3aea28a 100644 --- a/lcc_comchain_base/__manifest__.py +++ b/lcc_comchain_base/__manifest__.py @@ -17,7 +17,7 @@ "data": [ "security/ir_rule.xml", "views/res_config_settings_view.xml", - "views/lcc_backend.xml", + "views/wallet.xml", "data/comchain_data.xml", ], # only loaded in demonstration mode diff --git a/lcc_comchain_base/i18n/fr.po b/lcc_comchain_base/i18n/fr.po index 2112b47b..6f683a43 100644 --- a/lcc_comchain_base/i18n/fr.po +++ b/lcc_comchain_base/i18n/fr.po @@ -1,37 +1,57 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * lcc_comchain_base +# * lcc_comchain_base # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-11 21:24+0000\n" -"PO-Revision-Date: 2023-12-11 21:24+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2024-06-27 08:59+0000\n" +"PO-Revision-Date: 2024-06-27 08:59+0000\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: lcc_comchain_base +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "Comchain Last block checked" +msgstr "Dernier bloc Comchain vérifié" + +#. module: lcc_comchain_base +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "Comchain Odoo wallet" +msgstr "PPortefeuille Comchain Odoo" + +#. module: lcc_comchain_base +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "Comchain Safe wallet" +msgstr "Portefeuille Comchain Coffre-Fort" + #. module: lcc_comchain_base #: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain msgid "Comchain currency name" msgstr "Nom de la monnaie Comchain" +#. module: lcc_comchain_base +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "Comchain top-up messages" +msgstr "Messages de recharge Comchain" + #. module: lcc_comchain_base #: model:ir.model.fields,field_description:lcc_comchain_base.field_res_partner_backend__comchain_id msgid "Address" msgstr "Adresse" #. module: lcc_comchain_base -#: selection:res.partner.backend,comchain_type:0 +#: model:ir.model.fields.selection,name:lcc_comchain_base.selection__res_partner_backend__comchain_type__2 msgid "Admin" msgstr "" #. module: lcc_comchain_base -#: selection:res.partner.backend,type:0 +#: model:ir.model.fields.selection,name:lcc_comchain_base.selection__res_partner_backend__type__comchain msgid "Comchain" msgstr "" @@ -46,7 +66,7 @@ msgid "Comchain service configuration" msgstr "Configuration de Comchain" #. module: lcc_comchain_base -#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.lcc_backend_comchain_form_view +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.wallet_comchain_form_view msgid "Comchain specific" msgstr "Spécifique Comchain" @@ -56,14 +76,14 @@ msgid "Companies" msgstr "Sociétés" #. module: lcc_comchain_base -#: selection:res.partner.backend,comchain_type:0 +#: model:ir.model.fields.selection,name:lcc_comchain_base.selection__res_partner_backend__comchain_type__1 msgid "Company" msgstr "Société" #. module: lcc_comchain_base #: model:ir.model,name:lcc_comchain_base.model_res_config_settings msgid "Config Settings" -msgstr "Paramètres de config" +msgstr "Paramètres de configuration" #. module: lcc_comchain_base #: model:ir.model,name:lcc_comchain_base.model_res_partner @@ -86,27 +106,39 @@ msgid "Currency name" msgstr "Nom de la monnaie" #. module: lcc_comchain_base -#: model:ir.model,name:lcc_comchain_base.model_account_invoice -msgid "Invoice" -msgstr "Facture" +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_company__last_block_checked_nb +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_config_settings__last_block_checked_nb +msgid "Last Block Checked Nb" +msgstr "Nb dernier bloc vérifié" #. module: lcc_comchain_base #: model:ir.model.fields,field_description:lcc_comchain_base.field_res_partner_backend__comchain_credit_max msgid "Max Credit limit" msgstr "Crédit max" +#. module: lcc_comchain_base +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_company__message_from +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_config_settings__message_from +msgid "Message from" +msgstr "Message de" + #. module: lcc_comchain_base #: model:ir.model.fields,field_description:lcc_comchain_base.field_res_partner_backend__comchain_message_key msgid "Message keys" msgstr "Clés de message" +#. module: lcc_comchain_base +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_company__message_to +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_config_settings__message_to +msgid "Message to" +msgstr "Message à" + #. module: lcc_comchain_base #: model:ir.model.fields,field_description:lcc_comchain_base.field_res_partner_backend__comchain_credit_min msgid "Min Credit limit" msgstr "Crédit min" #. module: lcc_comchain_base -#: model:product.product,name:lcc_comchain_base.product_product_comchain #: model:product.template,name:lcc_comchain_base.product_product_comchain_product_template msgid "Numeric LCC (comchain)" msgstr "MLC Numérique (comchain)" @@ -124,7 +156,7 @@ msgid "Odoo wallet password" msgstr "Mot de pass du portefeuille Odoo" #. module: lcc_comchain_base -#: selection:res.partner.backend,comchain_type:0 +#: model:ir.model.fields.selection,name:lcc_comchain_base.selection__res_partner_backend__comchain_type__0 msgid "Personal" msgstr "Personnel" @@ -146,38 +178,30 @@ msgstr "Sélectionner le contact lié au portefeuille Coffre-fort" #. module: lcc_comchain_base #: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain -msgid "Select the partners linked to the Safe and Odoo wallets. The\n" -" name of these partners will be displayed as the sender of the\n" -" top-up." -msgstr "Sélectionner les contacts liés aux portefeuilles Coffre-fort et Odoo. Les\n" -" noms de ces contacts seront affichés comme source des\n" -" chargements." - -#. module: lcc_comchain_base -#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_partner_backend__comchain_type -#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_partner_backend__type -msgid "Type" +msgid "" +"Select the partner linked to the Safe wallet.\n" +" This wallet will be used for top up and reconversion\n" +" processes." msgstr "" +"Sélectionner le contact lié au portefeuille Coffre-Fort.\n" +" Ce porteeuille sera utilisé pour les chargements et les reconversions." #. module: lcc_comchain_base -#: model:product.product,uom_name:lcc_comchain_base.product_product_comchain -#: model:product.template,uom_name:lcc_comchain_base.product_product_comchain_product_template -msgid "Unit(s)" -msgstr "Unité(s)" - -#. module: lcc_comchain_base -#: model:product.category,name:lcc_comchain_base.product_category_comchain -msgid "comchain" +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "" +"Select the partners linked to the Odoo wallet, that has the\n" +" delegation to perform top-ups from the safe wallet." msgstr "" +"Sélectionner le contact lié au portefeuille de Odoo, qui a la\n" +" procuration pour réaliser des chargements depuis le portefeuille Coffre-fort." #. module: lcc_comchain_base -#: model:product.product,weight_uom_name:lcc_comchain_base.product_product_comchain -#: model:product.template,weight_uom_name:lcc_comchain_base.product_product_comchain_product_template -msgid "kg" +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_partner_backend__comchain_type +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_partner_backend__type +msgid "Type" msgstr "" #. module: lcc_comchain_base #: model:ir.model,name:lcc_comchain_base.model_res_partner_backend msgid "res.partner.backend" msgstr "" - diff --git a/lcc_comchain_base/i18n/lcc_comchain_base.pot b/lcc_comchain_base/i18n/lcc_comchain_base.pot index 360db9fe..1258f40a 100644 --- a/lcc_comchain_base/i18n/lcc_comchain_base.pot +++ b/lcc_comchain_base/i18n/lcc_comchain_base.pot @@ -1,37 +1,57 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * lcc_comchain_base +# * lcc_comchain_base # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-11 21:23+0000\n" -"PO-Revision-Date: 2023-12-11 21:23+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2024-06-27 08:56+0000\n" +"PO-Revision-Date: 2024-06-27 08:56+0000\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: lcc_comchain_base +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "Comchain Last block checked" +msgstr "" + +#. module: lcc_comchain_base +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "Comchain Odoo wallet" +msgstr "" + +#. module: lcc_comchain_base +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "Comchain Safe wallet" +msgstr "" + #. module: lcc_comchain_base #: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain msgid "Comchain currency name" msgstr "" +#. module: lcc_comchain_base +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "Comchain top-up messages" +msgstr "" + #. module: lcc_comchain_base #: model:ir.model.fields,field_description:lcc_comchain_base.field_res_partner_backend__comchain_id msgid "Address" msgstr "" #. module: lcc_comchain_base -#: selection:res.partner.backend,comchain_type:0 +#: model:ir.model.fields.selection,name:lcc_comchain_base.selection__res_partner_backend__comchain_type__2 msgid "Admin" msgstr "" #. module: lcc_comchain_base -#: selection:res.partner.backend,type:0 +#: model:ir.model.fields.selection,name:lcc_comchain_base.selection__res_partner_backend__type__comchain msgid "Comchain" msgstr "" @@ -46,7 +66,7 @@ msgid "Comchain service configuration" msgstr "" #. module: lcc_comchain_base -#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.lcc_backend_comchain_form_view +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.wallet_comchain_form_view msgid "Comchain specific" msgstr "" @@ -56,7 +76,7 @@ msgid "Companies" msgstr "" #. module: lcc_comchain_base -#: selection:res.partner.backend,comchain_type:0 +#: model:ir.model.fields.selection,name:lcc_comchain_base.selection__res_partner_backend__comchain_type__1 msgid "Company" msgstr "" @@ -86,8 +106,9 @@ msgid "Currency name" msgstr "" #. module: lcc_comchain_base -#: model:ir.model,name:lcc_comchain_base.model_account_invoice -msgid "Invoice" +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_company__last_block_checked_nb +#: model:ir.model.fields,field_description:lcc_comchain_base.field_res_config_settings__last_block_checked_nb +msgid "Last Block Checked Nb" msgstr "" #. module: lcc_comchain_base @@ -118,7 +139,6 @@ msgid "Min Credit limit" msgstr "" #. module: lcc_comchain_base -#: model:product.product,name:lcc_comchain_base.product_product_comchain #: model:product.template,name:lcc_comchain_base.product_product_comchain_product_template msgid "Numeric LCC (comchain)" msgstr "" @@ -136,7 +156,7 @@ msgid "Odoo wallet password" msgstr "" #. module: lcc_comchain_base -#: selection:res.partner.backend,comchain_type:0 +#: model:ir.model.fields.selection,name:lcc_comchain_base.selection__res_partner_backend__comchain_type__0 msgid "Personal" msgstr "" @@ -147,25 +167,28 @@ msgid "Safe Wallet Partner" msgstr "" #. module: lcc_comchain_base -#: model:ir.model,name:lcc_comchain_base.model_sale_order -msgid "Sale Order" +#: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain +msgid "Select partner linked to Odoo wallet." msgstr "" #. module: lcc_comchain_base #: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain -msgid "Select partner linked to Odoo wallet." +msgid "Select partner linked to safe wallet." msgstr "" #. module: lcc_comchain_base #: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain -msgid "Select partner linked to safe wallet." +msgid "" +"Select the partner linked to the Safe wallet.\n" +" This wallet will be used for top up and reconversion\n" +" processes." msgstr "" #. module: lcc_comchain_base #: model_terms:ir.ui.view,arch_db:lcc_comchain_base.res_config_settings_view_form_comchain -msgid "Select the partners linked to the Safe and Odoo wallets. The\n" -" name of these partners will be displayed as the sender of the\n" -" top-up." +msgid "" +"Select the partners linked to the Odoo wallet, that has the\n" +" delegation to perform top-ups from the safe wallet." msgstr "" #. module: lcc_comchain_base @@ -174,25 +197,7 @@ msgstr "" msgid "Type" msgstr "" -#. module: lcc_comchain_base -#: model:product.product,uom_name:lcc_comchain_base.product_product_comchain -#: model:product.template,uom_name:lcc_comchain_base.product_product_comchain_product_template -msgid "Unit(s)" -msgstr "" - -#. module: lcc_comchain_base -#: model:product.category,name:lcc_comchain_base.product_category_comchain -msgid "comchain" -msgstr "" - -#. module: lcc_comchain_base -#: model:product.product,weight_uom_name:lcc_comchain_base.product_product_comchain -#: model:product.template,weight_uom_name:lcc_comchain_base.product_product_comchain_product_template -msgid "kg" -msgstr "" - #. module: lcc_comchain_base #: model:ir.model,name:lcc_comchain_base.model_res_partner_backend msgid "res.partner.backend" msgstr "" - diff --git a/lcc_comchain_base/models/__init__.py b/lcc_comchain_base/models/__init__.py index 69f67cf3..94132149 100644 --- a/lcc_comchain_base/models/__init__.py +++ b/lcc_comchain_base/models/__init__.py @@ -1,4 +1,4 @@ from . import res_config_settings from . import company from . import res_partner -from . import res_partner_backend +from . import wallet diff --git a/lcc_comchain_base/models/company.py b/lcc_comchain_base/models/company.py index 62694cd2..6c81a3d9 100644 --- a/lcc_comchain_base/models/company.py +++ b/lcc_comchain_base/models/company.py @@ -1,4 +1,11 @@ +import logging +from datetime import datetime from odoo import models, fields, api +from odoo.addons.lcc_lokavaluto_app_connection import tools +from pyc3l import Pyc3l + +pyc3l = Pyc3l() +_logger = logging.getLogger(__name__) class Company(models.Model): @@ -19,3 +26,54 @@ def _default_messages(self): comchain_odoo_wallet_password = fields.Char(string="Odoo wallet password") message_from = fields.Char("Message from", default=_default_messages) message_to = fields.Char("Message to", default=_default_messages) + + last_block_checked_nb = fields.Integer('Last Block Checked Nb') + + def _retrieve_last_debit_transactions(self): + """A list of transactions (dictionnary) is expected, with the following data: + - sender: the Odoo name of the wallet concerned by the debit request, + - amount: the amount debited from the wallet, + - tx_id: the transaction ID in the digital currency backend + - tx_timestamp: the timestamp of the transaction + """ + res = super(Company, self)._retrieve_last_debit_transactions() + + # Retrieve all the debit transactions from the newly created blocks + company_id = self.env.user.company_id + try: + # Get the ID of the last blockchain block built + last_block_id = pyc3l.getBlockNumber() + # Loop on all the blocks created since the last check + _logger.info("Start reconversion check on Comchain from block %s to block %s" % (company_id.last_block_checked_nb, last_block_id) ) + for block_nb in range(company_id.last_block_checked_nb + 1, last_block_id + 1): + _logger.info("Get Debit Transactions - read block %s" % block_nb) + # Get the block transactions + block_txs = pyc3l.BlockByNumber(block_nb).bc_txs + for tx in block_txs: + if not tx.currency: + continue # this transaction is not linked with a currency + if not tx.currency.name.lower() == company_id.comchain_currency_name.lower(): + continue # this transaction is about another smart contract + full_tx = tx.full_tx + if not full_tx.is_cc_transaction: + continue # this transaction is not a digital currency transfer + if not full_tx.direction == 1: + continue # this transaction is not a reconversion + _logger.info("Transactions %s retrieved" % tx.hash) + sender_adress = full_tx.add2.lstrip("0x") + matched_wallet = self.env["res.partner.backend"].search([("comchain_id", "ilike", sender_adress)]) + if len(matched_wallet) == 0: + continue # this transactions comes from a wallet no registered in current Odoo database + string_amount = str(full_tx.sent) + res.append({ + "sender": "comchain:%s" % sender_adress, + "amount": f"{string_amount[0:-2]}.{string_amount[-2:]}", + "tx_id": tx.hash, + "tx_timestamp": datetime.fromtimestamp(int(full_tx.receivedat["value"])), + }) + + company_id.last_block_checked_nb = last_block_id + except Exception as e: + _logger.error(tools.format_last_exception()) + + return res \ No newline at end of file diff --git a/lcc_comchain_base/models/res_config_settings.py b/lcc_comchain_base/models/res_config_settings.py index 7b28656e..a2eaba19 100644 --- a/lcc_comchain_base/models/res_config_settings.py +++ b/lcc_comchain_base/models/res_config_settings.py @@ -33,3 +33,5 @@ class ResConfigSettings(models.TransientModel): message_to = fields.Char( related="company_id.message_to", readonly=False, string="Message to" ) + + last_block_checked_nb = fields.Integer(related="company_id.last_block_checked_nb", readonly=False, string='Last Block Checked Nb') diff --git a/lcc_comchain_base/models/res_partner_backend.py b/lcc_comchain_base/models/wallet.py similarity index 99% rename from lcc_comchain_base/models/res_partner_backend.py rename to lcc_comchain_base/models/wallet.py index 0158a17d..bbac97e4 100644 --- a/lcc_comchain_base/models/res_partner_backend.py +++ b/lcc_comchain_base/models/wallet.py @@ -77,6 +77,7 @@ def comchain_backend_accounts_data(self): "wallet": wallet, "message_key": self.comchain_message_key, "active": self.status == "active", + "reconversion": self.is_reconversion_allowed, } ) diff --git a/lcc_comchain_base/views/res_config_settings_view.xml b/lcc_comchain_base/views/res_config_settings_view.xml index 5caf6e4d..ced7f648 100644 --- a/lcc_comchain_base/views/res_config_settings_view.xml +++ b/lcc_comchain_base/views/res_config_settings_view.xml @@ -19,40 +19,66 @@ -
+
-
-
-
-
+
+
+
+
+ Comchain Safe wallet
- Select the partners linked to the Safe and Odoo wallets. The - name of these partners will be displayed as the sender of the - top-up. + Select the partner linked to the Safe wallet. + This wallet will be used for top up and reconversion + processes.
-
+
+
+
+
+
+ Comchain Odoo wallet +
+ Select the partners linked to the Odoo wallet, that has the + delegation to perform top-ups from the safe wallet. +
-
+
+
+
+ Comchain top-up messages +
+
+
+
+
+
diff --git a/lcc_comchain_base/views/lcc_backend.xml b/lcc_comchain_base/views/wallet.xml similarity index 85% rename from lcc_comchain_base/views/lcc_backend.xml rename to lcc_comchain_base/views/wallet.xml index 8a80e62a..6e6ee598 100644 --- a/lcc_comchain_base/views/lcc_backend.xml +++ b/lcc_comchain_base/views/wallet.xml @@ -1,10 +1,10 @@ - - lcc.backend.comchain.form.view + + wallet.comchain.form.view res.partner.backend - + 0 diff --git a/lcc_cyclos_base/__manifest__.py b/lcc_cyclos_base/__manifest__.py index ca4c278d..db1ed079 100644 --- a/lcc_cyclos_base/__manifest__.py +++ b/lcc_cyclos_base/__manifest__.py @@ -19,7 +19,7 @@ "security/ir_rule.xml", "views/res_config_settings_view.xml", "views/res_partner_view.xml", - "views/lcc_backend.xml", + "views/wallet.xml", "data/cyclos_data.xml", ], 'assets': { diff --git a/lcc_cyclos_base/data/cyclos_data.xml b/lcc_cyclos_base/data/cyclos_data.xml index 9bbeca41..24b14b8c 100644 --- a/lcc_cyclos_base/data/cyclos_data.xml +++ b/lcc_cyclos_base/data/cyclos_data.xml @@ -2,19 +2,31 @@ - + Cyclos 1.0 1.0 - - + + Numeric LCC (Cyclos) - - + + consu - - + + + Cyclos Debit Wallet + + + cyclos:system + cyclos + + active + system + + + + \ No newline at end of file diff --git a/lcc_cyclos_base/i18n/fr.po b/lcc_cyclos_base/i18n/fr.po index 03a78326..1772a9bc 100644 --- a/lcc_cyclos_base/i18n/fr.po +++ b/lcc_cyclos_base/i18n/fr.po @@ -1,20 +1,25 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * lcc_cyclos_base +# * lcc_cyclos_base # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-11 21:22+0000\n" -"PO-Revision-Date: 2023-12-11 21:22+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2024-06-27 08:21+0000\n" +"PO-Revision-Date: 2024-06-27 08:21+0000\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: lcc_cyclos_base +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.res_config_settings_view_form_cyclos +msgid "Cyclos Debit Wallet Partner" +msgstr "Contact du portefeuille de débit Cyclos" + #. module: lcc_cyclos_base #: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.res_config_settings_view_form_cyclos msgid "Cyclos server Login" @@ -31,12 +36,17 @@ msgid "Cyclos server URL" msgstr "URL Cyclos serveur" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.res_config_settings_view_form_cyclos +msgid "Date of last reconversion check" +msgstr "Date de la dernière vérification des reconversions" + +#. module: lcc_cyclos_base +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Activate Cyclos Wallet" msgstr "Activer le portefeuille" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Block Cyclos Wallet" msgstr "Bloquer le portefeuille" @@ -53,7 +63,7 @@ msgstr "Sociétés" #. module: lcc_cyclos_base #: model:ir.model,name:lcc_cyclos_base.model_res_config_settings msgid "Config Settings" -msgstr "Paramètres de config" +msgstr "Paramètres de configuration" #. module: lcc_cyclos_base #: model:ir.model,name:lcc_cyclos_base.model_res_partner @@ -66,11 +76,16 @@ msgid "Create new Cyclos Wallet" msgstr "Créer un portefeuille Cyclos" #. module: lcc_cyclos_base -#: model:product.category,name:lcc_cyclos_base.product_category_cyclos -#: selection:res.partner.backend,type:0 +#: model:ir.model.fields.selection,name:lcc_cyclos_base.selection__res_partner_backend__type__cyclos msgid "Cyclos" msgstr "" +#. module: lcc_cyclos_base +#: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_company__cyclos_debit_wallet_partner +#: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_config_settings__cyclos_debit_wallet_partner +msgid "Cyclos Debit Wallet Partner" +msgstr "Contact portefeuille de débit Cyclos" + #. module: lcc_cyclos_base #: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_partner_backend__cyclos_status msgid "Cyclos Status" @@ -92,19 +107,20 @@ msgid "Cyclos service configuration" msgstr "Configuration de Cyclos" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Cyclos specific" msgstr "Spécifique Cyclos" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Disable Cyclos Wallet" msgstr "Désactiver le portefeuille" #. module: lcc_cyclos_base -#: model:ir.model,name:lcc_cyclos_base.model_account_invoice -msgid "Invoice" -msgstr "Facture" +#: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_company__cyclos_date_last_reconversion_check +#: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_config_settings__cyclos_date_last_reconversion_check +msgid "Last reconversion date on Cyclos" +msgstr "Dernière date de reconversion sur Cyclos" #. module: lcc_cyclos_base #: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_company__cyclos_server_login @@ -113,7 +129,6 @@ msgid "Login for cyclos server" msgstr "Login pour le serveur Cyclos" #. module: lcc_cyclos_base -#: model:product.product,name:lcc_cyclos_base.product_product_cyclos #: model:product.template,name:lcc_cyclos_base.product_product_cyclos_product_template msgid "Numeric LCC (Cyclos)" msgstr "MLC Numérique (Cyclos)" @@ -125,28 +140,20 @@ msgid "Password for cyclos server" msgstr "Mot de passe pour le serveur Cyclos" #. module: lcc_cyclos_base -#: code:addons/lcc_cyclos_base/models/res_users.py:26 -#: code:addons/lcc_cyclos_base/models/res_users.py:37 +#. odoo-python +#: code:addons/lcc_cyclos_base/models/res_users.py:0 +#: code:addons/lcc_cyclos_base/models/res_users.py:0 +#: code:addons/lcc_cyclos_base/models/res_users.py:0 +#: code:addons/lcc_cyclos_base/models/res_users.py:0 #, python-format msgid "Password must contain only the following characters: %s" msgstr "Le mot de passe doit contenir seulement les caractères suivants : %s" -#. module: lcc_cyclos_base -#: model:ir.model,name:lcc_cyclos_base.model_sale_order -msgid "Sale Order" -msgstr "Bon de commande" - #. module: lcc_cyclos_base #: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_partner_backend__type msgid "Type" msgstr "" -#. module: lcc_cyclos_base -#: model:product.product,uom_name:lcc_cyclos_base.product_product_cyclos -#: model:product.template,uom_name:lcc_cyclos_base.product_product_cyclos_product_template -msgid "Unit(s)" -msgstr "Unité(s)" - #. module: lcc_cyclos_base #: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_company__cyclos_server_url msgid "Url for cyclos server" @@ -159,22 +166,15 @@ msgstr "URL pour le serveur Cyclos" #. module: lcc_cyclos_base #: model:ir.model,name:lcc_cyclos_base.model_res_users -msgid "Users" -msgstr "Utilisateurs" +msgid "User" +msgstr "Utilisateur" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Validate Cyclos Wallet" msgstr "Activer le portefeuille" -#. module: lcc_cyclos_base -#: model:product.product,weight_uom_name:lcc_cyclos_base.product_product_cyclos -#: model:product.template,weight_uom_name:lcc_cyclos_base.product_product_cyclos_product_template -msgid "kg" -msgstr "" - #. module: lcc_cyclos_base #: model:ir.model,name:lcc_cyclos_base.model_res_partner_backend msgid "res.partner.backend" msgstr "" - diff --git a/lcc_cyclos_base/i18n/lcc_cyclos_base.pot b/lcc_cyclos_base/i18n/lcc_cyclos_base.pot index dbabb07c..9ded3104 100644 --- a/lcc_cyclos_base/i18n/lcc_cyclos_base.pot +++ b/lcc_cyclos_base/i18n/lcc_cyclos_base.pot @@ -1,20 +1,25 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * lcc_cyclos_base +# * lcc_cyclos_base # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-11 21:20+0000\n" -"PO-Revision-Date: 2023-12-11 21:20+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2024-06-27 08:20+0000\n" +"PO-Revision-Date: 2024-06-27 08:20+0000\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: lcc_cyclos_base +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.res_config_settings_view_form_cyclos +msgid "Cyclos Debit Wallet Partner" +msgstr "" + #. module: lcc_cyclos_base #: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.res_config_settings_view_form_cyclos msgid "Cyclos server Login" @@ -31,12 +36,17 @@ msgid "Cyclos server URL" msgstr "" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.res_config_settings_view_form_cyclos +msgid "Date of last reconversion check" +msgstr "" + +#. module: lcc_cyclos_base +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Activate Cyclos Wallet" msgstr "" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Block Cyclos Wallet" msgstr "" @@ -66,11 +76,16 @@ msgid "Create new Cyclos Wallet" msgstr "" #. module: lcc_cyclos_base -#: model:product.category,name:lcc_cyclos_base.product_category_cyclos -#: selection:res.partner.backend,type:0 +#: model:ir.model.fields.selection,name:lcc_cyclos_base.selection__res_partner_backend__type__cyclos msgid "Cyclos" msgstr "" +#. module: lcc_cyclos_base +#: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_company__cyclos_debit_wallet_partner +#: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_config_settings__cyclos_debit_wallet_partner +msgid "Cyclos Debit Wallet Partner" +msgstr "" + #. module: lcc_cyclos_base #: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_partner_backend__cyclos_status msgid "Cyclos Status" @@ -92,18 +107,19 @@ msgid "Cyclos service configuration" msgstr "" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Cyclos specific" msgstr "" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Disable Cyclos Wallet" msgstr "" #. module: lcc_cyclos_base -#: model:ir.model,name:lcc_cyclos_base.model_account_invoice -msgid "Invoice" +#: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_company__cyclos_date_last_reconversion_check +#: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_config_settings__cyclos_date_last_reconversion_check +msgid "Last reconversion date on Cyclos" msgstr "" #. module: lcc_cyclos_base @@ -113,7 +129,6 @@ msgid "Login for cyclos server" msgstr "" #. module: lcc_cyclos_base -#: model:product.product,name:lcc_cyclos_base.product_product_cyclos #: model:product.template,name:lcc_cyclos_base.product_product_cyclos_product_template msgid "Numeric LCC (Cyclos)" msgstr "" @@ -125,28 +140,20 @@ msgid "Password for cyclos server" msgstr "" #. module: lcc_cyclos_base -#: code:addons/lcc_cyclos_base/models/res_users.py:26 -#: code:addons/lcc_cyclos_base/models/res_users.py:37 +#. odoo-python +#: code:addons/lcc_cyclos_base/models/res_users.py:0 +#: code:addons/lcc_cyclos_base/models/res_users.py:0 +#: code:addons/lcc_cyclos_base/models/res_users.py:0 +#: code:addons/lcc_cyclos_base/models/res_users.py:0 #, python-format msgid "Password must contain only the following characters: %s" msgstr "" -#. module: lcc_cyclos_base -#: model:ir.model,name:lcc_cyclos_base.model_sale_order -msgid "Sale Order" -msgstr "" - #. module: lcc_cyclos_base #: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_partner_backend__type msgid "Type" msgstr "" -#. module: lcc_cyclos_base -#: model:product.product,uom_name:lcc_cyclos_base.product_product_cyclos -#: model:product.template,uom_name:lcc_cyclos_base.product_product_cyclos_product_template -msgid "Unit(s)" -msgstr "" - #. module: lcc_cyclos_base #: model:ir.model.fields,field_description:lcc_cyclos_base.field_res_company__cyclos_server_url msgid "Url for cyclos server" @@ -159,22 +166,15 @@ msgstr "" #. module: lcc_cyclos_base #: model:ir.model,name:lcc_cyclos_base.model_res_users -msgid "Users" +msgid "User" msgstr "" #. module: lcc_cyclos_base -#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.lcc_backend_cyclos_form_view +#: model_terms:ir.ui.view,arch_db:lcc_cyclos_base.wallet_cyclos_form_view msgid "Validate Cyclos Wallet" msgstr "" -#. module: lcc_cyclos_base -#: model:product.product,weight_uom_name:lcc_cyclos_base.product_product_cyclos -#: model:product.template,weight_uom_name:lcc_cyclos_base.product_product_cyclos_product_template -msgid "kg" -msgstr "" - #. module: lcc_cyclos_base #: model:ir.model,name:lcc_cyclos_base.model_res_partner_backend msgid "res.partner.backend" msgstr "" - diff --git a/lcc_cyclos_base/models/__init__.py b/lcc_cyclos_base/models/__init__.py index d4f6f86a..07d26c60 100644 --- a/lcc_cyclos_base/models/__init__.py +++ b/lcc_cyclos_base/models/__init__.py @@ -1,5 +1,5 @@ from . import res_config_settings from . import company from . import res_partner -from . import res_partner_backend +from . import wallet from . import res_users diff --git a/lcc_cyclos_base/models/company.py b/lcc_cyclos_base/models/company.py index 16a90dcd..9c76e043 100644 --- a/lcc_cyclos_base/models/company.py +++ b/lcc_cyclos_base/models/company.py @@ -1,8 +1,16 @@ +import json import re -from urllib.parse import urlparse +import requests +from datetime import datetime, timedelta +from requests.auth import HTTPBasicAuth +from urllib.parse import urlparse, quote from werkzeug.exceptions import NotFound from odoo import models, fields +from odoo.addons.lcc_lokavaluto_app_connection import tools +import logging + +_logger = logging.getLogger(__name__) class Company(models.Model): _inherit = "res.company" @@ -14,6 +22,12 @@ class Company(models.Model): cyclos_server_password = fields.Char(string="Password for cyclos server") + cyclos_debit_wallet_partner = fields.Many2one( + "res.partner", string="Cyclos Debit Wallet Partner" + ) + + cyclos_date_last_reconversion_check = fields.Datetime('Last reconversion date on Cyclos') + def get_cyclos_server_domain(self): self.ensure_one() url = self.cyclos_server_url @@ -31,3 +45,98 @@ def get_cyclos_server_domain(self): % (parsed_uri.netloc, url) ) return parsed_uri.netloc + + + def cyclos_rest_call( + self, method, entrypoint, data={}, api_login=False, api_password=False + ): + self.ensure_one() + headers = {"Content-type": "application/json", "Accept": "text/plain"} + requests.packages.urllib3.disable_warnings() + if not api_login: + api_login = self.cyclos_server_login + if not api_password: + api_password = self.cyclos_server_password + api_url = "%s%s" % (self.cyclos_server_url, entrypoint) + res = requests.request( + method.lower(), + api_url, + auth=HTTPBasicAuth(api_login, api_password), + verify=False, + data=json.dumps(data), + headers=headers, + ) + try: + res.raise_for_status() + except requests.exceptions.HTTPError as e: + if e.response.status_code == 404: + raise Exception("404 when trying to reach cyclos on %s" % api_url) + try: + json_output = e.response.json() + _logger.debug(e.response.json()) + except ValueError as e: + _logger.debug(e.response.text) + raise Exception("Non-json output from cyclos on %s" % api_url) + + if e.response.status_code == 422: + msg = self.build_cyclos_error_message(e) + if msg != "": + raise ValueError( + "Cyclos serveur complained about:\n%s" % "\n".join(msg), + e.response, + ) + raise + return res + + def build_cyclos_error_message(self, e): + json_error = e.response.json() + msg = "" + if json_error.get("code") == "validation": + if json_error.get("propertyErrors"): + error = json_error.get("propertyErrors") + elif json_error.get("generalErrors"): + error = json_error.get("generalErrors") + msg = [" - %s: %s" % (k, ", ".join(v)) for k, v in error.items()] + return msg + + # def format_datetime_to_milliseconds(date_str): + # dt = datetime.fromisoformat(date_str) + # return dt.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + + def _retrieve_last_debit_transactions(self): + """A list of transactions (dictionnary) is expected, with the following data: + - sender: the Odoo name of the wallet concerned by the debit request, + - amount: the amount debited from the wallet, + - tx_id: the transaction ID in the digital currency backend + - tx_timestamp: the timestamp of the transaction + """ + res = super(Company, self)._retrieve_last_debit_transactions() + + # Retrieve all the debit transactions since the last check minus 1 min + company_id = self.env.user.company_id + # we need a date on ISO8601 format "1970-01-01T00:00:00.000", then encoded to be in an URL + if not company_id.cyclos_date_last_reconversion_check: + date = "1970-01-01T00:00:00.000" + else: + date=(company_id.cyclos_date_last_reconversion_check - timedelta(minutes=1)).strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + encoded_date = quote(date, safe='') + + # Set all the search criteria in the REST request entrypoint + entrypoint = "/transfers?datePeriod=%s&orderBy=dateDesc&toAccountTypes=debit" % encoded_date + + # Get the transactions from Cyclos + response = company_id.cyclos_rest_call("GET", entrypoint) + transactions = json.loads(response.text) + for tx in transactions: + try: + res.append({ + "sender": "cyclos:%s" % tx["from"]["user"]["id"], + "amount": tx["amount"], + "tx_id": tx["id"], + "tx_timestamp": datetime.fromisoformat(tx["date"]).replace(tzinfo=None), + }) + except Exception as e: + _logger.error(tools.format_last_exception()) + if transactions: + company_id.cyclos_date_last_reconversion_check = datetime.fromisoformat(transactions[0]["date"]).replace(tzinfo=None) + return res \ No newline at end of file diff --git a/lcc_cyclos_base/models/res_config_settings.py b/lcc_cyclos_base/models/res_config_settings.py index a79db842..f5c7f64b 100644 --- a/lcc_cyclos_base/models/res_config_settings.py +++ b/lcc_cyclos_base/models/res_config_settings.py @@ -21,3 +21,16 @@ class ResConfigSettings(models.TransientModel): readonly=False, string="Password for cyclos server", ) + + cyclos_debit_wallet_partner = fields.Many2one( + "res.partner", + related="company_id.cyclos_debit_wallet_partner", + readonly=False, + string="Cyclos Debit Wallet Partner" + ) + + cyclos_date_last_reconversion_check = fields.Datetime( + related="company_id.cyclos_date_last_reconversion_check", + readonly=False, + string='Last reconversion date on Cyclos' + ) diff --git a/lcc_cyclos_base/models/res_partner.py b/lcc_cyclos_base/models/res_partner.py index 5ae55641..738d1050 100644 --- a/lcc_cyclos_base/models/res_partner.py +++ b/lcc_cyclos_base/models/res_partner.py @@ -69,10 +69,10 @@ def cyclos_add_user(self): ], } try: - res = backend_obj._cyclos_rest_call("POST", "/users", data=data) + res = self.env.user.company_id.cyclos_rest_call("POST", "/users", data=data) except requests.exceptions.HTTPError as e: if e.response.status_code == 422: - msg = backend_obj._build_cyclos_error_message(e) + msg = self.env.user.company_id.build_cyclos_error_message(e) if msg != "": raise ValueError( "Cyclos serveur complained about:\n%s" % "\n".join(msg), diff --git a/lcc_cyclos_base/models/res_partner_backend.py b/lcc_cyclos_base/models/wallet.py similarity index 74% rename from lcc_cyclos_base/models/res_partner_backend.py rename to lcc_cyclos_base/models/wallet.py index a3318be9..906a090e 100644 --- a/lcc_cyclos_base/models/res_partner_backend.py +++ b/lcc_cyclos_base/models/wallet.py @@ -1,7 +1,5 @@ import requests import json -from urllib.parse import urlparse -from requests.auth import HTTPBasicAuth from odoo import models, fields, api from odoo.addons.lcc_lokavaluto_app_connection import tools import logging @@ -32,10 +30,10 @@ def _update_search_data(self, backend_keys): @property def cyclos_backend_json_data(self): """Return normalized backend account's data""" - cyclos_server_url = self.env.user.company_id.get_cyclos_server_domain() + backend_key = "%s:%s" % ("cyclos", self.env.user.company_id.get_cyclos_server_domain()) cyclos_product = self.env.ref("lcc_cyclos_base.product_product_cyclos").sudo() data = { - "type": "%s:%s" % ("cyclos", cyclos_server_url), + "type": backend_key, "accounts": [], "min_credit_amount": getattr(cyclos_product, "sale_min_qty", 0), "max_credit_amount": getattr(cyclos_product, "sale_max_qty", 0), @@ -46,8 +44,35 @@ def cyclos_backend_json_data(self): "owner_id": self.cyclos_id, "url": self.env.user.company_id.cyclos_server_url, "active": self.status == "active", + "reconversion": self.is_reconversion_allowed, } ) + + company = self.partner_id.company_id + safe_wallet_partner = company.cyclos_debit_wallet_partner + + if safe_wallet_partner: + + safe_wallet_profile_info = safe_wallet_partner.lcc_profile_info() + if safe_wallet_profile_info: + if len(safe_wallet_profile_info) > 1: + raise ValueError("Safe partner has more than one public profile") + + ## Safe wallet is configured and has a public profile + data["safe_wallet_recipient"] = safe_wallet_profile_info[0] + + monujo_backends = safe_wallet_partner.lcc_backend_ids._update_search_data( + [backend_key] + ) + if len(monujo_backends) > 1: + raise ValueError("Safe partner has more than one wallet") + data["safe_wallet_recipient"]["monujo_backends"] = monujo_backends + + else: + _logger.error( + "Safe wallet %s has no public profile", + safe_wallet_partner.name, + ) return [data] @api.depends("name", "type", "cyclos_status") @@ -66,61 +91,11 @@ def _compute_status(self): else: rec.status = "" - def _build_cyclos_error_message(self, e): - json_error = e.response.json() - msg = "" - if json_error.get("code") == "validation": - if json_error.get("propertyErrors"): - error = json_error.get("propertyErrors") - elif json_error.get("generalErrors"): - error = json_error.get("generalErrors") - msg = [" - %s: %s" % (k, ", ".join(v)) for k, v in error.items()] - return msg - - def _cyclos_rest_call( - self, method, entrypoint, data={}, api_login=False, api_password=False - ): - headers = {"Content-type": "application/json", "Accept": "text/plain"} - requests.packages.urllib3.disable_warnings() - if not api_login: - api_login = self.env.user.company_id.cyclos_server_login - if not api_password: - api_password = self.env.user.company_id.cyclos_server_password - api_url = "%s%s" % (self.env.user.company_id.cyclos_server_url, entrypoint) - res = requests.request( - method.lower(), - api_url, - auth=HTTPBasicAuth(api_login, api_password), - verify=False, - data=json.dumps(data), - headers=headers, - ) - try: - res.raise_for_status() - except requests.exceptions.HTTPError as e: - if e.response.status_code == 404: - raise Exception("404 when trying to reach cyclos on %s" % api_url) - try: - json_output = e.response.json() - _logger.debug(e.response.json()) - except ValueError as e: - raise Exception("Non-json output from cyclos on %s" % api_url) - _logger.debug(e.response.text) - - if e.response.status_code == 422: - msg = self._build_cyclos_error_message(e) - if msg != "": - raise ValueError( - "Cyclos serveur complained about:\n%s" % "\n".join(msg), - e.response, - ) - raise - return res - def cyclos_validate_user(self): + company_id = self.env.user.company_id for record in self: if record.cyclos_status == "pending": - res = record._cyclos_rest_call( + res = company_id.cyclos_rest_call( "POST", "/%s/registration/validate" % record.cyclos_id ) _logger.debug("res: %s" % res.text) @@ -134,13 +109,14 @@ def cyclos_validate_user(self): ) def cyclos_activate_user(self): + company_id = self.env.user.company_id for record in self: if record.cyclos_status != "active": data = {"status": "active", "comment": "Activated by Odoo"} - record._cyclos_rest_call( + company_id.cyclos_rest_call( "POST", "/%s/status" % record.cyclos_id, data=data ) - res = record._cyclos_rest_call("GET", "/%s/status" % record.cyclos_id) + res = company_id.cyclos_rest_call("GET", "/%s/status" % record.cyclos_id) _logger.debug("res: %s" % res) data_res = json.loads(res.text) record.write( @@ -150,13 +126,14 @@ def cyclos_activate_user(self): ) def cyclos_block_user(self): + company_id = self.env.user.company_id for record in self: if record.cyclos_status != "blocked": data = {"status": "blocked", "comment": "Blocked by Odoo"} - record._cyclos_rest_call( + company_id.cyclos_rest_call( "POST", "/%s/status" % record.cyclos_id, data=data ) - res = record._cyclos_rest_call("GET", "/%s/status" % record.cyclos_id) + res = company_id.cyclos_rest_call("GET", "/%s/status" % record.cyclos_id) _logger.debug("res: %s" % res) data_res = json.loads(res.text) record.write( @@ -166,13 +143,14 @@ def cyclos_block_user(self): ) def cyclos_disable_user(self): + company_id = self.env.user.company_id for record in self: if record.cyclos_status != "disabled": data = {"status": "disabled", "comment": "Disabled by Odoo"} - record._cyclos_rest_call( + company_id.cyclos_rest_call( "POST", "/%s/status" % record.cyclos_id, data=data ) - res = record._cyclos_rest_call("GET", "/%s/status" % record.cyclos_id) + res = company_id.cyclos_rest_call("GET", "/%s/status" % record.cyclos_id) _logger.debug("res: %s" % res) data_res = json.loads(res.text) record.write( @@ -182,6 +160,7 @@ def cyclos_disable_user(self): ) def force_cyclos_password(self, password): + company_id = self.env.user.company_id for record in self: # TODO: need to stock password type id from cyclos API and replace -4307382460900696903 data = { @@ -191,7 +170,7 @@ def force_cyclos_password(self, password): "forceChange": False, } try: - record._cyclos_rest_call( + company_id.cyclos_rest_call( "POST", "/%s/passwords/%s/change" % (record.cyclos_id, "-4307382460900696903"), @@ -209,8 +188,9 @@ def force_cyclos_password(self, password): def cyclos_create_user_token(self, api_login, api_password): self.ensure_one() + company_id = self.env.user.company_id for record in self: - res = record._cyclos_rest_call( + res = company_id.cyclos_rest_call( "POST", "/auth/session", data={"timeoutInSeconds": 90000}, @@ -222,8 +202,9 @@ def cyclos_create_user_token(self, api_login, api_password): return data.get("sessionToken", False) def cyclos_remove_user_token(self, api_login, api_password): + company_id = self.env.user.company_id for record in self: - res = record._cyclos_rest_call( + res = company_id.cyclos_rest_call( "DELETE", "/auth/session", api_login=api_login, @@ -245,7 +226,7 @@ def credit_wallet(self, amount=0): "type": "debit.toPro" if self.partner_id.is_company else "debit.toUser", } _logger.debug("data: %s" % data) - response = self._cyclos_rest_call("POST", "/system/payments", data=data) + response = self.env.user.company_id.cyclos_rest_call("POST", "/system/payments", data=data) _logger.debug("response: %s" % response) # TODO: need to check response res = {"success": True, "response": response} diff --git a/lcc_cyclos_base/views/lcc_backend.xml b/lcc_cyclos_base/views/lcc_backend.xml deleted file mode 100644 index bba0fe61..00000000 --- a/lcc_cyclos_base/views/lcc_backend.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - lcc.backend.cyclos.form.view - res.partner.backend - - 0 - - - - - - - -
-
-
- -
-
- -
diff --git a/lcc_cyclos_base/views/res_config_settings_view.xml b/lcc_cyclos_base/views/res_config_settings_view.xml index d16ee9a1..bb7c6171 100644 --- a/lcc_cyclos_base/views/res_config_settings_view.xml +++ b/lcc_cyclos_base/views/res_config_settings_view.xml @@ -37,6 +37,24 @@
+
+
+
+ Cyclos Debit Wallet Partner +
+ +
+
+
+
+
+
+ Date of last reconversion check +
+ +
+
+
diff --git a/lcc_cyclos_base/views/wallet.xml b/lcc_cyclos_base/views/wallet.xml new file mode 100644 index 00000000..38febff2 --- /dev/null +++ b/lcc_cyclos_base/views/wallet.xml @@ -0,0 +1,36 @@ + + + + + wallet.cyclos.form.view + res.partner.backend + + 0 + + + + + + + +
+
+
+ +
+
+ +
\ No newline at end of file diff --git a/lcc_lokavaluto_app_connection/README.rst b/lcc_lokavaluto_app_connection/README.rst index 35ef0f62..155e253c 100644 --- a/lcc_lokavaluto_app_connection/README.rst +++ b/lcc_lokavaluto_app_connection/README.rst @@ -12,6 +12,12 @@ Installation Just install lcc_lokavaluto_app_connection, all dependencies will be installed by default. +Utilisation +============ + +You can choose to allow sending allocation to individuals or not +Go to "Settings">"Digital Currency">"allow credit request only to company" + Known issues / Roadmap ====================== diff --git a/lcc_lokavaluto_app_connection/__manifest__.py b/lcc_lokavaluto_app_connection/__manifest__.py index e48e97fe..e19fbc79 100644 --- a/lcc_lokavaluto_app_connection/__manifest__.py +++ b/lcc_lokavaluto_app_connection/__manifest__.py @@ -4,7 +4,7 @@ "author": "Lokavaluto", "website": "https://lokavaluto.fr", "category": "Website", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", # any module necessary for this one to work correctly "depends": [ "auth_api_key", @@ -14,7 +14,6 @@ "base_rest_datamodel", "jsonifier", "lcc_members", - "membership", "onchange_helper", "partner_favorite", "partner_profiles_portal", @@ -28,12 +27,16 @@ "views/account_invoice.xml", "views/res_partner.xml", "views/sale_order.xml", - "views/lcc_backend.xml", + "views/wallet.xml", "views/credit_request.xml", + "views/debit_request.xml", + "views/commission_rule.xml", + "views/reconversion_rule.xml", "views/menu.xml", "views/portal_my_home.xml", "views/res_config_settings_view.xml", "data/numeric_data.xml", + "data/res_company_data.xml", ], # only loaded in demonstration mode "demo": [], diff --git a/lcc_lokavaluto_app_connection/data/numeric_data.xml b/lcc_lokavaluto_app_connection/data/numeric_data.xml index 3e298acd..432e71f2 100644 --- a/lcc_lokavaluto_app_connection/data/numeric_data.xml +++ b/lcc_lokavaluto_app_connection/data/numeric_data.xml @@ -15,5 +15,15 @@ consu + + + 1.0 + 1.0 + + + Digital Currency Reconversion Commission + + consu + \ No newline at end of file diff --git a/lcc_lokavaluto_app_connection/data/res_company_data.xml b/lcc_lokavaluto_app_connection/data/res_company_data.xml new file mode 100644 index 00000000..41da6b48 --- /dev/null +++ b/lcc_lokavaluto_app_connection/data/res_company_data.xml @@ -0,0 +1,14 @@ + + + + Company: import new digital currency debit requests + + code + model._cron_import_new_digital_currency_debit_requests() + 15 + minutes + -1 + 0 + + + \ No newline at end of file diff --git a/lcc_lokavaluto_app_connection/datamodel/partner_info.py b/lcc_lokavaluto_app_connection/datamodel/partner_info.py index f9943538..a4927f35 100644 --- a/lcc_lokavaluto_app_connection/datamodel/partner_info.py +++ b/lcc_lokavaluto_app_connection/datamodel/partner_info.py @@ -8,6 +8,10 @@ class PartnerCreditRequestsGetParam(Datamodel): backend_keys = fields.List(fields.String()) +class PartnerReconversions(Datamodel): + _name = "partner.reconversions" + + transactions = fields.List(fields.String()) class PartnerSearchInfo(Datamodel): _name = "partner.search.info" diff --git a/lcc_lokavaluto_app_connection/i18n/fr.po b/lcc_lokavaluto_app_connection/i18n/fr.po index 5e7f4171..db9018f6 100644 --- a/lcc_lokavaluto_app_connection/i18n/fr.po +++ b/lcc_lokavaluto_app_connection/i18n/fr.po @@ -1,14 +1,14 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * lcc_lokavaluto_app_connection +# * lcc_lokavaluto_app_connection # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-11 20:43+0000\n" -"PO-Revision-Date: 2023-12-11 20:43+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2024-06-27 07:08+0000\n" +"PO-Revision-Date: 2024-06-27 07:08+0000\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,17 +23,20 @@ msgstr "." #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app -msgid ". For any maintenance action\n" +msgid "" +". For any maintenance action\n" " concerning these wallets, please contact your currency manager." msgstr ". Pour une action de maintenance\n" " concernant ces portefeuilles, veuillez contacter votre gestionnaire de portefeuille."" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.portal_my_home_monujo_menu -msgid "
\n" +msgid "" +"
\n" " Applications mobiles:\n" "
" -msgstr "
\n" +msgstr "" +"
\n" " Applications mobiles:\n" "
" @@ -42,6 +45,11 @@ msgstr "
\n" msgid "Android app download URL" msgstr "URL de téléchargement Android" +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency +msgid "Commission Product" +msgstr "Article de Commission à la reconversion" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency msgid "Web application URL" @@ -54,11 +62,13 @@ msgstr "Url de téléchargement IOS" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_form -msgid "An error status doesn't always mean the credit request\n" +msgid "" +"An error status doesn't always mean the credit request\n" " failed.
Before trying again to credit the wallet,\n" " please check on the transactions database that the request\n" " has not successed." -msgstr "Le statut Erreur ne signifie pas toujours que la demande de chargement\n" +msgstr "" +"Le statut Erreur ne signifie pas toujours que la demande de chargement\n" " a échoué.
Avant d'essayer à nouveau de recharger le portefeuille,\n" " veuillez vérifier dans la base de données de transactions que la requête\n" " a bien échoué." @@ -85,57 +95,129 @@ msgid "Activate top up on Comchain without Admin validation." msgstr "Activer le rechargement Comchain sans la validation d'un administrateur." #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__active +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__active +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__active #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__active -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search -#: selection:res.partner.backend,status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__res_partner_backend__status__active +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Active" msgstr "Actif" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__amount #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__amount +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__amount msgid "Amount" msgstr "Montant" +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +msgid "Archived" +msgstr "Archivé" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_form +msgid "Authorisation" +msgstr "Autorisation" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency msgid "Automatic Top Up" msgstr "Rechargement automatique" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search -#: selection:res.partner.backend,status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__res_partner_backend__status__blocked +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Blocked" msgstr "Bloqué" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__calculation_rule +msgid "Calculation Rule" +msgstr "Règle de calcul" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_form +msgid "Calculation process" +msgstr "PRocessus de calcul" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.create_credit_request_wizard_view_form msgid "Cancel" msgstr "Annuler" #. module: lcc_lokavaluto_app_connection -#: selection:res.partner.backend,type:0 -msgid "Comchain" -msgstr "" +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__commission_move_state__cancelled +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__debit_move_state__cancelled +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__cancelled +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Cancelled" +msgstr "Annulé" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__commission_move_id +msgid "Commission Invoice" +msgstr "Facture de commission" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__commission_move_state +msgid "Commission Invoice State" +msgstr "État Facture de commission" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_company__commission_product_id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_config_settings__commission_product_id +msgid "Commission Product" +msgstr "Article de commission à la reconversion" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_form +msgid "Commission Rule" +msgstr "Règle de commission" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_commission_rule +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.commission_rule_menu +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_tree +msgid "Commission Rules" +msgstr "Règles de commission" #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_res_company msgid "Companies" msgstr "Sociétés" +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.server,name:lcc_lokavaluto_app_connection.ir_cron_import_new_digital_currency_debit_requests_ir_actions_server +#: model:ir.cron,cron_name:lcc_lokavaluto_app_connection.ir_cron_import_new_digital_currency_debit_requests +msgid "Company: import new digital currency debit requests" +msgstr "Société : importer les nouvelles demandes de reconversion" + #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_res_config_settings msgid "Config Settings" -msgstr "Paramètres de config" +msgstr "Paramètres de configuration" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.menu_config_digital_currency +msgid "Configuration" +msgstr "Configuration" #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_res_partner -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Contact" msgstr "" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form msgid "Content" msgstr "Contenu" @@ -149,21 +231,57 @@ msgstr "Créer" msgid "Create Credit Request" msgstr "Créer une demande de chargement" +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form +msgid "Create Invoices" +msgstr "Créer les factures" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.create_credit_request_wizard_view_form msgid "Create a credit request" msgstr "Créer une demande de chargement" #. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_commission_rule +msgid "Create a new commission rule." +msgstr "Créer une nouvelle règle de commission à la reconversion." + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_credit_request +msgid "Create a new credit request." +msgstr "Créer une nouvelle demande de chargement." + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_debit_request +msgid "Create a new debit request." +msgstr "Créer une nouvelle demande de reconversion." + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_reconversion_rule +msgid "Create a new reconversion rule." +msgstr "Créer une nouvelle règle de reconversion." + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_wallet_view +msgid "Create a new wallet." +msgstr "Créer un nouveau portefeuille" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__create_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__create_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__create_uid +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__create_uid +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__create_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__create_uid msgid "Created by" msgstr "Créé par" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__create_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__create_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__create_date +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__create_date +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__create_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__create_date msgid "Created on" msgstr "Créé le" @@ -177,22 +295,60 @@ msgstr "Demande de chargement" #. module: lcc_lokavaluto_app_connection #: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_credit_request -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__credit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__credit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__credit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__credit_request_ids #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__credit_request_ids -#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.credit_request_tree_menu +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.credit_requests_menu #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_tree msgid "Credit Requests" msgstr "Demandes de chargement" #. module: lcc_lokavaluto_app_connection -#: selection:res.partner.backend,type:0 -msgid "Cyclos" -msgstr "" +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__debit_move_id +msgid "Debit Invoice" +msgstr "Facture de reconversion" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__debit_move_state +msgid "Debit Invoice State" +msgstr "État facture de reconversion" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form +msgid "Debit Request" +msgstr "Demande de reconversion" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_debit_request +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__debit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__debit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__debit_request_ids +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.debit_requests_menu +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_tree +msgid "Debit Requests" +msgstr "Demandes de reconversion" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency msgid "Digital Currency" -msgstr "Monnaie numérique" +msgstr "Monnaie Numérique" + +#. module: lcc_lokavaluto_app_connection +#: model:product.template,name:lcc_lokavaluto_app_connection.product_product_reconversion_commission_product_template +msgid "Digital Currency Reconversion Commission" +msgstr "Commission à la reconversion Monnaie Numérique" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_form_view +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_tree +msgid "Digital Currency Wallet" +msgstr "Portefeuille de Monnaie Numérique" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.menu_digital_currencies +msgid "Digital currencies" +msgstr "Monnaies numériques" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency @@ -200,22 +356,33 @@ msgid "Digital currency application configuration" msgstr "Configuration des applications de monnaie numérique" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__display_name #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__display_name #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__display_name +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__display_name +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__display_name #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__display_name msgid "Display Name" msgstr "Nom affiché" #. module: lcc_lokavaluto_app_connection -#: selection:account.invoice,global_credit_status:0 -#: selection:credit.request,state:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__account_move__global_credit_status__done +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__credit_request__state__done +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__sale_order__global_credit_status__done #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search -#: selection:sale.order,global_credit_status:0 msgid "Done" msgstr "Terminé" #. module: lcc_lokavaluto_app_connection -#: selection:credit.request,state:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__commission_move_state__draft +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__debit_move_state__draft +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__draft +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Draft" +msgstr "Brouillon" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__credit_request__state__error #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search msgid "Error" msgstr "Erreur" @@ -228,114 +395,129 @@ msgstr "Message d'erreur" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency msgid "Financial backend general configuration" -msgstr "Configuration générale du moteur de transactions" +msgstr "Configuration générale du moteur de transaction" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__commission_rule__calculation_rule__fix +msgid "Fix amount" +msgstr "Montant fixe" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +msgid "Fix rules" +msgstr "Montants fixes" #. module: lcc_lokavaluto_app_connection -#: model:product.product,name:lcc_lokavaluto_app_connection.product_product_numeric_lcc #: model:product.template,name:lcc_lokavaluto_app_connection.product_product_numeric_lcc_product_template msgid "Generic Numeric LCC" msgstr "MLC Numérique générique" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__global_credit_status +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__global_credit_status +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__global_credit_status +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__global_credit_status #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__global_credit_status msgid "Global Credit Status" msgstr "État général des chargements" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__has_numeric_lcc_products +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__has_numeric_lcc_products +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__has_numeric_lcc_products +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__has_numeric_lcc_products #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__has_numeric_lcc_products msgid "Has lcc numeric products" msgstr "A des produits de monnaie numérique" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__id msgid "ID" msgstr "" #. module: lcc_lokavaluto_app_connection -#: code:addons/lcc_lokavaluto_app_connection/controllers/portal.py:49 -#, python-format -msgid "If we store your payment information on our server, subscription payments will be made automatically." -msgstr "Si nous stockons vos informations de paiement sur notre serveur, les paiements d'adhésion seront fait automatiquement." - -#. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search -#: selection:res.partner.backend,status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__res_partner_backend__status__inactive +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Inactive" msgstr "Inactif" #. module: lcc_lokavaluto_app_connection -#: model:ir.model,name:lcc_lokavaluto_app_connection.model_account_invoice -msgid "Invoice" -msgstr "Facture" +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__invoiced +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Invoiced" +msgstr "Facturé" #. module: lcc_lokavaluto_app_connection -#: model:ir.model,name:lcc_lokavaluto_app_connection.model_account_invoice_line -msgid "Invoice Line" -msgstr "Ligne de facture" +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__is_reconversion_allowed +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__is_reconversion_allowed +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__is_reconversion_allowed +msgid "Is Reconversion Allowed?" +msgstr "Reconversion autorisée ?" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_auth_api_key__key -msgid "Key" -msgstr "Clé" +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_account_move +msgid "Journal Entry" +msgstr "Pièce comptable" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_form_view -msgid "LCC Backend" -msgstr "Portefeuilles numériques" +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_account_move_line +msgid "Journal Item" +msgstr "Écriture comptable" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_tree -msgid "LCC Backends" -msgstr "Moteurs de transactions" +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_auth_api_key__key +msgid "Key" +msgstr "Clef" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__global_lcc_amount_credited +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__global_lcc_amount_credited +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__global_lcc_amount_credited +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__global_lcc_amount_credited #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__global_lcc_amount_credited msgid "LCC amount credited" msgstr "Montant crédité" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__global_lcc_amount_to_credit +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__global_lcc_amount_to_credit +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__global_lcc_amount_to_credit +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__global_lcc_amount_to_credit #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__global_lcc_amount_to_credit msgid "LCC amount to credit" msgstr "Montant à créditer" #. module: lcc_lokavaluto_app_connection -#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_lcc_backends_tree_view -#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.lcc_backends_tree_menu -msgid "LCC backends" -msgstr "Portefeuilles numériques" - -#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule____last_update #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request____last_update #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request____last_update +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request____last_update +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule____last_update #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend____last_update msgid "Last Modified on" msgstr "Dernière modification le" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__write_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__write_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__write_uid +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__write_uid +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__write_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__write_uid msgid "Last Updated by" msgstr "Dernière modification par" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__write_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__write_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__write_date +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__write_date +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__write_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__write_date msgid "Last Updated on" msgstr "Dernière mise à jour le" -#. module: lcc_lokavaluto_app_connection -#: model:ir.model,name:lcc_lokavaluto_app_connection.model_crm_lead -msgid "Lead/Opportunity" -msgstr "Piste/opportunité" - #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__invoice_id msgid "Linked Invoice" @@ -348,6 +530,7 @@ msgstr "Bon de commande lié" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form msgid "Linked documents" msgstr "Documents liés" @@ -362,7 +545,7 @@ msgstr "Portefeuilles numériques" #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_company__monujo_android_app_url #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_config_settings__monujo_android_app_url msgid "Monujo Android app URL" -msgstr "" +msgstr "URL de l'application Monujo pour Android" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_company__monujo_ios_app_url @@ -374,12 +557,14 @@ msgstr "URL de l'application Monujo pour iOS" #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_company__monujo_web_app_url #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_config_settings__monujo_web_app_url msgid "Monujo web app URL" -msgstr "URL de l'application Monujo pour web" +msgstr "URL de l'application Monujo Web" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_auth_api_key__name +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__name +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__name #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__name -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Name" msgstr "Nom" @@ -408,38 +593,41 @@ msgid "Nb Wallets to confirm" msgstr "Nb portefeuilles à confirmer" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_form_view +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_form_view msgid "New Credit Request" msgstr "Nouvelle demande de chargement" #. module: lcc_lokavaluto_app_connection -#: code:addons/lcc_lokavaluto_app_connection/services/partner_images_services.py:38 -#, python-format -msgid "No image found for partner %s" -msgstr "Pas d'image trouvée pour le partenaire %s" - -#. module: lcc_lokavaluto_app_connection -#: model:product.category,name:lcc_lokavaluto_app_connection.product_category_numeric_lcc -msgid "Numeric LCC" -msgstr "MLC numérique" +#: model:ir.module.category,name:lcc_lokavaluto_app_connection.module_category_administration_wallets +msgid "Numeric Wallets" +msgstr "Portefeuilles numériques" #. module: lcc_lokavaluto_app_connection -#: selection:account.invoice,global_credit_status:0 -#: selection:sale.order,global_credit_status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__account_move__global_credit_status__ongoing +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__sale_order__global_credit_status__ongoing msgid "On going" msgstr "En cours" #. module: lcc_lokavaluto_app_connection -#: selection:credit.request,state:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__credit_request__state__open #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search msgid "Open" msgstr "Ouvert" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__commission_move_state__paid +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__debit_move_state__paid +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__paid +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Paid" +msgstr "Payé" + #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__partner_id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__partner_id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__partner_id msgid "Partner" -msgstr "Partenaire" +msgstr "Contact" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__partner_public_name @@ -447,34 +635,77 @@ msgid "Partner Public Name" msgstr "Nom public du contact" #. module: lcc_lokavaluto_app_connection -#: code:addons/lcc_lokavaluto_app_connection/controllers/portal.py:46 -#, python-format -msgid "Pay & Confirm" -msgstr "Payer & Confirmer" - -#. module: lcc_lokavaluto_app_connection -#: selection:credit.request,state:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__credit_request__state__pending #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search msgid "Pending" msgstr "En attente" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__commission_rule__calculation_rule__percentage +msgid "Percentage" +msgstr "Pourcentage" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +msgid "Percentage rules" +msgstr "Pourcentage" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.portal_my_home_monujo_menu msgid "Portefeuille numérique" msgstr "Portefeuille numérique" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.portal_organization_registration_wallet -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.portal_private_registration_wallet -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.website_organization_registration_wallet -msgid "Refuse numeric wallet creation" -msgstr "Refuser la création d'un portefeuille numérique" +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__commission_move_state__posted +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__debit_move_state__posted +msgid "Posted" +msgstr "Envoyé" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__received +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Received" +msgstr "Reçu" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +msgid "Reconversion OFF" +msgstr "Reconversion OFF" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +msgid "Reconversion ON" +msgstr "Reconversion ON" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_form +msgid "Reconversion Rule" +msgstr "Règle de reconversion" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_reconversion_rule +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.reconversion_rule_menu +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_tree +msgid "Reconversion Rules" +msgstr "Règles de reconversion" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form +msgid "" +"Reconversion rules indicate that reconversions are presumed NOT ALLOWED on\n" +" the selected wallet." +msgstr "Les règles sur les reconversions indiques que celles-ci sont en théorie NON autorisée sur\n" +" le portefeuille sélectionné." + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_form_view +msgid "Reconversions are NOT allowed on this wallet." +msgstr "Les reconversions ne sont PAS autorisées sur ce portefeuille." #. module: lcc_lokavaluto_app_connection -#: code:addons/lcc_lokavaluto_app_connection/models/crm_lead.py:11 -#, python-format -msgid "Refuse the creation of a numeric wallet." -msgstr "Refuser la création d'un portefeuille numérique." +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_form_view +msgid "Reconversions are allowed on this wallet." +msgstr "Les reconversions sont autorisées sur ce portefeuille." #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_form @@ -483,8 +714,13 @@ msgstr "Réponse" #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_sale_order -msgid "Sale Order" -msgstr "Bon de commande" +msgid "Sales Order" +msgstr "Bons de commande" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +msgid "Search commission rules" +msgstr "Chercher de règles de commission" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search @@ -492,12 +728,23 @@ msgid "Search credit requests" msgstr "Chercher le demandes de chargement" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Search debit requests" +msgstr "Chercher les demandes de reconversion" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +msgid "Search reconversion rules" +msgstr "Chercher les règles de reconversion" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Search wallets" msgstr "Chercher les portefeuilles" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__state +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__state msgid "State" msgstr "État" @@ -508,31 +755,49 @@ msgstr "État" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,help:lcc_lokavaluto_app_connection.field_auth_api_key__key -msgid "The API key. Keep the default value in this field if it is\n" +msgid "" +"The API key. Enter a dummy value in this field if it is\n" " obtained from the server environment configuration." msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:res.partner.backend,status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__res_partner_backend__status__to_confirm msgid "To Confirm" -msgstr "A confirmer" +msgstr "À confirmer" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "To confirm" -msgstr "A confirmer" +msgstr "À confirmer" #. module: lcc_lokavaluto_app_connection -#: selection:account.invoice,global_credit_status:0 -#: selection:sale.order,global_credit_status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__account_move__global_credit_status__todo +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__sale_order__global_credit_status__todo msgid "To do" -msgstr "A faire" +msgstr "À faire" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__transaction_id +msgid "Transaction ID" +msgstr "ID de la transaction" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.constraint,message:lcc_lokavaluto_app_connection.constraint_debit_request_transaction_id_uniq +msgid "" +"Transaction ID must be unique, a request already exists with this " +"transaction ID!" +msgstr "L'ID de la transaction doit être unique, une demande existe déjà avec cet ID de transaction." #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__transaction_data msgid "Transaction Message" msgstr "Message de transaction" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__transaction_timestamp +msgid "Transaction Timestamp" +msgstr "Horodatage de la transaction" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_form msgid "Try again" @@ -540,22 +805,30 @@ msgstr "Ré-essayer" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__type -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Type" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:product.product,uom_name:lcc_lokavaluto_app_connection.product_product_numeric_lcc -#: model:product.template,uom_name:lcc_lokavaluto_app_connection.product_product_numeric_lcc_product_template -msgid "Unit(s)" -msgstr "Unité(s)" +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__calculation_value +msgid "Value" +msgstr "Valeur" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__wallet_id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__wallet_id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__wallet_id msgid "Wallet" msgstr "Portefeuille" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__wallet_domain +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__wallet_domain +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_form +msgid "Wallet Domain" +msgstr "Domaine des portefeuilles" + #. module: lcc_lokavaluto_app_connection #: model:res.groups,name:lcc_lokavaluto_app_connection.group_wallet_accounts_manager msgid "Wallet accounts manager" @@ -563,14 +836,25 @@ msgstr "Gestionnaire de portefeuille" #. module: lcc_lokavaluto_app_connection #: model:res.groups,name:lcc_lokavaluto_app_connection.group_wallet_full_manager -msgid "Wallet_full_manager" +msgid "Wallet full manager" msgstr "Gestionnaire du moteur de transaction" +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_wallet_view +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.wallets_menu +msgid "Wallets" +msgstr "Portefeuilles" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app msgid "blocked wallet(s)" msgstr "portfeuille(s) bloqué(s)" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_commission_rule +msgid "commission.rule" +msgstr "règle de commissin" + #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_create_credit_request msgid "create Credit Request" @@ -581,6 +865,11 @@ msgstr "créer un demande de chargement" msgid "credit.request" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_debit_request +msgid "debit.request" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app msgid "has" @@ -591,19 +880,20 @@ msgstr "a" msgid "inactive wallet(s)." msgstr "portefeuille(s) inactif(s)" -#. module: lcc_lokavaluto_app_connection -#: model:product.product,weight_uom_name:lcc_lokavaluto_app_connection.product_product_numeric_lcc -#: model:product.template,weight_uom_name:lcc_lokavaluto_app_connection.product_product_numeric_lcc_product_template -msgid "kg" -msgstr "" - #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app -msgid "pending for\n" +msgid "" +"pending for\n" " activation." -msgstr "En attente\n" +msgstr "" +"en attente \n" " d'activation." +#. module: lcc_lokavaluto_app_connection +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_reconversion_rule +msgid "reconversion.rule" +msgstr "règle de reconversion" + #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_res_partner_backend msgid "res.partner.backend" @@ -612,17 +902,22 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.view_account_invoice_customer_lcc_form #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.view_order_lcc_form -msgid "units have been\n" +msgid "" +"units have been\n" " credited on" -msgstr "unités ont été\n" +msgstr "" +"unités ont été\n" " créditée" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.view_account_invoice_customer_lcc_form #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.view_order_lcc_form -msgid "unités encore à\n" -" créditer" +msgid "" +"units still to\n" +" credit on" msgstr "" +"unités encore\n" +" à créditer" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app diff --git a/lcc_lokavaluto_app_connection/i18n/lcc_lokavaluto_app_connection.pot b/lcc_lokavaluto_app_connection/i18n/lcc_lokavaluto_app_connection.pot index d3dd4931..38c60adf 100644 --- a/lcc_lokavaluto_app_connection/i18n/lcc_lokavaluto_app_connection.pot +++ b/lcc_lokavaluto_app_connection/i18n/lcc_lokavaluto_app_connection.pot @@ -1,14 +1,14 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * lcc_lokavaluto_app_connection +# * lcc_lokavaluto_app_connection # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-11 20:41+0000\n" -"PO-Revision-Date: 2023-12-11 20:41+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2024-06-27 07:04+0000\n" +"PO-Revision-Date: 2024-06-27 07:04+0000\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,13 +23,15 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app -msgid ". For any maintenance action\n" +msgid "" +". For any maintenance action\n" " concerning these wallets, please contact your currency manager." msgstr "" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.portal_my_home_monujo_menu -msgid "
\n" +msgid "" +"
\n" " Applications mobiles:\n" "
" msgstr "" @@ -39,6 +41,11 @@ msgstr "" msgid "Android app download URL" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency +msgid "Commission Product" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency msgid "Web application URL" @@ -51,7 +58,8 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_form -msgid "An error status doesn't always mean the credit request\n" +msgid "" +"An error status doesn't always mean the credit request\n" " failed.
Before trying again to credit the wallet,\n" " please check on the transactions database that the request\n" " has not successed." @@ -79,37 +87,97 @@ msgid "Activate top up on Comchain without Admin validation." msgstr "" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__active +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__active +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__active #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__active -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search -#: selection:res.partner.backend,status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__res_partner_backend__status__active +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Active" msgstr "" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__amount #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__amount +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__amount msgid "Amount" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +msgid "Archived" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_form +msgid "Authorisation" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency msgid "Automatic Top Up" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search -#: selection:res.partner.backend,status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__res_partner_backend__status__blocked +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Blocked" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__calculation_rule +msgid "Calculation Rule" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_form +msgid "Calculation process" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.create_credit_request_wizard_view_form msgid "Cancel" msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:res.partner.backend,type:0 -msgid "Comchain" +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__commission_move_state__cancelled +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__debit_move_state__cancelled +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__cancelled +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Cancelled" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__commission_move_id +msgid "Commission Invoice" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__commission_move_state +msgid "Commission Invoice State" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_company__commission_product_id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_config_settings__commission_product_id +msgid "Commission Product" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_form +msgid "Commission Rule" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_commission_rule +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.commission_rule_menu +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_tree +msgid "Commission Rules" msgstr "" #. module: lcc_lokavaluto_app_connection @@ -117,19 +185,31 @@ msgstr "" msgid "Companies" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.server,name:lcc_lokavaluto_app_connection.ir_cron_import_new_digital_currency_debit_requests_ir_actions_server +#: model:ir.cron,cron_name:lcc_lokavaluto_app_connection.ir_cron_import_new_digital_currency_debit_requests +msgid "Company: import new digital currency debit requests" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_res_config_settings msgid "Config Settings" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.menu_config_digital_currency +msgid "Configuration" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_res_partner -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Contact" msgstr "" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form msgid "Content" msgstr "" @@ -143,21 +223,57 @@ msgstr "" msgid "Create Credit Request" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form +msgid "Create Invoices" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.create_credit_request_wizard_view_form msgid "Create a credit request" msgstr "" #. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_commission_rule +msgid "Create a new commission rule." +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_credit_request +msgid "Create a new credit request." +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_debit_request +msgid "Create a new debit request." +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_reconversion_rule +msgid "Create a new reconversion rule." +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.actions.act_window,help:lcc_lokavaluto_app_connection.action_wallet_view +msgid "Create a new wallets." +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__create_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__create_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__create_uid +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__create_uid +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__create_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__create_uid msgid "Created by" msgstr "" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__create_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__create_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__create_date +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__create_date +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__create_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__create_date msgid "Created on" msgstr "" @@ -171,16 +287,38 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_credit_request -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__credit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__credit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__credit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__credit_request_ids #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__credit_request_ids -#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.credit_request_tree_menu +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.credit_requests_menu #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_tree msgid "Credit Requests" msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:res.partner.backend,type:0 -msgid "Cyclos" +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__debit_move_id +msgid "Debit Invoice" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__debit_move_state +msgid "Debit Invoice State" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form +msgid "Debit Request" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_debit_request +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__debit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__debit_request_ids +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__debit_request_ids +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.debit_requests_menu +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_tree +msgid "Debit Requests" msgstr "" #. module: lcc_lokavaluto_app_connection @@ -188,28 +326,60 @@ msgstr "" msgid "Digital Currency" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:product.template,name:lcc_lokavaluto_app_connection.product_product_reconversion_product_template +msgid "Digital Currency Reconversion" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:product.template,name:lcc_lokavaluto_app_connection.product_product_reconversion_commission_product_template +msgid "Digital Currency Reconversion Commission" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_form_view +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_tree +msgid "Digital Currency Wallet" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.menu_digital_currencies +msgid "Digital currencies" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.res_config_settings_view_form_digital_currency msgid "Digital currency application configuration" msgstr "" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__display_name #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__display_name #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__display_name +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__display_name +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__display_name #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__display_name msgid "Display Name" msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:account.invoice,global_credit_status:0 -#: selection:credit.request,state:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__account_move__global_credit_status__done +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__credit_request__state__done +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__sale_order__global_credit_status__done #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search -#: selection:sale.order,global_credit_status:0 msgid "Done" msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:credit.request,state:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__commission_move_state__draft +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__debit_move_state__draft +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__draft +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Draft" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__credit_request__state__error #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search msgid "Error" msgstr "" @@ -225,111 +395,126 @@ msgid "Financial backend general configuration" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:product.product,name:lcc_lokavaluto_app_connection.product_product_numeric_lcc +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__commission_rule__calculation_rule__fix +msgid "Fix amount" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +msgid "Fix rules" +msgstr "" + +#. module: lcc_lokavaluto_app_connection #: model:product.template,name:lcc_lokavaluto_app_connection.product_product_numeric_lcc_product_template msgid "Generic Numeric LCC" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__global_credit_status +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__global_credit_status +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__global_credit_status +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__global_credit_status #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__global_credit_status msgid "Global Credit Status" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__has_numeric_lcc_products +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__has_numeric_lcc_products +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__has_numeric_lcc_products +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__has_numeric_lcc_products #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__has_numeric_lcc_products msgid "Has lcc numeric products" msgstr "" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__id msgid "ID" msgstr "" #. module: lcc_lokavaluto_app_connection -#: code:addons/lcc_lokavaluto_app_connection/controllers/portal.py:49 -#, python-format -msgid "If we store your payment information on our server, subscription payments will be made automatically." -msgstr "" - -#. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search -#: selection:res.partner.backend,status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__res_partner_backend__status__inactive +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Inactive" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:ir.model,name:lcc_lokavaluto_app_connection.model_account_invoice -msgid "Invoice" +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__invoiced +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Invoiced" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:ir.model,name:lcc_lokavaluto_app_connection.model_account_invoice_line -msgid "Invoice Line" +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__is_reconversion_allowed +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__is_reconversion_allowed +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__is_reconversion_allowed +msgid "Is Reconversion Allowed?" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_auth_api_key__key -msgid "Key" +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_account_move +msgid "Journal Entry" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_form_view -msgid "LCC Backend" +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_account_move_line +msgid "Journal Item" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_tree -msgid "LCC Backends" +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_auth_api_key__key +msgid "Key" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__global_lcc_amount_credited +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__global_lcc_amount_credited +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__global_lcc_amount_credited +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__global_lcc_amount_credited #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__global_lcc_amount_credited msgid "LCC amount credited" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_invoice__global_lcc_amount_to_credit +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_bank_statement_line__global_lcc_amount_to_credit +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_move__global_lcc_amount_to_credit +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_account_payment__global_lcc_amount_to_credit #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_sale_order__global_lcc_amount_to_credit msgid "LCC amount to credit" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_lcc_backends_tree_view -#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.lcc_backends_tree_menu -msgid "LCC backends" -msgstr "" - -#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule____last_update #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request____last_update #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request____last_update +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request____last_update +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule____last_update #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend____last_update msgid "Last Modified on" msgstr "" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__write_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__write_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__write_uid +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__write_uid +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__write_uid #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__write_uid msgid "Last Updated by" msgstr "" #. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__write_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__write_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__write_date +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__write_date +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__write_date #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__write_date msgid "Last Updated on" msgstr "" -#. module: lcc_lokavaluto_app_connection -#: model:ir.model,name:lcc_lokavaluto_app_connection.model_crm_lead -msgid "Lead/Opportunity" -msgstr "" - #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__invoice_id msgid "Linked Invoice" @@ -342,6 +527,7 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form msgid "Linked documents" msgstr "" @@ -372,8 +558,10 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_auth_api_key__name +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__name +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__name #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__name -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Name" msgstr "" @@ -402,35 +590,38 @@ msgid "Nb Wallets to confirm" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_form_view +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_form_view msgid "New Credit Request" msgstr "" #. module: lcc_lokavaluto_app_connection -#: code:addons/lcc_lokavaluto_app_connection/services/partner_images_services.py:38 -#, python-format -msgid "No image found for partner %s" -msgstr "" - -#. module: lcc_lokavaluto_app_connection -#: model:product.category,name:lcc_lokavaluto_app_connection.product_category_numeric_lcc -msgid "Numeric LCC" +#: model:ir.module.category,name:lcc_lokavaluto_app_connection.module_category_administration_wallets +msgid "Numeric Wallets" msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:account.invoice,global_credit_status:0 -#: selection:sale.order,global_credit_status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__account_move__global_credit_status__ongoing +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__sale_order__global_credit_status__ongoing msgid "On going" msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:credit.request,state:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__credit_request__state__open #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search msgid "Open" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__commission_move_state__paid +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__debit_move_state__paid +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__paid +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Paid" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__partner_id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__partner_id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__partner_id msgid "Partner" msgstr "" @@ -441,15 +632,19 @@ msgid "Partner Public Name" msgstr "" #. module: lcc_lokavaluto_app_connection -#: code:addons/lcc_lokavaluto_app_connection/controllers/portal.py:46 -#, python-format -msgid "Pay & Confirm" +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__credit_request__state__pending +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search +msgid "Pending" msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:credit.request,state:0 -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_search -msgid "Pending" +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__commission_rule__calculation_rule__percentage +msgid "Percentage" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +msgid "Percentage rules" msgstr "" #. module: lcc_lokavaluto_app_connection @@ -458,21 +653,54 @@ msgid "Portefeuille numérique" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.portal_organization_registration_wallet -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.portal_private_registration_wallet -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.website_organization_registration_wallet -msgid "Refuse numeric wallet creation" +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__commission_move_state__posted +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__debit_move_state__posted +msgid "Posted" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__debit_request__state__received +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Received" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +msgid "Reconversion OFF" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +msgid "Reconversion ON" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_form +msgid "Reconversion Rule" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_reconversion_rule +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.reconversion_rule_menu +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_tree +msgid "Reconversion Rules" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_form +msgid "" +"Reconversion rules indicate that reconversions are presumed NOT ALLOWED on\n" +" the selected wallet." msgstr "" #. module: lcc_lokavaluto_app_connection -#: code:addons/lcc_lokavaluto_app_connection/models/crm_lead.py:11 -#, python-format -msgid "Refuse the creation of a numeric wallet." +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_form_view +msgid "Reconversions are NOT allowed on this wallet." msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_crm_lead__refuse_numeric_wallet_creation -msgid "Refuser la création d'un portefeuille numérique." +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_form_view +msgid "Reconversions are allowed on this wallet." msgstr "" #. module: lcc_lokavaluto_app_connection @@ -482,7 +710,12 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_sale_order -msgid "Sale Order" +msgid "Sales Order" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_search +msgid "Search commission rules" msgstr "" #. module: lcc_lokavaluto_app_connection @@ -491,12 +724,23 @@ msgid "Search credit requests" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.debit_request_view_search +msgid "Search debit requests" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_search +msgid "Search reconversion rules" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Search wallets" msgstr "" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__state +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__state msgid "State" msgstr "" @@ -507,31 +751,49 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,help:lcc_lokavaluto_app_connection.field_auth_api_key__key -msgid "The API key. Keep the default value in this field if it is\n" +msgid "" +"The API key. Enter a dummy value in this field if it is\n" " obtained from the server environment configuration." msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:res.partner.backend,status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__res_partner_backend__status__to_confirm msgid "To Confirm" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "To confirm" msgstr "" #. module: lcc_lokavaluto_app_connection -#: selection:account.invoice,global_credit_status:0 -#: selection:sale.order,global_credit_status:0 +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__account_move__global_credit_status__todo +#: model:ir.model.fields.selection,name:lcc_lokavaluto_app_connection.selection__sale_order__global_credit_status__todo msgid "To do" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__transaction_id +msgid "Transaction ID" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.constraint,message:lcc_lokavaluto_app_connection.constraint_debit_request_transaction_id_uniq +msgid "" +"Transaction ID must be unique, a request already exists with this " +"transaction ID!" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__transaction_data msgid "Transaction Message" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__transaction_timestamp +msgid "Transaction Timestamp" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.credit_request_view_form msgid "Try again" @@ -539,22 +801,30 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_res_partner_backend__type -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_backend_view_search +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.wallet_view_search msgid "Type" msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:product.product,uom_name:lcc_lokavaluto_app_connection.product_product_numeric_lcc -#: model:product.template,uom_name:lcc_lokavaluto_app_connection.product_product_numeric_lcc_product_template -msgid "Unit(s)" +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__calculation_value +msgid "Value" msgstr "" #. module: lcc_lokavaluto_app_connection #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_create_credit_request__wallet_id #: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_credit_request__wallet_id +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_debit_request__wallet_id msgid "Wallet" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_commission_rule__wallet_domain +#: model:ir.model.fields,field_description:lcc_lokavaluto_app_connection.field_reconversion_rule__wallet_domain +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.commission_rule_view_form +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.reconversion_rule_view_form +msgid "Wallet Domain" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model:res.groups,name:lcc_lokavaluto_app_connection.group_wallet_accounts_manager msgid "Wallet accounts manager" @@ -562,7 +832,13 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model:res.groups,name:lcc_lokavaluto_app_connection.group_wallet_full_manager -msgid "Wallet_full_manager" +msgid "Wallet full manager" +msgstr "" + +#. module: lcc_lokavaluto_app_connection +#: model:ir.actions.act_window,name:lcc_lokavaluto_app_connection.action_wallet_view +#: model:ir.ui.menu,name:lcc_lokavaluto_app_connection.wallets_menu +msgid "Wallets" msgstr "" #. module: lcc_lokavaluto_app_connection @@ -570,6 +846,11 @@ msgstr "" msgid "blocked wallet(s)" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_commission_rule +msgid "commission.rule" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model:ir.model,name:lcc_lokavaluto_app_connection.model_create_credit_request msgid "create Credit Request" @@ -580,6 +861,11 @@ msgstr "" msgid "credit.request" msgstr "" +#. module: lcc_lokavaluto_app_connection +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_debit_request +msgid "debit.request" +msgstr "" + #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app msgid "has" @@ -591,15 +877,15 @@ msgid "inactive wallet(s)." msgstr "" #. module: lcc_lokavaluto_app_connection -#: model:product.product,weight_uom_name:lcc_lokavaluto_app_connection.product_product_numeric_lcc -#: model:product.template,weight_uom_name:lcc_lokavaluto_app_connection.product_product_numeric_lcc_product_template -msgid "kg" +#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app +msgid "" +"pending for\n" +" activation." msgstr "" #. module: lcc_lokavaluto_app_connection -#: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app -msgid "pending for\n" -" activation." +#: model:ir.model,name:lcc_lokavaluto_app_connection.model_reconversion_rule +msgid "reconversion.rule" msgstr "" #. module: lcc_lokavaluto_app_connection @@ -610,14 +896,16 @@ msgstr "" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.view_account_invoice_customer_lcc_form #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.view_order_lcc_form -msgid "units have been\n" +msgid "" +"units have been\n" " credited on" msgstr "" #. module: lcc_lokavaluto_app_connection #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.view_account_invoice_customer_lcc_form #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.view_order_lcc_form -msgid "units still to\n" +msgid "" +"units still to\n" " credit on" msgstr "" @@ -625,4 +913,3 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:lcc_lokavaluto_app_connection.lcc_partner_app msgid "wallet(s)" msgstr "" - diff --git a/lcc_lokavaluto_app_connection/models/__init__.py b/lcc_lokavaluto_app_connection/models/__init__.py index 2b4506cd..cb631d22 100644 --- a/lcc_lokavaluto_app_connection/models/__init__.py +++ b/lcc_lokavaluto_app_connection/models/__init__.py @@ -1,8 +1,11 @@ from . import sale_order -from . import res_partner_backend +from . import wallet from . import res_partner from . import auth_api_key from . import account_invoice from . import company from . import res_config_settings from . import credit_request +from . import debit_request +from . import commission_rule +from . import reconversion_rule diff --git a/lcc_lokavaluto_app_connection/models/account_invoice.py b/lcc_lokavaluto_app_connection/models/account_invoice.py index 8fed0815..7584c77a 100644 --- a/lcc_lokavaluto_app_connection/models/account_invoice.py +++ b/lcc_lokavaluto_app_connection/models/account_invoice.py @@ -13,6 +13,9 @@ class AccountInvoice(models.Model): credit_request_ids = fields.One2many( "credit.request", "invoice_id", string="Credit Requests" ) + debit_request_ids = fields.Many2many( + "debit.request", compute="_compute_debit_request_ids", string="Debit Requests" + ) global_credit_status = fields.Selection( [ ("todo", "To do"), @@ -29,6 +32,12 @@ class AccountInvoice(models.Model): global_lcc_amount_to_credit = fields.Float( string="LCC amount to credit", compute="_compute_global_lcc_amounts" ) + digital_currency_invoice_type = fields.Selection([ + ('none', 'None'), + ('credit', 'Credit'), + ('debit', 'Debit') + ], string='Digital Currency Invoice Type', compute="_compute_digital_currency_invoice_type" + ) @api.depends("credit_request_ids") def _compute_global_credit_status(self): @@ -60,15 +69,56 @@ def _compute_has_numeric_lcc_products(self): if lcc_numeric_products: self.has_numeric_lcc_products = True + def _compute_debit_request_ids(self): + for move in self: + move.debit_request_ids = self.env["debit.request"].search(["|", ("debit_move_id", "=", move.id), ("commission_move_id", "=", move.id)]) + + @api.depends("debit_request_ids", "credit_request_ids") + def _compute_digital_currency_invoice_type(self): + if self.debit_request_ids: + self.digital_currency_invoice_type = "debit" + elif self.credit_request_ids: + self.digital_currency_invoice_type = "credit" + else: + self.digital_currency_invoice_type = "none" + def _invoice_paid_hook(self): res = super(AccountInvoice, self)._invoice_paid_hook() - for invoice in self.filtered(lambda move: move.is_invoice() and move.is_sale_document() and move.has_numeric_lcc_products): + for invoice in self: + if not invoice.is_invoice(): + continue + for request in invoice.credit_request_ids: # Only the opened request are concerned if request.state != "open": continue # Set the state in "pending" to launch the top up process request.write({"state": "pending"}) + + for request in invoice.debit_request_ids: + # Set the state in "paid" and update the global request status + if invoice.is_sale_document(): + state_value = {"commission_move_state": "paid"} + if invoice.is_purchase_document(): + state_value = {"debit_move_state": "paid"} + request.write(state_value) + request.compute_state() + return res + + def action_post(self): + # OVERRIDE + res = super(AccountInvoice, self).action_post() + for invoice in self: + if not invoice.is_invoice(): + continue + + for request in invoice.debit_request_ids: + if invoice.is_sale_document(): + state_value = {"commission_move_state": "posted"} + if invoice.is_purchase_document(): + state_value = {"debit_move_state": "posted"} + request.write(state_value) + request.compute_state() return res diff --git a/lcc_lokavaluto_app_connection/models/commission_rule.py b/lcc_lokavaluto_app_connection/models/commission_rule.py new file mode 100644 index 00000000..a88a1c2c --- /dev/null +++ b/lcc_lokavaluto_app_connection/models/commission_rule.py @@ -0,0 +1,27 @@ +from odoo import models, fields + +class CommissionRule(models.Model): + """A commission rule defines the way to calculate the reconversion + commission amount for digital currencies.""" + + _name = "commission.rule" + + name = fields.Char('Name') + active = fields.Boolean(default=True) + wallet_domain = fields.Char('Wallet Domain') + + calculation_rule = fields.Selection([ + ('fix', 'Fix amount'), + ('percentage', 'Percentage'), + ], string='Calculation Rule') + + calculation_value = fields.Float("Value") + + + def calculate_commission_amount(self, debit_amount): + self.ensure_one() + if self.calculation_rule == "fix": + return self.calculation_value + elif self.calculation_rule == "percentage": + return debit_amount * self.calculation_value / 100 + diff --git a/lcc_lokavaluto_app_connection/models/company.py b/lcc_lokavaluto_app_connection/models/company.py index 86615171..3759f86d 100644 --- a/lcc_lokavaluto_app_connection/models/company.py +++ b/lcc_lokavaluto_app_connection/models/company.py @@ -1,5 +1,7 @@ -from odoo import models, fields +from odoo import models, fields, api +import logging +_logger = logging.getLogger(__name__) class Company(models.Model): _inherit = "res.company" @@ -8,3 +10,58 @@ class Company(models.Model): monujo_android_app_url = fields.Char(string="Monujo Android app URL") monujo_ios_app_url = fields.Char(string="Monujo iOS app URL") activate_automatic_topup = fields.Boolean("Activate Automatic Topup") + commission_product_id = fields.Many2one("product.product", string="Commission Product") + allow_payments_only_to_companies = fields.Boolean(string="Allow payments only to companies") + + def _cron_import_new_digital_currency_debit_requests(self): + """Create the debit requests in Odoo for all the debit + transactions performed since the last check.""" + + # Extract last transactions received in the Safe Wallet + transactions = self._retrieve_last_debit_transactions() + + # For each transaction received: + # - retrieve the transaction id + # - check if any debit request exists with this transaction id + # - if yes, do nothing + # - if no, create a new debit request + for transaction in transactions: + tx_id = transaction.get("tx_id", "") + debit_requests = self.env["debit.request"].search([("transaction_id", "=", tx_id)]) + if len(debit_requests) > 0: + _logger.info("Debit request already exists for transaction %s" % transaction.get("tx_id")) + continue + values = self._build_debit_request_values(transaction) + if not values: + continue + request = self.env["debit.request"].create(values) + _logger.info("Debit request created for wallet %s on transaction %s" % (request.wallet_id,transaction.get("tx_id"))) + + + def _retrieve_last_debit_transactions(self): + """TO OVERIDE in digital currency backend dedicated add-ons + A list of transactions (dictionnary) is expected, with the following data: + - sender: the Odoo name of the wallet concerned by the debit request, + - amount: the amount debited from the wallet, + - tx_id: the transaction ID in the digital currency backend + - tx_timestamp: the timestamp of the transaction + """ + return [] + + + def _build_debit_request_values(self, transaction): + wallet_ids = self.env["res.partner.backend"].search([("name", "=", transaction.get("sender"))]) + if len(wallet_ids) == 0: + _logger.error("No wallet found for debit transaction %s, debit request creation CANCELLED" % transaction.get("tx_id")) + return {} + elif len(wallet_ids) > 1: + _logger.error("Too many wallets found for debit transaction %s, debit request creation CANCELLED" % transaction.get("tx_id")) + return {} + values = { + "active" : True, + "wallet_id" : wallet_ids[0].id, + "amount" : transaction.get("amount"), + "transaction_id" : transaction.get("tx_id"), + "transaction_timestamp": transaction.get("tx_timestamp"), + } + return values \ No newline at end of file diff --git a/lcc_lokavaluto_app_connection/models/credit_request.py b/lcc_lokavaluto_app_connection/models/credit_request.py index 3a6e6fc5..b2daca49 100644 --- a/lcc_lokavaluto_app_connection/models/credit_request.py +++ b/lcc_lokavaluto_app_connection/models/credit_request.py @@ -58,7 +58,7 @@ def write(self, vals): for request in self: if request.state == "pending": # The top up has been paid, the credit process can start - if request.partner_id.company_id.activate_automatic_topup: + if self.env.user.company_id.activate_automatic_topup: request.credit_wallet() return res diff --git a/lcc_lokavaluto_app_connection/models/debit_request.py b/lcc_lokavaluto_app_connection/models/debit_request.py new file mode 100644 index 00000000..941cf6d0 --- /dev/null +++ b/lcc_lokavaluto_app_connection/models/debit_request.py @@ -0,0 +1,203 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError + + +class DebitRequest(models.Model): + """Debit request to follow the reconversion process for wallet users""" + + _sql_constraints = [ + ('transaction_id_uniq', 'unique(transaction_id)', 'Transaction ID must be unique, a request already exists with this transaction ID!'), + ] + + _name = "debit.request" + + active = fields.Boolean(default=True, tracking=True) + amount = fields.Float("Amount", required=True) + wallet_id = fields.Many2one("res.partner.backend", string="Wallet", required=True) + partner_id = fields.Many2one( + "res.partner", related="wallet_id.partner_id", readonly=True + ) + state = fields.Selection( + [ + ("draft", "Draft"), # request created, some fields values still missing + ("received", "Received"), # all transaction data received, draft invoiced created + ("invoiced", "Invoiced"), # invoiced validated/sent + ("paid", "Paid"), # all invoices have been paid + ("cancelled", "Cancelled"), # debit request cancelled + ], + required=True, + string="State", + default='draft', + ) + transaction_id = fields.Char('Transaction ID') + transaction_timestamp = fields.Datetime('Transaction Timestamp') + debit_move_id = fields.Many2one("account.move", string="Debit Invoice") + debit_move_state = fields.Selection( + [ + ('draft', 'Draft'), + ('posted', 'Posted'), + ('paid', 'Paid'), + ('cancelled', 'Cancelled'), + ], + string='Debit Invoice State', + default="draft", + ) + commission_move_id = fields.Many2one("account.move", string="Commission Invoice") + commission_move_state = fields.Selection( + [ + ('draft', 'Draft'), + ('posted', 'Posted'), + ('paid', 'Paid'), + ('cancelled', 'Cancelled'), + ], + string='Commission Invoice State', + default="draft", + ) + + is_reconversion_allowed = fields.Boolean(related="wallet_id.is_reconversion_allowed", readonly=True) + + @api.model + def create(self, vals): + res = super(DebitRequest, self).create(vals) + for request in res: + if request.is_ready_to_invoice(): + request.create_invoices() + return res + + def unlink(self): + for request in self: + if request.state == "invoiced" or ( + request.debit_move_id and request.debit_move_id.state != "draft" + ): + raise UserError( + "You can't delete a debit request linked with a posted or paid invoice." + ) + elif request.state == "cancelled": + raise UserError( + "You can't delete a cancelled debit request. Please archive it instead." + ) + elif request.state == "paid": + raise UserError( + "You can't delete a paid debit request. Please archive it instead." + ) + + if request.debit_move_id and request.debit_move_id.state == "draft": + request.debit_move_id.unlink() + return super(DebitRequest, self).unlink() + + def compute_state(self): + for request in self: + if not request.debit_move_id: + request.state = "draft" + continue + + if not request.commission_move_id: + # If there is no commission invoice, the debit invoice status defines the request status. + request.state = self._convert_status(request.debit_move_state) + continue + + if request.debit_move_state == "cancelled": + # Debit move cancellation means there is no debit to perform, then all the process is cancelled. + request.state = "cancelled" + continue + + if request.commission_move_state == "cancelled": + # If the commission invoice is cancelled, we do not consider it anymore for the request status. + request.state = self._convert_status(request.debit_move_state) + continue + + if request.debit_move_state == "draft" or request.commission_move_state == "draft": + # If any of the invoices is in Draft, the request is still considered as "received" + request.state = self._convert_status("draft") + continue + + if request.debit_move_state == "posted" or request.commission_move_state == "posted": + request.state = self._convert_status("posted") + continue + + if request.debit_move_state == "paid" or request.commission_move_state == "paid": + request.state = self._convert_status("paid") + + + def _convert_status(self, status): + if status == "draft": + return "received" + if status == "posted": + return "invoiced" + if status == "paid": + return "paid" + + def is_ready_to_invoice(self, raise_error=False): + self.ensure_one() + if self.amount <= 0 and raise_error: + raise UserError("Amount must be superior to zero.") + if not self.wallet_id and raise_error: + raise UserError("The wallet is missing.") + if not self.transaction_id and raise_error: + raise UserError("The transaction ID is missing.") + return (self.amount > 0) and self.wallet_id and self.transaction_id + + ############################# + ## INVOICE CREATION PROCESSES + ############################# + + def create_invoices(self): + self.create_debit_invoices() + self.create_commission_invoices() + self.compute_state() + + def create_debit_invoices(self): + for request in self: + self.is_ready_to_invoice(raise_error=True) + # get invoices data + debit_invoice_data = request._get_debit_invoice_data() + # create invoices + invoice = self.env['account.move'].create(debit_invoice_data) + request.debit_move_id = invoice.id + + def _get_debit_invoice_data(self): + self.ensure_one() + return { + 'move_type': "in_invoice", + 'partner_id': self.partner_id.id, + 'invoice_line_ids': [(0, 0, self._get_debit_invoice_line_values())] + } + + def _get_debit_invoice_line_values(self): + self.ensure_one() + product_id = self.wallet_id.get_lcc_product() + invoice_line_values = { + 'product_id': product_id.id, + 'quantity': self.amount, + 'price_unit': product_id.standard_price, + } + return invoice_line_values + + def create_commission_invoices(self): + for request in self: + self.is_ready_to_invoice(raise_error=True) + # get invoices data + commission_invoice_data = request._get_commission_invoice_data() + # create invoices + invoice = self.env['account.move'].create(commission_invoice_data) + request.commission_move_id = invoice.id + + def _get_commission_invoice_data(self): + self.ensure_one() + return { + 'move_type': "out_invoice", + 'partner_id': self.partner_id.id, + 'invoice_line_ids': [(0, 0, self._get_commission_invoice_line_values())] + } + + def _get_commission_invoice_line_values(self): + self.ensure_one() + product_id = self.env.user.company_id.commission_product_id + rule = self.wallet_id.get_wallet_commission_rule() + commission_amount = rule.calculate_commission_amount(self.amount) + invoice_line_values = { + 'product_id': product_id.id, + 'quantity': 1, + 'price_unit': commission_amount, + } + return invoice_line_values \ No newline at end of file diff --git a/lcc_lokavaluto_app_connection/models/reconversion_rule.py b/lcc_lokavaluto_app_connection/models/reconversion_rule.py new file mode 100644 index 00000000..7d615ee9 --- /dev/null +++ b/lcc_lokavaluto_app_connection/models/reconversion_rule.py @@ -0,0 +1,12 @@ +from odoo import models, fields + +class ReconversionRule(models.Model): + """A recommission rule defines if a wallet can use the reconversion process.""" + + _name = "reconversion.rule" + + name = fields.Char('Name') + active = fields.Boolean(default=True) + wallet_domain = fields.Char('Wallet Domain') + + is_reconversion_allowed = fields.Boolean('Is Reconversion Allowed?') diff --git a/lcc_lokavaluto_app_connection/models/res_config_settings.py b/lcc_lokavaluto_app_connection/models/res_config_settings.py index 40718a9c..3bdeac51 100644 --- a/lcc_lokavaluto_app_connection/models/res_config_settings.py +++ b/lcc_lokavaluto_app_connection/models/res_config_settings.py @@ -27,3 +27,15 @@ class ResConfigSettings(models.TransientModel): readonly=False, string="Activate Automatic Topup", ) + + commission_product_id = fields.Many2one( + "product.product", + related="company_id.commission_product_id", + readonly=False, + string="Commission Product") + + allow_payments_only_to_companies = fields.Boolean( + related="company_id.allow_payments_only_to_companies", + readonly=False, + string="Allow payments only to companies", + ) diff --git a/lcc_lokavaluto_app_connection/models/res_partner_backend.py b/lcc_lokavaluto_app_connection/models/wallet.py similarity index 65% rename from lcc_lokavaluto_app_connection/models/res_partner_backend.py rename to lcc_lokavaluto_app_connection/models/wallet.py index bce29a80..e9bfe54f 100644 --- a/lcc_lokavaluto_app_connection/models/res_partner_backend.py +++ b/lcc_lokavaluto_app_connection/models/wallet.py @@ -1,8 +1,10 @@ from odoo import models, fields, api from odoo.exceptions import UserError - +from odoo.tools.safe_eval import safe_eval import logging + + _logger = logging.getLogger(__name__) @@ -32,6 +34,7 @@ class ResPartnerBackend(models.Model): tracking=True, ) partner_id = fields.Many2one("res.partner", string="Partner", required=True) + is_reconversion_allowed = fields.Boolean('Is Reconversion Allowed?', readonly=True, compute="_compute_is_reconversion_allowed") def _update_search_data(self, backend_keys): return {} @@ -62,6 +65,7 @@ def translate_backend_key_in_wallet_name(self, backend_key): def get_wallets(self, backend_keys): """Returns wallet objects list matching the backend_keys contents""" Wallet = self.env["res.partner.backend"] + return Wallet.search( [ ( @@ -95,4 +99,31 @@ def get_wallet_balance(self): "success": False, "response": "No data - Please install financial backend Odoo add-on." } - return res \ No newline at end of file + return res + + def get_wallet_commission_rule(self): + self.ensure_one() + rules = self.env["commission.rule"].search([("active", "=", True)]) + for rule in rules: + # Get all the wallet matching the rule + wallets = self.search(safe_eval(rule.wallet_domain)) + # Check if current wallet (self) is in the matching wallets + if wallets.filtered(lambda x: x.id == self.id): + # First rule matched is returned + return rule + return None + + def _compute_is_reconversion_allowed(self): + for record in self: + all_rules = self.env["reconversion.rule"].search([("active", "=", True)]) + # For now the reconversions are not allowed for this wallet + record.is_reconversion_allowed = False + for rule in all_rules: + # Get all the wallet matching the rule + wallets = self.search(safe_eval(rule.wallet_domain)) + # Check if current wallet (self) is in the matching wallets + if wallets.filtered(lambda x: x.id == record.id): + # As soon as one rule allows the reconversion, we don't need to check the others. + if rule.is_reconversion_allowed: + record.is_reconversion_allowed = True + break \ No newline at end of file diff --git a/lcc_lokavaluto_app_connection/security/ir.model.access.csv b/lcc_lokavaluto_app_connection/security/ir.model.access.csv index 46af3670..50bbee0d 100644 --- a/lcc_lokavaluto_app_connection/security/ir.model.access.csv +++ b/lcc_lokavaluto_app_connection/security/ir.model.access.csv @@ -3,4 +3,11 @@ access_lcc_partner_numeric,lcc_lokavaluto_app_connection.lcc_partner_numeric,bas access_lcc_partner_backend.user,lcc_lokavaluto_app_connection.lcc_partner_backend.user,lcc_lokavaluto_app_connection.model_res_partner_backend,,1,0,0,0 access_lcc_partner_backend.account.manager,lcc_lokavaluto_app_connection.lcc_partner_backend.account_manager,lcc_lokavaluto_app_connection.model_res_partner_backend,lcc_lokavaluto_app_connection.group_wallet_accounts_manager,1,1,1,1 access_credit_request.user,lcc_lokavaluto_app_connection.credit_request.user,lcc_lokavaluto_app_connection.model_credit_request,,1,0,0,0 -access_credit_request.full_manager,lcc_lokavaluto_app_connection.credit_request.full_manager,lcc_lokavaluto_app_connection.model_credit_request,lcc_lokavaluto_app_connection.group_wallet_full_manager,1,1,1,1 \ No newline at end of file +access_credit_request.full_manager,lcc_lokavaluto_app_connection.credit_request.full_manager,lcc_lokavaluto_app_connection.model_credit_request,lcc_lokavaluto_app_connection.group_wallet_full_manager,1,1,1,1 +access_debit_request.user,lcc_lokavaluto_app_connection.debit_request.user,lcc_lokavaluto_app_connection.model_debit_request,,1,0,0,0 +access_debit_request.full_manager,lcc_lokavaluto_app_connection.debit_request.full_manager,lcc_lokavaluto_app_connection.model_debit_request,lcc_lokavaluto_app_connection.group_wallet_full_manager,1,1,1,1 +access_commission_rule.user,lcc_lokavaluto_app_connection.commission_rule.user,lcc_lokavaluto_app_connection.model_commission_rule,,1,0,0,0 +access_commission_rule.full_manager,lcc_lokavaluto_app_connection.commission_rule.full_manager,lcc_lokavaluto_app_connection.model_commission_rule,lcc_lokavaluto_app_connection.group_wallet_full_manager,1,1,1,1 +access_reconversion_rule.user,lcc_lokavaluto_app_connection.reconversion_rule.user,lcc_lokavaluto_app_connection.model_reconversion_rule,,1,0,0,0 +access_reconversion_rule.full_manager,lcc_lokavaluto_app_connection.reconversion_rule.full_manager,lcc_lokavaluto_app_connection.model_reconversion_rule,lcc_lokavaluto_app_connection.group_wallet_full_manager,1,1,1,1 +access_create_credit_request_wizard,lcc_lokavaluto_app_connection.create_credit_request_wizard.access,lcc_lokavaluto_app_connection.model_create_credit_request,lcc_lokavaluto_app_connection.group_wallet_accounts_manager,1,1,1,0 \ No newline at end of file diff --git a/lcc_lokavaluto_app_connection/services/partner_services.py b/lcc_lokavaluto_app_connection/services/partner_services.py index ee87038f..fdc71580 100644 --- a/lcc_lokavaluto_app_connection/services/partner_services.py +++ b/lcc_lokavaluto_app_connection/services/partner_services.py @@ -119,6 +119,26 @@ def validate_credit_requests(self, partner_credit_requests_get_param): requests.validate() return True + @restapi.method( + [(["/reconversions"], "POST")], + input_param=Datamodel("partner.reconversions"), + ) + def reconversions(self, params): + """Return the reconversions status for transactions matching Odoo debit requests. + Possible values in the dictionnary: the matching debit_request state + If no debit request matching the transactions (too many or no requests found), the transaction is not returned. + """ + txs_list = params.transactions + res = {} + DebitRequest = self.env["debit.request"] + for tx_id in txs_list: + debit_requests = DebitRequest.search(["transaction_id", '=', tx_id]) + if len(debit_requests) != 1: + _logger.error("Impossible to match a debit request for transaction %s: %s requests found" % (tx_id, len(debit_requests))) + continue + res[tx_id] = debit_requests[0].state + return res + @restapi.method( [(["//get", "/"], "GET")], ) @@ -172,6 +192,10 @@ def search_recipients(self, recipients_search_info): ) order = _recipient_order_normalize(order) website_url = recipients_search_info.website_url + + if self.env.company.allow_payments_only_to_companies == True: + domain.extend([('partner_id.is_company','=',True)]) + if value: domain.extend( [ @@ -256,7 +280,7 @@ def search_recipients(self, recipients_search_info): if not lcc_profile_info: continue row = lcc_profile_info[0] - row["monujo_backends"] = partner.lcc_backends_ids._update_search_data( + row["monujo_backends"] = partner.lcc_backend_ids._update_search_data( [k for k in backend_keys if k.startswith("%s:" % recipient.type)], ) rows.append(row) diff --git a/lcc_lokavaluto_app_connection/views/account_invoice.xml b/lcc_lokavaluto_app_connection/views/account_invoice.xml index bf25069d..6e2a00f5 100644 --- a/lcc_lokavaluto_app_connection/views/account_invoice.xml +++ b/lcc_lokavaluto_app_connection/views/account_invoice.xml @@ -6,9 +6,9 @@ - + + attrs="{'invisible': [('digital_currency_invoice_type', '!=', 'credit')]}">
+
+
+
+ Commission Product +
+ +
+
+
+
+
+ +
+
+
+
diff --git a/lcc_lokavaluto_app_connection/views/lcc_backend.xml b/lcc_lokavaluto_app_connection/views/wallet.xml similarity index 65% rename from lcc_lokavaluto_app_connection/views/lcc_backend.xml rename to lcc_lokavaluto_app_connection/views/wallet.xml index 6da6b730..e144efb5 100644 --- a/lcc_lokavaluto_app_connection/views/lcc_backend.xml +++ b/lcc_lokavaluto_app_connection/views/wallet.xml @@ -1,17 +1,20 @@ - - lcc.backend.form.view + + wallet.form.view res.partner.backend 0 -
- + +
+ + @@ -20,16 +23,22 @@ + +
- - lcc.backend.view.tree + + wallet.view.tree res.partner.backend - + @@ -38,8 +47,8 @@ - - lcc.backend.view.search + + wallet.view.search res.partner.backend diff --git a/lcc_members/__manifest__.py b/lcc_members/__manifest__.py index 9fc96159..aec05da4 100644 --- a/lcc_members/__manifest__.py +++ b/lcc_members/__manifest__.py @@ -53,7 +53,6 @@ "views/portal_my_home.xml", "views/portal_structure_profile.xml", "views/res_partner_view.xml", - "views/res_users_views.xml", "views/website_partner_view.xml", "wizard/membership_invoice_views.xml", ], diff --git a/lcc_members/views/res_users_views.xml b/lcc_members/views/res_users_views.xml deleted file mode 100644 index 0ac2302b..00000000 --- a/lcc_members/views/res_users_views.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - res.users.groups - res.users - - 99 - - - - - - - - \ No newline at end of file diff --git a/lcc_wallet_qr/__manifest__.py b/lcc_wallet_qr/__manifest__.py index 7e2ad8f9..b21348a7 100644 --- a/lcc_wallet_qr/__manifest__.py +++ b/lcc_wallet_qr/__manifest__.py @@ -12,7 +12,7 @@ ], # always loaded "data": [ - "views/lcc_backend.xml", + "views/wallet.xml", "data/res_partner_backend_data.xml", ], # only loaded in demonstration mode diff --git a/lcc_wallet_qr/models/__init__.py b/lcc_wallet_qr/models/__init__.py index 508a71c3..c21f7b2d 100644 --- a/lcc_wallet_qr/models/__init__.py +++ b/lcc_wallet_qr/models/__init__.py @@ -1 +1 @@ -from . import res_partner_backend +from . import wallet diff --git a/lcc_wallet_qr/models/res_partner_backend.py b/lcc_wallet_qr/models/wallet.py similarity index 100% rename from lcc_wallet_qr/models/res_partner_backend.py rename to lcc_wallet_qr/models/wallet.py diff --git a/lcc_wallet_qr/views/lcc_backend.xml b/lcc_wallet_qr/views/wallet.xml similarity index 71% rename from lcc_wallet_qr/views/lcc_backend.xml rename to lcc_wallet_qr/views/wallet.xml index 4076ec45..cf5ef6a1 100644 --- a/lcc_wallet_qr/views/lcc_backend.xml +++ b/lcc_wallet_qr/views/wallet.xml @@ -1,11 +1,11 @@ - - lcc.backend.qr.form.view + + wallet.qr.form.view res.partner.backend - + - +