From bd473c6a845a00b37b8fd3fb012fb2f10933fb4b Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Fri, 29 May 2020 19:48:46 +0200 Subject: [PATCH 1/8] Rename technical name to add fr suffix --- delivery_roulier_chronopost_fr/__init__.py | 1 + .../__manifest__.py | 19 ++++ .../data/delivery.xml | 81 ++++++++++++++++++ .../data/product.xml | 10 +++ .../models/__init__.py | 4 + .../models/carrier_account.py | 16 ++++ .../models/delivery_carrier.py | 10 +++ .../models/stock_picking.py | 37 ++++++++ .../models/stock_quant_package.py | 53 ++++++++++++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../readme/ROADMAP.rst | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../views/carrier_account.xml | 17 ++++ 14 files changed, 253 insertions(+) create mode 100644 delivery_roulier_chronopost_fr/__init__.py create mode 100644 delivery_roulier_chronopost_fr/__manifest__.py create mode 100644 delivery_roulier_chronopost_fr/data/delivery.xml create mode 100644 delivery_roulier_chronopost_fr/data/product.xml create mode 100644 delivery_roulier_chronopost_fr/models/__init__.py create mode 100644 delivery_roulier_chronopost_fr/models/carrier_account.py create mode 100644 delivery_roulier_chronopost_fr/models/delivery_carrier.py create mode 100644 delivery_roulier_chronopost_fr/models/stock_picking.py create mode 100644 delivery_roulier_chronopost_fr/models/stock_quant_package.py create mode 100644 delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.rst create mode 100644 delivery_roulier_chronopost_fr/readme/DESCRIPTION.rst create mode 100644 delivery_roulier_chronopost_fr/readme/ROADMAP.rst create mode 100644 delivery_roulier_chronopost_fr/static/description/icon.png create mode 100644 delivery_roulier_chronopost_fr/views/carrier_account.xml diff --git a/delivery_roulier_chronopost_fr/__init__.py b/delivery_roulier_chronopost_fr/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/delivery_roulier_chronopost_fr/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/delivery_roulier_chronopost_fr/__manifest__.py b/delivery_roulier_chronopost_fr/__manifest__.py new file mode 100644 index 0000000000..21f5f8f4f2 --- /dev/null +++ b/delivery_roulier_chronopost_fr/__manifest__.py @@ -0,0 +1,19 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{'name': 'Delivery Chronopost France', + 'version': '12.0.1.0.1', + 'author': "Akretion,Odoo Community Association (OCA)", + 'category': 'Delivery', + 'complexity': 'normal', + 'depends': [ + 'delivery_roulier_option', + ], + 'website': 'https://github.com/OCA/delivery-carrier', + 'data': [ + 'views/carrier_account.xml', + 'data/product.xml', + 'data/delivery.xml', + ], + 'installable': True, + 'license': 'AGPL-3', + } diff --git a/delivery_roulier_chronopost_fr/data/delivery.xml b/delivery_roulier_chronopost_fr/data/delivery.xml new file mode 100644 index 0000000000..cfe547adab --- /dev/null +++ b/delivery_roulier_chronopost_fr/data/delivery.xml @@ -0,0 +1,81 @@ + + + + + + Chrono 8 + 75 + chronopost_fr + + + + + Chrono 9 + 76 + chronopost_fr + + + + + Chrono 10 + 02 + chronopost_fr + + + + + Chrono 13 + 01 + chronopost_fr + + + + + Chrono 18 + 16 + chronopost_fr + + + + + Chrono Express + 17 + chronopost_fr + + + + + Chrono Classic + 44 + chronopost_fr + + + + + + Delivery on Monday + MON + Normal delivery if you do not choose this option + + + + Delivery on Saturday + SAT + Normal delivery if you do not choose this option + + + + + Shipper Pre-alert + SHIPALERT + Subscription Tracking Shipper (no shipper pre-alert if you do not choose this option) + + + + + Recipient Pre-alert + RECIPALERT + Recipient mail pre-alert (no recipient pre-alert if you do not choose this option) + + + diff --git a/delivery_roulier_chronopost_fr/data/product.xml b/delivery_roulier_chronopost_fr/data/product.xml new file mode 100644 index 0000000000..a8566c04df --- /dev/null +++ b/delivery_roulier_chronopost_fr/data/product.xml @@ -0,0 +1,10 @@ + + + + + SHIP_CHRONOPOST + service + Coûts de livraison - Chronopost + + + diff --git a/delivery_roulier_chronopost_fr/models/__init__.py b/delivery_roulier_chronopost_fr/models/__init__.py new file mode 100644 index 0000000000..8e87da101a --- /dev/null +++ b/delivery_roulier_chronopost_fr/models/__init__.py @@ -0,0 +1,4 @@ +from . import delivery_carrier +from . import stock_picking +from . import stock_quant_package +from . import carrier_account diff --git a/delivery_roulier_chronopost_fr/models/carrier_account.py b/delivery_roulier_chronopost_fr/models/carrier_account.py new file mode 100644 index 0000000000..592467983a --- /dev/null +++ b/delivery_roulier_chronopost_fr/models/carrier_account.py @@ -0,0 +1,16 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class CarrierAccount(models.Model): + _inherit = 'carrier.account' + + chronopost_fr_subaccount = fields.Char("Chronopost Sub Account", size=3) + chronopost_fr_file_format = fields.Selection( + selection=[('PDF', 'PDF'), ('PPR', 'PPR'), ('SPD', 'SPD'), + ('THE', 'THE'), ('SER', 'SER'), ('Z2D', 'Z2D'), + ('XML', 'XML'), ('THEPSG', 'THEPSG'), ('Z2DPSG', 'Z2DPSG')], + string='Chronopost File Format', + help="Default format of the carrier's label you want to print" + ) diff --git a/delivery_roulier_chronopost_fr/models/delivery_carrier.py b/delivery_roulier_chronopost_fr/models/delivery_carrier.py new file mode 100644 index 0000000000..5579e0f464 --- /dev/null +++ b/delivery_roulier_chronopost_fr/models/delivery_carrier.py @@ -0,0 +1,10 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class DeliveryCarrier(models.Model): + _inherit = 'delivery.carrier' + + delivery_type = fields.Selection( + selection_add=[('chronopost_fr', 'Chronopost')]) diff --git a/delivery_roulier_chronopost_fr/models/stock_picking.py b/delivery_roulier_chronopost_fr/models/stock_picking.py new file mode 100644 index 0000000000..d2aa243535 --- /dev/null +++ b/delivery_roulier_chronopost_fr/models/stock_picking.py @@ -0,0 +1,37 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from datetime import datetime +from odoo import models +from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DATE_FORMAT + + +class StockPicking(models.Model): + _inherit = 'stock.picking' + + def _chronopost_fr_get_auth(self, account, package=None): + vals = self._roulier_get_auth(account, package=package) + if account.chronopost_fr_subaccount: + vals.update({ + 'subAccount': account.chronopost_fr_subaccount + }) + return vals + + def _chronopost__fr_get_shipping_date(self, package=None): + return datetime.now().strftime(DATE_FORMAT) + + def _chronopost_fr_get_service(self, account, package=None): + vals = self._roulier_get_service(account, package=package) + additional_vals = { + 'shippingId': self.name, + 'customerId': self.origin, + 'shippingHour': int(datetime.now().strftime("%H")), + 'service': '0', # default value, overiden by option + } + vals.update(additional_vals) + return vals + + def _chronopost_fr_get_from_address(self, package=None): + vals = self._roulier_get_from_address(package=package) + # Civility for shipper seems always requirer... + vals['civility'] = 'E' + return vals diff --git a/delivery_roulier_chronopost_fr/models/stock_quant_package.py b/delivery_roulier_chronopost_fr/models/stock_quant_package.py new file mode 100644 index 0000000000..cafbc172f4 --- /dev/null +++ b/delivery_roulier_chronopost_fr/models/stock_quant_package.py @@ -0,0 +1,53 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class StockQuantPackage(models.Model): + _inherit = 'stock.quant.package' + + def _chronopost_fr_manage_options(self, picking, payload): + # Set default values + payload['to_address']['preAlert'] = 0 + payload['from_address']['preAlert'] = 0 + for option in picking.option_ids: + if option.code == 'INS': + # Multi package label is not supported for now + payload['parcels'][0]['insuredValue'] = self._get_sale_price( + picking) + curr = (picking.sale_id.currency_id or + picking.company_id.currency_id) + payload['service']['insuredCurrency'] = curr.code + if option.code == 'MON': + payload['service']['service'] = '1' + if option.code == 'SAT': + payload['service']['service'] = '6' + if option.code == 'SHIPALERT': + payload['from_address']['preAlert'] = 11 + if option.code == 'RECIPALERT': + payload['from_address']['preAlert'] = 22 + + # could be generic in delivery_roulier_option ? + def _chronopost_fr_before_call(self, picking, payload): + self._chronopost_fr_manage_options(picking, payload) + return payload + + def _get_chronopost_fr_object_type(self, picking): + # Override it to implement a specific logic + return 'MAR' + + def _chronopost_fr_get_parcel(self, picking): + vals = self._roulier_get_parcel(picking) + vals['objectType'] = self._get_chronopost_fr_object_type(picking) + # Manage options + if self._should_include_customs(picking): + vals['customsValue'] = self._get_sale_price(picking) + curr = (picking.sale_id.currency_id or + picking.company_id.currency_id) + vals['insuredCurrency'] = curr.code + return vals + + def _chronopost_fr_should_include_customs(self, picking): + if picking.carrier_code == 'chexp': + return True + return False diff --git a/delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.rst b/delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..0bddb053ae --- /dev/null +++ b/delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Florian da Costa diff --git a/delivery_roulier_chronopost_fr/readme/DESCRIPTION.rst b/delivery_roulier_chronopost_fr/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..d0fa3c0b76 --- /dev/null +++ b/delivery_roulier_chronopost_fr/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Allow to generate label for CHRONOPOST carrier. diff --git a/delivery_roulier_chronopost_fr/readme/ROADMAP.rst b/delivery_roulier_chronopost_fr/readme/ROADMAP.rst new file mode 100644 index 0000000000..601242f909 --- /dev/null +++ b/delivery_roulier_chronopost_fr/readme/ROADMAP.rst @@ -0,0 +1,3 @@ +For now, multi parcel is not managed, packages are sent one by one to the webservice. +ESD option is not implemented yet. +Relay Point has not been implemented either. diff --git a/delivery_roulier_chronopost_fr/static/description/icon.png b/delivery_roulier_chronopost_fr/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/delivery_roulier_chronopost_fr/views/carrier_account.xml b/delivery_roulier_chronopost_fr/views/carrier_account.xml new file mode 100644 index 0000000000..cf64dd50f3 --- /dev/null +++ b/delivery_roulier_chronopost_fr/views/carrier_account.xml @@ -0,0 +1,17 @@ + + + + + carrier.account + + + + + + + + + + + + From 560aa8408f916ed839b5f61fc473b21a561ebe1d Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Wed, 11 Nov 2020 22:35:49 +0100 Subject: [PATCH 2/8] Add test to chronopost module --- .../tests/__init__.py | 1 + .../ChronopostLabelCase.test_labels.yaml | 59 ++++++++++++++++++ .../tests/test_label_chronopost.py | 62 +++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 delivery_roulier_chronopost_fr/tests/__init__.py create mode 100644 delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml create mode 100644 delivery_roulier_chronopost_fr/tests/test_label_chronopost.py diff --git a/delivery_roulier_chronopost_fr/tests/__init__.py b/delivery_roulier_chronopost_fr/tests/__init__.py new file mode 100644 index 0000000000..847dbd1c3e --- /dev/null +++ b/delivery_roulier_chronopost_fr/tests/__init__.py @@ -0,0 +1 @@ +from . import test_label_chronopost diff --git a/delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml b/delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml new file mode 100644 index 0000000000..31428f5426 --- /dev/null +++ b/delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml @@ -0,0 +1,59 @@ +interactions: +- request: + body: "\n\n\n \n\ + \ \n \n 00000000\n\ + \ CHRFR\n \n \n\ + \ \n 35B rue Montgolfier\n\ + \ \n Villeurbanne\n\ + \ E\n \n\ + \ FR\n info@yourcompany.example.com\n\ + \ \n Akretion\n\ + \ Akretion\n 0499999999\n\ + \ 0\n 69100\n\ + \ \n \n 35B rue Montgolfier\n\ + \ \n Villeurbanne\n\ + \ E\n \n\ + \ FR\n info@yourcompany.example.com\n\ + \ \n Akretion\n\ + \ Akretion\n 0499999999\n\ + \ 0\n 69100\n\ + \ \n \n \n\ + \ 27 Rue Henri Rolland\n \n\ + \ VILLEURBANNE\n \n\ + \ \n FR\n\ + \ \n \n\ + \ Carrier label test customer\n Carrier\ + \ label test customer\n \n\ + \ 0\n 69100\n\ + \ \n \n PACK0000091\n\ + \ SO122\n WH/OUT/00112\n\ + \ \n \n DC\n \n\ + \ \n \n \n\ + \ \n \n\ + \ MAR\n 01\n 0\n\ + \ 2020-11-12\n 21\n 1.2\n\ + \ KGM\n \n \n\ + \ Z2D\n \n password\n\ + \n \n" + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + Content-Length: ['3232'] + User-Agent: [python-requests/2.20.0] + content-type: [text/xml] + method: POST + uri: https://ws.chronopost.fr/shipping-cxf/ShippingServiceWS + response: + body: {string: '0XlhBCl5GTzEwICw0OCBeR0I3ODAsNjU1LDMgXkZTCl5GTzEzICw4OSBeR0I1NzEsMywzIF5GUwpeRk8xMyAsMjI4XkdCNTcxLDMsMyBeRlMKXkZPMTMgLDM5NV5HQjU3MSwzLDMgXkZTCl5GTzQyNCwyMzBeR0IzLDE2OSwzIF5GUwpeRk81ODQsNDheR0IzLDM4MiwzIF5GUwpeRk83MzAsNDheR0IzLDM4MiwzIF5GUwpeRk81ODUsNDMwXkdCMjAyLDMsMyBeRlMKXkZPNTAsNTNeQTBOLDE3LDE3XkZET24gZGVsaXZlcnksIGRhbWFnZSBvciB0aGVsdCBtdXN0IGJlIHRoZSBzdWJqZWN0IG9mIHByZWNpc2UgYW5kIGNvbXBsZXRlIF5GUwpeRk81MCw3Ml5BME4sMTcsMTdeRkRyZXNlcnZhdGlvbnMsIGRhdGVkIGFuZCBzaWduZWQgYnkgdGhlIGNvbnNpZ25lZSwgb24gdGhlIGRlbGl2ZXJ5IG5vdGUuIF5GUwpeRk83NTMsNzBeQTBSLDI4LDQ4XkZEQ0hST05PUE9TVF5GUwpeRk83MzUsNzBeQTBSLDE4LDE4XkZEd3d3LmNocm9ub3Bvc3QuZnJeRlMKXkZPNzEwLDcwXkEwUiwxOSwxOV5GRFNlbmRlcl5GUwpeRk82MTUsNzBeQTBSLDE5LDE5XkZEUGhvbmVeRlMKXkZPNTk1LDcwXkEwUiwxOSwxOV5GRFJlZl5GUwpeRk81NjAsMTAyXkEwUiwxOSwxOV5GRERlbGl2ZXJ5IGFkZHJlc3MgXkZTCl5GTzY5NSw3MF5BMFIsMTksMTleRkRBa3JldGlvbl5GUwpeRk82NzUsNzBeQTBSLDE5LDE5XkZEQWtyZXRpb25eRlMKXkZPNjU1LDcwXkEwUiwxOSwxOV5GRDM1QiBydWUgTW9udGdvbGZpZXJeRlMKXkZPNjM1LDcwXkEwUiwxOSwxOV5GRDY5MTAwIFZpbGxldXJiYW5uZSBeRlMKXkZPNjE1LDE2MF5BMFIsMTksMTleRkQwNDk5OTk5OTk5XkZTCl5GTzU5NSwxMDBeQTBSLDE5LDE5XkZEV0gvT1VULzAwMTEyXkZTCl5GTzE3ICwyMzheQVFOLDE1LDE1XkZEQ29udGFjdCA6XkZTCl5GTzE3ICwyNTheQVFOLDE1LDE1XkZEUGhvbmUgOl5GUwpeRk8xNyAsMjc4XkFRTiwxNSwxNV5GRFJlZiA6XkZTCl5GTzE3ICwyOTdeQVFOLDE1LDE1XkZEQ29uc2lnbmVtZW50XkZTCl5GTzQ1NSwzMjJeQVFOLDE1LDE1XkZEV2VpZ2h0IF5GUwpeRk81MzAsMzUwXkFSTiwxOSwxOV5GREtHICBeRlMKXkZPMTcgLDUwMF5BME4sMTksMTleRkREYXRlIDogXkZTCl5GTzE3LCAxMDBeQVFOLDEwLDEwLF5GRENhcnJpZXIgbGFiZWwgdGVzdCBjdXN0b21lcl5GUwpeRk8xNywxMjBeQVFOLDEwLDEwLF5GRENhcnJpZXIgbGFiZWwgdGVzdCBjdXN0b21lcl5GUwpeRk8xNywxNDBeQVFOLDEwLDEwLF5GRDI3IFJ1ZSBIZW5yaSBSb2xsYW5kXkZTCl5GTzE3LDE2MF5BUU4sMTAsMTAsXkZEXkZTCl5GTzE3LDE4MF5BUU4sMTAsMTBeRkQ2OTEwMCAgICBWSUxMRVVSQkFOTkVeRlMKXkZPMTcsMjAwXkFRTiwxMCwxMF5GREZSIC0gRlJBTkNFICAgIF5GUwpeRk8xMDAsMjM4XkFRTiwxMCwxMF5GRENhcnJpZXIgbGFiZWwgdGVzdCBjdXN0b21lcl5GUwpeRk8xMDAsMjU4XkFRTiwxMCwxMF5GRF5GUwpeRk8wNjUsMjc4XkFRTiwxMCwxMF5GRFNPMTIyXkZTCl5GTzE1MCwyOTdeQVFOLDIwLDIwXkZEWFAwMjk1ODU3NTRGUl5GUwpeRk8wNTAsMzU5XkFSTiwyMCwyMF5GRFdIL09VVC8wMDExMl5GUwpeRk8wMzUsNDQ4XkFVTiwxNSwxNV5GRF5GUwpeRk80NDUsMjYwXkFVTiwyMCwyMF5GRDEvMV5GUwpeRk80NTAsMzUwXkFSTiwyMCwyMF5GRDEuMl5GUwpeRk83NSw1MDBeQTBOLDE5LDE5XkZEMTIvMTEvMjAyMF5GUwpeRk8xNyw1MTdeQTBOLDE5LDE5XkZEXkZTCl5GTzMwLDYzNV5BVU4sMTUsMTVeRkReRlMKXkZPNDUwLDU2Ml5BUk4sMjAsMjBeRkReRlMKCl5GTzUwLDQ2NV5BUk4sMjAsMjBeRkRYUDAyOTU4NTc1NEZSXkZTCl5GTzEwLDY0NV5BVE4sMjAsMjBeRkI0ODUsMSwwLFJeRkQxM0heRlMKCl5CWTIsMgpeRk80MCwzMjBeQkNOLCA0MCxOLE4sTixBXkZEUEFDSzAwMDAwOTFeRlMKXkZPMTQsNzA2XkFVTiwyMCwyMF5GRFhQMDJeRlMKXkZPMTIyLDcwN15BQk4sMzAsMTVeRkQgOTU4NSA3NTQyIDQ4S15GUwpeRk8yNzAsNzA4XkFVTiwyMCwyMF5GQjUzMCwxLDAsUl5GREFNMi1OT15GUwpeRk8xNiAsNzU1XkEwTiwyMCwyMF5GRFRyYWNrXkZTCl5GTzcyMCw3NTVeQTBOLDIwLDIwXkZEU2VydmljZV5GUwpeRk8yMyw3ODNeQVVOLDIwLDIwXkZEXkZTCl5GTzE1LDc3NV5HQjQwLDYwLDMgXkZTCl5GTzE1MCw3ODBeQVZOLDYwLDQ1XkZERlItQ0hSLTA0MzctSkFHMV5GUwpeRk8yNDAsODgwXkFETiw0MCwyMF5GRDIyNi1GUi02OTEwMF5GUwpeRk8yMCw4NzBeQVZOLDQwLDIwXkZETF5GUwpeRk81ODAsODcwXkFWTiw0MCwyMF5GRDZYVjAwXkZTCl5GTzIwMCw5MjBeQTBOLDE5LDE5XkZEMTEvMTEvMjAyMF5GUwpeRk8yODAsOTIwXkEwTiwxOSwxOV5GRF5GUwpeRk8zMzAsOTIwXkEwTiwxOSwxOV5GRENIUldTIDA4MTdeRlMKXkZPMzAsOTUwXkdCNzM0LDcsN15GUwpeQlkzLDIKXkZPNDAsMTAyMF5BRE4sNzAsNzBeRkREVVBMSUNBVEFeRlMKXkZPMTkwLDExNjBeQVJOLDIwLDIwXkZEMDA2OSAxMDBYIFAwMjkgNTg1NyA1NDI0IDgyMjYgMjUwMl5GUwoKCgpeWFoKXP029585754FR'} + headers: + Content-Type: [text/xml;charset=UTF-8] + Date: ['Wed, 11 Nov 2020 21:33:26 GMT'] + Vary: ['User-Agent,Accept-Encoding'] + content-length: ['3663'] + status: {code: 200, message: OK} +version: 1 diff --git a/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py b/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py new file mode 100644 index 0000000000..5d3be346b6 --- /dev/null +++ b/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py @@ -0,0 +1,62 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.addons.base_delivery_carrier_label.tests import carrier_label_case +from vcr_unittest import VCRMixin + + +class ChronopostLabelCase(VCRMixin, carrier_label_case.CarrierLabelCase): + def setUp(self, *args, **kwargs): + # need it to be defined before super to avoid failure in _hide_sensitive_data + self.account = False + super().setUp(*args, **kwargs) + # french carrier sender need to be from France + self.picking.company_id.partner_id.write( + {"country_id": self.env.ref("base.fr").id} + ) + # change account and password with valid credentials to regenerate the cassette + self.account = self.env["carrier.account"].create( + { + "name": "Chronopost Test Account", + "delivery_type": "chronopost_fr", + "account": "dummy", + "password": "dummy", + "chronopost_fr_file_format": "Z2D", + } + ) + + def _hide_sensitive_data(self, request): + password = self.account and self.account.password or "dummy" + account = self.account and self.account.account or "dummy" + body = request.body + body = body.replace(password.encode(), b"password") + body = body.replace(account.encode(), b"00000000") + request.body = body + return request + + def _get_vcr_kwargs(self, **kwargs): + return { + "record_mode": "once", + "match_on": ["method", "path"], + "decode_compressed_response": True, + "before_record_request": self._hide_sensitive_data, + } + + def _product_data(self): + data = super()._product_data() + data.update({"weight": 1.2}) + return data + + def _get_carrier(self): + return self.env.ref("delivery_roulier_chronopost_fr.chrono_13") + + def _partner_data(self): + data = super()._partner_data() + data.update( + { + "street": "27 Rue Henri Rolland", + "zip": "69100", + "city": "VILLEURBANNE", + "country_id": self.env.ref("base.fr").id, + } + ) + return data From 43757653cd9a9311bc6847567d98332bc6453da9 Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Sun, 3 Jan 2021 00:34:08 +0100 Subject: [PATCH 3/8] [IMP] delivery_roulier_chronopost_fr: black, isort, prettier --- .../__manifest__.py | 35 ++--- .../data/delivery.xml | 24 ++-- .../data/product.xml | 4 +- .../models/carrier_account.py | 20 ++- .../models/delivery_carrier.py | 5 +- .../models/stock_picking.py | 19 ++- .../models/stock_quant_package.py | 45 +++---- .../ChronopostLabelCase.test_labels.yaml | 127 ++++++++++-------- .../tests/test_label_chronopost.py | 3 +- .../views/carrier_account.xml | 17 ++- 10 files changed, 165 insertions(+), 134 deletions(-) diff --git a/delivery_roulier_chronopost_fr/__manifest__.py b/delivery_roulier_chronopost_fr/__manifest__.py index 21f5f8f4f2..9a40aa158e 100644 --- a/delivery_roulier_chronopost_fr/__manifest__.py +++ b/delivery_roulier_chronopost_fr/__manifest__.py @@ -1,19 +1,20 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -{'name': 'Delivery Chronopost France', - 'version': '12.0.1.0.1', - 'author': "Akretion,Odoo Community Association (OCA)", - 'category': 'Delivery', - 'complexity': 'normal', - 'depends': [ - 'delivery_roulier_option', - ], - 'website': 'https://github.com/OCA/delivery-carrier', - 'data': [ - 'views/carrier_account.xml', - 'data/product.xml', - 'data/delivery.xml', - ], - 'installable': True, - 'license': 'AGPL-3', - } +{ + "name": "Delivery Chronopost France", + "version": "12.0.1.0.1", + "author": "Akretion,Odoo Community Association (OCA)", + "category": "Delivery", + "complexity": "normal", + "depends": [ + "delivery_roulier_option", + ], + "website": "https://github.com/OCA/delivery-carrier", + "data": [ + "views/carrier_account.xml", + "data/product.xml", + "data/delivery.xml", + ], + "installable": True, + "license": "AGPL-3", +} diff --git a/delivery_roulier_chronopost_fr/data/delivery.xml b/delivery_roulier_chronopost_fr/data/delivery.xml index cfe547adab..855ad6a479 100644 --- a/delivery_roulier_chronopost_fr/data/delivery.xml +++ b/delivery_roulier_chronopost_fr/data/delivery.xml @@ -1,4 +1,4 @@ - + @@ -6,49 +6,49 @@ Chrono 8 75 chronopost_fr - + Chrono 9 76 chronopost_fr - + Chrono 10 02 chronopost_fr - + Chrono 13 01 chronopost_fr - + Chrono 18 16 chronopost_fr - + Chrono Express 17 chronopost_fr - + Chrono Classic 44 chronopost_fr - + @@ -68,14 +68,18 @@ Shipper Pre-alert SHIPALERT - Subscription Tracking Shipper (no shipper pre-alert if you do not choose this option) + Subscription Tracking Shipper (no shipper pre-alert if you do not choose this option) Recipient Pre-alert RECIPALERT - Recipient mail pre-alert (no recipient pre-alert if you do not choose this option) + Recipient mail pre-alert (no recipient pre-alert if you do not choose this option) diff --git a/delivery_roulier_chronopost_fr/data/product.xml b/delivery_roulier_chronopost_fr/data/product.xml index a8566c04df..efa2a90f24 100644 --- a/delivery_roulier_chronopost_fr/data/product.xml +++ b/delivery_roulier_chronopost_fr/data/product.xml @@ -1,6 +1,6 @@ - + - + SHIP_CHRONOPOST service diff --git a/delivery_roulier_chronopost_fr/models/carrier_account.py b/delivery_roulier_chronopost_fr/models/carrier_account.py index 592467983a..5e2dced1ac 100644 --- a/delivery_roulier_chronopost_fr/models/carrier_account.py +++ b/delivery_roulier_chronopost_fr/models/carrier_account.py @@ -4,13 +4,21 @@ class CarrierAccount(models.Model): - _inherit = 'carrier.account' + _inherit = "carrier.account" chronopost_fr_subaccount = fields.Char("Chronopost Sub Account", size=3) chronopost_fr_file_format = fields.Selection( - selection=[('PDF', 'PDF'), ('PPR', 'PPR'), ('SPD', 'SPD'), - ('THE', 'THE'), ('SER', 'SER'), ('Z2D', 'Z2D'), - ('XML', 'XML'), ('THEPSG', 'THEPSG'), ('Z2DPSG', 'Z2DPSG')], - string='Chronopost File Format', - help="Default format of the carrier's label you want to print" + selection=[ + ("PDF", "PDF"), + ("PPR", "PPR"), + ("SPD", "SPD"), + ("THE", "THE"), + ("SER", "SER"), + ("Z2D", "Z2D"), + ("XML", "XML"), + ("THEPSG", "THEPSG"), + ("Z2DPSG", "Z2DPSG"), + ], + string="Chronopost File Format", + help="Default format of the carrier's label you want to print", ) diff --git a/delivery_roulier_chronopost_fr/models/delivery_carrier.py b/delivery_roulier_chronopost_fr/models/delivery_carrier.py index 5579e0f464..90c7093ca5 100644 --- a/delivery_roulier_chronopost_fr/models/delivery_carrier.py +++ b/delivery_roulier_chronopost_fr/models/delivery_carrier.py @@ -4,7 +4,6 @@ class DeliveryCarrier(models.Model): - _inherit = 'delivery.carrier' + _inherit = "delivery.carrier" - delivery_type = fields.Selection( - selection_add=[('chronopost_fr', 'Chronopost')]) + delivery_type = fields.Selection(selection_add=[("chronopost_fr", "Chronopost")]) diff --git a/delivery_roulier_chronopost_fr/models/stock_picking.py b/delivery_roulier_chronopost_fr/models/stock_picking.py index d2aa243535..862d56e6c7 100644 --- a/delivery_roulier_chronopost_fr/models/stock_picking.py +++ b/delivery_roulier_chronopost_fr/models/stock_picking.py @@ -1,19 +1,18 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from datetime import datetime + from odoo import models from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DATE_FORMAT class StockPicking(models.Model): - _inherit = 'stock.picking' + _inherit = "stock.picking" def _chronopost_fr_get_auth(self, account, package=None): vals = self._roulier_get_auth(account, package=package) if account.chronopost_fr_subaccount: - vals.update({ - 'subAccount': account.chronopost_fr_subaccount - }) + vals.update({"subAccount": account.chronopost_fr_subaccount}) return vals def _chronopost__fr_get_shipping_date(self, package=None): @@ -22,16 +21,16 @@ def _chronopost__fr_get_shipping_date(self, package=None): def _chronopost_fr_get_service(self, account, package=None): vals = self._roulier_get_service(account, package=package) additional_vals = { - 'shippingId': self.name, - 'customerId': self.origin, - 'shippingHour': int(datetime.now().strftime("%H")), - 'service': '0', # default value, overiden by option - } + "shippingId": self.name, + "customerId": self.origin, + "shippingHour": int(datetime.now().strftime("%H")), + "service": "0", # default value, overiden by option + } vals.update(additional_vals) return vals def _chronopost_fr_get_from_address(self, package=None): vals = self._roulier_get_from_address(package=package) # Civility for shipper seems always requirer... - vals['civility'] = 'E' + vals["civility"] = "E" return vals diff --git a/delivery_roulier_chronopost_fr/models/stock_quant_package.py b/delivery_roulier_chronopost_fr/models/stock_quant_package.py index cafbc172f4..846e30ee14 100644 --- a/delivery_roulier_chronopost_fr/models/stock_quant_package.py +++ b/delivery_roulier_chronopost_fr/models/stock_quant_package.py @@ -4,28 +4,26 @@ class StockQuantPackage(models.Model): - _inherit = 'stock.quant.package' + _inherit = "stock.quant.package" def _chronopost_fr_manage_options(self, picking, payload): # Set default values - payload['to_address']['preAlert'] = 0 - payload['from_address']['preAlert'] = 0 + payload["to_address"]["preAlert"] = 0 + payload["from_address"]["preAlert"] = 0 for option in picking.option_ids: - if option.code == 'INS': + if option.code == "INS": # Multi package label is not supported for now - payload['parcels'][0]['insuredValue'] = self._get_sale_price( - picking) - curr = (picking.sale_id.currency_id or - picking.company_id.currency_id) - payload['service']['insuredCurrency'] = curr.code - if option.code == 'MON': - payload['service']['service'] = '1' - if option.code == 'SAT': - payload['service']['service'] = '6' - if option.code == 'SHIPALERT': - payload['from_address']['preAlert'] = 11 - if option.code == 'RECIPALERT': - payload['from_address']['preAlert'] = 22 + payload["parcels"][0]["insuredValue"] = self._get_sale_price(picking) + curr = picking.sale_id.currency_id or picking.company_id.currency_id + payload["service"]["insuredCurrency"] = curr.code + if option.code == "MON": + payload["service"]["service"] = "1" + if option.code == "SAT": + payload["service"]["service"] = "6" + if option.code == "SHIPALERT": + payload["from_address"]["preAlert"] = 11 + if option.code == "RECIPALERT": + payload["from_address"]["preAlert"] = 22 # could be generic in delivery_roulier_option ? def _chronopost_fr_before_call(self, picking, payload): @@ -34,20 +32,19 @@ def _chronopost_fr_before_call(self, picking, payload): def _get_chronopost_fr_object_type(self, picking): # Override it to implement a specific logic - return 'MAR' + return "MAR" def _chronopost_fr_get_parcel(self, picking): vals = self._roulier_get_parcel(picking) - vals['objectType'] = self._get_chronopost_fr_object_type(picking) + vals["objectType"] = self._get_chronopost_fr_object_type(picking) # Manage options if self._should_include_customs(picking): - vals['customsValue'] = self._get_sale_price(picking) - curr = (picking.sale_id.currency_id or - picking.company_id.currency_id) - vals['insuredCurrency'] = curr.code + vals["customsValue"] = self._get_sale_price(picking) + curr = picking.sale_id.currency_id or picking.company_id.currency_id + vals["insuredCurrency"] = curr.code return vals def _chronopost_fr_should_include_customs(self, picking): - if picking.carrier_code == 'chexp': + if picking.carrier_code == "chexp": return True return False diff --git a/delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml b/delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml index 31428f5426..b042b45293 100644 --- a/delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml +++ b/delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml @@ -1,59 +1,72 @@ interactions: -- request: - body: "\n\n\n \n\ - \ \n \n 00000000\n\ - \ CHRFR\n \n \n\ - \ \n 35B rue Montgolfier\n\ - \ \n Villeurbanne\n\ - \ E\n \n\ - \ FR\n info@yourcompany.example.com\n\ - \ \n Akretion\n\ - \ Akretion\n 0499999999\n\ - \ 0\n 69100\n\ - \ \n \n 35B rue Montgolfier\n\ - \ \n Villeurbanne\n\ - \ E\n \n\ - \ FR\n info@yourcompany.example.com\n\ - \ \n Akretion\n\ - \ Akretion\n 0499999999\n\ - \ 0\n 69100\n\ - \ \n \n \n\ - \ 27 Rue Henri Rolland\n \n\ - \ VILLEURBANNE\n \n\ - \ \n FR\n\ - \ \n \n\ - \ Carrier label test customer\n Carrier\ - \ label test customer\n \n\ - \ 0\n 69100\n\ - \ \n \n PACK0000091\n\ - \ SO122\n WH/OUT/00112\n\ - \ \n \n DC\n \n\ - \ \n \n \n\ - \ \n \n\ - \ MAR\n 01\n 0\n\ - \ 2020-11-12\n 21\n 1.2\n\ - \ KGM\n \n \n\ - \ Z2D\n \n password\n\ - \n \n" - headers: - Accept: ['*/*'] - Accept-Encoding: ['gzip, deflate'] - Connection: [keep-alive] - Content-Length: ['3232'] - User-Agent: [python-requests/2.20.0] - content-type: [text/xml] - method: POST - uri: https://ws.chronopost.fr/shipping-cxf/ShippingServiceWS - response: - body: {string: '0XlhBCl5GTzEwICw0OCBeR0I3ODAsNjU1LDMgXkZTCl5GTzEzICw4OSBeR0I1NzEsMywzIF5GUwpeRk8xMyAsMjI4XkdCNTcxLDMsMyBeRlMKXkZPMTMgLDM5NV5HQjU3MSwzLDMgXkZTCl5GTzQyNCwyMzBeR0IzLDE2OSwzIF5GUwpeRk81ODQsNDheR0IzLDM4MiwzIF5GUwpeRk83MzAsNDheR0IzLDM4MiwzIF5GUwpeRk81ODUsNDMwXkdCMjAyLDMsMyBeRlMKXkZPNTAsNTNeQTBOLDE3LDE3XkZET24gZGVsaXZlcnksIGRhbWFnZSBvciB0aGVsdCBtdXN0IGJlIHRoZSBzdWJqZWN0IG9mIHByZWNpc2UgYW5kIGNvbXBsZXRlIF5GUwpeRk81MCw3Ml5BME4sMTcsMTdeRkRyZXNlcnZhdGlvbnMsIGRhdGVkIGFuZCBzaWduZWQgYnkgdGhlIGNvbnNpZ25lZSwgb24gdGhlIGRlbGl2ZXJ5IG5vdGUuIF5GUwpeRk83NTMsNzBeQTBSLDI4LDQ4XkZEQ0hST05PUE9TVF5GUwpeRk83MzUsNzBeQTBSLDE4LDE4XkZEd3d3LmNocm9ub3Bvc3QuZnJeRlMKXkZPNzEwLDcwXkEwUiwxOSwxOV5GRFNlbmRlcl5GUwpeRk82MTUsNzBeQTBSLDE5LDE5XkZEUGhvbmVeRlMKXkZPNTk1LDcwXkEwUiwxOSwxOV5GRFJlZl5GUwpeRk81NjAsMTAyXkEwUiwxOSwxOV5GRERlbGl2ZXJ5IGFkZHJlc3MgXkZTCl5GTzY5NSw3MF5BMFIsMTksMTleRkRBa3JldGlvbl5GUwpeRk82NzUsNzBeQTBSLDE5LDE5XkZEQWtyZXRpb25eRlMKXkZPNjU1LDcwXkEwUiwxOSwxOV5GRDM1QiBydWUgTW9udGdvbGZpZXJeRlMKXkZPNjM1LDcwXkEwUiwxOSwxOV5GRDY5MTAwIFZpbGxldXJiYW5uZSBeRlMKXkZPNjE1LDE2MF5BMFIsMTksMTleRkQwNDk5OTk5OTk5XkZTCl5GTzU5NSwxMDBeQTBSLDE5LDE5XkZEV0gvT1VULzAwMTEyXkZTCl5GTzE3ICwyMzheQVFOLDE1LDE1XkZEQ29udGFjdCA6XkZTCl5GTzE3ICwyNTheQVFOLDE1LDE1XkZEUGhvbmUgOl5GUwpeRk8xNyAsMjc4XkFRTiwxNSwxNV5GRFJlZiA6XkZTCl5GTzE3ICwyOTdeQVFOLDE1LDE1XkZEQ29uc2lnbmVtZW50XkZTCl5GTzQ1NSwzMjJeQVFOLDE1LDE1XkZEV2VpZ2h0IF5GUwpeRk81MzAsMzUwXkFSTiwxOSwxOV5GREtHICBeRlMKXkZPMTcgLDUwMF5BME4sMTksMTleRkREYXRlIDogXkZTCl5GTzE3LCAxMDBeQVFOLDEwLDEwLF5GRENhcnJpZXIgbGFiZWwgdGVzdCBjdXN0b21lcl5GUwpeRk8xNywxMjBeQVFOLDEwLDEwLF5GRENhcnJpZXIgbGFiZWwgdGVzdCBjdXN0b21lcl5GUwpeRk8xNywxNDBeQVFOLDEwLDEwLF5GRDI3IFJ1ZSBIZW5yaSBSb2xsYW5kXkZTCl5GTzE3LDE2MF5BUU4sMTAsMTAsXkZEXkZTCl5GTzE3LDE4MF5BUU4sMTAsMTBeRkQ2OTEwMCAgICBWSUxMRVVSQkFOTkVeRlMKXkZPMTcsMjAwXkFRTiwxMCwxMF5GREZSIC0gRlJBTkNFICAgIF5GUwpeRk8xMDAsMjM4XkFRTiwxMCwxMF5GRENhcnJpZXIgbGFiZWwgdGVzdCBjdXN0b21lcl5GUwpeRk8xMDAsMjU4XkFRTiwxMCwxMF5GRF5GUwpeRk8wNjUsMjc4XkFRTiwxMCwxMF5GRFNPMTIyXkZTCl5GTzE1MCwyOTdeQVFOLDIwLDIwXkZEWFAwMjk1ODU3NTRGUl5GUwpeRk8wNTAsMzU5XkFSTiwyMCwyMF5GRFdIL09VVC8wMDExMl5GUwpeRk8wMzUsNDQ4XkFVTiwxNSwxNV5GRF5GUwpeRk80NDUsMjYwXkFVTiwyMCwyMF5GRDEvMV5GUwpeRk80NTAsMzUwXkFSTiwyMCwyMF5GRDEuMl5GUwpeRk83NSw1MDBeQTBOLDE5LDE5XkZEMTIvMTEvMjAyMF5GUwpeRk8xNyw1MTdeQTBOLDE5LDE5XkZEXkZTCl5GTzMwLDYzNV5BVU4sMTUsMTVeRkReRlMKXkZPNDUwLDU2Ml5BUk4sMjAsMjBeRkReRlMKCl5GTzUwLDQ2NV5BUk4sMjAsMjBeRkRYUDAyOTU4NTc1NEZSXkZTCl5GTzEwLDY0NV5BVE4sMjAsMjBeRkI0ODUsMSwwLFJeRkQxM0heRlMKCl5CWTIsMgpeRk80MCwzMjBeQkNOLCA0MCxOLE4sTixBXkZEUEFDSzAwMDAwOTFeRlMKXkZPMTQsNzA2XkFVTiwyMCwyMF5GRFhQMDJeRlMKXkZPMTIyLDcwN15BQk4sMzAsMTVeRkQgOTU4NSA3NTQyIDQ4S15GUwpeRk8yNzAsNzA4XkFVTiwyMCwyMF5GQjUzMCwxLDAsUl5GREFNMi1OT15GUwpeRk8xNiAsNzU1XkEwTiwyMCwyMF5GRFRyYWNrXkZTCl5GTzcyMCw3NTVeQTBOLDIwLDIwXkZEU2VydmljZV5GUwpeRk8yMyw3ODNeQVVOLDIwLDIwXkZEXkZTCl5GTzE1LDc3NV5HQjQwLDYwLDMgXkZTCl5GTzE1MCw3ODBeQVZOLDYwLDQ1XkZERlItQ0hSLTA0MzctSkFHMV5GUwpeRk8yNDAsODgwXkFETiw0MCwyMF5GRDIyNi1GUi02OTEwMF5GUwpeRk8yMCw4NzBeQVZOLDQwLDIwXkZETF5GUwpeRk81ODAsODcwXkFWTiw0MCwyMF5GRDZYVjAwXkZTCl5GTzIwMCw5MjBeQTBOLDE5LDE5XkZEMTEvMTEvMjAyMF5GUwpeRk8yODAsOTIwXkEwTiwxOSwxOV5GRF5GUwpeRk8zMzAsOTIwXkEwTiwxOSwxOV5GRENIUldTIDA4MTdeRlMKXkZPMzAsOTUwXkdCNzM0LDcsN15GUwpeQlkzLDIKXkZPNDAsMTAyMF5BRE4sNzAsNzBeRkREVVBMSUNBVEFeRlMKXkZPMTkwLDExNjBeQVJOLDIwLDIwXkZEMDA2OSAxMDBYIFAwMjkgNTg1NyA1NDI0IDgyMjYgMjUwMl5GUwoKCgpeWFoKXP029585754FR'} - headers: - Content-Type: [text/xml;charset=UTF-8] - Date: ['Wed, 11 Nov 2020 21:33:26 GMT'] - Vary: ['User-Agent,Accept-Encoding'] - content-length: ['3663'] - status: {code: 200, message: OK} + - request: + body: "\n\n\n \n\ + \ \n + \n 00000000\n\ + \ CHRFR\n \n \n\ + \ \n 35B rue Montgolfier\n\ + \ \n Villeurbanne\n\ + \ E\n \n\ + \ FR\n info@yourcompany.example.com\n\ + \ \n Akretion\n\ + \ Akretion\n 0499999999\n\ + \ 0\n 69100\n\ + \ \n \n 35B rue + Montgolfier\n\ + \ \n Villeurbanne\n\ + \ E\n \n\ + \ FR\n info@yourcompany.example.com\n\ + \ \n Akretion\n\ + \ Akretion\n 0499999999\n\ + \ 0\n 69100\n\ + \ \n \n \n\ + \ 27 Rue Henri + Rolland\n \n\ + \ VILLEURBANNE\n \n\ + \ \n FR\n\ + \ \n \n\ + \ Carrier label test + customer\n Carrier\ + \ label test customer\n \n\ + \ 0\n 69100\n\ + \ \n + \n PACK0000091\n\ + \ SO122\n WH/OUT/00112\n\ + \ \n + \n DC\n \n\ + \ \n \n \n\ + \ \n \n\ + \ MAR\n 01\n 0\n\ + \ 2020-11-12\n 21\n 1.2\n\ + \ KGM\n \n \n\ + \ Z2D\n \n password\n\ + \n \n" + headers: + Accept: ["*/*"] + Accept-Encoding: ["gzip, deflate"] + Connection: [keep-alive] + Content-Length: ["3232"] + User-Agent: [python-requests/2.20.0] + content-type: [text/xml] + method: POST + uri: https://ws.chronopost.fr/shipping-cxf/ShippingServiceWS + response: + body: + { + string: + '0XlhBCl5GTzEwICw0OCBeR0I3ODAsNjU1LDMgXkZTCl5GTzEzICw4OSBeR0I1NzEsMywzIF5GUwpeRk8xMyAsMjI4XkdCNTcxLDMsMyBeRlMKXkZPMTMgLDM5NV5HQjU3MSwzLDMgXkZTCl5GTzQyNCwyMzBeR0IzLDE2OSwzIF5GUwpeRk81ODQsNDheR0IzLDM4MiwzIF5GUwpeRk83MzAsNDheR0IzLDM4MiwzIF5GUwpeRk81ODUsNDMwXkdCMjAyLDMsMyBeRlMKXkZPNTAsNTNeQTBOLDE3LDE3XkZET24gZGVsaXZlcnksIGRhbWFnZSBvciB0aGVsdCBtdXN0IGJlIHRoZSBzdWJqZWN0IG9mIHByZWNpc2UgYW5kIGNvbXBsZXRlIF5GUwpeRk81MCw3Ml5BME4sMTcsMTdeRkRyZXNlcnZhdGlvbnMsIGRhdGVkIGFuZCBzaWduZWQgYnkgdGhlIGNvbnNpZ25lZSwgb24gdGhlIGRlbGl2ZXJ5IG5vdGUuIF5GUwpeRk83NTMsNzBeQTBSLDI4LDQ4XkZEQ0hST05PUE9TVF5GUwpeRk83MzUsNzBeQTBSLDE4LDE4XkZEd3d3LmNocm9ub3Bvc3QuZnJeRlMKXkZPNzEwLDcwXkEwUiwxOSwxOV5GRFNlbmRlcl5GUwpeRk82MTUsNzBeQTBSLDE5LDE5XkZEUGhvbmVeRlMKXkZPNTk1LDcwXkEwUiwxOSwxOV5GRFJlZl5GUwpeRk81NjAsMTAyXkEwUiwxOSwxOV5GRERlbGl2ZXJ5IGFkZHJlc3MgXkZTCl5GTzY5NSw3MF5BMFIsMTksMTleRkRBa3JldGlvbl5GUwpeRk82NzUsNzBeQTBSLDE5LDE5XkZEQWtyZXRpb25eRlMKXkZPNjU1LDcwXkEwUiwxOSwxOV5GRDM1QiBydWUgTW9udGdvbGZpZXJeRlMKXkZPNjM1LDcwXkEwUiwxOSwxOV5GRDY5MTAwIFZpbGxldXJiYW5uZSBeRlMKXkZPNjE1LDE2MF5BMFIsMTksMTleRkQwNDk5OTk5OTk5XkZTCl5GTzU5NSwxMDBeQTBSLDE5LDE5XkZEV0gvT1VULzAwMTEyXkZTCl5GTzE3ICwyMzheQVFOLDE1LDE1XkZEQ29udGFjdCA6XkZTCl5GTzE3ICwyNTheQVFOLDE1LDE1XkZEUGhvbmUgOl5GUwpeRk8xNyAsMjc4XkFRTiwxNSwxNV5GRFJlZiA6XkZTCl5GTzE3ICwyOTdeQVFOLDE1LDE1XkZEQ29uc2lnbmVtZW50XkZTCl5GTzQ1NSwzMjJeQVFOLDE1LDE1XkZEV2VpZ2h0IF5GUwpeRk81MzAsMzUwXkFSTiwxOSwxOV5GREtHICBeRlMKXkZPMTcgLDUwMF5BME4sMTksMTleRkREYXRlIDogXkZTCl5GTzE3LCAxMDBeQVFOLDEwLDEwLF5GRENhcnJpZXIgbGFiZWwgdGVzdCBjdXN0b21lcl5GUwpeRk8xNywxMjBeQVFOLDEwLDEwLF5GRENhcnJpZXIgbGFiZWwgdGVzdCBjdXN0b21lcl5GUwpeRk8xNywxNDBeQVFOLDEwLDEwLF5GRDI3IFJ1ZSBIZW5yaSBSb2xsYW5kXkZTCl5GTzE3LDE2MF5BUU4sMTAsMTAsXkZEXkZTCl5GTzE3LDE4MF5BUU4sMTAsMTBeRkQ2OTEwMCAgICBWSUxMRVVSQkFOTkVeRlMKXkZPMTcsMjAwXkFRTiwxMCwxMF5GREZSIC0gRlJBTkNFICAgIF5GUwpeRk8xMDAsMjM4XkFRTiwxMCwxMF5GRENhcnJpZXIgbGFiZWwgdGVzdCBjdXN0b21lcl5GUwpeRk8xMDAsMjU4XkFRTiwxMCwxMF5GRF5GUwpeRk8wNjUsMjc4XkFRTiwxMCwxMF5GRFNPMTIyXkZTCl5GTzE1MCwyOTdeQVFOLDIwLDIwXkZEWFAwMjk1ODU3NTRGUl5GUwpeRk8wNTAsMzU5XkFSTiwyMCwyMF5GRFdIL09VVC8wMDExMl5GUwpeRk8wMzUsNDQ4XkFVTiwxNSwxNV5GRF5GUwpeRk80NDUsMjYwXkFVTiwyMCwyMF5GRDEvMV5GUwpeRk80NTAsMzUwXkFSTiwyMCwyMF5GRDEuMl5GUwpeRk83NSw1MDBeQTBOLDE5LDE5XkZEMTIvMTEvMjAyMF5GUwpeRk8xNyw1MTdeQTBOLDE5LDE5XkZEXkZTCl5GTzMwLDYzNV5BVU4sMTUsMTVeRkReRlMKXkZPNDUwLDU2Ml5BUk4sMjAsMjBeRkReRlMKCl5GTzUwLDQ2NV5BUk4sMjAsMjBeRkRYUDAyOTU4NTc1NEZSXkZTCl5GTzEwLDY0NV5BVE4sMjAsMjBeRkI0ODUsMSwwLFJeRkQxM0heRlMKCl5CWTIsMgpeRk80MCwzMjBeQkNOLCA0MCxOLE4sTixBXkZEUEFDSzAwMDAwOTFeRlMKXkZPMTQsNzA2XkFVTiwyMCwyMF5GRFhQMDJeRlMKXkZPMTIyLDcwN15BQk4sMzAsMTVeRkQgOTU4NSA3NTQyIDQ4S15GUwpeRk8yNzAsNzA4XkFVTiwyMCwyMF5GQjUzMCwxLDAsUl5GREFNMi1OT15GUwpeRk8xNiAsNzU1XkEwTiwyMCwyMF5GRFRyYWNrXkZTCl5GTzcyMCw3NTVeQTBOLDIwLDIwXkZEU2VydmljZV5GUwpeRk8yMyw3ODNeQVVOLDIwLDIwXkZEXkZTCl5GTzE1LDc3NV5HQjQwLDYwLDMgXkZTCl5GTzE1MCw3ODBeQVZOLDYwLDQ1XkZERlItQ0hSLTA0MzctSkFHMV5GUwpeRk8yNDAsODgwXkFETiw0MCwyMF5GRDIyNi1GUi02OTEwMF5GUwpeRk8yMCw4NzBeQVZOLDQwLDIwXkZETF5GUwpeRk81ODAsODcwXkFWTiw0MCwyMF5GRDZYVjAwXkZTCl5GTzIwMCw5MjBeQTBOLDE5LDE5XkZEMTEvMTEvMjAyMF5GUwpeRk8yODAsOTIwXkEwTiwxOSwxOV5GRF5GUwpeRk8zMzAsOTIwXkEwTiwxOSwxOV5GRENIUldTIDA4MTdeRlMKXkZPMzAsOTUwXkdCNzM0LDcsN15GUwpeQlkzLDIKXkZPNDAsMTAyMF5BRE4sNzAsNzBeRkREVVBMSUNBVEFeRlMKXkZPMTkwLDExNjBeQVJOLDIwLDIwXkZEMDA2OSAxMDBYIFAwMjkgNTg1NyA1NDI0IDgyMjYgMjUwMl5GUwoKCgpeWFoKXP029585754FR', + } + headers: + Content-Type: [text/xml;charset=UTF-8] + Date: ["Wed, 11 Nov 2020 21:33:26 GMT"] + Vary: ["User-Agent,Accept-Encoding"] + content-length: ["3663"] + status: {code: 200, message: OK} version: 1 diff --git a/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py b/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py index 5d3be346b6..9875b791e3 100644 --- a/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py +++ b/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py @@ -1,8 +1,9 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo.addons.base_delivery_carrier_label.tests import carrier_label_case from vcr_unittest import VCRMixin +from odoo.addons.base_delivery_carrier_label.tests import carrier_label_case + class ChronopostLabelCase(VCRMixin, carrier_label_case.CarrierLabelCase): def setUp(self, *args, **kwargs): diff --git a/delivery_roulier_chronopost_fr/views/carrier_account.xml b/delivery_roulier_chronopost_fr/views/carrier_account.xml index cf64dd50f3..6a33316179 100644 --- a/delivery_roulier_chronopost_fr/views/carrier_account.xml +++ b/delivery_roulier_chronopost_fr/views/carrier_account.xml @@ -1,15 +1,24 @@ - + carrier.account - + - + - + From 745c5aefb85517b79ac7dd393d76da5d7d47c41d Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Sun, 3 Jan 2021 00:34:08 +0100 Subject: [PATCH 4/8] [MIG] delivery_roulier_chronopost_fr: Migration to 14.0 --- delivery_roulier_chronopost_fr/__manifest__.py | 2 +- delivery_roulier_chronopost_fr/models/delivery_carrier.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/delivery_roulier_chronopost_fr/__manifest__.py b/delivery_roulier_chronopost_fr/__manifest__.py index 9a40aa158e..f2d8f6085e 100644 --- a/delivery_roulier_chronopost_fr/__manifest__.py +++ b/delivery_roulier_chronopost_fr/__manifest__.py @@ -2,7 +2,7 @@ { "name": "Delivery Chronopost France", - "version": "12.0.1.0.1", + "version": "14.0.1.0.0", "author": "Akretion,Odoo Community Association (OCA)", "category": "Delivery", "complexity": "normal", diff --git a/delivery_roulier_chronopost_fr/models/delivery_carrier.py b/delivery_roulier_chronopost_fr/models/delivery_carrier.py index 90c7093ca5..1db48e837d 100644 --- a/delivery_roulier_chronopost_fr/models/delivery_carrier.py +++ b/delivery_roulier_chronopost_fr/models/delivery_carrier.py @@ -6,4 +6,7 @@ class DeliveryCarrier(models.Model): _inherit = "delivery.carrier" - delivery_type = fields.Selection(selection_add=[("chronopost_fr", "Chronopost")]) + delivery_type = fields.Selection( + selection_add=[("chronopost_fr", "Chronopost")], + ondelete={"chronopost_fr": "set default"}, + ) From df46241c91b5944656d83f76753cb27b650c78fd Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Thu, 11 Feb 2021 19:41:51 +0100 Subject: [PATCH 5/8] Update shipping date format according to roulier change --- delivery_roulier_chronopost_fr/README.rst | 83 ++++ .../__manifest__.py | 2 +- .../i18n/delivery_roulier_chronopost_fr.pot | 207 +++++++++ delivery_roulier_chronopost_fr/i18n/es.po | 211 +++++++++ .../models/stock_picking.py | 5 +- .../static/description/index.html | 428 ++++++++++++++++++ 6 files changed, 932 insertions(+), 4 deletions(-) create mode 100644 delivery_roulier_chronopost_fr/README.rst create mode 100644 delivery_roulier_chronopost_fr/i18n/delivery_roulier_chronopost_fr.pot create mode 100644 delivery_roulier_chronopost_fr/i18n/es.po create mode 100644 delivery_roulier_chronopost_fr/static/description/index.html diff --git a/delivery_roulier_chronopost_fr/README.rst b/delivery_roulier_chronopost_fr/README.rst new file mode 100644 index 0000000000..2797544bee --- /dev/null +++ b/delivery_roulier_chronopost_fr/README.rst @@ -0,0 +1,83 @@ +========================== +Delivery Chronopost France +========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5c7e17d0fbe57a27e1944cbd60532c1abe4b6bb68040b535e04fe2d530f46bcb + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdelivery--carrier-lightgray.png?logo=github + :target: https://github.com/OCA/delivery-carrier/tree/14.0/delivery_roulier_chronopost_fr + :alt: OCA/delivery-carrier +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/delivery-carrier-14-0/delivery-carrier-14-0-delivery_roulier_chronopost_fr + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/delivery-carrier&target_branch=14.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Allow to generate label for CHRONOPOST carrier. + +**Table of contents** + +.. contents:: + :local: + +Known issues / Roadmap +====================== + +For now, multi parcel is not managed, packages are sent one by one to the webservice. +ESD option is not implemented yet. +Relay Point has not been implemented either. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Akretion + +Contributors +~~~~~~~~~~~~ + +* Florian da Costa + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/delivery-carrier `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/delivery_roulier_chronopost_fr/__manifest__.py b/delivery_roulier_chronopost_fr/__manifest__.py index f2d8f6085e..1bab8a36c1 100644 --- a/delivery_roulier_chronopost_fr/__manifest__.py +++ b/delivery_roulier_chronopost_fr/__manifest__.py @@ -2,7 +2,7 @@ { "name": "Delivery Chronopost France", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "author": "Akretion,Odoo Community Association (OCA)", "category": "Delivery", "complexity": "normal", diff --git a/delivery_roulier_chronopost_fr/i18n/delivery_roulier_chronopost_fr.pot b/delivery_roulier_chronopost_fr/i18n/delivery_roulier_chronopost_fr.pot new file mode 100644 index 0000000000..3227115da2 --- /dev/null +++ b/delivery_roulier_chronopost_fr/i18n/delivery_roulier_chronopost_fr.pot @@ -0,0 +1,207 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_roulier_chronopost_fr +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \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: delivery_roulier_chronopost_fr +#: model:ir.model,name:delivery_roulier_chronopost_fr.model_carrier_account +msgid "Base account datas" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_10 +msgid "Chrono 10" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_13 +msgid "Chrono 13" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_18 +msgid "Chrono 18" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_8 +msgid "Chrono 8" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_9 +msgid "Chrono 9" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_classic +msgid "Chrono Classic" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_express +msgid "Chrono Express" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__delivery_carrier__delivery_type__chronopost_fr +msgid "Chronopost" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account__chronopost_fr_file_format +msgid "Chronopost File Format" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account__chronopost_fr_subaccount +msgid "Chronopost Sub Account" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:product.product,name:delivery_roulier_chronopost_fr.chronopost_product +#: model:product.template,name:delivery_roulier_chronopost_fr.chronopost_product_product_template +msgid "Coûts de livraison - Chronopost" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,help:delivery_roulier_chronopost_fr.field_carrier_account__chronopost_fr_file_format +msgid "Default format of the carrier's label you want to print" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier.template.option,name:delivery_roulier_chronopost_fr.chronopost_service_monday +msgid "Delivery on Monday" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier.template.option,name:delivery_roulier_chronopost_fr.chronopost_service_saturday +msgid "Delivery on Saturday" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account__display_name +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_delivery_carrier__display_name +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_picking__display_name +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_quant_package__display_name +msgid "Display Name" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account__id +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_delivery_carrier__id +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_picking__id +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_quant_package__id +msgid "ID" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account____last_update +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_delivery_carrier____last_update +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_picking____last_update +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_quant_package____last_update +msgid "Last Modified on" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__pdf +msgid "PDF" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__ppr +msgid "PPR" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model,name:delivery_roulier_chronopost_fr.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_delivery_carrier__delivery_type +msgid "Provider" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier.template.option,name:delivery_roulier_chronopost_fr.chronopost_recipient_alert +msgid "Recipient Pre-alert" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__ser +msgid "SER" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__spd +msgid "SPD" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier.template.option,name:delivery_roulier_chronopost_fr.chronopost_shipper_alert +msgid "Shipper Pre-alert" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model,name:delivery_roulier_chronopost_fr.model_delivery_carrier +msgid "Shipping Methods" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__the +msgid "THE" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__thepsg +msgid "THEPSG" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model,name:delivery_roulier_chronopost_fr.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:product.product,uom_name:delivery_roulier_chronopost_fr.chronopost_product +#: model:product.template,uom_name:delivery_roulier_chronopost_fr.chronopost_product_product_template +msgid "Units" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__xml +msgid "XML" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__z2d +msgid "Z2D" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__z2dpsg +msgid "Z2DPSG" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:product.product,weight_uom_name:delivery_roulier_chronopost_fr.chronopost_product +#: model:product.template,weight_uom_name:delivery_roulier_chronopost_fr.chronopost_product_product_template +msgid "kg" +msgstr "" + +#. module: delivery_roulier_chronopost_fr +#: model:product.product,volume_uom_name:delivery_roulier_chronopost_fr.chronopost_product +#: model:product.template,volume_uom_name:delivery_roulier_chronopost_fr.chronopost_product_product_template +msgid "m³" +msgstr "" diff --git a/delivery_roulier_chronopost_fr/i18n/es.po b/delivery_roulier_chronopost_fr/i18n/es.po new file mode 100644 index 0000000000..ec72fdfb33 --- /dev/null +++ b/delivery_roulier_chronopost_fr/i18n/es.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_roulier_chronopost_fr +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-12-20 19:35+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model,name:delivery_roulier_chronopost_fr.model_carrier_account +msgid "Base account datas" +msgstr "Datos de la cuenta base" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_10 +msgid "Chrono 10" +msgstr "Crono 10" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_13 +msgid "Chrono 13" +msgstr "Crono 13" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_18 +msgid "Chrono 18" +msgstr "Crono 18" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_8 +msgid "Chrono 8" +msgstr "Crono 8" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_9 +msgid "Chrono 9" +msgstr "Crono 9" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_classic +msgid "Chrono Classic" +msgstr "Crono Clásico" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier,name:delivery_roulier_chronopost_fr.chrono_express +msgid "Chrono Express" +msgstr "Crono Exprés" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__delivery_carrier__delivery_type__chronopost_fr +msgid "Chronopost" +msgstr "Cronopost" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account__chronopost_fr_file_format +msgid "Chronopost File Format" +msgstr "Formato de Archivo Cronopost" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account__chronopost_fr_subaccount +msgid "Chronopost Sub Account" +msgstr "Subcuenta de Cronopost" + +#. module: delivery_roulier_chronopost_fr +#: model:product.product,name:delivery_roulier_chronopost_fr.chronopost_product +#: model:product.template,name:delivery_roulier_chronopost_fr.chronopost_product_product_template +msgid "Coûts de livraison - Chronopost" +msgstr "Gastos de envío - Cronopost" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,help:delivery_roulier_chronopost_fr.field_carrier_account__chronopost_fr_file_format +msgid "Default format of the carrier's label you want to print" +msgstr "" +"Formato predeterminado de la etiqueta del transportista que desea imprimir" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier.template.option,name:delivery_roulier_chronopost_fr.chronopost_service_monday +msgid "Delivery on Monday" +msgstr "Entrega el Lunes" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier.template.option,name:delivery_roulier_chronopost_fr.chronopost_service_saturday +msgid "Delivery on Saturday" +msgstr "Entrega el Sábado" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account__display_name +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_delivery_carrier__display_name +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_picking__display_name +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_quant_package__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account__id +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_delivery_carrier__id +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_picking__id +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_quant_package__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_carrier_account____last_update +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_delivery_carrier____last_update +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_picking____last_update +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_stock_quant_package____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__pdf +msgid "PDF" +msgstr "PDF" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__ppr +msgid "PPR" +msgstr "PPR" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model,name:delivery_roulier_chronopost_fr.model_stock_quant_package +msgid "Packages" +msgstr "Paquetes" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields,field_description:delivery_roulier_chronopost_fr.field_delivery_carrier__delivery_type +msgid "Provider" +msgstr "Proveedor" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier.template.option,name:delivery_roulier_chronopost_fr.chronopost_recipient_alert +msgid "Recipient Pre-alert" +msgstr "Prealerta del Destinatario" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__ser +msgid "SER" +msgstr "SER" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__spd +msgid "SPD" +msgstr "SPD" + +#. module: delivery_roulier_chronopost_fr +#: model:delivery.carrier.template.option,name:delivery_roulier_chronopost_fr.chronopost_shipper_alert +msgid "Shipper Pre-alert" +msgstr "Prealerta del Expedidor" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model,name:delivery_roulier_chronopost_fr.model_delivery_carrier +msgid "Shipping Methods" +msgstr "Métodos de Envío" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__the +msgid "THE" +msgstr "EL/La" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__thepsg +msgid "THEPSG" +msgstr "THEPSG" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model,name:delivery_roulier_chronopost_fr.model_stock_picking +msgid "Transfer" +msgstr "Transferencia" + +#. module: delivery_roulier_chronopost_fr +#: model:product.product,uom_name:delivery_roulier_chronopost_fr.chronopost_product +#: model:product.template,uom_name:delivery_roulier_chronopost_fr.chronopost_product_product_template +msgid "Units" +msgstr "Unidades" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__xml +msgid "XML" +msgstr "XML" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__z2d +msgid "Z2D" +msgstr "Z2D" + +#. module: delivery_roulier_chronopost_fr +#: model:ir.model.fields.selection,name:delivery_roulier_chronopost_fr.selection__carrier_account__chronopost_fr_file_format__z2dpsg +msgid "Z2DPSG" +msgstr "Z2DPSG" + +#. module: delivery_roulier_chronopost_fr +#: model:product.product,weight_uom_name:delivery_roulier_chronopost_fr.chronopost_product +#: model:product.template,weight_uom_name:delivery_roulier_chronopost_fr.chronopost_product_product_template +msgid "kg" +msgstr "kg" + +#. module: delivery_roulier_chronopost_fr +#: model:product.product,volume_uom_name:delivery_roulier_chronopost_fr.chronopost_product +#: model:product.template,volume_uom_name:delivery_roulier_chronopost_fr.chronopost_product_product_template +msgid "m³" +msgstr "metros cúbicos" diff --git a/delivery_roulier_chronopost_fr/models/stock_picking.py b/delivery_roulier_chronopost_fr/models/stock_picking.py index 862d56e6c7..3e9452c933 100644 --- a/delivery_roulier_chronopost_fr/models/stock_picking.py +++ b/delivery_roulier_chronopost_fr/models/stock_picking.py @@ -2,8 +2,7 @@ from datetime import datetime -from odoo import models -from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DATE_FORMAT +from odoo import fields, models class StockPicking(models.Model): @@ -16,7 +15,7 @@ def _chronopost_fr_get_auth(self, account, package=None): return vals def _chronopost__fr_get_shipping_date(self, package=None): - return datetime.now().strftime(DATE_FORMAT) + return fields.Date.today() def _chronopost_fr_get_service(self, account, package=None): vals = self._roulier_get_service(account, package=package) diff --git a/delivery_roulier_chronopost_fr/static/description/index.html b/delivery_roulier_chronopost_fr/static/description/index.html new file mode 100644 index 0000000000..c8af95dadc --- /dev/null +++ b/delivery_roulier_chronopost_fr/static/description/index.html @@ -0,0 +1,428 @@ + + + + + + +Delivery Chronopost France + + + +
+

Delivery Chronopost France

+ + +

Beta License: AGPL-3 OCA/delivery-carrier Translate me on Weblate Try me on Runboat

+

Allow to generate label for CHRONOPOST carrier.

+

Table of contents

+ +
+

Known issues / Roadmap

+

For now, multi parcel is not managed, packages are sent one by one to the webservice. +ESD option is not implemented yet. +Relay Point has not been implemented either.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Akretion
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/delivery-carrier project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 00cd614272e8b5e17d9e04f7545833c799f4e5d6 Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Fri, 12 Jul 2024 14:29:27 +0300 Subject: [PATCH 6/8] [IMP] delivery_roulier_chronopost_fr: pre-commit auto fixes --- delivery_roulier_chronopost_fr/README.rst | 24 +++++++++---------- .../i18n/delivery_roulier_chronopost_fr.pot | 2 +- delivery_roulier_chronopost_fr/i18n/es.po | 2 +- delivery_roulier_chronopost_fr/pyproject.toml | 3 +++ .../readme/CONTRIBUTORS.md | 1 + .../readme/CONTRIBUTORS.rst | 1 - .../{DESCRIPTION.rst => DESCRIPTION.md} | 0 .../readme/ROADMAP.md | 3 +++ .../readme/ROADMAP.rst | 3 --- .../static/description/index.html | 24 ++++++++++--------- 10 files changed, 34 insertions(+), 29 deletions(-) create mode 100644 delivery_roulier_chronopost_fr/pyproject.toml create mode 100644 delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.md delete mode 100644 delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.rst rename delivery_roulier_chronopost_fr/readme/{DESCRIPTION.rst => DESCRIPTION.md} (100%) create mode 100644 delivery_roulier_chronopost_fr/readme/ROADMAP.md delete mode 100644 delivery_roulier_chronopost_fr/readme/ROADMAP.rst diff --git a/delivery_roulier_chronopost_fr/README.rst b/delivery_roulier_chronopost_fr/README.rst index 2797544bee..d2087edc80 100644 --- a/delivery_roulier_chronopost_fr/README.rst +++ b/delivery_roulier_chronopost_fr/README.rst @@ -17,13 +17,13 @@ Delivery Chronopost France :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdelivery--carrier-lightgray.png?logo=github - :target: https://github.com/OCA/delivery-carrier/tree/14.0/delivery_roulier_chronopost_fr + :target: https://github.com/OCA/delivery-carrier/tree/17.0/delivery_roulier_chronopost_fr :alt: OCA/delivery-carrier .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/delivery-carrier-14-0/delivery-carrier-14-0-delivery_roulier_chronopost_fr + :target: https://translation.odoo-community.org/projects/delivery-carrier-17-0/delivery-carrier-17-0-delivery_roulier_chronopost_fr :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/delivery-carrier&target_branch=14.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/delivery-carrier&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -38,9 +38,9 @@ Allow to generate label for CHRONOPOST carrier. Known issues / Roadmap ====================== -For now, multi parcel is not managed, packages are sent one by one to the webservice. -ESD option is not implemented yet. -Relay Point has not been implemented either. +For now, multi parcel is not managed, packages are sent one by one to +the webservice. ESD option is not implemented yet. Relay Point has not +been implemented either. Bug Tracker =========== @@ -48,7 +48,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -56,17 +56,17 @@ Credits ======= Authors -~~~~~~~ +------- * Akretion Contributors -~~~~~~~~~~~~ +------------ -* Florian da Costa +- Florian da Costa Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -78,6 +78,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/delivery-carrier `_ project on GitHub. +This module is part of the `OCA/delivery-carrier `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/delivery_roulier_chronopost_fr/i18n/delivery_roulier_chronopost_fr.pot b/delivery_roulier_chronopost_fr/i18n/delivery_roulier_chronopost_fr.pot index 3227115da2..4461efd296 100644 --- a/delivery_roulier_chronopost_fr/i18n/delivery_roulier_chronopost_fr.pot +++ b/delivery_roulier_chronopost_fr/i18n/delivery_roulier_chronopost_fr.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/delivery_roulier_chronopost_fr/i18n/es.po b/delivery_roulier_chronopost_fr/i18n/es.po index ec72fdfb33..33161fbbf0 100644 --- a/delivery_roulier_chronopost_fr/i18n/es.po +++ b/delivery_roulier_chronopost_fr/i18n/es.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: 2023-12-20 19:35+0000\n" "Last-Translator: Ivorra78 \n" diff --git a/delivery_roulier_chronopost_fr/pyproject.toml b/delivery_roulier_chronopost_fr/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/delivery_roulier_chronopost_fr/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.md b/delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..7ca55c53c1 --- /dev/null +++ b/delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Florian da Costa \<\> diff --git a/delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.rst b/delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.rst deleted file mode 100644 index 0bddb053ae..0000000000 --- a/delivery_roulier_chronopost_fr/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Florian da Costa diff --git a/delivery_roulier_chronopost_fr/readme/DESCRIPTION.rst b/delivery_roulier_chronopost_fr/readme/DESCRIPTION.md similarity index 100% rename from delivery_roulier_chronopost_fr/readme/DESCRIPTION.rst rename to delivery_roulier_chronopost_fr/readme/DESCRIPTION.md diff --git a/delivery_roulier_chronopost_fr/readme/ROADMAP.md b/delivery_roulier_chronopost_fr/readme/ROADMAP.md new file mode 100644 index 0000000000..56f6338ddc --- /dev/null +++ b/delivery_roulier_chronopost_fr/readme/ROADMAP.md @@ -0,0 +1,3 @@ +For now, multi parcel is not managed, packages are sent one by one to +the webservice. ESD option is not implemented yet. Relay Point has not +been implemented either. diff --git a/delivery_roulier_chronopost_fr/readme/ROADMAP.rst b/delivery_roulier_chronopost_fr/readme/ROADMAP.rst deleted file mode 100644 index 601242f909..0000000000 --- a/delivery_roulier_chronopost_fr/readme/ROADMAP.rst +++ /dev/null @@ -1,3 +0,0 @@ -For now, multi parcel is not managed, packages are sent one by one to the webservice. -ESD option is not implemented yet. -Relay Point has not been implemented either. diff --git a/delivery_roulier_chronopost_fr/static/description/index.html b/delivery_roulier_chronopost_fr/static/description/index.html index c8af95dadc..ec31f8b276 100644 --- a/delivery_roulier_chronopost_fr/static/description/index.html +++ b/delivery_roulier_chronopost_fr/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -369,7 +369,7 @@

Delivery Chronopost France

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:5c7e17d0fbe57a27e1944cbd60532c1abe4b6bb68040b535e04fe2d530f46bcb !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/delivery-carrier Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/delivery-carrier Translate me on Weblate Try me on Runboat

Allow to generate label for CHRONOPOST carrier.

Table of contents

@@ -386,16 +386,16 @@

Delivery Chronopost France

Known issues / Roadmap

-

For now, multi parcel is not managed, packages are sent one by one to the webservice. -ESD option is not implemented yet. -Relay Point has not been implemented either.

+

For now, multi parcel is not managed, packages are sent one by one to +the webservice. ESD option is not implemented yet. Relay Point has not +been implemented either.

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -415,11 +415,13 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/delivery-carrier project on GitHub.

+

This module is part of the OCA/delivery-carrier project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From 67b0dfaf510bc77c1d47712c23242b8c834bbe97 Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Fri, 12 Jul 2024 14:28:24 +0300 Subject: [PATCH 7/8] [17.0][MIG] delivery_roulier_chronopost_fr: Migration to 17.0 --- .../__manifest__.py | 6 ++--- .../tests/test_label_chronopost.py | 25 ++++++++++++------- .../views/carrier_account.xml | 9 ++++--- test-requirements.txt | 2 ++ 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/delivery_roulier_chronopost_fr/__manifest__.py b/delivery_roulier_chronopost_fr/__manifest__.py index 1bab8a36c1..8d59ea82ac 100644 --- a/delivery_roulier_chronopost_fr/__manifest__.py +++ b/delivery_roulier_chronopost_fr/__manifest__.py @@ -2,13 +2,11 @@ { "name": "Delivery Chronopost France", - "version": "14.0.1.0.1", + "version": "17.0.1.0.1", "author": "Akretion,Odoo Community Association (OCA)", "category": "Delivery", "complexity": "normal", - "depends": [ - "delivery_roulier_option", - ], + "depends": ["delivery_roulier_option"], "website": "https://github.com/OCA/delivery-carrier", "data": [ "views/carrier_account.xml", diff --git a/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py b/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py index 9875b791e3..44ac25d1f5 100644 --- a/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py +++ b/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py @@ -1,21 +1,23 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from vcr_unittest import VCRMixin +import pytest from odoo.addons.base_delivery_carrier_label.tests import carrier_label_case -class ChronopostLabelCase(VCRMixin, carrier_label_case.CarrierLabelCase): - def setUp(self, *args, **kwargs): +class ChronopostLabelCase(carrier_label_case.TestCarrierLabel): + @classmethod + def setUpClass(cls): # need it to be defined before super to avoid failure in _hide_sensitive_data - self.account = False - super().setUp(*args, **kwargs) + cls.account = False + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) # french carrier sender need to be from France - self.picking.company_id.partner_id.write( - {"country_id": self.env.ref("base.fr").id} + cls.picking.company_id.partner_id.write( + {"country_id": cls.env.ref("base.fr").id} ) # change account and password with valid credentials to regenerate the cassette - self.account = self.env["carrier.account"].create( + cls.account = cls.env["carrier.account"].create( { "name": "Chronopost Test Account", "delivery_type": "chronopost_fr", @@ -25,6 +27,7 @@ def setUp(self, *args, **kwargs): } ) + @classmethod def _hide_sensitive_data(self, request): password = self.account and self.account.password or "dummy" account = self.account and self.account.account or "dummy" @@ -34,8 +37,12 @@ def _hide_sensitive_data(self, request): request.body = body return request - def _get_vcr_kwargs(self, **kwargs): + @classmethod + @pytest.fixture(scope="module") + def vcr_config(self): return { + "filter_headers": ["authorization"], + "ignore_localhost": True, "record_mode": "once", "match_on": ["method", "path"], "decode_compressed_response": True, diff --git a/delivery_roulier_chronopost_fr/views/carrier_account.xml b/delivery_roulier_chronopost_fr/views/carrier_account.xml index 6a33316179..4ac3d4c76b 100644 --- a/delivery_roulier_chronopost_fr/views/carrier_account.xml +++ b/delivery_roulier_chronopost_fr/views/carrier_account.xml @@ -1,23 +1,24 @@ - + carrier.account diff --git a/test-requirements.txt b/test-requirements.txt index 97b8f9b249..28c72e2ca8 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,2 +1,4 @@ # delivery_roulier odoo_test_helper +# delivery_roulier_chronopost_fr +pytest-recording From fc86de34c874705845fac25e2c5f41c5c401d8e4 Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Wed, 17 Jul 2024 19:59:06 +0300 Subject: [PATCH 8/8] fixup! [17.0][MIG] delivery_roulier_chronopost_fr: Migration to 17.0 --- .../models/stock_picking.py | 9 ++ .../test_roulier_chronopost_fr.yaml} | 0 .../tests/test_label_chronopost.py | 113 +++++++++++++----- 3 files changed, 90 insertions(+), 32 deletions(-) rename delivery_roulier_chronopost_fr/tests/cassettes/{ChronopostLabelCase.test_labels.yaml => delivery_roulier_chronopost_fr/test_roulier_chronopost_fr.yaml} (100%) diff --git a/delivery_roulier_chronopost_fr/models/stock_picking.py b/delivery_roulier_chronopost_fr/models/stock_picking.py index 3e9452c933..2e84af594b 100644 --- a/delivery_roulier_chronopost_fr/models/stock_picking.py +++ b/delivery_roulier_chronopost_fr/models/stock_picking.py @@ -33,3 +33,12 @@ def _chronopost_fr_get_from_address(self, package=None): # Civility for shipper seems always requirer... vals["civility"] = "E" return vals + + def _get_carrier_account(self): + # dummy carrier account injected in the context + # is a workaround to avoid issues while running tests + account = super()._get_carrier_account() + ctx = self.env.context + if not account and ctx.get("dummy_account_id"): + account = self.env["carrier.account"].browse(ctx["dummy_account_id"]) + return account diff --git a/delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml b/delivery_roulier_chronopost_fr/tests/cassettes/delivery_roulier_chronopost_fr/test_roulier_chronopost_fr.yaml similarity index 100% rename from delivery_roulier_chronopost_fr/tests/cassettes/ChronopostLabelCase.test_labels.yaml rename to delivery_roulier_chronopost_fr/tests/cassettes/delivery_roulier_chronopost_fr/test_roulier_chronopost_fr.yaml diff --git a/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py b/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py index 44ac25d1f5..59606e65ce 100644 --- a/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py +++ b/delivery_roulier_chronopost_fr/tests/test_label_chronopost.py @@ -1,21 +1,15 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - import pytest -from odoo.addons.base_delivery_carrier_label.tests import carrier_label_case +from odoo.tests.common import TransactionCase -class ChronopostLabelCase(carrier_label_case.TestCarrierLabel): +class ChronopostLabelCase(TransactionCase): @classmethod def setUpClass(cls): # need it to be defined before super to avoid failure in _hide_sensitive_data cls.account = False super().setUpClass() - cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) - # french carrier sender need to be from France - cls.picking.company_id.partner_id.write( - {"country_id": cls.env.ref("base.fr").id} - ) # change account and password with valid credentials to regenerate the cassette cls.account = cls.env["carrier.account"].create( { @@ -26,11 +20,80 @@ def setUpClass(cls): "chronopost_fr_file_format": "Z2D", } ) + cls.picking = cls._create_order_picking() + # french carrier sender need to be from France + cls.picking.company_id.partner_id.write( + {"country_id": cls.env.ref("base.fr").id} + ) + + @classmethod + def _create_order_picking(cls): + """Create a sale order and deliver the picking""" + cls.order = cls.env["sale.order"].create(cls._sale_order_data()) + for product in cls.order.mapped("order_line.product_id"): + cls.env["stock.quant"].with_context(inventory_mode=True).create( + { + "product_id": product.id, + "location_id": cls.order.warehouse_id.lot_stock_id.id, + "inventory_quantity": sum( + cls.order.mapped("order_line.product_uom_qty") + ), + } + )._apply_inventory() + cls.order.action_confirm() + cls.picking = cls.order.picking_ids + cls.picking.write(cls._picking_data()) + return cls.picking + + @classmethod + def _get_carrier(cls): + return cls.env.ref("delivery_roulier_chronopost_fr.chrono_13") + + @classmethod + def _sale_order_data(cls): + """Return a values dict to create a sale order""" + return { + "partner_id": cls.env["res.partner"].create(cls._partner_data()).id, + "order_line": [(0, 0, data) for data in cls._order_line_data()], + "carrier_id": cls._get_carrier().id, + } @classmethod - def _hide_sensitive_data(self, request): - password = self.account and self.account.password or "dummy" - account = self.account and self.account.account or "dummy" + def _partner_data(cls): + """Return a values dict to create a partner""" + return { + "name": "Carrier label test customer", + "street": "27 Rue Henri Rolland", + "zip": "69100", + "city": "VILLEURBANNE", + "country_id": cls.env.ref("base.fr").id, + } + + @classmethod + def _order_line_data(cls): + """Return a list of value dicts to create order lines""" + return [ + { + "product_id": cls.env["product.product"].create(cls._product_data()).id, + "product_uom_qty": 1, + } + ] + + @classmethod + def _product_data(cls): + """Return a values dict to create a product""" + return {"name": "Carrier test product", "type": "product", "weight": 1.2} + + @classmethod + def _picking_data(cls): + """Return a values dict to be written to the picking in order to set + carrier options""" + return {} + + @classmethod + def _hide_sensitive_data(cls, request): + password = cls.account and cls.account.password + account = cls.account and cls.account.account body = request.body body = body.replace(password.encode(), b"password") body = body.replace(account.encode(), b"00000000") @@ -39,32 +102,18 @@ def _hide_sensitive_data(self, request): @classmethod @pytest.fixture(scope="module") - def vcr_config(self): + def vcr_config(cls): return { "filter_headers": ["authorization"], "ignore_localhost": True, "record_mode": "once", "match_on": ["method", "path"], "decode_compressed_response": True, - "before_record_request": self._hide_sensitive_data, + "before_record_request": cls._hide_sensitive_data, } - def _product_data(self): - data = super()._product_data() - data.update({"weight": 1.2}) - return data - - def _get_carrier(self): - return self.env.ref("delivery_roulier_chronopost_fr.chrono_13") - - def _partner_data(self): - data = super()._partner_data() - data.update( - { - "street": "27 Rue Henri Rolland", - "zip": "69100", - "city": "VILLEURBANNE", - "country_id": self.env.ref("base.fr").id, - } - ) - return data + @pytest.mark.default_cassette("test_roulier_chronopost_fr.yaml") + @pytest.mark.block_network + @pytest.mark.vcr + def test_roulier_chronopost_fr(self): + self.picking.with_context(dummy_account_id=self.account.id).button_validate()