From 390fe5d98df68e63df268b388c68f761e35cfea6 Mon Sep 17 00:00:00 2001 From: Nicolas Bally Date: Fri, 17 Sep 2021 00:18:29 +0200 Subject: [PATCH] Ergo + popup --- app/assets/javascripts/admin.coffee | 5 +- app/assets/javascripts/admin/random_hexa.js | 2 + app/assets/javascripts/manager.js | 4 +- app/assets/javascripts/nested_fields.coffee | 6 +- .../admin/price_line_blocks/_form.html.haml | 21 +- app/views/admin/price_lines/_form.html.haml | 201 ++++++++++-------- 6 files changed, 135 insertions(+), 104 deletions(-) create mode 100644 app/assets/javascripts/admin/random_hexa.js diff --git a/app/assets/javascripts/admin.coffee b/app/assets/javascripts/admin.coffee index 7a571ec..ea98f59 100644 --- a/app/assets/javascripts/admin.coffee +++ b/app/assets/javascripts/admin.coffee @@ -56,6 +56,7 @@ #= require freeze-table +#= require admin/random_hexa @@ -856,6 +857,4 @@ $(document).on 'click', '.datepicker', (e) -> $(this).next('.' + autocomplete_object + '_id').val ui.item.id return return - - - + \ No newline at end of file diff --git a/app/assets/javascripts/admin/random_hexa.js b/app/assets/javascripts/admin/random_hexa.js new file mode 100644 index 0000000..910cebf --- /dev/null +++ b/app/assets/javascripts/admin/random_hexa.js @@ -0,0 +1,2 @@ +const genRanHex = size => [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join(''); + \ No newline at end of file diff --git a/app/assets/javascripts/manager.js b/app/assets/javascripts/manager.js index 861df04..561153d 100644 --- a/app/assets/javascripts/manager.js +++ b/app/assets/javascripts/manager.js @@ -245,8 +245,8 @@ function select_product_from_manager(input_id){ manager_prompt(p_product_refs_url,function(m_return){ - $('.p_product_ref_id_'+input_id).val(m_return.id); - $('.p_product_ref_name_'+input_id).val(m_return.name); + $('#p_product_ref_id_'+input_id).val(m_return.id); + $('#p_product_ref_name_'+input_id).val(m_return.name); }); diff --git a/app/assets/javascripts/nested_fields.coffee b/app/assets/javascripts/nested_fields.coffee index c589739..c0a6ca7 100644 --- a/app/assets/javascripts/nested_fields.coffee +++ b/app/assets/javascripts/nested_fields.coffee @@ -10,9 +10,11 @@ if $(link).closest("p").next("." + association + "_form").length > 0 form_element = $(link).closest("p").next("." + association + "_form") - else + else if $(link).closest("p").prev("." + association + "_form").length > 0 form_element = $(link).closest("p").prev("." + association + "_form") - + else + form_element = $(link).closest(".qi_field_wrapper").find("." + association + "_form") + form_element.append content_final $(".new_field").removeClass "new_field" diff --git a/app/views/admin/price_line_blocks/_form.html.haml b/app/views/admin/price_line_blocks/_form.html.haml index 20b07b9..8494cba 100644 --- a/app/views/admin/price_line_blocks/_form.html.haml +++ b/app/views/admin/price_line_blocks/_form.html.haml @@ -56,12 +56,23 @@ =content_for :price_lines do - .row - .price_lines_form.col-11.row - =f.semantic_fields_for :price_lines do |f| - =render :partial => "admin/price_lines/form", :locals => {:form => f} + %div{:style=>"padding:0 30px;"} + .row.qi_field_wrapper + %table{:style => "width:100%;border-collapse:separate;"} + %thead + %tr + %th + %th Produit + %th{:style => "width:200px;"} Prix + %th + %th{:style => "width:100px;"} Qté + %th TVA + %th + %tbody.price_lines_form + =f.semantic_fields_for :price_lines do |f| + =render :partial => "admin/price_lines/form", :locals => {:form => f} - %p.col-1= link_to_add_fields ic("plus-circle") + " ligne", f, :price_lines, {:class => "btn btn-primary p-2", tabindex: 10, style: "position: sticky; top: 100px"} + %p{:style=>"padding-top:10px;"}= link_to_add_fields ic("plus-circle") + " ligne", f, :price_lines, {:class => "btn btn-primary p-2", tabindex: 10, style: "position: sticky; top: 100px"} -if current_admin.has_permission?("payments") diff --git a/app/views/admin/price_lines/_form.html.haml b/app/views/admin/price_lines/_form.html.haml index 728e663..48b670c 100644 --- a/app/views/admin/price_lines/_form.html.haml +++ b/app/views/admin/price_lines/_form.html.haml @@ -1,54 +1,63 @@ +%tr.qi_pannel.qi_plain.padding.price_line_form.col-12.field{:style =>"border-left:4px solid gray;margin-bottom:10px;padding-left:5px;"} -.qi_pannel.qi_plain.padding.price_line_form.col-12.field{:style =>"border-left:4px solid gray;margin-bottom:10px;padding-left:5px;"} - = form.input :ct_title, :label => "Designation personnalisée : " if @avoir - %table - %tr - %td{:class => ("error has-error" if form.object.errors[:p_product_ref_id].size > 0 )} - .take.mr-1 - =ic :arrows - %td - - = form.input :ct_title, :label => "Designation personnalisée : " if @avoir - -key = SecureRandom.hex(6) - %label.ml-3.mr-2 Produit : - %td - %input.p_product_ref_autocomplete_input.form-control{:type => "text", tabindex: 1, autofocus: true, :value => ("#{form.object.p_product_ref.ref} #{form.object.p_product_ref.cc_name}" if form.object.p_product_ref), :class => "p_product_ref_name_#{key}"} - - - = form.hidden_field :p_product_ref_id, :class => "p_product_ref_id p_product_ref_id_#{key}" - %td - =link_to ic(:search), "#", class: "ml-2",:onclick => "select_product_from_manager('#{key}');return false;" + + %td{:style => "padding-left:10px;", :class => ("error has-error" if form.object.errors[:p_product_ref_id].size > 0 )} + .take.mr-1 + =ic :arrows + %td{:style => "white-space: nowrap;"} + + + + .input-group + %input.p_product_ref_autocomplete_input.form-control{:type => "text", :style => "", tabindex: 1, autofocus: true, :value => ("#{form.object.p_product_ref.member_label}" if form.object.p_product_ref), :class => "p_product_ref_name"} + + + + + .input-group-append + =link_to "#", class: "btn btn-dark",:onclick => "key=genRanHex(12);select_product_from_manager(key);$(this).closest('tr').find('.p_product_ref_id').attr('id', 'p_product_ref_id_'+key);$(this).closest('tr').find('.p_product_ref_name').attr('id', 'p_product_ref_name_'+key);return false;" do + =ic(:search) - :javascript - var p_product_refs_url = "#{admin_p_product_refs_path(:manager => true)}" + + + + + = form.hidden_field :p_product_ref_id, :class => "p_product_ref_id" + + + + + :javascript + var p_product_refs_url = "#{admin_p_product_refs_path(:manager => true)}" - -form.object.forced_price = true if form.object.ct_u_price_ht + -form.object.forced_price = true if form.object.ct_u_price_ht - -if form.object.forced_price and form.object.p_product_ref - %td - .mx-2 - .form-inline - =qi_js_field_price_line_form(form, :price_line, :price_u_ht, :label => "Prix U HT :", label_class: "mr-1", :value => form.object.th_price_u_ht) - -else - %td - .mx-2 - .form-inline - =qi_js_field_price_line_form(form, :price_line, :price_u_ht, :label => "Prix U HT :", label_class: "mr-1") - %td - .form-inline.mr-2{:style => ("display:none;" if !current_admin or !current_admin.has_permission?("customer-sheets-personalised-price"))} - = form.input :forced_price, :label => "Prix personnalisé ?", :as => :boolean, :input_html => {:class => "form-inline input_price_line_forced_price"} - .forced_price_wrapper.mx-2{:style => ("display:none;" if !form.object.forced_price)}= form.input :ct_u_price_ht, :label => false, :input_html => {:class => "input_price_line_ct_u_price_ht"} - %td - .mx-2.form-inline - = form.input :qte, :label => "qte :", :input_html => {:class => "input_price_line_qte form-control mx-2", tabindex: 1} - - %td + -if form.object.forced_price and form.object.p_product_ref + %td + .mx-2 .form-inline - %label.mx-2 Taux de TVA : - =select_tag :tva_account_id, options_from_collection_for_select(TvaRate.where(:accounting_zone_id => (@p_customer ? @p_customer.accounting_zone_id : nil)).all, "id", "member_label", form.object.tva_account_id), :class => "input_price_line_tva_account_id form-control custom-select" #, :disabled => true - %td - .ml-4 - %span.destroy=link_to_remove_fields ic(:"trash-o"), form + =qi_js_field_price_line_form(form, :price_line, :price_u_ht, :label => false, label_class: "mr-1", :value => form.object.th_price_u_ht) + -else + %td + .mx-2 + .form-inline + =qi_js_field_price_line_form(form, :price_line, :price_u_ht, :label =>false, label_class: "mr-1") + %td + .form-inline.mr-2{:style => ("display:none;" if !current_admin or !current_admin.has_permission?("customer-sheets-personalised-price"))} + = form.input :forced_price, :label => "Prix personnalisé ?", :as => :boolean, :input_html => {:class => "form-inline input_price_line_forced_price"} + .forced_price_wrapper.mx-2{:style => ("display:none;" if !form.object.forced_price)}= form.input :ct_u_price_ht, :label => false, :input_html => {:class => "input_price_line_ct_u_price_ht"} + %td{:style => "width:100px;"} + + = form.input :qte, :label => false, :input_html => {:class => "input_price_line_qte form-control", tabindex: 1} + + %td + + + =form.input :ct_tva_account_id, :collection => options_from_collection_for_select(TvaRate.where(:accounting_zone_id => (@p_customer ? @p_customer.accounting_zone_id : nil)).all, "id", "member_label", form.object.tva_account_id), :as => :select ,:label => false, :include_blank => false , :input_html => {:class => "input_price_line_tva_account_id form-control custom-select"} + + %td + + %span.destroy=link_to_remove_fields ic(:"trash-o"), form @@ -57,50 +66,58 @@ = form.hidden_field :position, :class => "price_line_position_input" - :javascript - $('.p_product_ref_autocomplete_input').focus() - $( function() { - $('.p_product_ref_autocomplete_input').autocomplete({ - source: function( request, response ) { - $.ajax( { - url: "/admin/p_product_refs/autocomplete.json", - dataType: "json", - data: { - search: request.term, - p_customer_id: $(".p_customer_id").val() - }, - success: function(data){ - arr = jQuery.map( data, function( item ) { - return { - label: item.member_label, - value: item.member_label, - id: item.id - } - }); - response(arr) - } - }); - }, - minLength: 2, - select: function( event, ui ) { - $(this).next(".p_product_ref_id").val(ui.item.id) - form = $(this).closest(".price_line_form") - $.ajax( { - url: "/admin/p_product_refs/"+ui.item.id+"/get_infos.json", - dataType: "json", - data: { - type: "price", - qte: form.find(".input_price_line_qte").val(), - p_customer_id: $(".p_customer_id").val() - }, - success: function (data) { - form.find(".input_price_line_price_u_ht").val(data.price); - form.find(".input_price_line_tva_account_id").val(data.tva_account_id); - form.find(".input_price_line_tva_account_value").val(data.tva_account_value); - form.find(".input_price_line_weight_u").val(data.weight); - } - }); - //return false - } - }); +:javascript + $('.p_product_ref_autocomplete_input').focus() + $( function() { + $('.p_product_ref_autocomplete_input').autocomplete({ + source: function( request, response ) { + $.ajax( { + url: "/admin/p_product_refs/autocomplete.json", + dataType: "json", + data: { + search: request.term, + p_customer_id: $(".p_customer_id").val() + }, + success: function(data){ + arr = jQuery.map( data, function( item ) { + return { + label: item.member_label, + value: item.member_label, + id: item.id + } + }); + response(arr) + } + }); + }, + minLength: 2, + select: function( event, ui ) { + $(this).next(".p_product_ref_id").val(ui.item.id) + form = $(this).closest(".price_line_form") + $.ajax( { + url: "/admin/p_product_refs/"+ui.item.id+"/get_infos.json", + dataType: "json", + data: { + type: "price", + qte: form.find(".input_price_line_qte").val(), + p_customer_id: $(".p_customer_id").val() + }, + success: function (data) { + form.find(".input_price_line_price_u_ht").val(data.price); + form.find(".input_price_line_tva_account_id").val(data.tva_account_id); + form.find(".input_price_line_tva_account_value").val(data.tva_account_value); + form.find(".input_price_line_weight_u").val(data.weight); + } + }); + //return false + } }); + }); + + +:scss + .price_line_form{ + .form-group{ + margin-bottom:0;} + + } \ No newline at end of file