commit 84ae87fdcf2c6067424eba0d66803337e726823a Author: admin.suherdy Date: Tue Dec 2 16:18:44 2025 +0700 first commit diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/__manifest__.py b/__manifest__.py new file mode 100644 index 0000000..f80bc44 --- /dev/null +++ b/__manifest__.py @@ -0,0 +1,16 @@ +{ + 'name': 'POS Customer Orders', + 'version': '17.0.1.0.0', + 'category': 'Point of Sale', + 'summary': 'Show last 2 orders in POS Customer Details', + 'depends': ['point_of_sale'], + 'data': [], + 'assets': { + 'point_of_sale.assets_prod': [ + 'pos_customer_orders/static/src/xml/**/*', + 'pos_customer_orders/static/src/js/**/*', + ], + }, + 'installable': True, + 'application': False, +} diff --git a/__pycache__/__init__.cpython-312.pyc b/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..a45d1f8 Binary files /dev/null and b/__pycache__/__init__.cpython-312.pyc differ diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..91fed54 --- /dev/null +++ b/models/__init__.py @@ -0,0 +1 @@ +from . import res_partner diff --git a/models/__pycache__/__init__.cpython-312.pyc b/models/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..a32b79e Binary files /dev/null and b/models/__pycache__/__init__.cpython-312.pyc differ diff --git a/models/__pycache__/res_partner.cpython-312.pyc b/models/__pycache__/res_partner.cpython-312.pyc new file mode 100644 index 0000000..d55d443 Binary files /dev/null and b/models/__pycache__/res_partner.cpython-312.pyc differ diff --git a/models/res_partner.py b/models/res_partner.py new file mode 100644 index 0000000..331ebae --- /dev/null +++ b/models/res_partner.py @@ -0,0 +1,27 @@ +from odoo import models, api + +class ResPartner(models.Model): + _inherit = 'res.partner' + + @api.model + def get_pos_last_orders(self, partner_id): + orders = self.env['pos.order'].search( + [('partner_id', '=', partner_id)], + order='date_order desc', + limit=2 + ) + return [{ + 'id': order.id, + 'name': order.name, + 'pos_reference': order.pos_reference, + 'date_order': order.date_order, + 'amount_total': order.amount_total, + 'note': order.note, + 'lines': [{ + 'id': line.id, + 'product_name': line.product_id.name, + 'qty': line.qty, + 'price_unit': line.price_unit, + 'price_subtotal_incl': line.price_subtotal_incl, + } for line in order.lines], + } for order in orders] diff --git a/static/src/js/partner_editor.js b/static/src/js/partner_editor.js new file mode 100644 index 0000000..4b8fffb --- /dev/null +++ b/static/src/js/partner_editor.js @@ -0,0 +1,30 @@ +/** @odoo-module */ + +import { PartnerDetailsEdit } from "@point_of_sale/app/screens/partner_list/partner_editor/partner_editor"; +import { patch } from "@web/core/utils/patch"; +import { useService } from "@web/core/utils/hooks"; +import { onWillStart, useState } from "@odoo/owl"; + +patch(PartnerDetailsEdit.prototype, { + setup() { + super.setup(); + this.orm = useService("orm"); + this.state = useState({ ...this.state, lastOrders: [] }); + + onWillStart(async () => { + await this.fetchLastOrders(); + }); + }, + + async fetchLastOrders() { + const partnerId = this.props.partner.id; + if (partnerId) { + try { + const orders = await this.orm.call("res.partner", "get_pos_last_orders", [partnerId]); + this.state.lastOrders = orders; + } catch (error) { + console.error("Error fetching orders:", error); + } + } + } +}); diff --git a/static/src/xml/partner_editor.xml b/static/src/xml/partner_editor.xml new file mode 100644 index 0000000..ffb8527 --- /dev/null +++ b/static/src/xml/partner_editor.xml @@ -0,0 +1,42 @@ + + + + + +
+
+

Last Orders

+ +
+ +
+
+
+ +
+

Total:

+ Note: +
+ Products: +
    + +
  • + x + () +
  • +
    +
+
+
+
+
+
+ +
No orders found for this customer.
+
+
+
+
+
+ +