Add price confirm prompt when adding unknown item to custorder
optional, per config
This commit is contained in:
parent
4247804707
commit
72dda3771e
|
@ -140,7 +140,8 @@
|
||||||
Require these fields for new product:
|
Require these fields for new product:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div style="margin-left: 2rem;">
|
<div class="block"
|
||||||
|
style="margin-left: 2rem;">
|
||||||
% for field in pending_product_fields:
|
% for field in pending_product_fields:
|
||||||
<b-field>
|
<b-field>
|
||||||
<b-checkbox name="rattail.custorders.unknown_product.fields.${field}.required"
|
<b-checkbox name="rattail.custorders.unknown_product.fields.${field}.required"
|
||||||
|
@ -153,6 +154,15 @@
|
||||||
% endfor
|
% endfor
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<b-field message="If set, user is always prompted to confirm price when adding new product.">
|
||||||
|
<b-checkbox name="rattail.custorders.unknown_product.always_confirm_price"
|
||||||
|
v-model="simpleSettings['rattail.custorders.unknown_product.always_confirm_price']"
|
||||||
|
native-value="true"
|
||||||
|
@input="settingsNeedSaved = true">
|
||||||
|
Require price confirmation
|
||||||
|
</b-checkbox>
|
||||||
|
</b-field>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -757,6 +757,12 @@
|
||||||
</b-input>
|
</b-input>
|
||||||
</b-field>
|
</b-field>
|
||||||
|
|
||||||
|
<b-field label="Gross Margin">
|
||||||
|
<span class="control">
|
||||||
|
{{ pendingProductGrossMargin }}
|
||||||
|
</span>
|
||||||
|
</b-field>
|
||||||
|
|
||||||
</b-field>
|
</b-field>
|
||||||
|
|
||||||
<b-field label="Notes">
|
<b-field label="Notes">
|
||||||
|
@ -905,6 +911,52 @@
|
||||||
</div>
|
</div>
|
||||||
</b-modal>
|
</b-modal>
|
||||||
|
|
||||||
|
% if unknown_product_confirm_price:
|
||||||
|
<b-modal has-modal-card
|
||||||
|
:active.sync="confirmPriceShowDialog">
|
||||||
|
<div class="modal-card">
|
||||||
|
|
||||||
|
<header class="modal-card-head">
|
||||||
|
<p class="modal-card-title">Confirm Price</p>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="modal-card-body">
|
||||||
|
<p class="block">
|
||||||
|
Please confirm the price info before proceeding.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div style="white-space: nowrap;">
|
||||||
|
|
||||||
|
<b-field label="Unit Cost" horizontal>
|
||||||
|
<span>{{ pendingProduct.unit_cost }}</span>
|
||||||
|
</b-field>
|
||||||
|
|
||||||
|
<b-field label="Unit Reg. Price" horizontal>
|
||||||
|
<span>{{ pendingProduct.regular_price_amount }}</span>
|
||||||
|
</b-field>
|
||||||
|
|
||||||
|
<b-field label="Gross Margin" horizontal>
|
||||||
|
<span>{{ pendingProductGrossMargin }}</span>
|
||||||
|
</b-field>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="modal-card-foot">
|
||||||
|
<b-button type="is-primary"
|
||||||
|
icon-pack="fas"
|
||||||
|
icon-left="check"
|
||||||
|
@click="confirmPriceSave()">
|
||||||
|
Confirm
|
||||||
|
</b-button>
|
||||||
|
<b-button @click="confirmPriceCancel()">
|
||||||
|
Cancel
|
||||||
|
</b-button>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</b-modal>
|
||||||
|
% endif
|
||||||
|
|
||||||
<tailbone-product-lookup ref="productLookup"
|
<tailbone-product-lookup ref="productLookup"
|
||||||
@canceled="productLookupCanceled"
|
@canceled="productLookupCanceled"
|
||||||
@selected="productLookupSelected">
|
@selected="productLookupSelected">
|
||||||
|
@ -1242,6 +1294,9 @@
|
||||||
pendingProduct: {},
|
pendingProduct: {},
|
||||||
pendingProductRequiredFields: ${json.dumps(pending_product_required_fields)|n},
|
pendingProductRequiredFields: ${json.dumps(pending_product_required_fields)|n},
|
||||||
departmentOptions: ${json.dumps(department_options)|n},
|
departmentOptions: ${json.dumps(department_options)|n},
|
||||||
|
% if unknown_product_confirm_price:
|
||||||
|
confirmPriceShowDialog: false,
|
||||||
|
% endif
|
||||||
|
|
||||||
submittingOrder: false,
|
submittingOrder: false,
|
||||||
}
|
}
|
||||||
|
@ -1428,6 +1483,15 @@
|
||||||
|
|
||||||
% endif
|
% endif
|
||||||
|
|
||||||
|
pendingProductGrossMargin() {
|
||||||
|
let cost = this.pendingProduct.unit_cost
|
||||||
|
let price = this.pendingProduct.regular_price_amount
|
||||||
|
if (cost && price) {
|
||||||
|
let margin = (price - cost) / price
|
||||||
|
return (100 * margin).toFixed(2).toString() + " %"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
itemDialogSaveDisabled() {
|
itemDialogSaveDisabled() {
|
||||||
|
|
||||||
if (this.itemDialogSaving) {
|
if (this.itemDialogSaving) {
|
||||||
|
@ -2116,7 +2180,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
itemDialogSave() {
|
itemDialogAttemptSave() {
|
||||||
this.itemDialogSaving = true
|
this.itemDialogSaving = true
|
||||||
|
|
||||||
let params = {
|
let params = {
|
||||||
|
@ -2168,6 +2232,30 @@
|
||||||
this.itemDialogSaving = false
|
this.itemDialogSaving = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
itemDialogSave() {
|
||||||
|
|
||||||
|
% if unknown_product_confirm_price:
|
||||||
|
if (!this.productIsKnown && !this.editingItem) {
|
||||||
|
this.showingItemDialog = false
|
||||||
|
this.confirmPriceShowDialog = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
% endif
|
||||||
|
|
||||||
|
this.itemDialogAttemptSave()
|
||||||
|
},
|
||||||
|
|
||||||
|
confirmPriceCancel() {
|
||||||
|
this.confirmPriceShowDialog = false
|
||||||
|
this.showingItemDialog = true
|
||||||
|
},
|
||||||
|
|
||||||
|
confirmPriceSave() {
|
||||||
|
this.confirmPriceShowDialog = false
|
||||||
|
this.showingItemDialog = true
|
||||||
|
this.itemDialogAttemptSave()
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -375,6 +375,8 @@ class CustomerOrderView(MasterView):
|
||||||
'product_key_label': app.get_product_key_label(),
|
'product_key_label': app.get_product_key_label(),
|
||||||
'allow_unknown_product': self.batch_handler.allow_unknown_product(),
|
'allow_unknown_product': self.batch_handler.allow_unknown_product(),
|
||||||
'pending_product_required_fields': self.get_pending_product_required_fields(),
|
'pending_product_required_fields': self.get_pending_product_required_fields(),
|
||||||
|
'unknown_product_confirm_price': self.rattail_config.getbool(
|
||||||
|
'rattail.custorders', 'unknown_product.always_confirm_price'),
|
||||||
'department_options': self.get_department_options(),
|
'department_options': self.get_department_options(),
|
||||||
'default_uom_choices': self.batch_handler.uom_choices_for_product(None),
|
'default_uom_choices': self.batch_handler.uom_choices_for_product(None),
|
||||||
'default_uom': None,
|
'default_uom': None,
|
||||||
|
@ -1109,6 +1111,9 @@ class CustomerOrderView(MasterView):
|
||||||
{'section': 'rattail.custorders',
|
{'section': 'rattail.custorders',
|
||||||
'option': 'allow_unknown_product',
|
'option': 'allow_unknown_product',
|
||||||
'type': bool},
|
'type': bool},
|
||||||
|
{'section': 'rattail.custorders',
|
||||||
|
'option': 'unknown_product.always_confirm_price',
|
||||||
|
'type': bool},
|
||||||
]
|
]
|
||||||
|
|
||||||
for field in self.PENDING_PRODUCT_ENTRY_FIELDS:
|
for field in self.PENDING_PRODUCT_ENTRY_FIELDS:
|
||||||
|
|
Loading…
Reference in a new issue