|
- var app = new Vue({
- el: '#app-subscription-form',
- data: {
- loading: true,
- idSubscription: 0,
- pointsSale: [],
- idPointSaleActive: 0,
- pointSaleActive: null,
- pointsSaleCodes: [],
- dateBegin: null,
- dateEnd: null,
- weekFrequency: 1,
- autoPayment: true,
- monday: false,
- tuesday: false,
- wednesday: false,
- thursday: false,
- friday: false,
- saturday: false,
- sunday: false,
- products: [],
- errors: [],
- disableSubmitButton: false,
- lastCountDays: 0,
- comment: ''
- },
- mounted: function () {
- this.init();
- },
- methods: {
- log: log,
- init: function () {
- var app = this;
- if ($('#subscription-id').val() != 0) {
- this.idSubscription = $('#subscription-id').val();
- }
-
- this.dateBegin = new Date();
-
- axios.get("ajax-infos", {params: {idSubscription: this.idSubscription}})
- .then(function (response) {
-
- app.products = response.data.products;
- app.pointsSale = response.data.points_sale;
-
- if (app.idSubscription > 0) {
- app.validatePointSale(response.data.id_point_sale);
- app.weekFrequency = response.data.week_frequency;
- app.autoPayment = response.data.auto_payment;
- var arrayDateBegin = response.data.date_begin.split('-');
- app.dateBegin = new Date(arrayDateBegin[0], arrayDateBegin[1] - 1, arrayDateBegin[2]);
- if (response.data.date_end && response.data.date_end.length > 0) {
- var arrayDateEnd = response.data.date_begin.split('-');
- app.dateEnd = new Date(arrayDateEnd[0], arrayDateEnd[1] - 1, arrayDateEnd[2]);
- }
- app.monday = response.data.monday;
- app.tuesday = response.data.tuesday;
- app.wednesday = response.data.wednesday;
- app.thursday = response.data.thursday;
- app.friday = response.data.friday;
- app.saturday = response.data.saturday;
- app.sunday = response.data.sunday;
- app.comment = response.data.comment;
- }
-
- app.loading = false;
- });
-
- },
- formatDate: formatDate,
-
- pointSaleClick: function (event) {
- var app = this;
- var idPointSale = event.currentTarget.getAttribute('data-id-point-sale');
- var hasCode = event.currentTarget.getAttribute('data-code');
-
- if (hasCode) {
- axios.get('ajax-validate-code-point-sale', {
- params: {
- idPointSale: idPointSale,
- code: this.pointsSaleCodes[idPointSale]
- }
- }).then(function (response) {
- if (response.data) {
- app.getPointSale(idPointSale).invalid_code = false;
- app.validatePointSale(idPointSale);
- } else {
- app.getPointSale(idPointSale).invalid_code = true;
- Vue.set(app.pointsSaleCodes, idPointSale, '');
- }
- });
- } else {
- this.validatePointSale(idPointSale);
- }
- },
- validatePointSale: function (idPointSale) {
- if (this.idPointSaleActive != idPointSale) {
- this.monday = false;
- this.tuesday = false;
- this.wednesday = false;
- this.thursday = false;
- this.friday = false;
- this.saturday = false;
- this.sunday = false;
- }
-
- this.pointSaleActive = this.getPointSale(idPointSale);
- this.idPointSaleActive = idPointSale;
- opendistrib_scroll('step-date');
- },
- getPointSale: function (idPointSale) {
- for (var key in this.pointsSale) {
- if (this.pointsSale[key].id == idPointSale) {
- return this.pointsSale[key];
- }
- }
- },
- dayChange: function () {
- var count = Number(this.monday) + Number(this.tuesday) + Number(this.wednesday)
- + Number(this.thursday) + Number(this.friday) + Number(this.saturday)
- + Number(this.sunday);
-
- if (count == 1 && this.lastCountDays == 0) {
- this.lastCountDays = count;
- opendistrib_scroll('step-days');
- }
- },
- checkProductAvailable: function (product) {
- var available = product.active &&
- (!this.monday || (this.monday && product.monday)) &&
- (!this.tuesday || (this.tuesday && product.tuesday)) &&
- (!this.wednesday || (this.wednesday && product.wednesday)) &&
- (!this.thursday || (this.thursday && product.thursday)) &&
- (!this.friday || (this.friday && product.friday)) &&
- (!this.saturday || (this.saturday && product.saturday)) &&
- (!this.sunday || (this.sunday && product.sunday)) &&
- (
- (product.available_on_points_sale && !this.checkProductPointSaleInclude(product))
- || (!product.available_on_points_sale && this.checkProductPointSaleInclude(product))
- )
- ;
-
- if (!available) {
- product.quantity_form = 0;
- }
-
- return available;
- },
- checkProductPointSaleInclude: function(product) {
- return this.idPointSaleActive && product.product_point_sale_array.includes(parseInt(this.idPointSaleActive));
- },
- checkOneProductAvailable: function () {
- var count = 0;
- for (key in this.products) {
- if (this.checkProductAvailable(this.products[key])) {
- count++;
- }
- }
- return count;
- },
- productQuantityClick: function (product, quantity) {
- if (this.products[product.index].quantity_form + quantity >= 0) {
- this.products[product.index].quantity_form += quantity;
- }
- },
- oneProductOrdered: function () {
- for (var key in this.products) {
- if (this.products[key].quantity_form > 0) {
- return true;
- }
- }
- return false;
- },
- formatPrice: formatPrice,
- getPriceWithTax: getPriceWithTax,
- priceTotal: function (format) {
- var price = 0;
- for (var key in this.products) {
- if (this.products[key].quantity_form > 0) {
- price += (this.products[key].quantity_form / this.products[key].coefficient_unit) * this.products[key].price_with_tax;
- }
- }
- if (format) {
- return this.formatPrice(price);
- } else {
- return price;
- }
- },
- formSubmit: function () {
- this.checkForm();
- if (!this.errors.length && !this.disableSubmitButton) {
-
- this.disableSubmitButton = true;
-
- var productsArray = {};
- for (var key in this.products) {
- if (this.products[key].quantity_form != null &&
- this.products[key].quantity_form > 0) {
- productsArray['product_' + this.products[key].id] = this.products[key].quantity_form;
- }
- }
-
- axios.post('ajax-process', {
- idSubscription: this.idSubscription,
- SubscriptionForm: {
- id_point_sale: this.idPointSaleActive,
- date_begin: this.dateBegin ? this.formatDate(this.dateBegin) : '',
- date_end: this.dateEnd ? this.formatDate(this.dateEnd) : '',
- week_frequency: this.weekFrequency,
- auto_payment: parseInt(this.autoPayment),
- monday: this.monday == true ? 1 : 0,
- tuesday: this.tuesday == true ? 1 : 0,
- wednesday: this.wednesday == true ? 1 : 0,
- thursday: this.thursday == true ? 1 : 0,
- friday: this.friday == true ? 1 : 0,
- saturday: this.saturday == true ? 1 : 0,
- sunday: this.sunday == true ? 1 : 0,
- products: productsArray,
- comment: this.comment
- }
- }).then(function (response) {
- window.location.href = opendistrib_base_url(true) + 'subscription/index';
- });
- }
- },
- checkForm: function () {
- var app = this;
- this.errors = [];
-
- if (!this.idPointSaleActive) {
- this.errors.push('Veuillez sélectionner un point de vente');
- } else {
- if (this.pointSaleActive.code && this.pointSaleActive.code.length > 0) {
- axios.get('ajax-validate-code-point-sale', {
- params: {
- idPointSale: this.idPointSaleActive,
- code: this.pointSaleActive.code
- }
- }).then(function (response) {
- if (response.data) {
- app.pointsSale[idPointSale].invalid_code = false;
- } else {
- app.pointsSale[idPointSale].invalid_code = true;
- Vue.set(app.pointsSaleCodes, idPointSale, '');
- }
- });
- }
- }
-
- var regexDate = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
-
- if (!this.dateBegin) {
- this.errors.push('Veuillez sélectionner une date de début');
- } else {
- if (!regexDate.test(this.formatDate(this.dateBegin))) {
- this.errors.push('Mauvais format de date de début');
- }
- }
-
- if (this.dateEnd && this.dateEnd.length > 0 && !regexDate.test(this.formatDate(this.dateEnd))) {
- this.errors.push('Mauvais format de date de fin');
- }
-
- if (this.weekFrequency != 1 && this.weekFrequency != 2 &&
- this.weekFrequency != 3 && this.weekFrequency != 4) {
-
- this.errors.push('Veuillez sélectionner une périodicité');
- }
-
- if (!this.monday && !this.tuesday && !this.wednesday && !this.thursday &&
- !this.friday && !this.saturday && !this.sunday) {
- this.errors.push('Veuillez sélectionner un jour de distribution');
- }
-
- if (!this.oneProductOrdered()) {
- this.errors.push('Veuillez choisir au moins un produit');
- }
-
-
- if (this.errors.length) {
- window.scroll(0, $('#page-title').position().top - 25);
- }
- }
- }
- });
|