Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Address review workflow #2162

Merged
merged 31 commits into from
Jun 8, 2017
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
b9a5237
Allow customer to move past validation after one pass
brent-hoover Apr 17, 2017
6917f5c
Silencing needless warning
brent-hoover Apr 17, 2017
cca678a
Add missing imports
brent-hoover Apr 17, 2017
433bef6
When we get a "GetTax" error, revert to addressbook
brent-hoover Apr 17, 2017
5b64575
Capture and parse errors
brent-hoover Apr 17, 2017
564dfdf
Creating a "review and fix" address review screen
brent-hoover Apr 20, 2017
7f7a02a
Show highlited diff. Copy over values on click.
brent-hoover Apr 21, 2017
9a56646
Removing "debug" HTML
brent-hoover Apr 21, 2017
28db441
Add "review address" translation
brent-hoover Apr 21, 2017
f5c7c9e
Basic "review address" flow working
brent-hoover Apr 21, 2017
c5c79a4
Remove console.log
brent-hoover Apr 21, 2017
540c24e
Merge branch 'development' into brent-fix-issue-2104
brent-hoover Apr 25, 2017
9393e16
Fix missing import
brent-hoover Apr 25, 2017
9218f31
Fix import error
brent-hoover Apr 25, 2017
4ac11b2
Return to edit and refresh address when you cancel out of review
brent-hoover Apr 25, 2017
9f8da99
Make edit behave the same as add
brent-hoover Apr 25, 2017
3d972d0
Tweak styling
brent-hoover Apr 25, 2017
5ce8394
Merge branch 'development' into brent-fix-issue-2104
brent-hoover May 14, 2017
de48f0b
Merge branch 'development' into brent-fix-issue-2104
brent-hoover May 24, 2017
7e330d9
More and more style changes
brent-hoover May 24, 2017
4729320
Use proper color variables
brent-hoover May 25, 2017
31c0349
Create proper behaviors
brent-hoover May 25, 2017
62b9c45
Merge branch 'development' into brent-fix-issue-2104
brent-hoover May 25, 2017
1de63a3
Fix bad evaluation
brent-hoover May 25, 2017
e263769
Fix import order
brent-hoover May 25, 2017
239680d
Add i18n
brent-hoover May 25, 2017
c72247a
Don't throwback a step if tax fails
brent-hoover May 25, 2017
0d069d7
Make this more of an "exception" flag
brent-hoover May 26, 2017
eef7f18
Correct the way we record tax overrides
brent-hoover Jun 5, 2017
6e45ad6
Merge branch 'development' into brent-fix-issue-2104
brent-hoover Jun 8, 2017
a0b44da
import order
kieckhafer Jun 8, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 12 additions & 45 deletions client/modules/accounts/templates/addressBook/add/add.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { $ } from "meteor/jquery";
import { i18next } from "/client/api";
import * as Collections from "/lib/collections";
import { Session } from "meteor/session";
Expand Down Expand Up @@ -53,36 +54,6 @@ Template.addressBookAdd.helpers({
}
});


export function setValidatedAddress(res) {
if (res.validatedAddress.city) {
const city = $("input[name='city']");
city.val(res.validatedAddress.city);
}
if (res.validatedAddress.postal) {
const postal = $("input[name='postal']");
postal.val(res.validatedAddress.postal);
}
if (res.validatedAddress.address1) {
const address1 = $("input[name='address1']");
address1.val(res.validatedAddress.address1);
}

if (res.validatedAddress.address2) {
const address2 = $("input[name='address2']");
address2.val(res.validatedAddress.address2);
}
if (res.validatedAddress.country) {
const country = $("select[name='country']");
country.val(res.validatedAddress.country);
}

if (res.validatedAddress.region) {
const region = $("select[name='region']");
region.val(res.validatedAddress.region);
}
}

/**
* addressBookAddForm form handling
* @description gets accountId and calls addressBookAdd method
Expand All @@ -96,6 +67,7 @@ AutoForm.hooks({
const addressBook = $(this.template.firstNode).closest(".address-book");

Meteor.call("accounts/validateAddress", insertDoc, function (err, res) {
// if the address is validated OR the address has already been through the validation process, pass it on
if (res.validated) {
Meteor.call("accounts/addressBookAdd", insertDoc, function (error, result) {
if (error) {
Expand All @@ -110,21 +82,16 @@ AutoForm.hooks({
}
});
} else {
if (res.validatedAddress) {
setValidatedAddress(res);
Alerts.inline("Made changes to your address based upon validation. Please ensure this is correct", "warning", {
placement: "addressBookAdd",
i18nKey: "addressBookAdd.validatedAddress"
});
}
if (res.formErrors) {
for (const error of res.formErrors) {
Alerts.inline(error.details, "error", {
placement: "addressBookAdd"
});
}
}
that.done("Validation failed"); // renable Save and Continue button
// set addressState and kick it back to review
const addressState = {
requiresReview: true,
address: insertDoc,
validatedAddress: res.validatedAddress,
formErrors: res.formErrors,
fieldErrors: res.fieldErrors
};
Session.set("addressState", addressState);
addressBook.trigger($.Event("addressRequiresReview"));
}
});
}
Expand Down
25 changes: 23 additions & 2 deletions client/modules/accounts/templates/addressBook/addressBook.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Meteor } from "meteor/meteor";
import { Session } from "meteor/session";
import { ReactiveVar } from "meteor/reactive-var";
import { i18next } from "/client/api";
import * as Collections from "/lib/collections";
Expand All @@ -9,10 +10,20 @@ import { Template } from "meteor/templating";
* template determines which view should be used:
* addAddress (edit or add)
* addressBookView (view)
* addressBookReview (review errors)
*/

Template.addressBook.onCreated(function () {
this.currentViewTemplate = ReactiveVar("addressBookAdd");
let addressState = Session.get("addressState");
if (!addressState) {
addressState = { requiresReview: false };
Session.setDefault("addressState", addressState);
}
if (addressState && addressState.requiresReview) {
this.currentViewTemplate = ReactiveVar("addressBookReview");
} else {
this.currentViewTemplate = ReactiveVar("addressBookAdd");
}
this.templateData = ReactiveVar({});

this.autorun(() => {
Expand All @@ -22,7 +33,7 @@ Template.addressBook.onCreated(function () {
userId: Meteor.userId()
});

if (account) {
if (account && !addressState.requiresReview) {
if (account.profile) {
if (account.profile.addressBook) {
if (account.profile.addressBook.length === 0) {
Expand Down Expand Up @@ -118,5 +129,15 @@ Template.addressBook.events({
event.stopPropagation();

Template.instance().currentViewTemplate.set("addressBookGrid");
},
"addressRequiresReview": (event) => {
event.preventDefault();
event.stopPropagation();
Template.instance().currentViewTemplate.set("addressBookReview");
},
"addressReviewComplete": (event) => {
event.preventDefault();
event.stopPropagation();
Template.instance().currentViewTemplate.set("addressBookEdit");
}
});
84 changes: 66 additions & 18 deletions client/modules/accounts/templates/addressBook/edit/edit.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,64 @@
import { i18next } from "/client/api";
import { $ } from "meteor/jquery";
import { Meteor } from "meteor/meteor";
import { setValidatedAddress } from "../add/add";
import { Session } from "meteor/session";
import { i18next } from "/client/api";


function setWorkingAddress(address) {
if (address.fullName) {
const fullName = $("input[name='fullName']");
fullName.val(address.fullName);
}
if (address.city) {
const city = $("input[name='city']");
city.val(address.city);
}
if (address.postal) {
const postal = $("input[name='postal']");
postal.val(address.postal);
}
if (address.address1) {
const address1 = $("input[name='address1']");
address1.val(address.address1);
}

if (address.address2) {
const address2 = $("input[name='address2']");
address2.val(address.address2);
}
if (address.country) {
const country = $("select[name='country']");
country.val(address.country);
}

if (address.region) {
const region = $("select[name='region']");
region.val(address.region);
}

if (address.phone) {
const phone = $("input[name='phone']");
phone.val(address.phone);
}

if (address.isCommercial) {
const isCommercial = $("input[name='isCommercial']");
isCommercial.val(address.isCommercial);
}
}


Template.addressBookEdit.onRendered(function () {
const addressState = Session.get("addressState");
if (addressState.address) {
setWorkingAddress(addressState.address);
}
});

/*
* update address book (cart) form handling
* onSubmit we need to add accountId which is not in context
*/

AutoForm.hooks({
addressBookEditForm: {
onSubmit: function (insertDoc) {
Expand All @@ -15,6 +67,7 @@ AutoForm.hooks({
const addressBook = $(this.template.firstNode).closest(".address-book");

Meteor.call("accounts/validateAddress", insertDoc, function (err, res) {
// if the address is validated OR the address has already been through the validation process, pass it on
if (res.validated) {
Meteor.call("accounts/addressBookUpdate", insertDoc, (error, result) => {
if (error) {
Expand All @@ -30,21 +83,16 @@ AutoForm.hooks({
}
});
} else {
if (res.validatedAddress) {
setValidatedAddress(res);
Alerts.inline("Made changes to your address based upon validation. Please ensure this is correct", "warning", {
placement: "addressBookEdit",
i18nKey: "addressBookAdd.validatedAddress"
});
}
if (res.formErrors) {
for (const error of res.formErrors) {
Alerts.inline(error.details, "error", {
placement: "addressBookEdit"
});
}
}
that.done("Validation failed"); // renable Save and Continue button
// set addressState and kick it back to review
const addressState = {
requiresReview: true,
address: insertDoc,
validatedAddress: res.validatedAddress,
formErrors: res.formErrors,
fieldErrors: res.fieldErrors
};
Session.set("addressState", addressState);
addressBook.trigger($.Event("addressRequiresReview"));
}
});
}
Expand Down
2 changes: 1 addition & 1 deletion client/modules/accounts/templates/addressBook/form/form.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { Session } from "meteor/session";
import { Meteor } from "meteor/meteor";
import { Template } from "meteor/templating";
import { Countries } from "/client/collections";
import * as Collections from "/lib/collections";
import { Template } from "meteor/templating";

Template.addressBookForm.helpers({

Expand Down
145 changes: 145 additions & 0 deletions client/modules/accounts/templates/addressBook/review/review.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
<template name="addressBookReview">
<div class="panel-heading">
<div class="address-validation-warning col-md-12">
<h5 data-i18n="addressBookEdit.addressValidation">Address Validation</h5>
<div data-i18n="addressBookEdit.reviewAddress">For best compliance, please validate your address</div>
</div>
</div>
<div class="panel-body">

<div class="row header panel-title address-validate-header">
<div data-i18n="addressBookEdit.enteredAddress" class="col-md-5">
Entered Address
</div>
<div class="col-md-7" data-i18n="addressBookEdit.validatedAddress">
Validated Address
</div>
</div>
<!-- country -->
<div data-key="country" class="row country-display{{#if fieldErrors.country.length}} address-invalid-line{{else}} address-valid-line{{/if}}">
<div class="col-md-5">
{{address.country}}
</div>
<div data-key="country" class="col-md-5">
{{validatedAddress.country}}
</div>

<div data-key="country" class="col-md-1">
{{#if fieldErrors.country.length}}
<span class="address-line-copyover fa fa-check-circle"></span>
{{/if}}
</div>
<div data-key="country" class="col-md-1">
{{#if fieldErrors.country.length}}
<span data-key="country" class="address-ignore">Ignore</span>
{{/if}}
</div>
</div>
<!-- address1 -->
<div data-key="address1" class="row address1-display{{#if fieldErrors.address1.length}} address-invalid-line{{else}} address-valid-line{{/if}}">
<div data-key="address1" class="col-md-5">
{{address.address1}}
</div>
<div data-key="address1" class="col-md-5">
{{validatedAddress.address1}}
</div>

<div data-key="address1" class="col-md-1">
<span class="address-line-copyover fa fa-check-circle"></span>
</div>
<div data-key="address1" class="col-md-1">
<span data-key="address1" class="address-ignore">Ignore</span>
</div>
</div>

{{#if hasAddress2}}
<!-- address2 -->
<div data-key="address2" class="row address2-display{{#if fieldErrors.address2.length}} address-invalid-line{{else}} address-valid-line{{/if}}">
<div data-key="address2" class="col-md-5">
{{address.address2}}
</div>
<div data-key="address2" class="col-md-5">
{{validatedAddress.address2}}
</div>

<div data-key="address2" class="col-md-1">
{{#if fieldErrors.address2.length}}
<span class="address-line-copyover fa fa-check-circle"></span>
{{/if}}
</div>
<div data-key="address2" class="col-md-1">
{{#if fieldErrors.address2.length}}
<span data-key="address2" class="address-ignore">Ignore</span>
{{/if}}
</div>
</div>
{{/if}}
<!-- city -->
<div data-key="city" class="row city-display{{#if fieldErrors.city.length}} address-invalid-line{{else}} address-valid-line{{/if}}">
<div class="col-md-5">
{{address.city}}
</div>
<div data-key="city" class="col-md-5">
{{validatedAddress.city}}
</div>

<div data-key="city" class="col-md-1">
{{#if fieldErrors.city.length}}
<span class="address-line-copyover fa fa-check-circle"></span>
{{/if}}
</div>
<div data-key="city" class="col-md-1">
{{#if fieldErrors.city.length}}
<span data-key="address2" class="address-ignore">Ignore</span>
{{/if}}
</div>
</div>

<!-- region -->
<div data-key="region" class="row region-display{{#if fieldErrors.region.length}} address-invalid-line{{else}} address-valid-line{{/if}}">
<div class="col-md-5">
{{address.region}}
</div>
<div data-key="region" class="col-md-5">
{{validatedAddress.region}}
</div>

<div data-key="region" class="col-md-1">
{{#if fieldErrors.region.length}}
<span class="address-line-copyover fa fa-check-circle"></span>
{{/if}}
</div>
<div data-key="region" class="col-md-1">
{{#if fieldErrors.region.length}}
<span data-key="address2" class="address-ignore">Ignore</span>
{{/if}}
</div>
</div>

<!-- postal -->
<div data-key="postal" class="row postal-display{{#if fieldErrors.postal.length}} address-invalid-line{{else}} address-valid-line{{/if}}">
<div class="col-md-5">
{{address.postal}}
</div>
<div data-key="postal" class="col-md-5">
{{validatedAddress.postal}}
</div>

<div data-key="postal" class="col-md-1">
{{#if fieldErrors.postal.length}}
<span data-key="postal" class="address-line-copyover fa fa-check-circle"></span>
{{/if}}
</div>
<div data-key="postal" class="col-md-1">
{{#if fieldErrors.postal.length}}
<span data-key="postal" class="address-ignore">Ignore</span>
{{/if}}
</div>
</div>
<div class="row pull-right review-action-buttons">
<button type="submit" class="btn btn-primary" data-i18n="app.saveAndContinue" data-event-action="saveAddress">Save and continue</button>
<button type="reset" class="btn btn-default" data-i18n="app.cancel" data-event-action="cancelAddressEdit">Cancel</button>
</div>
</div>

</template>
Loading