mirror of
https://github.com/frappe/books.git
synced 2026-08-24 10:04:45 -05:00
fix:add fields in posSettings
This commit is contained in:
@@ -17,6 +17,8 @@ export class POSSettings extends Doc {
|
||||
defaultAccount?: string;
|
||||
itemVisibility?: string;
|
||||
posUI?: 'Classic' | 'Modern';
|
||||
canChangeRate?: boolean;
|
||||
canEditDiscount?: boolean;
|
||||
|
||||
static filters: FiltersMap = {
|
||||
cashAccount: () => ({
|
||||
|
||||
@@ -111,6 +111,34 @@
|
||||
"default": "Inventory Items",
|
||||
"required": true,
|
||||
"section": "Default"
|
||||
},
|
||||
{
|
||||
"fieldname": "canChangeRate",
|
||||
"label": "Can Change Rate",
|
||||
"fieldtype": "Check",
|
||||
"default": false,
|
||||
"section": "Default"
|
||||
},
|
||||
{
|
||||
"fieldname": "hideUnavailableItems",
|
||||
"label": "Hide Unavailable Items",
|
||||
"fieldtype": "Check",
|
||||
"default": false,
|
||||
"section": "Default"
|
||||
},
|
||||
{
|
||||
"fieldname": "canEditDiscount",
|
||||
"label": "Can Edit Discount",
|
||||
"fieldtype": "Check",
|
||||
"default": false,
|
||||
"section": "Default"
|
||||
},
|
||||
{
|
||||
"fieldname": "ignorePricingRule",
|
||||
"label": "Ignore Pricing Rule",
|
||||
"fieldtype": "Check",
|
||||
"section": "Default",
|
||||
"default": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -159,13 +159,14 @@
|
||||
:show-label="true"
|
||||
:border="true"
|
||||
:value="row.rate"
|
||||
:read-only="isReadOnly"
|
||||
:read-only="isReadOnly || !posSettings?.canChangeRate"
|
||||
@change="(value:Money) => setRate((row.rate = value))"
|
||||
/>
|
||||
<feather-icon
|
||||
name="refresh-ccw"
|
||||
class="w-3.5 ml-2 mt-5 text-blue-500 flex-none"
|
||||
@click="row.rate= (defaultRate as Money)"
|
||||
:disabled="isReadOnly || !posSettings?.canChangeRate"
|
||||
/>
|
||||
</div>
|
||||
<div class="px-6 pt-6 col-span-2">
|
||||
@@ -181,7 +182,7 @@
|
||||
:show-label="true"
|
||||
:border="true"
|
||||
:value="row.itemDiscountAmount"
|
||||
:read-only="row.itemDiscountPercent as number > 0 || isReadOnly"
|
||||
:read-only="row.itemDiscountPercent as number > 0 || isReadOnly || !posSettings?.canEditDiscount"
|
||||
@change="(value:number) => setItemDiscount('amount', value)"
|
||||
/>
|
||||
</div>
|
||||
@@ -198,7 +199,11 @@
|
||||
:show-label="true"
|
||||
:border="true"
|
||||
:value="row.itemDiscountPercent"
|
||||
:read-only="!row.itemDiscountAmount?.isZero() || isReadOnly"
|
||||
:read-only="
|
||||
!row.itemDiscountAmount?.isZero() ||
|
||||
isReadOnly ||
|
||||
!posSettings?.canEditDiscount
|
||||
"
|
||||
@change="(value:number) => setItemDiscount('percent', value)"
|
||||
/>
|
||||
</div>
|
||||
@@ -276,6 +281,7 @@ import { validateQty } from 'models/helpers';
|
||||
import { InvoiceItem } from 'models/baseModels/InvoiceItem/InvoiceItem';
|
||||
import { SalesInvoice } from 'models/baseModels/SalesInvoice/SalesInvoice';
|
||||
import { showToast } from 'src/utils/interactive';
|
||||
import { POSSettings } from 'models/inventory/Point of Sale/POSSettings';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'SelectedItemRow',
|
||||
@@ -290,6 +296,7 @@ export default defineComponent({
|
||||
itemSerialNumbers: inject('itemSerialNumbers') as {
|
||||
[item: string]: string;
|
||||
},
|
||||
posSettings: inject('posSettings') as any,
|
||||
};
|
||||
},
|
||||
data() {
|
||||
|
||||
@@ -170,6 +170,7 @@ export default defineComponent({
|
||||
itemSerialNumbers: computed(() => this.itemSerialNumbers),
|
||||
isDiscountingEnabled: computed(() => this.isDiscountingEnabled),
|
||||
transferClearanceDate: computed(() => this.transferClearanceDate),
|
||||
posSettings: computed(() => fyo.singles.POSSettings),
|
||||
};
|
||||
},
|
||||
setup() {
|
||||
@@ -375,6 +376,8 @@ export default defineComponent({
|
||||
async setItems() {
|
||||
const filters: Record<string, boolean> = {};
|
||||
const itemVisibility = this.fyo.singles.POSSettings?.itemVisibility;
|
||||
const hideUnavailable =
|
||||
this.fyo.singles.POSSettings?.hideUnavailableItems;
|
||||
|
||||
if (itemVisibility === 'Inventory Items') {
|
||||
filters.trackItem = true;
|
||||
@@ -398,6 +401,9 @@ export default defineComponent({
|
||||
if (!item.name) {
|
||||
return;
|
||||
}
|
||||
if (hideUnavailable && filters.trackItem && availableQty <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
this.items.push({
|
||||
availableQty,
|
||||
@@ -618,7 +624,8 @@ export default defineComponent({
|
||||
const currentQty = existingItems[0].quantity ?? 0;
|
||||
const addQty = quantity ?? 1;
|
||||
if (isInventoryItem) {
|
||||
const availableQty = this.itemQtyMap[item.name]?.availableQty ?? 0;
|
||||
const availableQty =
|
||||
this.itemQtyMap[item.name as string]?.availableQty ?? 0;
|
||||
if (currentQty + addQty > availableQty) {
|
||||
throw new ValidationError(
|
||||
'Cannot add more than the available quantity'
|
||||
@@ -659,6 +666,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
await this.applyPricingRule();
|
||||
|
||||
await this.sinvDoc.runFormulas();
|
||||
} catch (error) {
|
||||
return showToast({
|
||||
|
||||
Reference in New Issue
Block a user