Improve phone/email handling when making new custorder
still needs more improvement, but this is a start
This commit is contained in:
parent
82074a37ba
commit
ad6562558d
|
@ -107,8 +107,12 @@
|
|||
</b-radio>
|
||||
</div>
|
||||
|
||||
<div v-show="contactIsKnown">
|
||||
<b-field label="Customer" horizontal>
|
||||
<div v-show="contactIsKnown"
|
||||
style="padding-left: 10rem;">
|
||||
|
||||
<b-field label="Customer" grouped>
|
||||
<b-field style="margin-left: 1rem;""
|
||||
:expanded="!contactUUID">
|
||||
<tailbone-autocomplete ref="contactAutocomplete"
|
||||
v-model="contactUUID"
|
||||
placeholder="Enter name or phone number"
|
||||
|
@ -120,6 +124,7 @@
|
|||
% endif
|
||||
@input="contactChanged">
|
||||
</tailbone-autocomplete>
|
||||
</b-field>
|
||||
<b-button v-if="contactUUID && contactProfileURL"
|
||||
type="is-primary"
|
||||
tag="a" target="_blank"
|
||||
|
@ -129,23 +134,111 @@
|
|||
View Profile
|
||||
</b-button>
|
||||
</b-field>
|
||||
<b-field label="Phone Number" horizontal
|
||||
v-show="contactUUID">
|
||||
{{ phoneNumberEntry }}
|
||||
## <b-input v-model="phoneNumberEntry"
|
||||
## @input="phoneNumberChanged"
|
||||
## @keydown.native="phoneNumberKeyDown">
|
||||
## </b-input>
|
||||
## <b-button v-if="!phoneNumberSaved"
|
||||
## type="is-primary"
|
||||
## icon-pack="fas"
|
||||
## icon-left="fas fa-save"
|
||||
## @click="setContactData()">
|
||||
## Please save when finished editing
|
||||
## </b-button>
|
||||
## <!-- <tailbone-autocomplete -->
|
||||
## <!-- serviceUrl="${url('customers.autocomplete.phone')}"> -->
|
||||
## <!-- </tailbone-autocomplete> -->
|
||||
|
||||
<b-field grouped v-show="contactUUID"
|
||||
style="margin-top: 2rem;">
|
||||
|
||||
<b-field label="Phone Number"
|
||||
style="margin-right: 3rem;">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
{{ orderPhoneNumber }}
|
||||
</div>
|
||||
<div class="level-item">
|
||||
<b-button type="is-primary"
|
||||
@click="editPhoneNumberInit()"
|
||||
icon-pack="fas"
|
||||
icon-left="edit">
|
||||
Edit
|
||||
</b-button>
|
||||
|
||||
<b-modal has-modal-card
|
||||
:active.sync="editPhoneNumberShowDialog">
|
||||
<div class="modal-card">
|
||||
|
||||
<header class="modal-card-head">
|
||||
<p class="modal-card-title">Edit Phone Number</p>
|
||||
</header>
|
||||
|
||||
<section class="modal-card-body">
|
||||
<b-field label="Phone Number"
|
||||
:type="editPhoneNumberValue ? null : 'is-danger'">
|
||||
<b-input v-model="editPhoneNumberValue"
|
||||
ref="editPhoneNumberInput">
|
||||
</b-input>
|
||||
</b-field>
|
||||
</section>
|
||||
|
||||
<footer class="modal-card-foot">
|
||||
<b-button type="is-primary"
|
||||
icon-pack="fas"
|
||||
icon-left="save"
|
||||
:disabled="editPhoneNumberSaveDisabled"
|
||||
@click="editPhoneNumberSave()">
|
||||
{{ editPhoneNumberSaveText }}
|
||||
</b-button>
|
||||
<b-button @click="editPhoneNumberShowDialog = false">
|
||||
Cancel
|
||||
</b-button>
|
||||
</footer>
|
||||
</div>
|
||||
</b-modal>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</b-field>
|
||||
|
||||
<b-field label="Email Address">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
{{ orderEmailAddress }}
|
||||
</div>
|
||||
<div class="level-item">
|
||||
<b-button type="is-primary"
|
||||
@click="editEmailAddressInit()"
|
||||
icon-pack="fas"
|
||||
icon-left="edit">
|
||||
Edit
|
||||
</b-button>
|
||||
<b-modal has-modal-card
|
||||
:active.sync="editEmailAddressShowDialog">
|
||||
<div class="modal-card">
|
||||
|
||||
<header class="modal-card-head">
|
||||
<p class="modal-card-title">Edit Email Address</p>
|
||||
</header>
|
||||
|
||||
<section class="modal-card-body">
|
||||
<b-field label="Email Address"
|
||||
:type="editEmailAddressValue ? null : 'is-danger'">
|
||||
<b-input v-model="editEmailAddressValue"
|
||||
ref="editEmailAddressInput">
|
||||
</b-input>
|
||||
</b-field>
|
||||
</section>
|
||||
|
||||
<footer class="modal-card-foot">
|
||||
<b-button type="is-primary"
|
||||
icon-pack="fas"
|
||||
icon-left="save"
|
||||
:disabled="editEmailAddressSaveDisabled"
|
||||
@click="editEmailAddressSave()">
|
||||
{{ editEmailAddressSaveText }}
|
||||
</b-button>
|
||||
<b-button @click="editEmailAddressShowDialog = false">
|
||||
Cancel
|
||||
</b-button>
|
||||
</footer>
|
||||
</div>
|
||||
</b-modal>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</b-field>
|
||||
|
||||
</b-field>
|
||||
</div>
|
||||
|
||||
|
@ -400,10 +493,20 @@
|
|||
contactDisplay: ${json.dumps(six.text_type(batch.customer or ''))|n},
|
||||
customerEntry: null,
|
||||
contactProfileURL: ${json.dumps(contact_profile_url)|n},
|
||||
phoneNumberEntry: ${json.dumps(batch.phone_number)|n},
|
||||
## phoneNumberEntry: ${json.dumps(batch.phone_number)|n},
|
||||
orderPhoneNumber: ${json.dumps(batch.phone_number)|n},
|
||||
phoneNumberSaved: true,
|
||||
customerName: null,
|
||||
phoneNumber: null,
|
||||
orderEmailAddress: ${json.dumps(batch.email_address)|n},
|
||||
|
||||
editPhoneNumberShowDialog: false,
|
||||
editPhoneNumberValue: null,
|
||||
editPhoneNumberSaving: false,
|
||||
|
||||
editEmailAddressShowDialog: false,
|
||||
editEmailAddressValue: null,
|
||||
editEmailAddressSaving: false,
|
||||
|
||||
items: ${json.dumps(order_items)|n},
|
||||
editingItem: null,
|
||||
|
@ -478,13 +581,13 @@
|
|||
text: "Please identify the customer.",
|
||||
}
|
||||
}
|
||||
if (!this.phoneNumberEntry) {
|
||||
if (!this.orderPhoneNumber) {
|
||||
return {
|
||||
type: 'is-warning',
|
||||
text: "Please provide a phone number for the customer.",
|
||||
}
|
||||
}
|
||||
phoneNumber = this.phoneNumberEntry
|
||||
phoneNumber = this.orderPhoneNumber
|
||||
} else { // customer is not known
|
||||
if (!this.customerName) {
|
||||
return {
|
||||
|
@ -522,6 +625,40 @@
|
|||
}
|
||||
},
|
||||
|
||||
editPhoneNumberSaveDisabled() {
|
||||
if (this.editPhoneNumberSaving) {
|
||||
return true
|
||||
}
|
||||
if (!this.editPhoneNumberValue) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
|
||||
editPhoneNumberSaveText() {
|
||||
if (this.editPhoneNumberSaving) {
|
||||
return "Working, please wait..."
|
||||
}
|
||||
return "Save"
|
||||
},
|
||||
|
||||
editEmailAddressSaveDisabled() {
|
||||
if (this.editEmailAddressSaving) {
|
||||
return true
|
||||
}
|
||||
if (!this.editEmailAddressValue) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
|
||||
editEmailAddressSaveText() {
|
||||
if (this.editEmailAddressSaving) {
|
||||
return "Working, please wait..."
|
||||
}
|
||||
return "Save"
|
||||
},
|
||||
|
||||
itemsPanelHeader() {
|
||||
let text = "Items"
|
||||
|
||||
|
@ -621,18 +758,6 @@
|
|||
})
|
||||
},
|
||||
|
||||
// setContactData() {
|
||||
// let params = {
|
||||
// action: 'set_customer_data',
|
||||
// customer_uuid: this.contactUUID,
|
||||
// phone_number: this.phoneNumberEntry,
|
||||
// }
|
||||
// let that = this
|
||||
// this.submitBatchData(params, function(response) {
|
||||
// that.phoneNumberSaved = true
|
||||
// })
|
||||
// },
|
||||
|
||||
submitOrder() {
|
||||
this.submittingOrder = true
|
||||
|
||||
|
@ -678,22 +803,78 @@
|
|||
% else:
|
||||
that.contactUUID = response.data.person_uuid
|
||||
% endif
|
||||
that.phoneNumberEntry = response.data.phone_number
|
||||
that.orderPhoneNumber = response.data.phone_number
|
||||
that.orderEmailAddress = response.data.email_address
|
||||
that.contactProfileURL = response.data.contact_profile_url
|
||||
})
|
||||
},
|
||||
|
||||
// phoneNumberChanged(value) {
|
||||
// this.phoneNumberSaved = false
|
||||
// },
|
||||
editPhoneNumberInit() {
|
||||
this.editPhoneNumberValue = this.orderPhoneNumber
|
||||
this.editPhoneNumberShowDialog = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.editPhoneNumberInput.focus()
|
||||
})
|
||||
},
|
||||
|
||||
// phoneNumberKeyDown(event) {
|
||||
// if (event.which == 13) { // Enter
|
||||
// this.setContactData()
|
||||
// }
|
||||
// },
|
||||
editPhoneNumberSave() {
|
||||
this.editPhoneNumberSaving = true
|
||||
|
||||
let params = {
|
||||
action: 'update_phone_number',
|
||||
phone_number: this.editPhoneNumberValue,
|
||||
}
|
||||
|
||||
this.submitBatchData(params, response => {
|
||||
if (response.data.success) {
|
||||
this.orderPhoneNumber = response.data.phone_number
|
||||
this.editPhoneNumberShowDialog = false
|
||||
} else {
|
||||
this.$buefy.toast.open({
|
||||
message: "Save failed: " + response.data.error,
|
||||
type: 'is-danger',
|
||||
duration: 2000, // 2 seconds
|
||||
})
|
||||
}
|
||||
this.editPhoneNumberSaving = false
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
editEmailAddressInit() {
|
||||
this.editEmailAddressValue = this.orderEmailAddress
|
||||
this.editEmailAddressShowDialog = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.editEmailAddressInput.focus()
|
||||
})
|
||||
},
|
||||
|
||||
editEmailAddressSave() {
|
||||
this.editEmailAddressSaving = true
|
||||
|
||||
let params = {
|
||||
action: 'update_email_address',
|
||||
email_address: this.editEmailAddressValue,
|
||||
}
|
||||
|
||||
this.submitBatchData(params, response => {
|
||||
if (response.data.success) {
|
||||
this.orderEmailAddress = response.data.email_address
|
||||
this.editEmailAddressShowDialog = false
|
||||
} else {
|
||||
this.$buefy.toast.open({
|
||||
message: "Save failed: " + response.data.error,
|
||||
type: 'is-danger',
|
||||
duration: 2000, // 2 seconds
|
||||
})
|
||||
}
|
||||
this.editEmailAddressSaving = false
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
showAddItemDialog() {
|
||||
this.customerPanelOpen = false
|
||||
this.editingItem = null
|
||||
this.productIsKnown = true
|
||||
this.productUUID = null
|
||||
|
|
|
@ -228,6 +228,8 @@ class CustomerOrderView(MasterView):
|
|||
json_actions = [
|
||||
'assign_contact',
|
||||
'unassign_contact',
|
||||
'update_phone_number',
|
||||
'update_email_address',
|
||||
'get_customer_info',
|
||||
# 'set_customer_data',
|
||||
'find_product_by_upc',
|
||||
|
@ -413,22 +415,28 @@ class CustomerOrderView(MasterView):
|
|||
|
||||
return context
|
||||
|
||||
# def set_customer_data(self, batch, data):
|
||||
# if 'customer_uuid' in data:
|
||||
# batch.customer_uuid = data['customer_uuid']
|
||||
# if 'person_uuid' in data:
|
||||
# batch.person_uuid = data['person_uuid']
|
||||
# elif batch.customer_uuid:
|
||||
# self.Session.flush()
|
||||
# batch.person = batch.customer.first_person()
|
||||
# else: # no customer set
|
||||
# batch.person_uuid = None
|
||||
# if 'phone_number' in data:
|
||||
# batch.phone_number = data['phone_number']
|
||||
# if 'email_address' in data:
|
||||
# batch.email_address = data['email_address']
|
||||
# self.Session.flush()
|
||||
# return {'success': True}
|
||||
def update_phone_number(self, batch, data):
|
||||
app = self.get_rattail_app()
|
||||
|
||||
batch.phone_number = app.format_phone_number(data['phone_number'])
|
||||
self.Session.flush()
|
||||
self.Session.refresh(batch)
|
||||
|
||||
return {
|
||||
'success': True,
|
||||
'phone_number': batch.phone_number,
|
||||
}
|
||||
|
||||
def update_email_address(self, batch, data):
|
||||
|
||||
batch.email_address = data['email_address']
|
||||
self.Session.flush()
|
||||
self.Session.refresh(batch)
|
||||
|
||||
return {
|
||||
'success': True,
|
||||
'email_address': batch.email_address,
|
||||
}
|
||||
|
||||
def product_autocomplete(self):
|
||||
"""
|
||||
|
|
Loading…
Reference in a new issue