in src/Feature/Cart/code/Scripts/ViewModels/checkoutData_VM.js [13:258]
function CheckoutDataViewModel(data) {
var self = this;
self.cart = ko.observable(new LineItemListViewModel(data.Cart));
// delivery //
self.isShipAll = ko.observable(false);
self.isShipToStore = ko.observable(false);
self.isShipToEmail = ko.observable(false);
self.isShipItems = ko.observable(false);
self.emailDeliveryMethod = ko.observable(data.EmailDeliveryMethod);
self.shipToStoreDeliveryMethod = ko.observable(data.ShipToStoreDeliveryMethod);
self.orderShippingOptions = ko.observableArray();
if (data.OrderShippingOptions != null) {
$.each(data.OrderShippingOptions, function (index, value) {
self.orderShippingOptions.push(value);
});
}
self.selectedShippingOption = ko.observable('0');
self.selectedShippingOption.subscribe(function (option) {
self.isShipAll(option === 1);
self.isShipToStore(option === 2);
self.isShipToEmail(option === 3);
self.isShipItems(option === 4);
if (option === 2) {
getMap('storesMap');
setMyLocation();
}
}.bind(this));
self.isAuthenticated = false;
self.userEmail = "";
self.userAddresses = ko.observableArray();
self.userAddresses.push(new AddressViewModel({ "ExternalId": "UseShipping", "FullAddress": $("#billingAddressSelect").attr("title") }));
self.userAddresses.push(new AddressViewModel({ "ExternalId": "UseOther", "FullAddress": $("#ShippingAddressSelect").attr("title2") }));
if (data.IsUserAuthenticated === true && data.UserAddresses.Addresses != null) {
$.each(data.UserAddresses.Addresses, function () {
self.userAddresses.push(new AddressViewModel(this));
});
self.isAuthenticated = true;
self.userEmail = data.UserEmail;
}
self.shippingMethods = ko.observableArray();
self.shippingMethod = ko.validatedObservable().extend({ required: true });
self.shippingAddress = ko.validatedObservable(new AddressViewModel({ "ExternalId": "0" }));
self.shippingAddressFieldChanged = function () {
self.shippingMethod("");
self.shippingMethods.removeAll();
};
self.selectedShippingAddress = ko.observable("UseOther");
self.selectedShippingAddress.subscribe(function (id) {
var match = self.getAddress(id);
self.shippingMethod("");
self.shippingMethods.removeAll();
if (match != null) {
self.shippingAddress(match);
} else {
self.shippingAddress(new AddressViewModel({ "ExternalId": "0" }));
}
}.bind(this));
self.stores = ko.observableArray();
self.store = ko.validatedObservable(new StoreViewModel());
self.changeSelectedStore = function (item, event) {
self.store(item);
};
self.shippingEmail = ko.validatedObservable().extend({ required: true, email: true });
self.shippingEmailContent = ko.observable("");
self.setSendToMe = function (item, event) {
var email = $(event.currentTarget).is(':checked') ? self.userEmail : "";
item.shippingEmail(email);
};
self.enableToBilling = ko.computed({
read: function () {
if (self.isShipToEmail()) {
return self.shippingEmail() && self.shippingEmail.isValid();
}
if (self.isShipAll()) {
return self.shippingMethod.isValid() && self.shippingAddress.isValid()
}
if (self.isShipToStore()) {
return self.store.isValid() && self.store().address.isValid();
}
if (self.isShipItems()) {
var isValid = [];
$.each(self.cart().cartLines(), function () {
if (this.isLineShipToEmail()) {
isValid.push(this.shippingEmail() && this.shippingEmail.isValid());
}
else if (this.isLineShipAll()) {
isValid.push(this.shippingMethod.isValid() && this.shippingAddress.isValid());
}
else if (this.isLineShipToStore()) {
isValid.push(this.store.isValid() && this.store().address.isValid());
} else {
isValid.push(false);
}
});
return isValid.every(isItemValid);
}
},
write: function (value) {
return Boolean(value);
}
});
// billing //
self.billingEmail = ko.validatedObservable(self.userEmail).extend({ required: true, email: true });
self.billingConfirmEmail = ko.validatedObservable(self.userEmail).extend({ validation: { validator: mustEqual, message: GetMessage('EmailsMustMatchMessage'), params: self.billingEmail } });
self.payCard = false;
self.payGiftCard = false;
self.payLoyaltyCard = false;
self.payGiftLoyaltyCard = self.payGiftCard || self.payLoyaltyCard ? true : false;
if (data.PaymentOptions != null) {
$.each(data.PaymentOptions, function (index, value) {
if (value.PaymentOptionType.Name === "PayCard") {
self.payCard = true;
}
if (value.PaymentOptionType.Name === "PayGiftCard") {
self.payGiftCard = true;
}
if (value.PaymentOptionType.Name === "PayLoyaltyCard") {
self.payLoyaltyCard = true;
}
});
}
var PaymentMethod = function (externalId, description) {
this.ExternalId = externalId;
this.Description = description;
};
self.paymentMethods = ko.observableArray();
if (data.PaymentMethods != null) {
self.paymentMethods.push(new PaymentMethod("0", $("#PaymentMethods").attr("title")));
$.each(data.PaymentMethods, function (index, value) {
self.paymentMethods.push(new PaymentMethod(value.ExternalId, value.Description));
});
}
self.cartLoyaltyCardNumber = data.CartLoyaltyCardNumber;
self.giftCardPayment = ko.validatedObservable(new GiftCardPaymentViewModel());
self.loyaltyCardPayment = ko.validatedObservable(data.CartLoyaltyCardNumber ? new LoyaltyCardPaymentViewModel({ "CartLoyaltyCardNumber": data.CartLoyaltyCardNumber, "Amount": 0.00 }) : new LoyaltyCardPaymentViewModel());
self.creditCardPayment = ko.validatedObservable(new CreditCardPaymentViewModel());
self.creditCardEnable = ko.observable(false);
self.billingAddress = ko.validatedObservable(new AddressViewModel({ "ExternalId": "1" }));
self.billingAddressEnable = ko.observable(false);
self.selectedBillingAddress = ko.observable("UseOther");
self.selectedBillingAddress.subscribe(function (id) {
if (id === "UseShipping") {
self.billingAddressEnable(false);
self.billingAddress(self.shippingAddress());
} else {
var match = self.getAddress(id);
if (match != null) {
self.billingAddressEnable(false);
self.billingAddress(match);
} else {
self.billingAddressEnable(true);
self.billingAddress(new AddressViewModel({ "ExternalId": "1" }));
}
}
$("#billingAddressSelect").prop("disabled", false);
});
self.paymentTotal = ko.computed({
read: function () {
var ccIsAdded = self.creditCardPayment().isAdded();
var gcIsAdded = self.giftCardPayment().isAdded();
var lcIsAdded = self.loyaltyCardPayment().isAdded();
if (!ccIsAdded && !gcIsAdded && !lcIsAdded) {
return 0;
}
var ccAmount = ccIsAdded ? self.creditCardPayment().creditCardAmount() : 0;
var gcAmount = gcIsAdded ? self.giftCardPayment().giftCardAmount() : 0;
var lcAmount = lcIsAdded ? self.loyaltyCardPayment().loyaltyCardAmount() : 0;
return (parseFloat(ccAmount) + parseFloat(gcAmount) + parseFloat(lcAmount)).toFixed(2);
},
write: function () { }
});
self.enableToConfirm = ko.computed({
read: function () {
var paymentTotalIsValid = parseFloat(self.paymentTotal()) === parseFloat(self.cart().totalAmount());
if (!paymentTotalIsValid) {
return false;
}
var paymentsAreValid = false;
if (self.giftCardPayment().isAdded()) {
paymentsAreValid = self.giftCardPayment.isValid();
}
if (self.loyaltyCardPayment().isAdded()) {
paymentsAreValid = self.loyaltyCardPayment.isValid();
}
if (self.creditCardPayment().isAdded()) {
paymentsAreValid = self.creditCardPayment.isValid() && self.billingAddress.isValid();
}
return paymentsAreValid && self.billingEmail.isValid() && self.billingConfirmEmail.isValid();
},
write: function (value) {
return Boolean(value);
}
});
// common //
self.expirationDates = expirationDates;
self.expirationYears = expirationYears;
self.currencyCode = ko.observable(data.CurrencyCode);
var Country = function (name, code) {
this.country = name;
this.code = code;
};
self.countries = ko.observableArray();
if (data.Countries != null) {
$.each(data.Countries, function (index, value) {
self.countries.push(new Country(value, index));
});
}
self.states = ko.observableArray(GetAvailableStates(defaultCountryCode));
self.getAddress = function (id) {
var match = ko.utils.arrayFirst(self.userAddresses(), function (a) {
if (a.externalId() === id && id !== "UseOther") {
return a;
}
return null;
});
return match;
};
}