var app = new Vue({ el: '#app-distribution-index', data: { date: null, dateFormat: null, loading: true, distribution: { active: false, }, products: [], countActiveProducts: 0, pointsSale: [], idActivePointSale: 0, countActivePointsSale: 0, countOrdersByPointSale: [], orders: [], countOrders: 0, users: [], showModalProducts: false, showModalPointsSale: false, showModalFormOrderCreate: false, orderCreate: null, showModalFormOrderUpdate: false, idOrderUpdate: 0, showViewProduct: false, idOrderView: 0, showModalPayment: false, idOrderPayment: 0, showLoading: false, calendar: { mode: 'single', attrs: [], themeStyles: { wrapper: { background: '#BB8757', color: '#fafafa', }, header: { padding: '10px 10px', }, headerHorizontalDivider: { borderTop: 'solid rgba(255, 255, 255, 0.2) 1px', width: '80%', }, weekdays: { color: 'white', fontWeight: '600', padding: '10px 10px', fontSize: '2rem' }, weeks: { padding: '0 15px 15px 15px', }, dayContent: function(object) { var style = { fontSize: '2rem', padding: '16px', }; if(object.isHovered || object.isFocus) { style.backgroundColor = '#F39C12' ; } return style ; }, }, formats: { dayPopover: 'DD/MM/YYYY' } }, }, mounted: function() { if($('#distribution-date').size()) { this.date = new Date($('#distribution-date').html()) ; this.dateFormat = ('0' + this.date.getDate()).slice(-2)+ '/' + ('0' + (this.date.getMonth() +1)).slice(-2) + '/' + this.date.getFullYear() ; } this.init() ; this.loading = false ; }, methods: { getDate: function() { return this.formatDate(this.date) ; }, formatDate: function(date) { if(date) { return date.getFullYear() + '-' + ('0' + (date.getMonth() +1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2) ; } return false ; }, init: function(idActivePointSale) { this.showLoading = true ; axios.get("ajax-infos",{params: {date : this.getDate()}}) .then(response => { this.distribution = response.data.distribution ; this.products = response.data.products ; this.initCountActiveProducts() ; if(response.data.orders) { this.orders = response.data.orders ; this.countOrders = 0 ; for(i=0 ; i < this.orders.length ; i++) { if(!this.orders[i].date_delete) { this.countOrders ++ ; } } } else { this.orders = [] ; } if(response.data.order_create) { this.orderCreate = response.data.order_create ; } if(response.data.points_sale) { this.pointsSale = response.data.points_sale ; this.initPointsSale(idActivePointSale) ; } else { this.pointsSale = [] ; } if(response.data.users) { this.users = response.data.users ; } this.calendar.attrs = [] ; var distributions = response.data.distributions ; if(distributions.length) { for(var i= 0; i < distributions.length; i++) { this.calendar.attrs.push({ highlight: { backgroundColor: '#00A65A', }, dates: distributions[i].date, }) ; } } this.showLoading = false ; }) ; }, initCountActiveProducts: function() { this.countActiveProducts = 0 ; for(var i= 0; i < this.products.length; i++) { if(this.products[i].productDistribution[0].active == 1) { this.countActiveProducts ++ ; } } }, initPointsSale: function(idActivePointSale) { this.countActivePointsSale = 0 ; this.setIdActivePointSale(0) ; for(var i= 0; i < this.pointsSale.length; i++) { if(this.pointsSale[i].pointSaleDistribution[0].delivery == 1) { this.countActivePointsSale ++ ; this.setIdActivePointSale(this.pointsSale[i].id) ; } } if(this.countActivePointsSale > 1) { this.setIdActivePointSale(0) ; } if(idActivePointSale) { this.setIdActivePointSale(idActivePointSale) ; } this.countOrdersByPointSale = [] ; for(var i = 0; i < this.pointsSale.length ; i++) { this.countOrdersByPointSale[this.pointsSale[i].id] = 0 ; } for(var i = 0; i < this.orders.length ; i++) { this.countOrdersByPointSale[this.orders[i].id_point_sale] ++ ; } }, dayClicked: function(day) { this.date = day.date ; this.dateFormat = ('0' + this.date.getDate()).slice(-2)+ '/' + ('0' + (this.date.getMonth() +1)).slice(-2) + '/' + this.date.getFullYear() ; this.init() ; }, productQuantityMaxChange: function(event) { axios.get("ajax-process-product-quantity-max",{params: { idDistribution: this.distribution.id, idProduct: event.currentTarget.getAttribute('data-id-product'), quantityMax: event.currentTarget.value }}) .then(response => { }) ; }, productActiveClick: function(event) { var idProduct = event.currentTarget.getAttribute('data-id-product') ; var activeProduct = event.currentTarget.getAttribute('data-active-product') ; axios.get("ajax-process-active-product",{params: { idDistribution: this.distribution.id, idProduct: idProduct, active: activeProduct }}) .then(response => { }) ; for(i = 0 ; i < this.products.length ; i++) { if(this.products[i].id == idProduct) { this.products[i].productDistribution[0].active = activeProduct ; } } this.initCountActiveProducts() ; }, pointSaleActiveClick: function(event) { var idPointSale = event.currentTarget.getAttribute('data-id-point-sale') ; var deliveryPointSale = event.currentTarget.getAttribute('data-delivery-point-sale') ; axios.get("ajax-process-active-point-sale",{params: { idDistribution: this.distribution.id, idPointSale: idPointSale, delivery: deliveryPointSale }}) .then(response => { }) ; for(i = 0 ; i < this.pointsSale.length ; i++) { if(this.pointsSale[i].id == idPointSale) { this.pointsSale[i].pointSaleDistribution[0].delivery = deliveryPointSale ; } } this.initPointsSale() ; }, activeDistribution: function(event) { axios.get("ajax-process-active-distribution",{params: { idDistribution: this.distribution.id, active: event.currentTarget.getAttribute('data-active') }}) .then(response => { this.init() ; }) ; }, pointSaleClick: function(event) { this.setIdActivePointSale(event.currentTarget.getAttribute('data-id-point-sale')) ; }, setIdActivePointSale: function(id) { this.idActivePointSale = id ; this.orderCreate.id_point_sale = id ; }, orderCreatedUpdated: function() { this.showModalFormOrderCreate = false ; this.showModalFormOrderUpdate = false ; this.init(this.idActivePointSale) ; }, deleteOrderClick: function(event) { var idOrder = event.currentTarget.getAttribute('data-id-order') ; axios.get(UrlManager.getBaseUrlAbsolute()+"order/ajax-delete",{params: { idOrder: idOrder }}) .then(response => { this.init(this.idActivePointSale) ; }) ; }, updateOrderClick: function(event) { var idOrder = event.currentTarget.getAttribute('data-id-order') ; this.idOrderUpdate = idOrder ; this.showModalFormOrderUpdate = true ; }, orderPaymentModalClick: function(event) { var idOrder = event.currentTarget.getAttribute('data-id-order') ; this.idOrderPayment = idOrder ; this.showModalPayment = true ; }, orderPaymentClick: function(event) { var idOrder = event.currentTarget.getAttribute('data-id-order') ; axios.get(UrlManager.getBaseUrlAbsolute()+"order/ajax-payment",{params: { idOrder: this.idOrderPayment, type: event.currentTarget.getAttribute('data-type'), amount: event.currentTarget.getAttribute('data-amount') }}) .then(response => { this.init(this.idActivePointSale) ; }) ; }, orderViewClick: function(event) { var currentIdOrderView = event.currentTarget.getAttribute('data-id-order') ; if(this.idOrderView == currentIdOrderView) { this.showViewProduct = !this.showViewProduct ; } else { this.showViewProduct = true ; this.idOrderView = currentIdOrderView ; } } }, }); Vue.component('modal', { template: '#modal-template' }) Vue.component('order-form',{ props: ['date', 'pointsSale', 'users', 'products', 'order'], data: function() { return { errors: [], idPointSale: 0, idUser: 0, username : '', comment: '', } ; }, template: '#order-form-template', methods: { checkForm: function() { this.errors = [] ; var countProducts = 0 ; for(var key in this.order.productOrder) { if(this.order.productOrder[key] > 0) { countProducts ++ ; } } if(this.order.id_point_sale && (this.order.id_user || (this.order.username && this.order.username.length)) && countProducts > 0) { return true ; } if(!this.order.id_point_sale) { this.errors.push('Veuillez sélectionner un point de vente') ; } if(!this.order.id_user && !this.order.username) { this.errors.push('Veuillez sélectionner ou saisir un utilisateur') ; } if(!countProducts) { this.errors.push('Veuillez sélectionner au moins un produit') ; } }, submitFormCreate: function() { if(this.checkForm()) { axios.get(UrlManager.getBaseUrlAbsolute()+"order/ajax-create",{params: { date: this.date.getFullYear() + '-' + ('0' + (this.date.getMonth() +1)).slice(-2) + '-' + ('0' + this.date.getDate()).slice(-2), idPointSale: this.order.id_point_sale, idUser: this.order.id_user, username: this.order.username, products: JSON.stringify(this.order.productOrder), comment: this.order.comment }}) .then(response => { this.order.id_point_sale = 0 ; this.order.id_user = 0 ; this.order.username = '' ; this.order.comment = '' ; for(i=0 ; i { this.$emit('ordercreatedupdated') ; }) ; } }, productQuantityClick: function(id_product, quantity) { if(this.order.productOrder[id_product] + quantity >= 0) { this.order.productOrder[id_product] += quantity ; } } } }) ;