|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- /**
- Copyright Souke (2018)
-
- contact@souke.fr
-
- Ce logiciel est un programme informatique servant à aider les producteurs
- à distribuer leur production en circuits courts.
-
- Ce logiciel est régi par la licence CeCILL soumise au droit français et
- respectant les principes de diffusion des logiciels libres. Vous pouvez
- utiliser, modifier et/ou redistribuer ce programme sous les conditions
- de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
- sur le site "http://www.cecill.info".
-
- En contrepartie de l'accessibilité au code source et des droits de copie,
- de modification et de redistribution accordés par cette licence, il n'est
- offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
- seule une responsabilité restreinte pèse sur l'auteur du programme, le
- titulaire des droits patrimoniaux et les concédants successifs.
-
- A cet égard l'attention de l'utilisateur est attirée sur les risques
- associés au chargement, à l'utilisation, à la modification et/ou au
- développement et à la reproduction du logiciel par l'utilisateur étant
- donné sa spécificité de logiciel libre, qui peut le rendre complexe à
- manipuler et qui le réserve donc à des développeurs et des professionnels
- avertis possédant des connaissances informatiques approfondies. Les
- utilisateurs sont donc invités à charger et tester l'adéquation du
- logiciel à leurs besoins dans des conditions permettant d'assurer la
- sécurité de leurs systèmes et ou de leurs données et, plus généralement,
- à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
-
- Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
- pris connaissance de la licence CeCILL, et que vous en avez accepté les
- termes.
- */
-
- var selector = '#app-document-form';
- if($(selector).length) {
- var app = new Vue({
- el: selector,
- data: {
- taxRateProducer: null,
- document: [],
- deliveryNoteCreateArray: [],
- deliveryNoteUpdateArray: [],
- deliveryNoteAddId: 0,
- ordersCreateArray: [],
- ordersUpdateArray: [],
- orderAddId: 0,
- idDocument: 0,
- typeDocument: '',
- idUser: '',
- productsArray: [],
- productAddId: 0,
- productAddPrice: '',
- productAddQuantity: 1,
- ordersArray: [],
- invoiceUrl: null,
- total: 0,
- total_with_tax: 0
- },
- mounted: function () {
- this.init();
- },
- methods: {
- formatPrice: formatPrice,
- init: function () {
- var app = this;
-
- if (this.getDocumentId()) {
-
- axios.get(UrlManager.getBaseUrlAbsolute() + "document/ajax-init", {
- params: {
- idDocument: this.getDocumentId(),
- classDocument: this.getDocumentClass()
- }
- })
- .then(function (response) {
- if (response.data.return == 'success') {
- app.document = response.data.document;
- app.taxRateProducer = response.data.tax_rate_producer;
- app.idUser = response.data.id_user;
- app.productsArray = response.data.products;
- app.ordersArray = response.data.orders;
- app.invoiceUrl = response.data.invoice_url;
- app.total = response.data.total;
- app.total_with_tax = response.data.total_with_tax;
-
- if (app.idUser > 0) {
- app.changeUser();
- }
- }
- });
- } else {
- $('.select2-document-form').on('select2:select', function (e) {
- var idUser = e.params.data.id;
- app.idUser = idUser;
- app.changeUser();
- });
- }
- },
- getProductById: function (idProduct) {
- var app = this;
-
- for (var i = 0; i <= Object.keys(this.productsArray).length + 1; i++) {
- if (app.productsArray[i] && app.productsArray[i].id == idProduct) {
- return app.productsArray[i];
- }
- }
-
- return false;
- },
- getDocumentId: function () {
- var documentId = $('#app-document-form').attr('data-id-document');
- return documentId;
- },
- getDocumentClass: function () {
- var documentClass = $('#app-document-form').attr('data-class-document');
- return documentClass;
- },
- getProductOrderPrice: function (productOrder) {
- var documentClass = this.getDocumentClass();
- var price = 0;
- if (documentClass == 'DeliveryNote' || documentClass == 'Invoice') {
- price = productOrder.invoice_price;
- if (isNaN(price) || price === null) {
- price = productOrder.price;
- }
- } else {
- price = productOrder.price;
- }
-
- return price;
- },
- changeUser: function () {
- var app = this;
- axios.get(UrlManager.getBaseUrlAbsolute() + "document/ajax-user-infos", {
- params: {
- idUser: app.idUser,
- classDocument: app.getDocumentClass(),
- idDocument: app.getDocumentId(),
- typeAction: $('#type-action').val(),
- }
- })
- .then(function (response) {
- if (response.data.return == 'success') {
- Vue.set(app.document, 'address', response.data.address);
- app.deliveryNoteCreateArray = response.data.delivery_note_create_array;
- app.deliveryNoteUpdateArray = response.data.delivery_note_update_array;
- app.ordersCreateArray = response.data.orders_create_array;
- app.ordersUpdateArray = response.data.orders_update_array;
- } else {
- app.document.address = '';
- }
- setTimeout("opendistrib_check_all_checkboxes();", 500);
- });
- },
- deleteDeliveryNoteFromInvoice: function (event) {
- var app = this;
- var idDeliveryNote = event.currentTarget.getAttribute('data-id');
-
- axios.get(UrlManager.getBaseUrlAbsolute() + "invoice/ajax-delete-delivery-note", {
- params: {
- idInvoice: app.getDocumentId(),
- idDeliveryNote: idDeliveryNote
- }
- })
- .then(function (response) {
- appAlerts.alertResponse(response);
- app.init();
- });
- },
- submitDeliveryNoteAddToInvoice: function () {
- var app = this;
- axios.get(UrlManager.getBaseUrlAbsolute() + "invoice/ajax-add-delivery-note", {
- params: {
- idInvoice: this.getDocumentId(),
- idDeliveryNote: app.deliveryNoteAddId,
- }
- })
- .then(function (response) {
- appAlerts.alertResponse(response);
- app.deliveryNoteAddId = 0;
- app.init();
- });
- },
- submitOrderAddToDocument: function () {
- var app = this;
- axios.get(UrlManager.getBaseUrlAbsolute() + "document/ajax-add-order", {
- params: {
- idDocument: this.getDocumentId(),
- classDocument: this.getDocumentClass(),
- idOrder: app.orderAddId
- }
- })
- .then(function (response) {
- appAlerts.alertResponse(response);
- app.orderAddId = 0;
- app.init();
- });
- },
- submitOrderIgnoreWhenInvoicing: function () {
- var app = this;
- axios.get(UrlManager.getBaseUrlAbsolute() + "document/ajax-ignore-order-when-invoicing", {
- params: {
- idDocument: this.getDocumentId(),
- classDocument: this.getDocumentClass(),
- idOrder: app.orderAddId
- }
- })
- .then(function (response) {
- appAlerts.alertResponse(response);
- app.orderAddId = 0;
- app.init();
- });
- },
- deleteOrderFromDocument: function () {
- var app = this;
- var idOrder = event.currentTarget.getAttribute('data-id');
-
- axios.get(UrlManager.getBaseUrlAbsolute() + "document/ajax-delete-order", {
- params: {
- idDocument: app.getDocumentId(),
- classDocument: this.getDocumentClass(),
- idOrder: idOrder
- }
- })
- .then(function (response) {
- appAlerts.alertResponse(response);
- app.init();
- });
- },
- getStepProductAdd: function () {
- var step = parseInt(this.getProductById(this.productAddId).step);
- if (!step) {
- step = 1;
- }
-
- return step;
- },
- changeProductAdd: function (event) {
- var idProduct = event.currentTarget.value;
- this.productAddId = idProduct;
- this.productAddPrice = this.getBestProductPrice(idProduct, this.getStepProductAdd());
- this.productAddQuantity = this.getStepProductAdd();
- },
- getBestProductPrice: function (idProduct, theQuantity) {
- var product = this.getProductById(idProduct);
-
- var thePrice = 9999;
- var pricesArray = product.prices;
- var unitCoefficient = product.unit_coefficient;
-
- if (pricesArray && unitCoefficient) {
- if (theQuantity) {
- theQuantity = theQuantity / unitCoefficient;
- }
-
- for (var i = 0; i < pricesArray.length; i++) {
- if (pricesArray[i]) {
- var price = pricesArray[i].price;
- var fromQuantity = pricesArray[i].from_quantity;
-
- if (price < thePrice && fromQuantity <= theQuantity) {
- thePrice = price;
- }
- }
- }
- }
-
- if (thePrice == 9999) {
- return 0;
- } else {
- return thePrice;
- }
- },
- changeQuantityProductAdd: function (quantity) {
- var step = this.getStepProductAdd();
- quantity = quantity * step;
- this.productAddQuantity += quantity;
- if (this.productAddQuantity < 1) {
- this.productAddQuantity = step;
- }
- this.productAddPrice = this.getBestProductPrice(app.productAddId, this.productAddQuantity);
- },
- submitProductAdd: function () {
- var app = this;
- axios.get(UrlManager.getBaseUrlAbsolute() + "document/ajax-add-product", {
- params: {
- idDocument: this.getDocumentId(),
- classDocument: this.getDocumentClass(),
- idProduct: app.productAddId,
- quantity: app.productAddQuantity,
- price: app.productAddPrice,
- }
- })
- .then(function (response) {
- appAlerts.alertResponse(response);
- app.productAddId = 0;
- app.init();
- });
- },
- deleteProductOrder: function (idProductOrder) {
- var app = this;
- result = confirm("Êtes-vous sûr de vouloir supprimer ce produit ? Cela le supprimera également de la commande à laquelle il est lié.");
-
- if (result) {
- axios.get(UrlManager.getBaseUrlAbsolute() + "document/ajax-delete-product-order", {
- params: {
- idProductOrder: idProductOrder
- }
- })
- .then(function (response) {
- appAlerts.alertResponse(response);
- app.init();
- });
- }
- },
- formatProductAddPrice: function () {
- this.productAddPrice = Number(this.productAddPrice).toFixed(2).replace(',', '.');
- if (isNaN(this.productAddPrice)) {
- this.productAddPrice = 0;
- }
- },
- formatProductAddQuantity: function () {
- this.productAddQuantity = parseInt(this.productAddQuantity);
- if (isNaN(this.productAddQuantity)) {
- this.productAddQuantity = 1;
- }
- },
- showProductOrderInvoicePriceButtonApply: function (event) {
- if (event.key == 'Enter') {
- this.updateProductOrderInvoicePrice(event);
- } else {
- var idProductOrder = event.currentTarget.getAttribute('data-id-product-order');
- $('#product-order-invoice-price-button-apply-' + idProductOrder).show();
- }
- },
- updateProductOrderInvoicePrice: function (event) {
- var idProductOrder = event.currentTarget.getAttribute('data-id-product-order');
- var invoicePrice = $('#input-product-order-invoice-price-' + idProductOrder).val();
-
- axios.get(UrlManager.getBaseUrlAbsolute() + "document/ajax-update-product-order-invoice-price", {
- params: {
- idProductOrder: idProductOrder,
- invoicePrice: invoicePrice
- }
- })
- .then(function (response) {
- appAlerts.alertResponse(response);
- $('#input-product-order-invoice-price-' + idProductOrder).val(response.data.datas.invoice_price);
- $('#product-order-invoice-price-button-apply-' + idProductOrder).hide();
- app.init();
- });
- }
- }
- });
- }
-
|