Initial commit: Sale packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:49 +02:00
commit 14e3d26998
6469 changed files with 2479670 additions and 0 deletions

View file

@ -0,0 +1,84 @@
odoo.define('pos_sale.tour.ProductScreenTourMethods', function (require) {
'use strict';
const { createTourMethods } = require('point_of_sale.tour.utils');
const { Do, Check, Execute } = require('point_of_sale.tour.ProductScreenTourMethods');
class DoExt extends Do {
clickQuotationButton() {
return [
{
content: 'click quotation button',
trigger: '.o_sale_order_button',
}
];
}
selectFirstOrder() {
return [
{
content: `select order`,
trigger: `.order-row .col.name:first`,
},
{
content: `click on select the order`,
trigger: `.selection-item:contains('Settle the order')`,
}
];
}
selectNthOrder(n) {
return [
{
content: `select order`,
trigger: `.order-list .order-row:nth-child(${n})`,
},
{
content: `click on select the order`,
trigger: `.selection-item:contains('Settle the order')`,
}
];
}
downPaymentFirstOrder() {
return [
{
content: `select order`,
trigger: `.order-row .col.name:first`,
},
{
content: `click on select the order`,
trigger: `.selection-item:contains('Apply a down payment')`,
},
{
content: `click on +10 button`,
trigger: `.mode-button.add:contains('+10')`,
},
{
content: `click on ok button`,
trigger: `.button.confirm`,
}
];
}
}
class CheckExt extends Check{
checkCustomerNotes(note) {
return [
{
content: `check customer notes`,
trigger: `.orderline-note:contains(${note})`,
}
];
}
checkOrdersListEmpty() {
return [
{
content: 'Check that the orders list is empty',
trigger: '.order-list:not(:has(.order-row))',
}
]
}
}
return createTourMethods('ProductScreen', DoExt, CheckExt, Execute);
});

View file

@ -0,0 +1,19 @@
odoo.define('pos_sale.tour.ReceiptScreenTourMethods', function (require) {
'use strict';
const { createTourMethods } = require('point_of_sale.tour.utils');
const { Do, Check, Execute } = require('point_of_sale.tour.ReceiptScreenTourMethods');
class CheckExt extends Check{
checkCustomerNotes(note) {
return [
{
content: `check customer notes`,
trigger: `.pos-receipt-customer-note:contains(${note})`,
}
];
}
}
return createTourMethods('ReceiptScreen', Do, CheckExt, Execute);
});

View file

@ -0,0 +1,201 @@
odoo.define('pos_sale.tour', function (require) {
'use strict';
const { Chrome } = require('point_of_sale.tour.ChromeTourMethods');
const { PaymentScreen } = require('point_of_sale.tour.PaymentScreenTourMethods');
const { ProductScreen } = require('pos_sale.tour.ProductScreenTourMethods');
const { ReceiptScreen } = require('pos_sale.tour.ReceiptScreenTourMethods');
const { TicketScreen } = require('point_of_sale.tour.TicketScreenTourMethods');
const { getSteps, startSteps } = require('point_of_sale.tour.utils');
const Tour = require('web_tour.tour');
// signal to start generating steps
// when finished, steps can be taken from getSteps
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.check.selectedOrderlineHas('Pizza Chicken', 9);
ProductScreen.do.pressNumpad('Qty 2'); // Change the quantity of the product to 2
ProductScreen.check.selectedOrderlineHas('Pizza Chicken', 2);
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickPaymentMethod('Bank');
PaymentScreen.do.clickValidate();
Chrome.do.clickTicketButton();
Tour.register('PosSettleOrder', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
// The second item in the list is the first sale.order.
ProductScreen.do.selectNthOrder(2);
ProductScreen.check.selectedOrderlineHas('product1', 1);
ProductScreen.check.totalAmountIs("10.00");
ProductScreen.do.clickQuotationButton();
// The first item in the list is the second sale.order.
// Selecting the 2nd sale.order should use a new order,
// therefore, the total amount will change.
ProductScreen.do.selectNthOrder(1);
ProductScreen.check.selectedOrderlineHas('product2', 1);
ProductScreen.check.totalAmountIs("11.00");
Tour.register('PosSettleOrderIncompatiblePartner', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.do.clickOrderline('[A001] Product A', '1');
ProductScreen.check.selectedOrderlineHas('[A001] Product A', '1.00');
ProductScreen.do.clickOrderline('[A002] Product B', '1');
ProductScreen.do.pressNumpad('Qty 0');
ProductScreen.check.selectedOrderlineHas('[A002] Product B', '0.00');
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickPaymentMethod('Bank');
PaymentScreen.check.remainingIs('0.0');
PaymentScreen.do.clickValidate();
ReceiptScreen.check.isShown();
Tour.register('PosSettleOrder2', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.do.clickOrderline("Product A", "1");
ProductScreen.check.selectedOrderlineHas('Product A', '1.00');
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickPaymentMethod('Bank');
PaymentScreen.check.remainingIs('0.0');
PaymentScreen.do.clickValidate();
ReceiptScreen.check.isShown();
Tour.register('PosSettleOrder3', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.check.totalAmountIs(40);
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickPaymentMethod('Bank');
PaymentScreen.do.clickValidate();
Chrome.do.clickTicketButton();
Tour.register('PosSettleOrderRealTime', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.downPaymentFirstOrder();
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickPaymentMethod('Cash');
PaymentScreen.do.clickValidate();
ReceiptScreen.do.clickNextOrder();
ProductScreen.do.clickRefund();
// Filter should be automatically 'Paid'.
TicketScreen.check.filterIs('Paid');
TicketScreen.do.selectOrder('-0001');
TicketScreen.do.clickOrderline('Down Payment');
TicketScreen.do.pressNumpad('1');
TicketScreen.do.confirmRefund();
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickPaymentMethod('Cash');
PaymentScreen.do.clickValidate();
ReceiptScreen.do.clickNextOrder();
Tour.register('PosRefundDownpayment', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.check.totalAmountIs(28.98); // 3.5 * 8 * 1.15 * 90%
ProductScreen.do.clickOrderline("Product A", '0.5');
ProductScreen.check.checkOrderlinesNumber(4);
ProductScreen.check.selectedOrderlineHas('Product A', '0.5', '4.14');
Tour.register('PosSettleOrderNotGroupable', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.check.checkCustomerNotes("Customer note 2--Customer note 3");
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickPaymentMethod('Bank');
PaymentScreen.do.clickValidate();
ReceiptScreen.check.checkCustomerNotes("Customer note 2--Customer note 3");
ReceiptScreen.do.clickNextOrder();
Tour.register('PosSettleOrderWithNote', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickPaymentMethod('Bank');
PaymentScreen.do.clickValidate();
ReceiptScreen.do.clickNextOrder();
ProductScreen.do.clickQuotationButton();
ProductScreen.check.checkOrdersListEmpty();
Tour.register('PosOrderDoesNotRemainInList', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.check.selectedOrderlineHas('product_a', '1', '100');
ProductScreen.do.clickPartnerButton();
ProductScreen.do.clickCustomer('partner_a');
ProductScreen.check.selectedOrderlineHas('product_a', '1', '100');
Tour.register('PosSettleCustomPrice', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.check.selectedOrderlineHas('Test service product', '1.00', '50.00');
Tour.register('PosSettleDraftOrder', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.selectFirstOrder();
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickShipLaterButton()
PaymentScreen.do.clickPaymentMethod('Bank');
PaymentScreen.check.remainingIs('0.0');
PaymentScreen.do.clickValidate();
ReceiptScreen.check.isShown();
Tour.register('PosSettleOrderShipLater', { test: true, url: '/pos/ui' }, getSteps());
startSteps();
ProductScreen.do.confirmOpeningPopup();
ProductScreen.do.clickQuotationButton();
ProductScreen.do.downPaymentFirstOrder();
ProductScreen.check.selectedOrderlineHas('Down Payment', '1', '10.00');
ProductScreen.do.clickPayButton();
PaymentScreen.do.clickPaymentMethod('Cash');
PaymentScreen.do.clickValidate();
ReceiptScreen.do.clickNextOrder();
Tour.register('PoSDownPaymentAmount', { test: true, url: '/pos/ui' }, getSteps());
});