Skip to content

Commit f179a58

Browse files
[16.0][MIG] shopinvader_delivery_pickup_public_edition: Migration to 16.0 (FastAPI)
1 parent 4f9f4c1 commit f179a58

File tree

17 files changed

+180
-113
lines changed

17 files changed

+180
-113
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from . import routers
2+
from . import models

shopinvader_delivery_pickup_public_edition/__manifest__.py renamed to shopinvader_api_delivery_pickup_public_edition/__manifest__.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
1-
# -*- coding: utf-8 -*-
2-
# Copyright 2019 Akretion (http://www.akretion.com)
1+
# Copyright 2019-2024 Akretion (http://www.akretion.com)
32
# Sébastien BEAU <[email protected]>
43
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
54

65
{
76
"name": "Shopinvader Pickup Public Edition",
87
"summary": "Shopinvader Pickup Public Edition",
9-
"version": "10.0.0.0.0",
8+
"version": "16.0.1.0.0",
109
"category": "e-commerce",
11-
"website": "https://akretion.com",
10+
"website": "https://github.com/shopinvader/odoo-shopinvader-carrier ",
1211
"author": "Akretion",
1312
"license": "AGPL-3",
1413
"application": False,
1514
"installable": True,
1615
"external_dependencies": {"python": [], "bin": []},
17-
"depends": ["shopinvader_delivery_pickup"],
16+
"depends": ["shopinvader_api_delivery_pickup"],
1817
"data": ["views/delivery_carrier_view.xml"],
1918
"demo": [],
2019
"qweb": [],
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
# -*- coding: utf-8 -*-
2-
31
from . import delivery_carrier

shopinvader_delivery_pickup_public_edition/models/delivery_carrier.py renamed to shopinvader_api_delivery_pickup_public_edition/models/delivery_carrier.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# coding: utf-8
21
# Copyright (C) 2018 - Today: GRAP (http://www.grap.coop)
32
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
43
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
* Sebastien BEAU <[email protected]>
2+
* Chafique DELLI <[email protected]>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import cart
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Copyright 2019 Akretion (http://www.akretion.com).
2+
# @author Sébastien BEAU <[email protected]>
3+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4+
from typing import Annotated
5+
6+
from fastapi import Depends
7+
8+
from odoo import _, api, models
9+
from odoo.exceptions import UserError
10+
11+
from odoo.addons.base.models.res_partner import Partner as ResPartner
12+
from odoo.addons.fastapi.dependencies import (
13+
authenticated_partner,
14+
authenticated_partner_env,
15+
)
16+
from odoo.addons.shopinvader_api_cart.routers import cart_router
17+
from odoo.addons.shopinvader_schema_sale.schemas import Sale
18+
19+
from ..schemas import PublicDeliveryPickupInput
20+
21+
22+
@cart_router.post("/set_public_delivery_pickup")
23+
@cart_router.post("/{uuid}/set_public_delivery_pickup")
24+
@cart_router.post("/current/set_public_delivery_pickup")
25+
def set_public_delivery_pickup(
26+
env: Annotated[api.Environment, Depends(authenticated_partner_env)],
27+
partner: Annotated["ResPartner", Depends(authenticated_partner)],
28+
data: PublicDeliveryPickupInput,
29+
uuid: str | None = None,
30+
) -> Sale | None:
31+
"""
32+
If cart is found, set the given dropoffsite on it.
33+
"""
34+
cart = env["sale.order"]._find_open_cart(partner.id, uuid)
35+
if not cart:
36+
raise UserError(_("There is no cart"))
37+
dropoff_site = env["shopinvader_api_cart.cart_router.helper"]._add_update_dropoff_site(cart, data)
38+
env["shopinvader_api_cart.cart_router.helper"]._set_delivery_pickup(cart, dropoff_site)
39+
return Sale.from_sale_order(cart) if cart else None
40+
41+
42+
class ShopinvaderApiCartRouterHelper(models.AbstractModel):
43+
_inherit = "shopinvader_api_cart.cart_router.helper"
44+
45+
@api.model
46+
def _prepare_dropoff_site_params(self, cart, data):
47+
if not cart.carrier_id:
48+
raise UserError(_("You must select a carrier first"))
49+
elif not cart.carrier_id.allow_dropoff_site_public_edition:
50+
raise UserError(
51+
_("You can not add a dropoff site on this carrier")
52+
)
53+
dropoff_site = {
54+
"ref": data.code,
55+
"name": data.name,
56+
"street": data.street,
57+
"street2": data.street2,
58+
"zip": data.zip,
59+
"city": data.city,
60+
"phone": data.phone,
61+
}
62+
country_code = data.country_code
63+
state_code = data.state_code
64+
65+
country = self.env["res.country"].search([("code", "=", country_code)])
66+
if not country:
67+
raise UserError(_("Invalid country code %s") % country_code)
68+
dropoff_site["country_id"] = country.id
69+
70+
if state_code:
71+
state = self.env["res.country.state"].search(
72+
[("code", "=", state_code), ("country_id", "=", country.id)]
73+
)
74+
if not state:
75+
raise UserError(
76+
_("Invalid state code %s for country %s")
77+
% (state_code, country_code)
78+
)
79+
dropoff_site["state_id"] = state.id
80+
81+
dropoff_site["carrier_id"] = cart.carrier_id.id
82+
return dropoff_site
83+
84+
@api.model
85+
def _add_update_dropoff_site(self, cart, data):
86+
vals = self._prepare_dropoff_site_params(cart, data)
87+
dropoff_site = self.env["dropoff.site"].search(
88+
[
89+
("carrier_id", "=", cart.carrier_id.id),
90+
("ref", "=", vals["ref"]),
91+
]
92+
)
93+
if dropoff_site:
94+
dropoff_site.write(vals)
95+
else:
96+
dropoff_site = self.env["dropoff.site"].create(vals)
97+
return dropoff_site
98+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import public_delivery_pickup
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Copyright 2019 ACSONE SA/NV
2+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3+
from typing import Annotated, Field, List
4+
5+
from extendable_pydantic import StrictExtendableBaseModel
6+
7+
from odoo import api
8+
9+
10+
class PublicDeliveryPickupInput(StrictExtendableBaseModel):
11+
code: str
12+
name: str
13+
street: str | None = None
14+
street2: str | None = None
15+
zip: str
16+
city: str
17+
phone: str | None = None
18+
state_code: str | None = None
19+
country_code: str
20+
21+
22+
class PublicDeliveryPickupSearch(StrictExtendableBaseModel):
23+
name: Annotated[
24+
str | None,
25+
Field(
26+
description="When used, the search look for any delivery pickup where name "
27+
"contains the given value case insensitively."
28+
),
29+
] = None
30+
carrier_id: Annotated[
31+
int | None,
32+
Field(
33+
description="When used, the search look for any delivery pickup where carrier "
34+
"contains the given value case insensitively."
35+
),
36+
] = None
37+
38+
def to_odoo_domain(self, env: api.Environment):
39+
domain = []
40+
if self.name:
41+
domain.append(("name", "ilike", self.name))
42+
if self.carrier_id:
43+
domain.append(("carrier_id", "ilike", self.carrier_id.id))
44+
return domain
45+
46+
47+
class PublicDeliveryPickup(StrictExtendableBaseModel):
48+
code: str
49+
name: str
50+
street: str | None = None
51+
street2: str | None = None
52+
zip: str
53+
city: str
54+
phone: str | None = None
55+
state_code: str | None = None
56+
country_code: str
57+
58+
@classmethod
59+
def from_public_delivery_pickup(cls, odoo_rec):
60+
return cls.model_construct(
61+
code=odoo_rec.code,
62+
name=odoo_rec.name,
63+
street=odoo_rec.street or None,
64+
street2=odoo_rec.street2 or None,
65+
zip=odoo_rec.zip,
66+
city=odoo_rec.city,
67+
phone=odoo_rec.phone or None,
68+
state_code=odoo_rec.state_id.code or None,
69+
country_code=odoo_rec.country_id.code,
70+
)
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
# -*- coding: utf-8 -*-
2-
31
from . import test_pickup

shopinvader_delivery_pickup_public_edition/tests/test_pickup.py renamed to shopinvader_api_delivery_pickup_public_edition/tests/test_pickup.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# -*- coding: utf-8 -*-
21
# Copyright 2019 Akretion (http://www.akretion.com).
32
# @author Sébastien BEAU <[email protected]>
43
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
<?xml version="1.0" encoding="UTF-8"?>
2-
<openerp>
3-
<data>
4-
5-
<record id="delivery_carrier_view_form" model="ir.ui.view">
1+
<odoo>
2+
<record id="view_delivery_carrier_form" model="ir.ui.view">
63
<field name="model">delivery.carrier</field>
74
<field name="inherit_id" ref="delivery_dropoff_site.view_delivery_carrier_form"/>
85
<field name="arch" type="xml">
@@ -11,6 +8,4 @@
118
</field>
129
</field>
1310
</record>
14-
15-
</data>
16-
</openerp>
11+
</odoo>

shopinvader_delivery_pickup_public_edition/__init__.py

-4
This file was deleted.

shopinvader_delivery_pickup_public_edition/services/__init__.py

-3
This file was deleted.

shopinvader_delivery_pickup_public_edition/services/cart.py

-87
This file was deleted.

0 commit comments

Comments
 (0)