working with pos sidebar, but no content
This commit is contained in:
parent
59e4b19dee
commit
1f59e16b26
|
|
@ -18,17 +18,18 @@
|
|||
'installable': True,
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'static/src/css/category_color.css',
|
||||
'open_workshop/static/src/css/category_color.css',
|
||||
],
|
||||
'point_of_sale._assets_pos': [
|
||||
|
||||
'open_workshop/static/src/js/product_screen_template_patch.js',
|
||||
'open_workshop/static/src/css/pos.css',
|
||||
'open_workshop/static/src/js/ows_pos_customer_sidebar.js',
|
||||
'open_workshop/static/src/xml/ows_pos_customer_sidebar.xml',
|
||||
'open_workshop/static/src/js/ows_machine_access_list.js',
|
||||
'open_workshop/static/src/js/ows_pos_customer_sidebar.js',
|
||||
'open_workshop/static/src/js/ows_pos_sidebar.js',
|
||||
'open_workshop/static/src/js/ows_product_screen_template_patch.js',
|
||||
'open_workshop/static/src/xml/ows_machine_access_list.xml',
|
||||
'open_workshop/static/src/xml/ows_product_screen.xml',
|
||||
'open_workshop/static/src/xml/ows_pos_customer_sidebar.xml',
|
||||
'open_workshop/static/src/xml/ows_pos_sidebar.xml',
|
||||
'open_workshop/static/src/xml/ows_product_screen_template_patch.xml',
|
||||
],
|
||||
},
|
||||
'description': """
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
// @odoo-module
|
||||
// @odoo-module ows_machine_access_list.js
|
||||
|
||||
import { Component, useState } from "@odoo/owl";
|
||||
import { useBus } from "@web/core/utils/hooks";
|
||||
import { usePos } from "@point_of_sale/app/store/pos_hook";
|
||||
import { rpc } from "@web/core/network/rpc";
|
||||
import { registry } from "@web/core/registry";
|
||||
|
||||
export class OwsMachineAccessList extends Component {
|
||||
static template = 'open_workshop.OwsMachineAccessList';
|
||||
|
|
@ -65,3 +66,9 @@ export class OwsMachineAccessList extends Component {
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
registry.category("templates").add("open_workshop.OwsMachineAccessList", OwsMachineAccessList);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// @odoo-module
|
||||
// @odoo-module ows_pos_customer_sidebar.js
|
||||
|
||||
import { Component } from "@odoo/owl";
|
||||
import { useService } from "@web/core/utils/hooks";
|
||||
import { registry } from "@web/core/registry";
|
||||
import { usePos } from "@point_of_sale/app/store/pos_hook";
|
||||
import { _t } from "@web/core/l10n/translation";
|
||||
import { ask } from "@web/core/confirmation_dialog/confirmation_dialog";
|
||||
|
|
@ -56,7 +57,8 @@ export class OwsPosCustomerSidebar extends Component {
|
|||
}
|
||||
|
||||
getFilteredOrderList() {
|
||||
return this.pos.get_order_list();
|
||||
//return this.pos.get_order_list();
|
||||
return this.pos.orders ? this.pos.orders.filter(order => order.get_partner()) : [];
|
||||
}
|
||||
|
||||
getDate(order) {
|
||||
|
|
@ -77,3 +79,5 @@ export class OwsPosCustomerSidebar extends Component {
|
|||
this.env.bus.trigger('partner-changed');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
11
static/src/js/ows_pos_sidebar.js
Normal file
11
static/src/js/ows_pos_sidebar.js
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
// ows_pos_sidebar.js
|
||||
// @odoo-module
|
||||
|
||||
import { Component } from "@odoo/owl";
|
||||
import { OwsPosCustomerSidebar } from "./ows_pos_customer_sidebar";
|
||||
import { OwsMachineAccessList } from "./ows_machine_access_list";
|
||||
|
||||
export class OwsPosSidebar extends Component {
|
||||
static template = "open_workshop.OwsPosSidebar";
|
||||
static components = { OwsPosCustomerSidebar, OwsMachineAccessList };
|
||||
}
|
||||
15
static/src/js/ows_product_screen_template_patch.js
Normal file
15
static/src/js/ows_product_screen_template_patch.js
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// product_screen_template_patch.js
|
||||
// @odoo-module
|
||||
|
||||
import { registry } from "@web/core/registry";
|
||||
import { ProductScreen } from "@point_of_sale/app/screens/product_screen/product_screen";
|
||||
import { OwsPosSidebar } from "./ows_pos_sidebar";
|
||||
|
||||
class OwsProductScreen extends ProductScreen {
|
||||
static components = Object.assign({}, ProductScreen.components, {
|
||||
OwsPosSidebar,
|
||||
});
|
||||
}
|
||||
|
||||
registry.category("pos_screens").remove("ProductScreen");
|
||||
registry.category("pos_screens").add("ProductScreen", OwsProductScreen);
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
// @odoo-module
|
||||
|
||||
import { ProductScreen } from "@point_of_sale/app/screens/product_screen/product_screen";
|
||||
import { registry } from "@web/core/registry";
|
||||
import { OwsPosCustomerSidebar } from "@open_workshop/js/ows_pos_customer_sidebar";
|
||||
import { OwsMachineAccessList } from "@open_workshop/js/ows_machine_access_list";
|
||||
|
||||
console.log("🔍 product_screen_template_patch.js wurde geladen");
|
||||
|
||||
export class OwsProductScreen extends ProductScreen {
|
||||
static template = "open_workshop.ProductScreen";
|
||||
static components = {
|
||||
...ProductScreen.components,
|
||||
OwsPosCustomerSidebar,
|
||||
OwsMachineAccessList,
|
||||
};
|
||||
|
||||
setup() {
|
||||
super.setup(); // wichtig!
|
||||
console.log("📦 OwsProductScreen aktiv, Template:", this.constructor.template);
|
||||
}
|
||||
}
|
||||
|
||||
registry.category("pos_screens").remove("ProductScreen");
|
||||
registry.category("pos_screens").add("ProductScreen", OwsProductScreen);
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates id="template" xml:space="preserve">
|
||||
<!-- overwrite client details (view) -->
|
||||
<t t-extend="ClientDetails">
|
||||
<t t-jquery=".client-details-left" t-operation="replace">
|
||||
<div class='client-details-left'>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Address</span>
|
||||
<t t-if='partner.address'>
|
||||
<span class='detail client-address'>
|
||||
<t t-esc='partner.address' />
|
||||
</span>
|
||||
</t>
|
||||
<t t-if='!partner.address'>
|
||||
<span class='detail client-address empty'>N/A</span>
|
||||
</t>
|
||||
</div>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Email</span>
|
||||
<t t-if='partner.email'>
|
||||
<span class='detail client-email'>
|
||||
<t t-esc='partner.email' />
|
||||
</span>
|
||||
</t>
|
||||
<t t-if='!partner.email'>
|
||||
<span class='detail client-email empty'>N/A</span>
|
||||
</t>
|
||||
</div>
|
||||
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Geburtstag</span>
|
||||
<t t-if='partner.birthday'>
|
||||
<span class='detail client-vvow_birthday'>
|
||||
<t t-esc='partner.birthday' />
|
||||
</span>
|
||||
</t>
|
||||
<t t-if='!partner.birthday'>
|
||||
<span class='detail client-vvow_birthday empty'>N/A</span>
|
||||
</t>
|
||||
</div>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Phone</span>
|
||||
<t t-if='partner.phone'>
|
||||
<span class='detail client-phone'>
|
||||
<t t-esc='partner.phone' />
|
||||
</span>
|
||||
</t>
|
||||
<t t-if='!partner.phone'>
|
||||
<span class='detail client-phone empty'>N/A</span>
|
||||
</t>
|
||||
</div>
|
||||
<div t-attf-class='client-detail #{widget.pos.pricelists.length <= 1 ? "oe_hidden" : ""}'>
|
||||
<span class='label'>Pricelist</span>
|
||||
<t t-if='partner.property_product_pricelist'>
|
||||
<span class='detail property_product_pricelist'>
|
||||
<t t-esc='partner.property_product_pricelist[1]'/>
|
||||
</span>
|
||||
</t>
|
||||
<t t-if='!partner.property_product_pricelist'>
|
||||
<span class='detail property_product_pricelist empty'>N/A</span>
|
||||
</t>
|
||||
</div>
|
||||
<div class='client-detail'>
|
||||
<t t-if='!partner.security_briefing'><span class='detail client-details-vvow_sec_briefing_error'>Haftungsausschluss prüfen!</span></t>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</t>
|
||||
<t t-jquery=".client-details-right" t-operation="replace"/>
|
||||
|
||||
</t>
|
||||
</templates>
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates id="template" xml:space="preserve">
|
||||
<!-- overwrite client details (view) -->
|
||||
<t t-extend="ClientDetailsEdit">
|
||||
<t t-jquery=".client-details-left" t-operation="replace">
|
||||
<div class='client-details-left'>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Street</span>
|
||||
<input class='detail client-address-street' name='street' t-att-value='partner.street || ""' placeholder='Street'></input>
|
||||
</div>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Postcode</span>
|
||||
<input class='detail client-address-zip' name='zip' t-att-value='partner.zip || ""' placeholder='ZIP'></input>
|
||||
</div>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>City</span>
|
||||
<input class='detail client-address-city' name='city' t-att-value='partner.city || ""' placeholder='City'></input>
|
||||
</div>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Country</span>
|
||||
<select class='detail client-address-country needsclick' name='country_id'>
|
||||
<option value=''>None</option>
|
||||
<t t-foreach='widget.pos.countries' t-as='country'>
|
||||
<option t-att-value='country.id' t-att-selected="partner.country_id ? ((country.id === partner.country_id[0]) ? true : undefined) : undefined">
|
||||
<t t-esc='country.name'/>
|
||||
</option>
|
||||
</t>
|
||||
</select>
|
||||
</div>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Email</span>
|
||||
<input class='detail client-email' name='email' type='email' t-att-value='partner.email || ""'></input>
|
||||
</div>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Phone</span>
|
||||
<input class='detail client-phone' name='phone' type='tel' t-att-value='partner.phone || ""'></input>
|
||||
</div>
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Geburtstag</span>
|
||||
<input class='detail client-birthday' name='birthday' type='date' t-att-value='partner.birthday || ""'></input>
|
||||
</div>
|
||||
<div t-attf-class='client-detail #{widget.pos.pricelists.length <= 1 ? "oe_hidden" : ""}'>
|
||||
<span class='label'>Pricelist</span>
|
||||
<select class='detail needsclick' name='property_product_pricelist'>
|
||||
<t t-foreach='widget.pos.pricelists' t-as='pricelist'>
|
||||
<option t-att-value='pricelist.id' t-att-selected="partner.property_product_pricelist ? (pricelist.id === partner.property_product_pricelist[0] ? true : undefined) : undefined">
|
||||
<t t-esc='pricelist.display_name'/>
|
||||
</option>
|
||||
</t>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class='client-detail'>
|
||||
<span class='label'>Haftungsauschschluß</span>
|
||||
<select class='detail client-vvow_security_briefing-states needsclick' name='security_briefing'>
|
||||
<option value='true' t-att-selected="partner.security_briefing ? true : undefined">Ja</option>
|
||||
<option value='' t-att-selected="!partner.security_briefing ? true: undefined">Nein</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-jquery=".client-details-right" t-operation="replace"/>
|
||||
</t>
|
||||
</templates>
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates id="template" xml:space="preserve">
|
||||
<!-- Test replace logo -->
|
||||
<t t-extend="Chrome">
|
||||
<t t-jquery=".pos-branding" t-operation="replace">
|
||||
<img style="max-height:48px; max-width: 100%; width:auto" src="/web/binary/company_logo" alt="HOBBYHIMMEL"/>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<!-- Remove old order-selector container -->
|
||||
<t t-extend="Chrome">
|
||||
<t t-jquery=".placeholder-OrderSelectorWidget" t-operation="replace">
|
||||
</t>
|
||||
</t>
|
||||
<!-- insert order-selector container in new position -->
|
||||
<t t-extend="Chrome">
|
||||
<t t-jquery=".pos" t-operation="prepend">
|
||||
<div class="placeholder-OrderSelectorWidget"></div>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<!-- completly overwrite OrderSelectorWidget -->
|
||||
<t t-name="OrderSelectorWidget">
|
||||
<div class="order-selector" >
|
||||
<div class="new-order-button">
|
||||
<span class="order-button square neworder-button">
|
||||
<i class='fa fa-plus' role="img" aria-label="New order" title="New order"/>
|
||||
</span>
|
||||
<span class="order-button square deleteorder-button">
|
||||
<i class='fa fa-minus' role="img" aria-label="Delete order" title="Delete order"/>
|
||||
</span>
|
||||
</div>
|
||||
<span class="orders touch-scrollable">
|
||||
<t t-foreach="widget.pos.get_order_list()" t-as="order">
|
||||
<t t-if="order === widget.pos.get_order()">
|
||||
<span class="order-button select-order selected" t-att-title="order.sequence_number" t-att-data-uid="order.uid">
|
||||
<span class="order-time">
|
||||
<t t-esc="moment(order.creation_date).format('HH:mm')"/>
|
||||
</span>
|
||||
<span class="order-customer">
|
||||
<t t-if="order.get_client()">
|
||||
<t t-esc="order.get_client().name" />
|
||||
</t>
|
||||
<t t-if="!order.get_client()">
|
||||
?
|
||||
</t>
|
||||
</span>
|
||||
</span>
|
||||
</t>
|
||||
<t t-if="order !== widget.pos.get_order()">
|
||||
<span class="order-button select-order" t-att-title="order.sequence_number" t-att-data-uid="order.uid">
|
||||
<span class="order-time">
|
||||
<t t-esc="moment(order.creation_date).format('HH:mm')"/>
|
||||
</span>
|
||||
<span class="order-customer">
|
||||
<t t-if="order.get_client()">
|
||||
<t t-esc="order.get_client().name" />
|
||||
</t>
|
||||
<t t-if="!order.get_client()">
|
||||
?
|
||||
</t>
|
||||
</span>
|
||||
</span>
|
||||
</t>
|
||||
</t>
|
||||
</span>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
</templates>
|
||||
9
static/src/xml/ows_pos_sidebar.xml
Normal file
9
static/src/xml/ows_pos_sidebar.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-name="open_workshop.OwsPosSidebar" owl="1">
|
||||
<div class="custompane d-flex flex-column border-end bg-200">
|
||||
<OwsPosCustomerSidebar />
|
||||
<OwsMachineAccessList />
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-name="open_workshop.ProductScreen" t-inherit="point_of_sale.ProductScreen" t-inherit-mode="extension">
|
||||
<!-- Deine Sidebar vor dem linken Pane -->
|
||||
<xpath expr="//div[contains(@class, 'leftpane')]" position="before">
|
||||
<div class="custompane d-flex flex-column border-end bg-200">
|
||||
<OwsPosCustomerSidebar />
|
||||
<OwsMachineAccessList />
|
||||
</div>
|
||||
</xpath>
|
||||
|
||||
</t>
|
||||
</templates>
|
||||
8
static/src/xml/ows_product_screen_template_patch.xml
Normal file
8
static/src/xml/ows_product_screen_template_patch.xml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-name="point_of_sale.ProductScreen" t-inherit="point_of_sale.ProductScreen" t-inherit-mode="extension">
|
||||
<xpath expr="//div[contains(@class, 'leftpane')]" position="before">
|
||||
<OwsPosSidebar />
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
||||
Loading…
Reference in New Issue
Block a user