|
-
- 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: {
- 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: function(date) {
- if(date) {
- return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() ;
- }
- return false ;
- },
- 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() {
- console.log(this.monday+' '+this.tuesday+' '+this.wednesday+' '+
- this.thursday+' '+this.friday+' '+this.saturday+' '+this.sunday) ;
-
- 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)) ;
-
- if(!available) {
- product.quantity_form = 0 ;
- }
-
- return available ;
- },
- 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: function(price) {
- var isNumberRegExp = new RegExp(/^[-+]?[0-9]+(\.[0-9]+)*$/);
- if(isNumberRegExp.test(price) && price > 0) {
- return Number(price).toFixed(2).replace('.',',')+' €' ;
- }
- return '--' ;
- },
- 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 ;
- }
- }
- 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: 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.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) ;
- }
- }
- }
- });
|