Advertisement
Guest User

Untitled

a guest
Sep 9th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.00 KB | None | 0 0
  1. /*
  2.  
  3. * Viaprestige Web Agency
  4.  
  5. *
  6.  
  7. * selectId & optionValue must be defined !
  8.  
  9. * selectId : is the id of desired "select" to be working with,
  10.  
  11. * exemple : "sur-mesure".
  12.  
  13. * optionValue : is the value that will let the module change the
  14.  
  15. * "add to cart button", to "add to quot".
  16.  
  17. */
  18.  
  19. var selectId = '#group_1';
  20.  
  21. var optionValue = 1;
  22.  
  23. /*
  24.  
  25. * Viaprestigequote init
  26.  
  27. */
  28.  
  29. jQuery( document ).ready(function( $ ) {
  30.  
  31.  
  32.  
  33. //protectedServer();
  34.  
  35. // Load json config file
  36.  
  37. parseOptions();
  38.  
  39. // Show quote modal
  40.  
  41. modalInit();
  42.  
  43. // Check on load
  44.  
  45. loadingCheckAttribut();
  46.  
  47. // Check on select change
  48.  
  49. changeCheckAttribut();
  50.  
  51.  
  52.  
  53. changeColorAttribut();
  54.  
  55. // Show more details
  56.  
  57. detailsShowHide();
  58.  
  59. // Load product properties
  60.  
  61. loadProductProperties();
  62.  
  63. // building upload
  64.  
  65. buildUploadInput();
  66.  
  67. //addToQuote
  68.  
  69. addToQuote();
  70.  
  71.  
  72.  
  73. addMoreInputs();
  74.  
  75.  
  76.  
  77. quoteProductCount();
  78.  
  79.  
  80.  
  81. deleteFromQuote();
  82.  
  83.  
  84.  
  85. sendQuote();
  86.  
  87.  
  88.  
  89. });
  90.  
  91. function quoteMessage(message,type){
  92.  
  93. $.toast({
  94.  
  95. text: message, // Text that is to be shown in the toast
  96.  
  97. heading: 'SRF Devis sur-mesure', // Optional heading to be shown on the toast
  98.  
  99. icon: type, // Type of toast icon
  100.  
  101. showHideTransition: 'fade', // fade, slide or plain
  102.  
  103. allowToastClose: true, // Boolean value true or false
  104.  
  105. hideAfter: 9000, // false to make it sticky or number representing the miliseconds as time after which toast needs to be hidden
  106.  
  107. stack: 0, // false if there should be only one toast at a time or a number representing the maximum number of toasts to be shown at a time
  108.  
  109. position: 'bottom-left', // bottom-left or bottom-right or bottom-center or top-left or top-right or top-center or mid-center or an object representing the left, right, top, bottom values
  110.  
  111. textAlign: 'left', // Text alignment i.e. left, right or center
  112.  
  113. loader: false, // Whether to show loader or not. True by default
  114.  
  115. loaderBg: '#', // Background color of the toast loader
  116.  
  117. beforeShow: function () {}, // will be triggered before the toast is shown
  118.  
  119. afterShown: function () {}, // will be triggered after the toat has been shown
  120.  
  121. beforeHide: function () {}, // will be triggered before the toast gets hidden
  122.  
  123. afterHidden: function () {} // will be triggered after the toast has been hidden
  124.  
  125. });
  126.  
  127. }
  128.  
  129. /*
  130.  
  131. * Modal initialisation
  132.  
  133. */
  134.  
  135. function modalInit(){
  136.  
  137.  
  138.  
  139. $("#quote-modal").animatedModal();
  140.  
  141. $("#animatedModal").removeClass('unvisible-quote');
  142.  
  143.  
  144.  
  145. }
  146.  
  147. function parseOptions(){
  148.  
  149. $.getJSON("/modules/viaprestigedevis/config/config.json", function(json) {
  150.  
  151. selectId = json['inputid'];
  152.  
  153. optionValue = json['optionid'];
  154.  
  155. });
  156.  
  157. }
  158.  
  159. /*
  160.  
  161. * Viaprestigequote functions
  162.  
  163. */
  164.  
  165. function loadingCheckAttribut(){
  166.  
  167. // Get "sur-mesure" id
  168.  
  169. if ($(selectId).val() == optionValue ) {
  170.  
  171. // Show "quote button" & hide "add to cart button"
  172.  
  173. $('#quote-block').removeClass('unvisible-quote');
  174.  
  175. $('#add_to_cart').addClass('unvisible-quote');
  176.  
  177. $('#quantity_wanted_p').addClass('unvisible-quote');
  178.  
  179. //$('#attributes fieldset:nth-child(2)').addClass('unvisible-quote');
  180.  
  181. priceStartStringChange();
  182.  
  183. }
  184.  
  185. else{
  186.  
  187. // Undo action
  188.  
  189. $('#quote-block').addClass('unvisible-quote');
  190.  
  191. $('#add_to_cart').removeClass('unvisible-quote');
  192.  
  193. $('#quantity_wanted_p').removeClass('unvisible-quote');
  194.  
  195. //priceStartStringReset();
  196.  
  197. priceStartStringChange();
  198.  
  199. }
  200.  
  201. }
  202.  
  203. function changeColorAttribut(){
  204.  
  205. // On properties change
  206.  
  207. $('.color_pick').live('click', function() {
  208.  
  209. console.log('DEBUG');
  210.  
  211. var ref = $('#product_reference .editable').html();
  212.  
  213. $('#product-ref').attr('value',ref);
  214.  
  215. //priceStartStringReset();
  216.  
  217. //priceStartStringChange();
  218.  
  219. });
  220.  
  221. //$('#attributes fieldset:nth-child(2) a').removeClass('unvisible-quote');
  222.  
  223. }
  224.  
  225. function changeCheckAttribut(){
  226.  
  227. // On properties change
  228.  
  229. $('.attribute_fieldset select').on('change', function() {
  230.  
  231. // Get "sur-mesure" id
  232.  
  233. if (this.value == optionValue) {
  234.  
  235. // Show "quote button" & hide "add to cart button"
  236.  
  237. $('#quote-block').removeClass('unvisible-quote');
  238.  
  239. $('#add_to_cart').addClass('unvisible-quote');
  240.  
  241. $('#quantity_wanted_p').addClass('unvisible-quote');
  242.  
  243. $('#attributes fieldset:nth-child(2)').addClass('unvisible-quote');
  244.  
  245. }
  246.  
  247. else{
  248.  
  249. // Undo action
  250.  
  251. $('#quote-block').addClass('unvisible-quote');
  252.  
  253. $('#add_to_cart').removeClass('unvisible-quote');
  254.  
  255. $('#quantity_wanted_p').removeClass('unvisible-quote');
  256.  
  257. $('#attributes fieldset:nth-child(2)').removeClass('unvisible-quote');
  258.  
  259. }
  260.  
  261. });
  262.  
  263. }
  264.  
  265. function priceStartStringChange(){
  266.  
  267. var target = $('#our_price_display');
  268.  
  269. var price = target.html();
  270.  
  271. var tagOpen = '<span id="our_price_display" class="price" itemprop="price" content="'+price+'">';
  272.  
  273. var tagClose = '</span>';
  274.  
  275. target.replaceWith(tagOpen+'À partir de '+price+tagClose);
  276.  
  277. }
  278.  
  279. function priceStartStringReset(){
  280.  
  281. var target = $('#our_price_display');
  282.  
  283. var price = target.attr('content');
  284.  
  285. var tagOpen = '<span id="our_price_display" class="price" itemprop="price" content="'+price+'">';
  286.  
  287. var tagClose = '</span>';
  288.  
  289. target.replaceWith(tagOpen+price+' € '+tagClose);
  290.  
  291. }
  292.  
  293. /*
  294.  
  295. * load properties
  296.  
  297. */
  298.  
  299. function loadProductProperties(){
  300.  
  301.  
  302.  
  303. var label = ['','','Prix : '];
  304.  
  305. var quoteProductName = $('.pb-center-column h1').html();
  306.  
  307. var quoteProductRef = $('#product_reference .editable').html();
  308.  
  309. var quoteProductPrice = $('#our_price_display').html();
  310.  
  311. //var quoteProductColor = $('')
  312.  
  313. //var quoteProperties = [quoteProductName,quoteProductRef,quoteProductPrice,quoteProductQte];
  314.  
  315.  
  316.  
  317. $('.quote-product-name').html(label[0]+quoteProductName);
  318.  
  319. $('#product-name').val(label[0]+quoteProductName);
  320.  
  321. $('#product-ref').val(label[1]+quoteProductRef);
  322.  
  323. $('#product-price').html(label[2]+quoteProductPrice);
  324.  
  325.  
  326.  
  327. }
  328.  
  329. /*
  330.  
  331. * Viaprestigequote init
  332.  
  333. */
  334.  
  335. function detailsShowHide(){
  336.  
  337.  
  338.  
  339. // On properties change
  340.  
  341. $('.dynamic-quote-form select:not(#product-position)').on('change', function() {
  342.  
  343.  
  344.  
  345. // Get the selected control ID
  346.  
  347. var id = $(this).attr('data');
  348.  
  349. // Get the selected control name
  350.  
  351. var name = $(this).val();
  352.  
  353. // Reset fields of current section only
  354.  
  355. initVisibility(id);
  356.  
  357. // Show controls
  358.  
  359. reverseVisibility(name,id);
  360.  
  361.  
  362.  
  363. });
  364.  
  365. }
  366.  
  367. function reverseVisibility(c,id){
  368.  
  369.  
  370.  
  371. var x = $('#'+c+'-options-'+id);
  372.  
  373.  
  374.  
  375. if ( x.hasClass('show-options') ) {
  376.  
  377.  
  378.  
  379. $('#'+c+'-options-'+id+' .form-inputs').attr("disabled");
  380.  
  381. x.addClass('unvisible-quote');
  382.  
  383. x.removeClass('show-options');
  384.  
  385.  
  386.  
  387. }else{
  388.  
  389.  
  390.  
  391. $('#'+c+'-options-'+id+' .form-inputs').removeAttr("disabled");
  392.  
  393. x.removeClass('unvisible-quote');
  394.  
  395. x.addClass('show-options').fadeIn('slow');
  396.  
  397.  
  398.  
  399. }
  400.  
  401.  
  402.  
  403. }
  404.  
  405. function initVisibility(id){
  406.  
  407.  
  408.  
  409. $('#dynamic-quote-hidden-'+id+' .options-form').addClass('unvisible-quote');
  410.  
  411. $('#dynamic-quote-hidden-'+id+' .options-form').removeClass('show-options').fadeIn('slow');
  412.  
  413. $('#dynamic-quote-hidden-'+id+' .options-form .form-inputs').attr("disabled","true");
  414.  
  415.  
  416.  
  417. }
  418.  
  419. function tryAgain(){
  420.  
  421. var target = $('.quote-button');
  422.  
  423. var text = 'Réessayer';
  424.  
  425. target.val(text);
  426.  
  427. }
  428.  
  429. function clearForm(){
  430.  
  431. var target = $('#add-to-quote-form');
  432.  
  433. target.find("input, textarea").val('');
  434.  
  435. }
  436.  
  437. /*
  438.  
  439. * Count number of products sent to quote
  440.  
  441. */
  442.  
  443. function quoteProductCount(increment ){
  444.  
  445. var numItems = jQuery('.dynamic-quote-form').length;
  446.  
  447. if (increment !== undefined) {
  448.  
  449.  
  450.  
  451. numItems = numItems + increment;
  452.  
  453.  
  454.  
  455. }
  456.  
  457. jQuery('#product-count').attr('value',numItems);
  458.  
  459. }
  460.  
  461. /*
  462.  
  463. * Viaprestigequote validate and send quote via mail
  464.  
  465. */
  466.  
  467. function addToQuote(){
  468.  
  469. var formID = '#add-to-quote-form';
  470.  
  471. jQuery(formID).on('submit', function(e){
  472.  
  473. e.preventDefault();
  474.  
  475. var x = jQuery(formID).serializeArray();
  476.  
  477. jQuery.ajax({
  478.  
  479. type: 'POST',
  480.  
  481. dataType:'text',
  482.  
  483. url: '/modules/viaprestigedevis/controllers/external/add-quote.php',
  484.  
  485. data: x,
  486.  
  487. success: function(response) {
  488.  
  489. // Clear form from data to avoid duplicated posts
  490.  
  491. clearForm();
  492.  
  493. // Count products to define how much products should be manipulated by controller
  494.  
  495. quoteProductCount();
  496.  
  497. // Show Success message
  498.  
  499. quoteMessage('Produit ajouté au devis !<br><a href="http://www.srf.fr/module/viaprestigedevis/devis">Acceder à mon devis</a>','success');
  500.  
  501. console.log(response); // DEBUG
  502.  
  503. },
  504.  
  505. error : function(resultat, statut, erreur){
  506.  
  507. // Change button text
  508.  
  509. tryAgain();
  510.  
  511. // show error message
  512.  
  513. quoteMessage('Impossible d\'ajouter le produit ! Veuiller nous contacter : <a href="mailto:webmaster@srf.fr" target="_blank">webmaster@srf.fr</a>','warning');
  514.  
  515. console.log(resultat+statut+erreur); // DEBUG
  516.  
  517. }
  518.  
  519. });
  520.  
  521. });
  522.  
  523. }
  524.  
  525. function addMoreInputs(){
  526.  
  527.  
  528.  
  529. $('#add-more-inputs').click(function() {
  530.  
  531.  
  532.  
  533. // Scroll down to show new elements
  534.  
  535. //scrollDwonQuote();
  536.  
  537. quoteProductCount(1);
  538.  
  539. var numItems = $('.dynamic-quote-form').length+1;
  540.  
  541. var maxField = 5; //Input fields increment limitation
  542.  
  543. var wrapper = $('.field_wrapper'); //Input field wrapper
  544.  
  545. //var fieldHTML = '<div><input type="text" name="field-name-'+numItems+'" value=""/><a class="delete-input" title="Remove field"><img src="/modules/viaprestigedevis/views/img/remove-icon.png"/></a></div>'; //New input field html
  546.  
  547. var fieldHTML = '<hr>';
  548.  
  549.  
  550.  
  551. fieldHTML += '<span class="quote-title">Filet sur-mesure N° '+numItems+'</span>';
  552.  
  553. fieldHTML += '<div class="dynamic-quote-form form-content">';
  554.  
  555.  
  556.  
  557. fieldHTML += '<div class="col-sm-3">';
  558.  
  559. fieldHTML += '<span class="form-label">Utilisation du filet :</span>';
  560.  
  561. fieldHTML += '<input type="text" pattern="^[a-zA-Z ]+$" maxlength="40" name="product-role-'+numItems+'" class="form-inputs" required>';
  562.  
  563. fieldHTML += '</div>';
  564.  
  565.  
  566.  
  567. fieldHTML += '<div class="col-sm-3">';
  568.  
  569. fieldHTML += '<span class="form-label">Quantité :</span>';
  570.  
  571. fieldHTML += '<input type="number" name="product-qty-'+numItems+'" class="form-inputs" required>';
  572.  
  573. fieldHTML += '</div>';
  574.  
  575.  
  576.  
  577. fieldHTML += '<div class="col-sm-3">';
  578.  
  579. fieldHTML += '<span class="form-label">Position du filet :</span>';
  580.  
  581. fieldHTML += '<select id="product-position" name="product-position-'+numItems+'" class="form-control" required>';
  582.  
  583. fieldHTML += '<option></option>';
  584.  
  585. fieldHTML += '<option value="Horizontale">Horizontale</option>';
  586.  
  587. fieldHTML += '<option value="Verticale">Verticale</option>';
  588.  
  589. fieldHTML += '</select>';
  590.  
  591. fieldHTML += '</div>';
  592.  
  593.  
  594.  
  595. fieldHTML += '<div class="col-sm-3">';
  596.  
  597. fieldHTML += '<span class="form-label">Forme générale du filet :</span>';
  598.  
  599. fieldHTML += '<select id="product-sharp-'+numItems+'" name="product-sharp-'+numItems+'" class="form-control" data="'+numItems+'" required>';
  600.  
  601. fieldHTML += '<option></option>';
  602.  
  603. fieldHTML += '<option value="square">Carré</option>';
  604.  
  605. fieldHTML += '<option value="rectangular">Rectangle</option>';
  606.  
  607. fieldHTML += '<option value="triangular">Triangle rectangle</option>';
  608.  
  609. fieldHTML += '<option value="quad">Triangle isocèle ou équilatéral</option>';
  610.  
  611. fieldHTML += '<option value="trapezer">Trapèze rectangle</option>';
  612.  
  613. fieldHTML += '<option value="trapezei">Trapèze isocèle</option>';
  614.  
  615. fieldHTML += '<option value="circular">Rond</option>';
  616.  
  617. fieldHTML += '<option value="other">Autre</option>';
  618.  
  619. fieldHTML += '</select>';
  620.  
  621. fieldHTML += '</div>';
  622.  
  623. fieldHTML += '<i id="delete-more-inputs" class="fa fa-minus-circle quote-delete-more" date="'+numItems+'" aria-hidden="true"></i>';
  624.  
  625. fieldHTML += '</div>';
  626.  
  627.  
  628.  
  629. fieldHTML += '<div id="dynamic-quote-hidden-'+numItems+'">';
  630.  
  631.  
  632.  
  633. fieldHTML += '<div id="square-options-'+numItems+'" class="options-form form-content unvisible-quote">';
  634.  
  635. fieldHTML += '<img class="quote-demo" src="/modules/viaprestigedevis/views/img/carre.jpg">';
  636.  
  637. fieldHTML += '<span class="form-label">Longueur des côtés :</span>';
  638.  
  639. fieldHTML += '<input type="number" name="carre-length-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled>';
  640.  
  641. fieldHTML += '</div>';
  642.  
  643.  
  644.  
  645. fieldHTML += '<div id="rectangular-options-'+numItems+'" class="options-form form-content unvisible-quote">';
  646.  
  647. fieldHTML += '<img class="quote-demo" src="/modules/viaprestigedevis/views/img/rectangle.jpg">';
  648.  
  649. fieldHTML += '<span class="form-label">Longueur :</span>';
  650.  
  651. fieldHTML += '<input type="number" name="rectangle-length-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled>';
  652.  
  653. fieldHTML += '<span class="form-label">Largeur :</span>';
  654.  
  655. fieldHTML += '<input type="number" name="rectangle-width-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled>';
  656.  
  657. fieldHTML += '</div>';
  658.  
  659.  
  660.  
  661. fieldHTML += '<div id="circular-options-'+numItems+'" class="options-form form-content unvisible-quote">';
  662.  
  663. fieldHTML += '<img class="quote-demo" src="/modules/viaprestigedevis/views/img/circular.jpg">';
  664.  
  665. fieldHTML += '<span class="form-label">Diamètre :</span>';
  666.  
  667. fieldHTML += '<input type="number" name="circular-diametre-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  668.  
  669. fieldHTML += '</div>';
  670.  
  671.  
  672.  
  673. fieldHTML += '<div id="triangular-options-'+numItems+'" class="options-form form-content unvisible-quote">';
  674.  
  675. fieldHTML += '<img class="quote-demo" src="/modules/viaprestigedevis/views/img/triangular.jpg">';
  676.  
  677. fieldHTML += '<span class="form-label">Dimension <strong>AB</strong> :</span>';
  678.  
  679. fieldHTML += '<input type="number" name="triangular-length-ab-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  680.  
  681. fieldHTML += '<span class="form-label">Dimension <strong>BC</strong> :</span>';
  682.  
  683. fieldHTML += '<input type="number" name="triangular-length-bc-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  684.  
  685. fieldHTML += '<span class="form-label">Dimension <strong>AC</strong> :</span>';
  686.  
  687. fieldHTML += '<input type="number" name="triangular-length-ac-'+numItems+'" class="form-inputs" placeholder="(En mètres" disabled required>';
  688.  
  689. fieldHTML += '</div>';
  690.  
  691.  
  692.  
  693. fieldHTML += '<div id="trapezei-options-'+numItems+'" class="options-form form-content unvisible-quote">';
  694.  
  695. fieldHTML += '<img class="quote-demo" src="/modules/viaprestigedevis/views/img/trapezei.jpg">';
  696.  
  697. fieldHTML += '<span class="form-label">Dimension <strong>AB</strong> :</span>';
  698.  
  699. fieldHTML += '<input type="number" name="trapezei-length-ab-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  700.  
  701. fieldHTML += '<span class="form-label">Dimension <strong>BC</strong> :</span>';
  702.  
  703. fieldHTML += '<input type="number" name="trapezei-length-bc-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  704.  
  705. fieldHTML += '<span class="form-label">Dimension <strong>CD</strong> :</span>';
  706.  
  707. fieldHTML += '<input type="number" name="trapezei-length-cd-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  708.  
  709. fieldHTML += '<span class="form-label">Dimension <strong>AD</strong> :</span>';
  710.  
  711. fieldHTML += '<input type="number" name="trapezei-height-ad-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  712.  
  713. fieldHTML += '</div>';
  714.  
  715.  
  716.  
  717. fieldHTML += '<div id="trapezer-options-'+numItems+'" class="options-form form-content unvisible-quote">';
  718.  
  719. fieldHTML += '<img class="quote-demo" src="/modules/viaprestigedevis/views/img/trapezer.jpg">';
  720.  
  721. fieldHTML += '<span class="form-label">Dimension <strong>AB</strong> :</span>';
  722.  
  723. fieldHTML += '<input type="number" name="trapezer-length-ab-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  724.  
  725. fieldHTML += '<span class="form-label">Dimension <strong>BC</strong> :</span>';
  726.  
  727. fieldHTML += '<input type="number" name="trapezer-length-bc-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  728.  
  729. fieldHTML += '<span class="form-label">Dimension <strong>CD</strong> :</span>';
  730.  
  731. fieldHTML += '<input type="number" name="trapezer-length-cd-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  732.  
  733. fieldHTML += '<span class="form-label">Dimension <strong>AD</strong> :</span>';
  734.  
  735. fieldHTML += '<input type="number" name="trapezer-height-ad-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  736.  
  737. fieldHTML += '</div>';
  738.  
  739.  
  740.  
  741. fieldHTML += '<div id="quad-options-'+numItems+'" class="options-form form-content unvisible-quote">';
  742.  
  743. fieldHTML += '<img class="quote-demo" src="/modules/viaprestigedevis/views/img/quad.jpg">';
  744.  
  745. fieldHTML += '<span class="form-label">Dimension <strong>AB</strong> :</span>';
  746.  
  747. fieldHTML += '<input type="number" name="quad-length-ab-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  748.  
  749. fieldHTML += '<span class="form-label">Dimension <strong>BC</strong> :</span>';
  750.  
  751. fieldHTML += '<input type="number" name="quad-length-bc-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  752.  
  753. fieldHTML += '<span class="form-label">Dimension <strong>AC</strong> :</span>';
  754.  
  755. fieldHTML += '<input type="number" name="quad-length-ac-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  756.  
  757. fieldHTML += '<span class="form-label">Hauteur <strong>AD</strong> :</span>';
  758.  
  759. fieldHTML += '<input type="number" name="quad-diagonale-ad-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  760.  
  761. fieldHTML += '</div>';
  762.  
  763.  
  764.  
  765. fieldHTML += '<div id="other-options-'+numItems+'" class="options-form form-content unvisible-quote">';
  766.  
  767. fieldHTML += '<img class="quote-demo" src="/modules/viaprestigedevis/views/img/other.jpg">';
  768.  
  769. fieldHTML += '<span class="form-label">Dimensions :</span>';
  770.  
  771. fieldHTML += '<input type="text" maxlength="160" name="other-dimension-'+numItems+'" class="form-inputs" placeholder="(En mètres)" disabled required>';
  772.  
  773. fieldHTML += '</div>';
  774.  
  775.  
  776.  
  777. fieldHTML += '</div>';
  778.  
  779.  
  780.  
  781. if(numItems !== maxField+1){ //Check maximum number of input fields
  782.  
  783. $(wrapper).append(fieldHTML); // Add field html
  784.  
  785. detailsShowHide();
  786.  
  787. }else{
  788.  
  789. quoteProductCount(0);
  790.  
  791. quoteMessage('Le nombre maximum de produits sur-mesures est atteint ! ('+maxField+')','warning');
  792.  
  793. }
  794.  
  795.  
  796.  
  797. $('.delete-input').click(function() {
  798.  
  799. $(this).parent('div').remove(); //Remove field html
  800.  
  801. });
  802.  
  803.  
  804.  
  805. });
  806.  
  807.  
  808.  
  809. }
  810.  
  811. function updateTable(id){
  812.  
  813. if (id !== undefined) {
  814.  
  815. var target = $('#product-'+id);
  816.  
  817. target.hide('slow', function(){ target.remove(); });
  818.  
  819. }
  820.  
  821. }
  822.  
  823. function updateQuoteTotal(){
  824.  
  825. var target = $('.quote-cart-total .number');
  826.  
  827. var total = target.html() - 1;
  828.  
  829. console.log(total);
  830.  
  831. target.slideUp('slow');
  832.  
  833. target.html(total);
  834.  
  835. target.slideDown('slow');
  836.  
  837. }
  838.  
  839. function deleteFromQuote(){
  840.  
  841. $('.delete-from-quote').on('click', function() {
  842.  
  843. var product = $(this).attr('data');
  844.  
  845. $.confirm({
  846.  
  847. title: 'SRF Devis sur-mesure',
  848.  
  849. confirmButtonClass: 'btn-info',
  850.  
  851. cancelButtonClass: 'btn-danger',
  852.  
  853. confirmButton: 'Oui',
  854.  
  855. cancelButton: 'Annuler',
  856.  
  857. content: 'Voulez-vous retirer ce produit du devis ?',
  858.  
  859. confirm: function(){
  860.  
  861. $.ajax({
  862.  
  863. type: 'POST',
  864.  
  865. url: '/modules/viaprestigedevis/controllers/external/remove-product.php',
  866.  
  867. data: {id:product},
  868.  
  869. success: function(response) {
  870.  
  871. //console.log(response); // Debug
  872.  
  873. updateTable(product);
  874.  
  875. updateQuoteTotal();
  876.  
  877. quoteMessage('Produit retiré','success');
  878.  
  879. }
  880.  
  881. });
  882.  
  883. },
  884.  
  885. cancel: function(){
  886.  
  887. // Null
  888.  
  889. }
  890.  
  891. });
  892.  
  893. });
  894.  
  895. }
  896.  
  897. /*
  898.  
  899. * Compatibility
  900.  
  901. */
  902.  
  903. function scrollDwonQuote(){
  904.  
  905.  
  906.  
  907. var height = jQuery('html').height();
  908.  
  909. var launcher = '#add-more-inputs';
  910.  
  911. var target = '#animatedModal';
  912.  
  913. var scrolled = 120;
  914.  
  915.  
  916.  
  917. jQuery(launcher).click(function(e) {
  918.  
  919. jQuery(target).animate({scrollTop:height},800);
  920.  
  921. });
  922.  
  923.  
  924.  
  925. }
  926.  
  927. /*
  928.  
  929. * Compatibility
  930.  
  931. */
  932.  
  933. function userAgent(){
  934.  
  935. // Opera 8.0+
  936.  
  937. var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
  938.  
  939. // Firefox 1.0+
  940.  
  941. var isFirefox = typeof InstallTrigger !== 'undefined';
  942.  
  943. // At least Safari 3+: "[object HTMLElementConstructor]"
  944.  
  945. var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
  946.  
  947. // Internet Explorer 6-11
  948.  
  949. var isIE = /*@cc_on!@*/false || !!document.documentMode;
  950.  
  951. // Edge 20+
  952.  
  953. var isEdge = !isIE && !!window.StyleMedia;
  954.  
  955. // Chrome 1+
  956.  
  957. var isChrome = !!window.chrome && !!window.chrome.webstore;
  958.  
  959. // Blink engine detection
  960.  
  961. var isBlink = (isChrome || isOpera) && !!window.CSS;
  962.  
  963.  
  964.  
  965. if (isOpera) {
  966.  
  967. alert('opera');
  968.  
  969. }else if (isFirefox) {
  970.  
  971. alert('Firefox');
  972.  
  973. }else if (isSafari) {
  974.  
  975. alert('Safari');
  976.  
  977. }else if (isIE) {
  978.  
  979. alert('IE');
  980.  
  981. }else if (isEdge) {
  982.  
  983. alert('Edge');
  984.  
  985. }else if (isChrome) {
  986.  
  987. alert('Chrome');
  988.  
  989. }else if (isBlink) {
  990.  
  991. alert('Blink');
  992.  
  993. }
  994.  
  995. }
  996.  
  997. /*
  998.  
  999. * Refresh
  1000.  
  1001. */
  1002.  
  1003. function protectedServer(){
  1004.  
  1005. var htaccess = {
  1006.  
  1007. username: "",
  1008.  
  1009. password: ""
  1010.  
  1011. };
  1012.  
  1013. var credentials = btoa(htaccess.username + ":" + htaccess.password);
  1014.  
  1015. $.ajaxSetup({
  1016.  
  1017. xhrFields: { withCredentials: true },
  1018.  
  1019. beforeSend: function (xhr, settings) {
  1020.  
  1021. xhr.setRequestHeader("Authorization", "Basic " + credentials);
  1022.  
  1023. return true;
  1024.  
  1025. }
  1026.  
  1027. });
  1028.  
  1029. }
  1030.  
  1031. function quoteToMail(){
  1032.  
  1033. $('body.devis table').attr('style','border-collapse:collapse;');
  1034.  
  1035. }
  1036.  
  1037. function getUploadedFile(){
  1038.  
  1039. var x = [];
  1040.  
  1041. var i = 0;
  1042.  
  1043. jQuery(".jFiler-item-title b").each(function() {
  1044.  
  1045. x[i++] = jQuery(this).attr('title');
  1046.  
  1047. });
  1048.  
  1049. return x;
  1050.  
  1051. }
  1052.  
  1053. /*
  1054.  
  1055. * Viaprestigequote validate and send quote via mail
  1056.  
  1057. */
  1058.  
  1059. function sendQuote(){
  1060.  
  1061. var formID = '#send-quote-form';
  1062.  
  1063. jQuery(formID).on('submit', function(e){
  1064.  
  1065. e.preventDefault();
  1066.  
  1067. quoteToMail();
  1068.  
  1069. $.confirm({
  1070.  
  1071. title: 'SRF Devis sur-mesure',
  1072.  
  1073. confirmButtonClass: 'btn-info',
  1074.  
  1075. cancelButtonClass: 'btn-danger',
  1076.  
  1077. confirmButton: 'Oui',
  1078.  
  1079. cancelButton: 'Annuler',
  1080.  
  1081. content: 'Envoyer le devis ?',
  1082.  
  1083. confirm: function(){
  1084.  
  1085. var x = jQuery(formID).serializeArray();
  1086.  
  1087. var y = getUploadedFile();
  1088.  
  1089. var z = $('.table-responsive').html();
  1090.  
  1091. jQuery.ajax({
  1092.  
  1093. type: 'POST',
  1094.  
  1095. url: '/modules/viaprestigedevis/controllers/external/send-quote.php',
  1096.  
  1097. data: {sender:x ,file:y,quote:z},
  1098.  
  1099. success: function(response) {
  1100.  
  1101. //console.log(response); // Debug
  1102.  
  1103. quoteMessage('<strong>Votre devis a été envoyé avec succès !</strong><br>Nous prenons connaissance de votre demande et revenons vers vous au plus vite.','success');
  1104.  
  1105. }
  1106.  
  1107. });
  1108.  
  1109. },
  1110.  
  1111. cancel: function(){
  1112.  
  1113. // Null
  1114.  
  1115. }
  1116.  
  1117. });
  1118.  
  1119. });
  1120.  
  1121. }
  1122.  
  1123. /*
  1124.  
  1125. * Refresh
  1126.  
  1127. */
  1128.  
  1129. function buildUploadInput(){
  1130.  
  1131.  
  1132.  
  1133. // remove prestashop default input
  1134.  
  1135. $('#uniform-filer_input2').remove();
  1136.  
  1137. // build
  1138.  
  1139. $("#filer_input2").filer({
  1140.  
  1141. limit: 2,
  1142.  
  1143. maxSize: 20,
  1144.  
  1145. extensions: ['jpg','png','pdf','doc','docx'],
  1146.  
  1147. changeInput: '<div class="jFiler-input-dragDrop"><div class="jFiler-input-inner"><div class="jFiler-input-icon"><i class="icon-jfi-cloud-up-o"></i></div><div class="jFiler-input-text"><h3>Glissez les fichiers ici</h3> <span style="display:inline-block; margin: 5px 0">Ou</span></div><a class="jFiler-input-choose-btn green">Sélectionnez tous</a></div></div>',
  1148.  
  1149. showThumbs: true,
  1150.  
  1151. theme: "dragdropbox",
  1152.  
  1153. templates: {
  1154.  
  1155. box: '<ul class="jFiler-items-list jFiler-items-grid"></ul>',
  1156.  
  1157. item: '<li class="jFiler-item">\
  1158.  
  1159. <div class="jFiler-item-container">\
  1160.  
  1161. <div class="jFiler-item-inner">\
  1162.  
  1163. <div class="jFiler-item-thumb">\
  1164.  
  1165. <div class="jFiler-item-status"></div>\
  1166.  
  1167. <div class="jFiler-item-info">\
  1168.  
  1169. <span class="jFiler-item-title"><b title="{{fi-name}}">{{fi-name | limitTo: 25}}</b></span>\
  1170.  
  1171. <span class="jFiler-item-others">{{fi-size2}}</span>\
  1172.  
  1173. </div>\
  1174.  
  1175. {{fi-image}}\
  1176.  
  1177. </div>\
  1178.  
  1179. <div class="jFiler-item-assets jFiler-row">\
  1180.  
  1181. <ul class="list-inline pull-left">\
  1182.  
  1183. <li>{{fi-progressBar}}</li>\
  1184.  
  1185. </ul>\
  1186.  
  1187. <ul class="list-inline pull-right">\
  1188.  
  1189. <li><a class="icon-jfi-trash jFiler-item-trash-action"></a></li>\
  1190.  
  1191. </ul>\
  1192.  
  1193. </div>\
  1194.  
  1195. </div>\
  1196.  
  1197. </div>\
  1198.  
  1199. </li>',
  1200.  
  1201. itemAppend: '<li class="jFiler-item">\
  1202.  
  1203. <div class="jFiler-item-container">\
  1204.  
  1205. <div class="jFiler-item-inner">\
  1206.  
  1207. <div class="jFiler-item-thumb">\
  1208.  
  1209. <div class="jFiler-item-status"></div>\
  1210.  
  1211. <div class="jFiler-item-info">\
  1212.  
  1213. <span class="jFiler-item-title"><b title="{{fi-name}}">{{fi-name | limitTo: 25}}</b></span>\
  1214.  
  1215. <span class="jFiler-item-others">{{fi-size2}}</span>\
  1216.  
  1217. </div>\
  1218.  
  1219. {{fi-image}}\
  1220.  
  1221. </div>\
  1222.  
  1223. <div class="jFiler-item-assets jFiler-row">\
  1224.  
  1225. <ul class="list-inline pull-left">\
  1226.  
  1227. <li><span class="jFiler-item-others">{{fi-icon}}</span></li>\
  1228.  
  1229. </ul>\
  1230.  
  1231. <ul class="list-inline pull-right">\
  1232.  
  1233. <li><a class="icon-jfi-trash jFiler-item-trash-action"></a></li>\
  1234.  
  1235. </ul>\
  1236.  
  1237. </div>\
  1238.  
  1239. </div>\
  1240.  
  1241. </div>\
  1242.  
  1243. </li>',
  1244.  
  1245. progressBar: '<div class="bar"></div>',
  1246.  
  1247. itemAppendToEnd: false,
  1248.  
  1249. removeConfirmation: true,
  1250.  
  1251. _selectors: {
  1252.  
  1253. list: '.jFiler-items-list',
  1254.  
  1255. item: '.jFiler-item',
  1256.  
  1257. progressBar: '.bar',
  1258.  
  1259. remove: '.jFiler-item-trash-action'
  1260.  
  1261. }
  1262.  
  1263. },
  1264.  
  1265. dragDrop: {
  1266.  
  1267. dragEnter: null,
  1268.  
  1269. dragLeave: null,
  1270.  
  1271. drop: null,
  1272.  
  1273. },
  1274.  
  1275. uploadFile: {
  1276.  
  1277. url: "/modules/viaprestigedevis/controllers/external/upload-file.php",
  1278.  
  1279. data: null,
  1280.  
  1281. type: 'POST',
  1282.  
  1283. enctype: 'multipart/form-data',
  1284.  
  1285. beforeSend: function(){},
  1286.  
  1287. success: function(data, el){
  1288.  
  1289. var parent = el.find(".jFiler-jProgressBar").parent();
  1290.  
  1291. el.find(".jFiler-jProgressBar").fadeOut("slow", function(){
  1292.  
  1293. $("<div class=\"jFiler-item-others text-success\"><i class=\"icon-jfi-check-circle\"></i> Fichier transmis</div>").hide().appendTo(parent).fadeIn("slow");
  1294.  
  1295. });
  1296.  
  1297. },
  1298.  
  1299. error: function(el){
  1300.  
  1301. var parent = el.find(".jFiler-jProgressBar").parent();
  1302.  
  1303. el.find(".jFiler-jProgressBar").fadeOut("slow", function(){
  1304.  
  1305. $("<div class=\"jFiler-item-others text-error\"><i class=\"icon-jfi-minus-circle\"></i> Erreur</div>").hide().appendTo(parent).fadeIn("slow");
  1306.  
  1307. });
  1308.  
  1309. },
  1310.  
  1311. statusCode: null,
  1312.  
  1313. onProgress: null,
  1314.  
  1315. onComplete: null
  1316.  
  1317. },
  1318.  
  1319. files: null,
  1320.  
  1321. addMore: false,
  1322.  
  1323. clipBoardPaste: true,
  1324.  
  1325. excludeName: null,
  1326.  
  1327. beforeRender: null,
  1328.  
  1329. afterRender: null,
  1330.  
  1331. beforeShow: null,
  1332.  
  1333. beforeSelect: null,
  1334.  
  1335. onSelect: null,
  1336.  
  1337. afterShow: function(){
  1338.  
  1339. quoteMessage('En cours de mise en ligne','success');
  1340.  
  1341. },
  1342.  
  1343. onRemove: function(itemEl, file, id, listEl, boxEl, newInputEl, inputEl){
  1344.  
  1345. var file = file.name;
  1346.  
  1347. $.post('/modules/viaprestigedevis/controllers/external/remove-file.php', {file: file});
  1348.  
  1349. quoteMessage('Fichier supprimé','success');
  1350.  
  1351. },
  1352.  
  1353. onFileCheck: null,
  1354.  
  1355. onEmpty: null,
  1356.  
  1357. options: null,
  1358.  
  1359. dialogs: {
  1360.  
  1361. alert: function(text) {
  1362.  
  1363. // return alert(text);
  1364.  
  1365. return quoteMessage(text,'warning');
  1366.  
  1367. },
  1368.  
  1369. confirm: function(text, callback) {
  1370.  
  1371. confirm(text) ? callback() : quoteMessage(text,'warning');
  1372.  
  1373. }
  1374.  
  1375. },
  1376.  
  1377. captions: {
  1378.  
  1379. button: "Choose Files",
  1380.  
  1381. feedback: "Choose files To Upload",
  1382.  
  1383. feedback2: "files were chosen",
  1384.  
  1385. drop: "Drop file here to Upload",
  1386.  
  1387. removeConfirmation: "Retirer ce fichier ?",
  1388.  
  1389. errors: {
  1390.  
  1391. filesLimit: "nombre maximum de pièces jointes à été éteint ({{fi-limit}}).",
  1392.  
  1393. filesType: "Fichier insupportable",
  1394.  
  1395. filesSize: "{{fi-name}} est volumineux (Max {{fi-maxSize}} MB).",
  1396.  
  1397. filesSizeAll: "Fichiers volumineux (Max {{fi-maxSize}} MB)."
  1398.  
  1399. }
  1400.  
  1401. }
  1402.  
  1403. });
  1404.  
  1405.  
  1406.  
  1407. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement