This commit is contained in:
Nicolas Bally 2020-07-03 10:19:55 +02:00
parent 947d5d8439
commit d4c76bafa8
73 changed files with 1583 additions and 328 deletions

View File

@ -21,7 +21,7 @@ class Admin::MOdrBrandsController < ApplicationController
end
def new
@m_odr_brand = MOdrBrand.new
@m_odr_brand = MOdrBrand.new(:m_odr_id => params[:m_odr_id])
end

View File

@ -21,7 +21,7 @@ class Admin::MOdrFileTypesController < ApplicationController
end
def new
@m_odr_file_type = MOdrFileType.new
@m_odr_file_type = MOdrFileType.new(:m_odr_id => params[:m_odr_id])
end

View File

@ -21,7 +21,7 @@ class Admin::MOdrPlacesController < ApplicationController
end
def new
@m_odr_place = MOdrPlace.new
@m_odr_place = MOdrPlace.new(:m_odr_id => params[:m_odr_id])
end

View File

@ -30,7 +30,7 @@ class Admin::MOdrProductCatsController < ApplicationController
end
def new
@m_odr_product_cat = MOdrProductCat.new
@m_odr_product_cat = MOdrProductCat.new(:m_odr_id => params[:m_odr_id])
end

View File

@ -21,7 +21,7 @@ class Admin::MOdrProductsController < ApplicationController
end
def new
@m_odr_product = MOdrProduct.new
@m_odr_product = MOdrProduct.new(:m_odr => MOdr.find(params[:m_odr_id]))
end

View File

@ -21,7 +21,7 @@ class Admin::MOdrTrackersController < ApplicationController
end
def new
@m_odr_tracker = MOdrTracker.new
@m_odr_tracker = MOdrTracker.new(:m_odr_id => params[:m_odr_id])
end

View File

@ -20,6 +20,11 @@ class Admin::MOdrsController < ApplicationController
end
def stats
@m_odr = MOdr.find(params[:id])
end
def new
@m_odr = MOdr.new

View File

@ -0,0 +1,76 @@
# -*- encoding : utf-8 -*-
class Admin::MailTypesController < ApplicationController
layout "admin"
before_action :auth_admin
before_action :admin_space
def admin_space
@admin_space = "preferences"
end
def index
@mail_types = MailType.all
@mail_types = sort_by_sorting(@mail_types, "slug ASC")
respond_to do |format|
format.html{
params[:search][:per_page] = params[:search][:per_page] || 100
per_page = params[:search][:per_page]
page = (params[:page] and params[:page] != "") ? params[:page] : 1
@mail_types = @mail_types.page(page).per(per_page)
}
end
end
def show
@mail_type = MailType.find(params[:id])
end
def new
@mail_type = MailType.new(:m_odr_id => params[:m_odr_id])
end
def edit
@mail_type = MailType.find(params[:id])
end
def create
@mail_type = MailType.new(params.require(:mail_type).permit!)
if @mail_type.save
else
render action: "new"
end
end
def update
@mail_type = MailType.find(params[:id])
if @mail_type.update_attributes(params.require(:mail_type).permit!)
else
render action: "edit"
end
end
def destroy
@mail_type = MailType.find(params[:id])
@mail_type.destroy
end
end

View File

@ -8,6 +8,8 @@ class MOdr < ApplicationRecord
belongs_to :social_image_file, :class_name => "ImageFile"
belongs_to :footer_image_file, :class_name => "ImageFile"
belongs_to :ba_image_file, :class_name => "ImageFile"
validates :p_customer, :presence => true

View File

@ -2,4 +2,17 @@ class MOdrBrand < ApplicationRecord
belongs_to :m_odr
has_many :m_odr_products
acts_as_sorting :fields => {
:name => {:name => "Nom", :reorder => true},
:start_at => {:name => "Date de début", :reorder => true},
:end_at => {:name => "Date de fin", :reorder => true},
:public_end => {:name => "Date de fin des envois", :reorder => true},
:actions => "Actions"
}
end

View File

@ -1,2 +1,14 @@
class MOdrFileType < ApplicationRecord
belongs_to :m_odr
acts_as_sorting :fields => {
:need_file => {:name => "Nécessaire ?", :reorder => true},
:name => {:name => "Nom", :reorder => true},
:actions => "Actions"
}
end

View File

@ -1,3 +1,10 @@
class MOdrPlace < ApplicationRecord
belongs_to :m_odr
acts_as_sorting :fields => {
:name => {:name => "Nom", :reorder => true},
:actions => "Actions"
}
end

View File

@ -6,6 +6,15 @@ class MOdrProduct < ApplicationRecord
has_many :m_odr_product_remises, :dependent => :destroy
accepts_nested_attributes_for :m_odr_product_remises, :allow_destroy => true
acts_as_sorting :fields => {
:name => {:name => "Nom", :reorder => true},
:m_odr_brand => {:name => "Marque", :reorder => true},
:m_odr_product_remises => {:name => "Remises"},
:actions => "Actions"
}
def member_label
if self.m_odr_brand

View File

@ -1,3 +1,9 @@
class MOdrProductCat < ApplicationRecord
belongs_to :m_odr
acts_as_sorting :fields => {
:name => {:name => "Nom", :reorder => true},
:actions => "Actions"
}
end

View File

@ -3,6 +3,14 @@ class MOdrTracker < ApplicationRecord
acts_as_sorting :fields => {
:name => {:name => "Nom", :reorder => true},
:token => {:name => "URL", :reorder => true},
:actions => "Actions"
}
before_create { generate_token() }
def generate_token()

View File

@ -3,5 +3,16 @@ class MailType < ApplicationRecord
belongs_to :mail_type_reference, :class_name => "MailType"
acts_as_sorting :fields => {
:slug => {:name => "Réf", :reorder => true},
:default_title => {:name => "Sujet", :reorder => true},
:default_message => {:name => "Contenu", :reorder => true},
:actions => "Actions",
}
accepts_nested_attributes_for :mail_contents
end

View File

@ -1,15 +1,14 @@
.m_odr_brand_form.field
= form.input :name, :label => "Nom :"
Dates si différentes des dates générales :
.row.qi_cancel_margins
.col-sm-4
= form.input :start_at, :label => "Date de début :" , :as => :date
.col-sm-4
= form.input :end_at, :label => "Date de fin :" , :as => :date
.col-sm-4
= form.input :public_end, :label => "Date de fin des envois :" , :as => :date
=semantic_form_for [:admin, @m_odr_brand], :remote => true do |form|
=link_to_remove_fields ic(:"trash-o"), form
.content
=form.hidden_field :m_odr_id
= form.input :name, :label => "Nom :"
Dates si différentes des dates générales :
.row.qi_cancel_margins
.col-sm-4
= form.input :start_at, :label => "Date de début :" , :as => :date
.col-sm-4
= form.input :end_at, :label => "Date de fin :" , :as => :date
.col-sm-4
= form.input :public_end, :label => "Date de fin des envois :" , :as => :date
.actions=form.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -1,11 +1,14 @@
%tr#m_odr_brand_row{:id => m_odr_brand.id}
%td= m_odr_brand.name
%td= m_odr_brand.ref
%td= m_odr_brand.image_file_id
%td= m_odr_brand.m_odr_id
-tr = {}
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_brand], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_brand_path(m_odr_brand), :remote => true
= link_to i(:eye), admin_m_odr_brand_path(m_odr_brand), :remote => true
-tr[:actions] = capture do
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_brand], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_brand_path(m_odr_brand), :remote => true
=render :partial => "qi/qi_ordered_table_object", :locals => {:tr => tr, :object => m_odr_brand}

View File

@ -1 +1 @@
$('#m_odr_brand_<%= @m_odr_brand.id %>').remove();
$('#m_odr_brand_row_<%= @m_odr_brand.id %>').remove();

View File

@ -1,7 +1,10 @@
.m_odr_file_type_form.field
=semantic_form_for [:admin, @m_odr_file_type], :remote => true do |form|
.content
=form.hidden_field :m_odr_id
=form.input :name, :label => "Nom :"
=form.input :need_file, :label => "Nécessaire ?"
=link_to_remove_fields ic(:"trash-o"), form
.actions=form.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -1,9 +1,17 @@
%tr#m_odr_file_type_row{:id => m_odr_file_type.id}
%td= m_odr_file_type.name
%td= m_odr_file_type.needed
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_file_type], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_file_type_path(m_odr_file_type), :remote => true
= link_to i(:eye), admin_m_odr_file_type_path(m_odr_file_type), :remote => true
%tr#m_odr_file_type_row{:id => m_odr_file_type.id}
-tr = {}
-tr[:actions] = capture do
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_file_type], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_file_type_path(m_odr_file_type), :remote => true
=render :partial => "qi/qi_ordered_table_object", :locals => {:tr => tr, :object => m_odr_file_type}

View File

@ -1 +1 @@
$('#m_odr_file_type_<%= @m_odr_file_type.id %>').remove();
$('#m_odr_file_type_row_<%= @m_odr_file_type.id %>').remove();

View File

@ -1,18 +1,6 @@
.m_odr_place_form.field
=semantic_form_for [:admin, @m_odr_place], :remote => true do |form|
= form.input :name, :label => "Nom du magasin :"
=# f.input :enseigne, :label => "enseigne :"
=# f.input :city, :label => "city :"
=# f.input :cp, :label => "cp :"
=# f.input :departement, :label => "departement :"
=# f.input :departement_nbr, :label => "departement_nbr :"
=# f.input :responsable, :label => "responsable :"
=# f.input :tel, :label => "tel :"
=# f.input :email, :label => "email :"
=# f.input :m_odr, :label => "m_odr :"
=link_to_remove_fields ic(:"trash-o"), form
.content
=form.hidden_field :m_odr_id
= form.input :name, :label => "Nom du magasin :"
.actions=form.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -1,17 +1,14 @@
%tr#m_odr_place_row{:id => m_odr_place.id}
%td= m_odr_place.name
%td= m_odr_place.enseigne
%td= m_odr_place.city
%td= m_odr_place.cp
%td= m_odr_place.departement
%td= m_odr_place.departement_nbr
%td= m_odr_place.responsable
%td= m_odr_place.tel
%td= m_odr_place.email
%td= m_odr_place.m_odr_id
-tr = {}
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_place], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_place_path(m_odr_place), :remote => true
= link_to i(:eye), admin_m_odr_place_path(m_odr_place), :remote => true
-tr[:actions] = capture do
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_place], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_place_path(m_odr_place), :remote => true
=render :partial => "qi/qi_ordered_table_object", :locals => {:tr => tr, :object => m_odr_place}

View File

@ -1 +1 @@
$('#m_odr_place_<%= @m_odr_place.id %>').remove();
$('#m_odr_place_row_<%= @m_odr_place.id %>').remove();

View File

@ -1,7 +1,7 @@
.m_odr_product_cat_form.field
=semantic_form_for [:admin, @m_odr_product_cat], :remote => true do |form|
= form.input :name, :label => "Nom :"
.content
=form.hidden_field :m_odr_id
= form.input :name, :label => "Nom :"
=link_to_remove_fields ic(:"trash-o"), form
.actions=form.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -1,13 +1,14 @@
%tr#m_odr_product_cat_row{:id => m_odr_product_cat.id}
-tr = {}
-tr[:actions] = capture do
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_product_cat], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_product_cat_path(m_odr_product_cat), :remote => true
= link_to i(:eye), admin_m_odr_product_cat_path(m_odr_product_cat), :remote => true
=render :partial => "qi/qi_ordered_table_object", :locals => {:tr => tr, :object => m_odr_product_cat}
=render :partial => "qi/qi_ordered_table_object", :locals => {:tr => tr, :object => m_odr_product_cat}

View File

@ -1 +1 @@
$('#m_odr_product_cat_<%= @m_odr_product_cat.id %>').remove();
$('#m_odr_product_cat_row_<%= @m_odr_product_cat.id %>').remove();

View File

@ -2,4 +2,4 @@
%td= form.input :qte, :label => "Qté :"
%td= form.input :amount, :label => "Montant :"
%td.actions=link_to_remove_fields ic(:"trash-o"), form
%td=link_to_remove_fields ic(:"trash-o"), form

View File

@ -1,16 +1,22 @@
.m_odr_product_form.field
= form.input :name, :label => "Nom :"
= form.input :m_odr_brand, :label => "Marque :" , :collection => @m_odr.m_odr_brands, :include_blank => false
=semantic_form_for [:admin, @m_odr_product], :remote => true do |form|
.content
= form.hidden_field :m_odr_id
= form.input :name, :label => "Nom :"
= form.input :m_odr_brand, :label => "Marque :" , :collection => @m_odr_product.m_odr.m_odr_brands, :include_blank => false
%table.m_odr_product_remises_form
%table.m_odr_product_remises_form
=form.semantic_fields_for :m_odr_product_remises do |form|
=render :partial => "admin/m_odr_product_remises/form", :locals => {:form => form}
=form.semantic_fields_for :m_odr_product_remises do |form|
=render :partial => "admin/m_odr_product_remises/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter une remise", form, :m_odr_product_remises
%p= link_to_add_fields ic(:plus)+" Ajouter une remise", form, :m_odr_product_remises
=link_to_remove_fields ic(:"trash-o"), form
.actions=form.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -1,11 +1,14 @@
%tr#m_odr_product_row{:id => m_odr_product.id}
%td= m_odr_product.name
%td= m_odr_product.ref
%td= m_odr_product.ean
%td= m_odr_product.m_odr_brand_id
-tr = {}
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_product], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_product_path(m_odr_product), :remote => true
= link_to i(:eye), admin_m_odr_product_path(m_odr_product), :remote => true
-tr[:actions] = capture do
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_product], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_product_path(m_odr_product), :remote => true
=render :partial => "qi/qi_ordered_table_object", :locals => {:tr => tr, :object => m_odr_product}

View File

@ -1,5 +1,7 @@
.m_odr_place_form.field
=semantic_form_for [:admin, @m_odr_tracker], :remote => true do |form|
= form.input :name, :label => "Nom du tracker :"
=link_to_remove_fields ic(:"trash-o"), form
.content
=form.hidden_field :m_odr_id
= form.input :name, :label => "Nom :"
.actions=form.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -1,10 +1,22 @@
%tr#m_odr_tracker_row{:id => m_odr_tracker.id}
%td= m_odr_tracker.name
%td= m_odr_tracker.token
%td= m_odr_tracker.m_odr_id
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_tracker], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_tracker_path(m_odr_tracker), :remote => true
= link_to i(:eye), admin_m_odr_tracker_path(m_odr_tracker), :remote => true
%tr#m_odr_tracker_row{:id => m_odr_tracker.id}
-tr = {}
-tr[:token] = capture do
%td
=link_to public_m_odr_path(m_odr_tracker.m_odr.slug, :t => m_odr_tracker.token, :lang => nil), public_m_odr_path(m_odr_tracker.m_odr.slug, :t => m_odr_tracker.token, :lang => nil), :target => "_blank"
-tr[:actions] = capture do
%td.actions
= link_to i(:"trash-o"), [:admin, m_odr_tracker], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_tracker_path(m_odr_tracker), :remote => true
=render :partial => "qi/qi_ordered_table_object", :locals => {:tr => tr, :object => m_odr_tracker}

View File

@ -1 +1 @@
$('#m_odr_tracker_<%= @m_odr_tracker.id %>').remove();
$('#m_odr_tracker_row_<%= @m_odr_tracker.id %>').remove();

View File

@ -100,89 +100,24 @@
= f.input :bic, :label => "Bic :"
= f.input :bank_name, :label => "Nom du propriétaire du compte :"
= f.input :bank_subject, :label => "Libellé virement :"
.qi_row
.qi_pannel.qi_plain.padding
Fichiers demandés :
%hr
.m_odr_file_types_form
=f.semantic_fields_for :m_odr_file_types do |form|
=render :partial => "admin/m_odr_file_types/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter un fichier demandé", f, :m_odr_file_types
.qi_row
.qi_pannel.qi_plain.padding
Marques concernées :
%hr
.m_odr_brands_form
=f.semantic_fields_for :m_odr_brands do |form|
=render :partial => "admin/m_odr_brands/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter ue marque", f, :m_odr_brands
.qi_row
.qi_pannel.qi_plain.padding
Catégories produits :
%hr
.m_odr_product_cats_form
=f.semantic_fields_for :m_odr_product_cats do |form|
=render :partial => "admin/m_odr_product_cats/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter une catégorie", f, :m_odr_product_cats
.qi_row
.qi_pannel.qi_plain.padding
Produits concernés :
%hr
.m_odr_products_form
=f.semantic_fields_for :m_odr_products do |form|
=render :partial => "admin/m_odr_products/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter un produit", f, :m_odr_products
.qi_row
.qi_pannel.qi_plain.padding
Points de ventes :
%hr
.m_odr_places_form
=f.semantic_fields_for :m_odr_places do |form|
=render :partial => "admin/m_odr_places/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter un point de vente", f, :m_odr_places
.qi_row
.qi_pannel.qi_plain.padding
Trackers :
%hr
.m_odr_trackers_form
=f.semantic_fields_for :m_odr_trackers do |form|
=render :partial => "admin/m_odr_trackers/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter un tracker", f, :m_odr_trackers
.qi_row
.qi_pannel.qi_plain.padding
= f.input :email_from, :label => "Email d'envoi :"
Mails types :
%hr
.mail_types_form
=f.semantic_fields_for :mail_types do |form|
=render :partial => "admin/mail_types/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter un mail type", f, :mail_types
Bons d'achats :
= f.input :ba_image_file_id, :label => "Fond du bon d'achat :" , :as => :qi_image_select
= f.input :ba_generation, :label => "Générer un bon d'achat ?"
= f.input :ba_width, :label => "Largeur du bon d'achat (px) :"
= f.input :ba_height, :label => "Hauteur du bon d'achat (px) :"
= f.input :ba_name_x, :label => "Position X du nom (px) :"
= f.input :ba_name_y, :label => "Position Y du nom (px) :"
= f.input :ba_place_x, :label => "Position X du revendeur (px) :"
= f.input :ba_place_y, :label => "Position Y du revendeur (px) :"
.large_actions

View File

@ -18,5 +18,7 @@
%td.actions
=# link_to i(:"trash-o"), [:admin, m_odr], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_m_odr_path(m_odr), :remote => false
= link_to i(:"bar-chart"), admin_m_odr_path(m_odr), :remote => false
= link_to i(:eye), admin_m_odr_path(m_odr), :remote => false
= link_to i(:"bar-chart"), stats_admin_m_odr_path(m_odr), :remote => false

View File

@ -1,126 +1,205 @@
.qi_header
.right{:style => "text-align:right;"}
= link_to i(:pencil), edit_admin_m_odr_path(@m_odr), :remote => false
%h1
ODR
%span
Statistiques
Détail d'une ODR
%span
=@m_odr.p_customer.show_name
="-"
=@m_odr.name
.qi_row
.qi_pannel.qi_plain.padding
%div{:style => "overflow:auto;"}
-@m_odr_reps = @m_odr.m_odr_reps
%table.table.table-striped.table-hover.table-bordered
%tr
%th
%th{:rowspan => 2} Nombre de participation
-@m_odr_reps.group(:state).each do |state|
%th{:style => "font-weight:normal", :colspan => 5+(@m_odr.m_odr_brands.count*2)+(@m_odr.m_odr_products.count*2)}
Etat :
=state_helper state.state
%table.table.table-striped.table-hover.table-bordered
%tr
%td Client
%td=@m_odr.p_customer.show_name
%tr
%th
%tr
%td Nom
%td=@m_odr.name
%tr
%td Url
%td=link_to public_m_odr_path(@m_odr.slug, :lang => nil), public_m_odr_path(@m_odr.slug, :lang => nil), :target => "_blank"
%tr
%td Description
%td=simple_format @m_odr.description
%tr
%td Texte de lancement
%td=@m_odr.landing_text
-@m_odr_reps.group(:state).each do |state|
%th Nbr participation
%th Nbr pneus
-@m_odr_reps.group(:qte).order(:qte).each do |qte|
%th
Nbr part. avec
=qte.qte
pneus
-@m_odr.m_odr_brands.each do |m_odr_brand|
%th
=m_odr_brand.name
Nbr part.
%th
=m_odr_brand.name
Nbr pneus
-m_odr_brand.m_odr_products.each do |m_odr_product|
%th
=m_odr_product.name
Nbr part.
%th
=m_odr_product.name
Nbr pneus
%th Total remises
-m_odr_reps = @m_odr_reps
%tr
%td Général
%td=m_odr_reps.count
-@m_odr_reps.group(:state).each do |state|
%td
=m_odr_reps.where(:state => state.state).count
%td
=m_odr_reps.where(:state => state.state).sum(:qte)
-@m_odr_reps.group(:qte).order(:qte).each do |qte|
%th
=m_odr_reps.where(:state => state.state, :qte => qte.qte).count
-@m_odr.m_odr_brands.each do |m_odr_brand|
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_brand.m_odr_products.ids).count
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_brand.m_odr_products.ids).sum(:qte)
-m_odr_brand.m_odr_products.each do |m_odr_product|
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_product.id).count
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_product.id).sum(:qte)
%td.numeraire{:style => ("color:red;" if total = m_odr_reps.where(:state => state.state).sum(:cc_remise) and total == 0.0)}
=number_to_currency total
-nbr_participations_for_places = []
-nbr_pneus_for_places = []
-@m_odr_reps.group(:m_odr_place_id).joins(:m_odr_place).order("m_odr_places.name").each do |place|
-m_odr_reps = @m_odr_reps.where(:m_odr_place_id => place.m_odr_place_id)
%tr
%td=place.m_odr_place.name
%td=m_odr_reps.count
-@m_odr_reps.group(:state).each do |state|
%td
=p = m_odr_reps.where(:state => state.state).count
-nbr_participations_for_places << p if p > 0
%td
=q = m_odr_reps.where(:state => state.state).sum(:qte)
-nbr_pneus_for_places << q if p > 0
-@m_odr_reps.group(:qte).order(:qte).each do |qte|
%th
=m_odr_reps.where(:state => state.state, :qte => qte.qte).count
-@m_odr.m_odr_brands.each do |m_odr_brand|
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_brand.m_odr_products.ids).count
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_brand.m_odr_products.ids).sum(:qte)
-m_odr_brand.m_odr_products.each do |m_odr_product|
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_product.id).count
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_product.id).sum(:qte)
%td.numeraire{:style => ("color:red;" if total = m_odr_reps.where(:state => state.state).sum(:cc_remise) and total == 0.0)}
=number_to_currency total
.qi_row#tabs
.qi_pannel
%ul.nav.nav-tabs
-params[:tab] = params[:tab] || "m_odr_file_types"
=#%li{:class => ("active" if params[:tab] == "mail_hists")}=link_to "Historique des mails envoyés", "?tab=mail_hists"
- tabs = [["m_odr_file_types", "Fichiers demandés"],["m_odr_brands", "Marques concernées"],["m_odr_product_cats", "Catégories produit"],["m_odr_products", "Produits"],["m_odr_places", "Revendeurs"],["m_odr_trackers", "Trackers"],["mail_types", "Mails"]]
- tabs.each do |tab|
%li{:class => ("active" if params[:tab] == tab[0])}=link_to tab[1], "?tab=#{tab[0]}"
%p
Moyenne participation / point de vente avec participation :
=(nbr_participations_for_places.inject{ |sum, el| sum + el }.to_f / nbr_participations_for_places.size).round(2)
%p
Moyenne nbr pneus / point de vente avec participation :
=(nbr_pneus_for_places.inject{ |sum, el| sum + el }.to_f / nbr_pneus_for_places.size).round(2)
.qi_tab_content
-if params[:tab] == "m_odr_file_types"
#offres
.qi_tab_header
.right{:style => "text-align:right;"}
= link_to 'Ajouter', new_admin_m_odr_file_type_path(:m_odr => @m_odr.id), :class => "btn btn-primary", :remote => true
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@m_odr_file_types =@m_odr.m_odr_file_types
-@m_odr_file_types = sort_by_sorting(@m_odr_file_types, "created_at DESC")
-@m_odr_file_types = @m_odr_file_types.page(page).per(per_page)
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @m_odr_file_types}
-if params[:tab] == "m_odr_brands"
#offres
.qi_tab_header
.right{:style => "text-align:right;"}
= link_to 'Ajouter', new_admin_m_odr_brand_path(:m_odr_id => @m_odr.id), :class => "btn btn-primary", :remote => true
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@m_odr_brands =@m_odr.m_odr_brands
-@m_odr_brands = sort_by_sorting(@m_odr_brands, "created_at DESC")
-@m_odr_brands = @m_odr_brands.page(page).per(per_page)
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @m_odr_brands}
-if params[:tab] == "m_odr_product_cats"
#offres
.qi_tab_header
.right{:style => "text-align:right;"}
= link_to 'Ajouter', new_admin_m_odr_product_cat_path(:m_odr_id => @m_odr.id), :class => "btn btn-primary", :remote => true
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@m_odr_product_cats =@m_odr.m_odr_product_cats
-@m_odr_product_cats = sort_by_sorting(@m_odr_product_cats, "created_at DESC")
-@m_odr_product_cats = @m_odr_product_cats.page(page).per(per_page)
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @m_odr_product_cats}
-if params[:tab] == "m_odr_products"
#offres
.qi_tab_header
.right{:style => "text-align:right;"}
= link_to 'Ajouter', new_admin_m_odr_product_path(:m_odr_id => @m_odr.id), :class => "btn btn-primary", :remote => true
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@m_odr_products =@m_odr.m_odr_products
-@m_odr_products = sort_by_sorting(@m_odr_products, "created_at DESC")
-@m_odr_products = @m_odr_products.page(page).per(per_page)
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @m_odr_products}
-if params[:tab] == "m_odr_places"
#offres
.qi_tab_header
.right{:style => "text-align:right;"}
= link_to 'Ajouter', new_admin_m_odr_place_path(:m_odr_id => @m_odr.id), :class => "btn btn-primary", :remote => true
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@m_odr_places =@m_odr.m_odr_places
-@m_odr_places = sort_by_sorting(@m_odr_places, "created_at DESC")
-@m_odr_places = @m_odr_places.page(page).per(per_page)
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @m_odr_places}
-if params[:tab] == "m_odr_trackers"
#offres
.qi_tab_header
.right{:style => "text-align:right;"}
= link_to 'Ajouter', new_admin_m_odr_tracker_path(:m_odr_id => @m_odr.id), :class => "btn btn-primary", :remote => true
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@m_odr_trackers =@m_odr.m_odr_trackers
-@m_odr_trackers = sort_by_sorting(@m_odr_trackers, "created_at DESC")
-@m_odr_trackers = @m_odr_trackers.page(page).per(per_page)
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @m_odr_trackers}
-if params[:tab] == "mail_types"
#offres
.qi_tab_header
.right{:style => "text-align:right;"}
= link_to 'Ajouter', new_admin_mail_type_path(:m_odr_id => @m_odr.id), :class => "btn btn-primary", :remote => true
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@mail_types =@m_odr.mail_types
-@mail_types = sort_by_sorting(@mail_types, "created_at DESC")
-@mail_types = @mail_types.page(page).per(per_page)
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @mail_types}
-if params[:tab] == "mail_hists"
#offres
.qi_tab_header
.right{:style => "text-align:right;"}
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@mail_hists =@p_customer.mail_hists
-@mail_hists = sort_by_sorting(@mail_hists, "created_at DESC")
-@mail_hists = @mail_hists.page(page).per(per_page)
=#debug MailHist.qi_ordered_table_name
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @mail_hists}

View File

@ -0,0 +1,126 @@
.qi_header
%h1
ODR
%span
Statistiques
%span
=@m_odr.p_customer.show_name
="-"
=@m_odr.name
.qi_row
.qi_pannel.qi_plain.padding
%div{:style => "overflow:auto;"}
-@m_odr_reps = @m_odr.m_odr_reps
%table.table.table-striped.table-hover.table-bordered
%tr
%th
%th{:rowspan => 2} Nombre de participation
-@m_odr_reps.group(:state).each do |state|
%th{:style => "font-weight:normal", :colspan => 5+(@m_odr.m_odr_brands.count*2)+(@m_odr.m_odr_products.count*2)}
Etat :
=state_helper state.state
%tr
%th
-@m_odr_reps.group(:state).each do |state|
%th Nbr participation
%th Nbr pneus
-@m_odr_reps.group(:qte).order(:qte).each do |qte|
%th
Nbr part. avec
=qte.qte
pneus
-@m_odr.m_odr_brands.each do |m_odr_brand|
%th
=m_odr_brand.name
Nbr part.
%th
=m_odr_brand.name
Nbr pneus
-m_odr_brand.m_odr_products.each do |m_odr_product|
%th
=m_odr_product.name
Nbr part.
%th
=m_odr_product.name
Nbr pneus
%th Total remises
-m_odr_reps = @m_odr_reps
%tr
%td Général
%td=m_odr_reps.count
-@m_odr_reps.group(:state).each do |state|
%td
=m_odr_reps.where(:state => state.state).count
%td
=m_odr_reps.where(:state => state.state).sum(:qte)
-@m_odr_reps.group(:qte).order(:qte).each do |qte|
%th
=m_odr_reps.where(:state => state.state, :qte => qte.qte).count
-@m_odr.m_odr_brands.each do |m_odr_brand|
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_brand.m_odr_products.ids).count
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_brand.m_odr_products.ids).sum(:qte)
-m_odr_brand.m_odr_products.each do |m_odr_product|
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_product.id).count
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_product.id).sum(:qte)
%td.numeraire{:style => ("color:red;" if total = m_odr_reps.where(:state => state.state).sum(:cc_remise) and total == 0.0)}
=number_to_currency total
-nbr_participations_for_places = []
-nbr_pneus_for_places = []
-@m_odr_reps.group(:m_odr_place_id).joins(:m_odr_place).order("m_odr_places.name").each do |place|
-m_odr_reps = @m_odr_reps.where(:m_odr_place_id => place.m_odr_place_id)
%tr
%td=place.m_odr_place.name
%td=m_odr_reps.count
-@m_odr_reps.group(:state).each do |state|
%td
=p = m_odr_reps.where(:state => state.state).count
-nbr_participations_for_places << p if p > 0
%td
=q = m_odr_reps.where(:state => state.state).sum(:qte)
-nbr_pneus_for_places << q if p > 0
-@m_odr_reps.group(:qte).order(:qte).each do |qte|
%th
=m_odr_reps.where(:state => state.state, :qte => qte.qte).count
-@m_odr.m_odr_brands.each do |m_odr_brand|
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_brand.m_odr_products.ids).count
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_brand.m_odr_products.ids).sum(:qte)
-m_odr_brand.m_odr_products.each do |m_odr_product|
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_product.id).count
%td=m_odr_reps.where(:state => state.state, :m_odr_product_id => m_odr_product.id).sum(:qte)
%td.numeraire{:style => ("color:red;" if total = m_odr_reps.where(:state => state.state).sum(:cc_remise) and total == 0.0)}
=number_to_currency total
%p
Moyenne participation / point de vente avec participation :
=(nbr_participations_for_places.inject{ |sum, el| sum + el }.to_f / nbr_participations_for_places.size).round(2)
%p
Moyenne nbr pneus / point de vente avec participation :
=(nbr_pneus_for_places.inject{ |sum, el| sum + el }.to_f / nbr_pneus_for_places.size).round(2)

View File

@ -1,15 +1,26 @@
.m_odr_place_form.field
=form.input :slug, :label => "Référence mail :"
=semantic_form_for [:admin, @mail_type], :remote => true do |form|
.content
= form.hidden_field :m_odr_id
=# form.input :mail_type_cat, :label => "Catégorie mail type :"
=form.input :slug, :label => "Référence mail :"
-if form.object.mail_contents.size == 0
-LangSite.all.each do |ls|
-form.object.mail_contents.build(:lang_site_id => ls.id, :content_type => "text")
-if form.object.mail_contents.size == 0
-LangSite.all.each do |ls|
-form.object.mail_contents.build(:lang_site_id => ls.id, :content_type => "text")
=form.semantic_fields_for :mail_contents do |form|
= form.input :subject
= form.input :message
= form.hidden_field :lang_site_id
=form.semantic_fields_for :mail_contents do |form|
= form.input :subject
= form.input :message
= form.hidden_field :lang_site_id
.actions=form.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -0,0 +1,16 @@
%tr#mail_type_row{:id => mail_type.id}
-tr = {}
-tr[:actions] = capture do
%td.actions
= link_to i(:"trash-o"), [:admin, mail_type], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true
= link_to i(:pencil), edit_admin_mail_type_path(mail_type), :remote => true
= link_to i(:eye), admin_mail_type_path(mail_type), :remote => true
=render :partial => "qi/qi_ordered_table_object", :locals => {:tr => tr, :object => mail_type}

View File

@ -0,0 +1,2 @@
$('#mail_types_rows').prepend("<%= escape_javascript(render(@mail_type))%>");
close_pane_hover();

View File

@ -0,0 +1 @@
$('#mail_type_row_<%= @mail_type.id %>').remove();

View File

@ -0,0 +1 @@
show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",700,900);

View File

@ -0,0 +1,18 @@
.qi_header
.right= link_to ic(:plus)+' Ajouter', new_admin_mail_type_path(), :class => "btn btn-primary btn-ap-add", :remote => true
%h1
Mails
%span
Mails types
.qi_search_row
=form_tag "", :method => "get", :onsubmit => "" do
=render :partial => "qi/qi_ordered_table_search_footer", :locals => {:collection_object => @mail_types}
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @mail_types}

View File

@ -0,0 +1 @@
show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",700,900);

View File

@ -0,0 +1,10 @@
.qi_header
%h1
%span
.qi_row
.qi_pannel.qi_plain.padding
=debug @mail_type

View File

@ -0,0 +1,2 @@
$('#mail_type_row_<%= @mail_type.id %>').replaceWith("<%= escape_javascript(render(@mail_type))%>");
close_pane_hover();

View File

@ -1,6 +1,9 @@
%tr#odr_tracker_row{:id => odr_tracker.id}
%td= odr_tracker.name
%td= odr_tracker.token
%td
=link_to public_m_odr_path(m_odr.slug, :t => odr_tracker.odr_tracker.token, :lang => nil), public_m_odr_path(odr_tracker.m_odr.slug, :t => odr_tracker.token, :lang => nil), :target => "_blank"
%td.actions
= link_to i(:"trash-o"), [:admin, odr_tracker], method: :delete, data: { confirm: 'Voulez-vous vraiment supprimer cet enregistrement ? ' } , :remote => true

View File

@ -0,0 +1,9 @@
%div{:class => ("error has-error" if form.object.errors["#{field}_id".to_sym].size > 0 )}
%label=label
%input.p_fournisseur_autocomplete_input.form-control{:type => "text", :value => ("#{eval("form.object.#{field}.member_label")}" if eval("form.object.#{field}"))}
= form.hidden_field "#{field}_id".to_sym, :class => "#{field}_id"
=#=debug "#{form.object_name}[p_fournisseur_id]"
:javascript
qi_autocomplete('#{field}');

View File

@ -0,0 +1,273 @@
-qi_ordered_table_name = qi_ordered_table_collection.klass.to_s.tableize
-qi_ordered_table_model = qi_ordered_table_collection.klass
=render :partial => "qi/qi_ordered_table_head", :locals => {:qi_ordered_table_name => qi_ordered_table_name, :qi_ordered_table_model => qi_ordered_table_model}
-@qi_table_orders = @qi_table_orders || {}
-if current_admin
-if ap = current_admin.admin_preferences.where(:key => "sort_table_"+qi_ordered_table_name).first
-qi_ordered_table_personalised = ap.value
-if ap = current_admin.admin_preferences.where(:key => "sort_table_"+qi_ordered_table_name+"_nbr_col").first
-qi_ordered_table_nbr_col = ap.value
-else
-qi_ordered_table_nbr_col = 1
-else
-qi_ordered_table_personalised = session[:qi_sort_string][qi_ordered_table_name]
-qi_ordered_table_nbr_col = session[:qi_sort_string][qi_ordered_table_name+"_nbr_col"] || 1
%span.qi_ordered_table_column{:onclick => "$(this).next('.qi_ordered_table_sort_select_wrapper').toggle();"}
=ic :columns
.qi_ordered_table_sort_select_wrapper{:style => "display:none;"}
=form_tag request.url, :method => "get", :onsubmit => "", :remote => false do
=hidden_field_tag "qi_sort_string[class]",qi_ordered_table_name
=hidden_field_tag "qi_sort_string[list]", "", :class => "qi_sort_string"
.qi_ordered_table_sort_select
-my_keys = []
-@qi_table_orders[qi_ordered_table_name.to_sym].each do |key, value|
.qi_order_item{:"data-ref" => "#{key}", :class => "active", :onclick => "$(this).toggleClass('active');"}
-if value.instance_of? Hash
=value[:name]
-else
=value
-my_keys << key
-qi_ordered_table_collection.klass.qi_table_order.each do |key, value|
-if !my_keys.include?(key)
.qi_order_item{:"data-ref" => "#{key}", :onclick => "$(this).toggleClass('active');"}
-if value.instance_of? Hash
=value[:name]
-else
=value
%hr{:style => "margin:3px 0;"}
-if true
Colonnes fixes :
=select_tag "qi_sort_string[nbr_colonnes]", options_for_select([0,1,2,3], qi_ordered_table_nbr_col)
=link_to "Mettre à jour", "#", :class => "btn btn-primary update_table_order_link"
:scss
.qi_ordered_table_column{
position:absolute;
color:rgba(0,0,0,0.2);
font-size:1.2em;
padding-top:3px;
padding-left:10px;
cursor:pointer;
&:hover{
color:rgba(0,0,0,0.6);
}
}
.qi_ordered_table_sort_select_wrapper{
background:rgba(white, 0.98);
box-shadow:0 0 10px rgba(0,0,0,0.2);
width:auto;
position:absolute;
margin-left:15px;
margin-top:25px;
z-index:5;
padding:5px 10px;
.qi_order_item{
padding:2px 0;
cursor:pointer;
}
.active{
font-weight:bold;
}
}
:coffeescript
$(".update_table_order_link").click ->
r = []
$(this).closest('.qi_ordered_table_sort_select_wrapper').find(".qi_order_item").each ->
if $(this).hasClass("active")
r.push $(this).data("ref")
$(this).closest("form").find(".qi_sort_string").val(r.join(','))
$.ajax
type: "GET",
url: "/",
data: $(this).closest("form").serialize(),
success: ->
location.reload()
$( ".qi_ordered_table_sort_select" ).sortable
axis: "y"
.qi_pannel.padding.new_table_container
.table-slider
.inner
<form class="range-field">
<input type="range" min="0" max="100" step="0.1" class="range" value="0" />
</form>
.table-area
.table-area-inner
.freezeTable
%table.table.table-striped.table-hover.table-bordered.data_table
%thead.header
%tr
-@qi_table_orders[qi_ordered_table_name.to_sym].each do |key, value|
-if value.instance_of? Hash
-if value[:reorder]
-sort_name = value[:sort_name] ? value[:sort_name] : key
%th=raw sort_link sort_name.to_s, value[:name]
-else
%th=raw value[:name]
-else
%th=raw value
=#sort_link "code", "Code"
-if false
%th
%tbody{:id => "#{qi_ordered_table_name}_rows"}
=render qi_ordered_table_collection
.qi_pagination
= paginate qi_ordered_table_collection #, :remote => true
:scss
.freezeTable{
overflow:auto;
}
.table-slider{
position:fixed;
bottom:0;
width:200px;
right:0;
z-index:2;
background:rgba(black,0.3);
padding:10px 20px;
padding-left:20px;
border-radius:40px 0 0 0;
opacity:0.4;
&:hover{
opacity:1;
background:rgba(black,0.7);
box-shadow:0 0 5px rgba(black,0.2);
}
}
-if qi_ordered_table_nbr_col == 0.to_s
:javascript
resize();
$('.freezeTable').freezeTable({fixedNavbar:'#qi_header_wrapper', freezeColumn: false});
-else
:javascript
resize();
$('.freezeTable').freezeTable({columnNum:#{qi_ordered_table_nbr_col},fixedNavbar:'#qi_header_wrapper'});
:coffeescript
#mousemove
lastScrollLeft = 0
$(".freezeTable").scroll ->
#alert("t")
documentScrollLeft = $(this).scrollLeft()
if (lastScrollLeft != documentScrollLeft)
lastScrollLeft = documentScrollLeft
size = ($(this).find(".table").outerWidth() - $(this).outerWidth())
value = ( $(this).scrollLeft() / size)*100
$(this).closest(".new_table_container").find(".range").val(value)
$(".freezeTable").each ->
freeze = $(this)
$("document").on "scroll", ->
if ($(this).scrollTop() < freeze.offset[0] + freeze.outerHeight())
freeze.closest(".new_table_container").find(".table-slider").show()
else
freeze.closest(".new_table_container").find(".table-slider").hide()
$(".range").on 'input change mousemove', ->
freeze = $(this).closest(".new_table_container").find(".freezeTable")
size = (freeze.find(".table").outerWidth() - freeze.outerWidth())
value = size*($(this).val() / 100)
freeze.scrollLeft(value);
=#1

View File

@ -0,0 +1,177 @@
-qi_ordered_table_name = qi_ordered_table_collection.klass.to_s.tableize
-qi_ordered_table_model = qi_ordered_table_collection.klass
=render :partial => "qi/qi_ordered_table_head", :locals => {:qi_ordered_table_name => qi_ordered_table_name, :qi_ordered_table_model => qi_ordered_table_model}
-@qi_table_orders = @qi_table_orders || {}
-if current_admin
-if ap = current_admin.admin_preferences.where(:key => "sort_table_"+qi_ordered_table_name).first
-qi_ordered_table_personalised = ap.value
-if ap = current_admin.admin_preferences.where(:key => "sort_table_"+qi_ordered_table_name+"_nbr_col").first
-qi_ordered_table_nbr_col = ap.value
-else
-qi_ordered_table_nbr_col = 1
-else
-qi_ordered_table_personalised = session[:qi_sort_string][qi_ordered_table_name]
-qi_ordered_table_nbr_col = session[:qi_sort_string][qi_ordered_table_name+"_nbr_col"] || 1
%span.qi_ordered_table_column{:onclick => "$(this).next('.qi_ordered_table_sort_select_wrapper').toggle();"}
=ic :columns
.qi_ordered_table_sort_select_wrapper{:style => "display:none;"}
=form_tag request.url, :method => "get", :onsubmit => "", :remote => false do
=hidden_field_tag "qi_sort_string[class]",qi_ordered_table_name
=hidden_field_tag "qi_sort_string[list]", "", :class => "qi_sort_string"
.qi_ordered_table_sort_select
-my_keys = []
-@qi_table_orders[qi_ordered_table_name.to_sym].each do |key, value|
.qi_order_item{:"data-ref" => "#{key}", :class => "active", :onclick => "$(this).toggleClass('active');"}
-if value.instance_of? Hash
=value[:name]
-else
=value
-my_keys << key
-qi_ordered_table_collection.klass.qi_table_order.each do |key, value|
-if !my_keys.include?(key)
.qi_order_item{:"data-ref" => "#{key}", :onclick => "$(this).toggleClass('active');"}
-if value.instance_of? Hash
=value[:name]
-else
=value
%hr{:style => "margin:3px 0;"}
-if false
Colonnes fixes :
=select_tag "qi_sort_string[nbr_colonnes]", options_for_select([0,1,2,3], qi_ordered_table_nbr_col)
=link_to "Mettre à jour", "#", :class => "btn btn-primary update_table_order_link"
:scss
.qi_ordered_table_column{
position:absolute;
color:rgba(0,0,0,0.2);
font-size:1.2em;
padding-top:3px;
padding-left:10px;
cursor:pointer;
&:hover{
color:rgba(0,0,0,0.6);
}
}
.qi_ordered_table_sort_select_wrapper{
background:rgba(white, 0.98);
box-shadow:0 0 10px rgba(0,0,0,0.2);
width:auto;
position:absolute;
margin-left:15px;
margin-top:25px;
z-index:5;
padding:5px 10px;
.qi_order_item{
padding:2px 0;
cursor:pointer;
}
.active{
font-weight:bold;
}
}
:coffeescript
$(".update_table_order_link").click ->
r = []
$(this).closest('.qi_ordered_table_sort_select_wrapper').find(".qi_order_item").each ->
if $(this).hasClass("active")
r.push $(this).data("ref")
$(this).closest("form").find(".qi_sort_string").val(r.join(','))
$.ajax
type: "GET",
url: "/",
data: $(this).closest("form").serialize(),
success: ->
location.reload()
$( ".qi_ordered_table_sort_select" ).sortable
axis: "y"
.qi_pannel.padding.new_table_container
.table-area
.table-area-inner
.freezeTable
%table.table.table-striped.table-hover.table-bordered.data_table
%thead.header
%tr
-@qi_table_orders[qi_ordered_table_name.to_sym].each do |key, value|
-if value.instance_of? Hash
-if value[:reorder]
-sort_name = value[:sort_name] ? value[:sort_name] : key
%th=raw sort_link sort_name.to_s, value[:name]
-else
%th=raw value[:name]
-else
%th=raw value
=#sort_link "code", "Code"
-if false
%th
%tbody{:id => "#{qi_ordered_table_name}_rows"}
=render qi_ordered_table_collection
.qi_pagination
= paginate qi_ordered_table_collection #, :remote => true
:javascript
resize();
$('.freezeTable').freezeTable({columnNum:#{qi_ordered_table_nbr_col},fixedNavbar:'#qi_header_wrapper'});

View File

@ -0,0 +1,35 @@
-@qi_table_orders = @qi_table_orders || {}
-if current_admin
-if ap = current_admin.admin_preferences.where(:key => "sort_table_"+qi_ordered_table_name).first
-qi_ordered_table_personalised = ap.value
-if ap = current_admin.admin_preferences.where(:key => "sort_table_"+qi_ordered_table_name+"_nbr_col").first
-qi_ordered_table_nbr_col = ap.value
-else
-qi_ordered_table_nbr_col = 1
-else
-qi_ordered_table_personalised = session[:qi_sort_string][qi_ordered_table_name]
-qi_ordered_table_nbr_col = session[:qi_sort_string][qi_ordered_table_name+"_nbr_col"] || 1
-if qi_ordered_table_personalised.to_s != ""
-@qi_table_orders[qi_ordered_table_name.to_sym] = {}
-qi_ordered_table_personalised.split(",").each do |k|
-if qi_ordered_table_model.qi_table_order[k.to_sym]
-@qi_table_orders[qi_ordered_table_name.to_sym][k.to_sym] = qi_ordered_table_model.qi_table_order[k.to_sym]
-else
-@qi_table_orders[qi_ordered_table_name.to_sym] = qi_ordered_table_model.qi_table_order

View File

@ -0,0 +1,35 @@
-@qi_table_orders = @qi_table_orders || {}
-if current_admin
-if ap = current_admin.admin_preferences.where(:key => "sort_table_"+qi_ordered_table_name).first
-qi_ordered_table_personalised = ap.value
-if ap = current_admin.admin_preferences.where(:key => "sort_table_"+qi_ordered_table_name+"_nbr_col").first
-qi_ordered_table_nbr_col = ap.value
-else
-qi_ordered_table_nbr_col = 1
-else
-qi_ordered_table_personalised = session[:qi_sort_string][qi_ordered_table_name]
-qi_ordered_table_nbr_col = session[:qi_sort_string][qi_ordered_table_name+"_nbr_col"] || 1
-if qi_ordered_table_personalised.to_s != ""
-@qi_table_orders[qi_ordered_table_name.to_sym] = {}
-qi_ordered_table_personalised.split(",").each do |k|
-if qi_ordered_table_model.qi_table_order[k.to_sym]
-@qi_table_orders[qi_ordered_table_name.to_sym][k.to_sym] = qi_ordered_table_model.qi_table_order[k.to_sym]
-else
-@qi_table_orders[qi_ordered_table_name.to_sym] = qi_ordered_table_model.qi_table_order

View File

@ -0,0 +1,42 @@
-qi_ordered_table_model = object.class
-qi_ordered_table_name = qi_ordered_table_model.to_s.tableize
-if !@qi_table_orders
=render :partial => "qi/qi_ordered_table_head", :locals => {:qi_ordered_table_name => qi_ordered_table_name, :qi_ordered_table_model => qi_ordered_table_model}
-@qi_table_orders[qi_ordered_table_name.to_sym].each do |key,value|
-if tr[:"#{key}"]
=raw tr[:"#{key}"]
-elsif object.respond_to?("tr_"+key.to_s) or object.respond_to?(key.to_s)
-if object.respond_to?("tr_"+key.to_s)
-v =object.send("tr_"+key.to_s)
-elsif object.respond_to?(key.to_s)
-v = object.send(key.to_s)
-if value.instance_of? Hash and value[:format]
-if value[:format] == :date
%td=l v, :format => :short_date
-elsif value[:format] == :boolean
%td="Oui" if v
-elsif value[:format] == :currency
%td.numeraire=number_to_currency v
-else
%td= v
-else
%td=v
-else
%td
Err :
=key

View File

@ -0,0 +1,10 @@
=link_to ic(:search)+" Rechercher", "#", :class => "btn btn-default btn-qi-search", :onclick => "$(this).closest('form').submit();$(this).html('...');return false;"
.results_count
="(#{collection_object.total_count}) résultat(s)"
="-"
=select_tag "search[per_page]", options_for_select([50,100,200,500], params[:search][:per_page])
résultats par page

View File

@ -1,6 +1,6 @@
%div{:class => ("error has-error" if form.object.errors["#{field}_id".to_sym].size > 0 )}
%label=label
%input.p_fournisseur_autocomplete_input.form-control{:type => "text", :value => ("#{eval("form.object.#{field}.member_label")}" if eval("form.object.#{field}"))}
%input.form-control{:class => "#{field}_autocomplete_input", :type => "text", :value => ("#{eval("form.object.#{field}.member_label")}" if eval("form.object.#{field}"))}
= form.hidden_field "#{field}_id".to_sym, :class => "#{field}_id"

View File

@ -34,7 +34,7 @@
%span.qi_ordered_table_column{:onclick => "$(this).next('.qi_ordered_table_sort_select_wrapper').toggle();"}
=ic :columns
.qi_ordered_table_sort_select_wrapper{:style => "display:none;"}
=form_tag request.url, :method => "get", :onsubmit => "", :remote => false do

View File

@ -21,14 +21,14 @@
-v = object.send(key.to_s)
-if value.instance_of? Hash and value[:format]
-if value[:format] == :date
-if value.instance_of? Hash and (value[:format] or value[:as])
-value[:as] = value[:format] if value[:format] and !value[:as]
-if value[:as] == :date
%td=l v, :format => :short_date
-elsif value[:format] == :boolean
-elsif value[:as] == :boolean
%td="Oui" if v
-elsif value[:format] == :currency
-elsif value[:as] == :currency
%td.numeraire=number_to_currency v
-else

View File

@ -1,3 +1,6 @@
=hidden_field_tag :column, params[:column]
=hidden_field_tag :direction, params[:direction]
=link_to ic(:search)+" Rechercher", "#", :class => "btn btn-default btn-qi-search", :onclick => "$(this).closest('form').submit();$(this).html('...');return false;"

View File

@ -0,0 +1,12 @@
-i =0
-step = step || 4
-collec.each do |c|
=render c
-if i
-i += 1
-if i == step
.clear
-i = 0

View File

@ -0,0 +1,6 @@
require "acts_as_caching"
require "acts_as_sorting"
require "acts_as_csv_import"

View File

@ -4,6 +4,8 @@ Rails.application.routes.draw do
namespace :admin do
resources :mail_types
resources :m_odr_product_cats do
member do
@ -239,7 +241,7 @@ Rails.application.routes.draw do
namespace :admin do
resources :m_odrs do
member do
get :stats
end
collection do

View File

@ -0,0 +1,13 @@
class AddBaToMOdr < ActiveRecord::Migration[6.0]
def change
add_column :m_odrs, :ba_generation, :boolean, :default => false
add_column :m_odrs, :ba_send, :boolean, :default => false
add_column :m_odrs, :ba_width, :integer
add_column :m_odrs, :ba_height, :integer
add_column :m_odrs, :ba_name_x, :integer
add_column :m_odrs, :ba_name_y, :integer
add_column :m_odrs, :ba_place_x, :integer
add_column :m_odrs, :ba_place_y, :integer
add_column :m_odrs, :ba_image_file_id, :integer
end
end

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2020_04_13_164941) do
ActiveRecord::Schema.define(version: 2020_07_03_080324) do
create_table "accounting_zones", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
t.string "name"
@ -898,6 +898,15 @@ ActiveRecord::Schema.define(version: 2020_04_13_164941) do
t.boolean "buy_date_process"
t.boolean "buy_date_needed"
t.text "buy_infos"
t.boolean "ba_generation", default: false
t.boolean "ba_send", default: false
t.integer "ba_width"
t.integer "ba_height"
t.integer "ba_name_x"
t.integer "ba_name_y"
t.integer "ba_place_x"
t.integer "ba_place_y"
t.integer "ba_image_file_id"
t.index ["p_customer_id"], name: "index_m_odrs_on_p_customer_id"
end

9
lib/acts_as_caching.rb Normal file
View File

@ -0,0 +1,9 @@
require 'active_support/core_ext'
p "loading main"
require File.join(File.dirname(__FILE__), "acts_as_caching/railtie.rb")
module ActsAsCaching
autoload :Hook, File.join(File.dirname(__FILE__), "acts_as_caching/hook")
#autoload :InstanceMethods, File.join(File.dirname(__FILE__), "acts_as_caching/instance_methods")
end

View File

@ -0,0 +1,85 @@
module ActsAsCaching::Hook
def acts_as_caching(*args)
@acts_as_caching_options = args.extract_options!
def self.qi_cache_fields
@acts_as_caching_options[:fields]
end
@acts_as_caching_options[:fields].each do |s|
define_method("#{s}") {
puts "CCC"
if self.methods.include?(eval(":ca_#{s}"))
puts "AAAA"
puts self.methods.include?(eval(":ca_#{s}"))
return eval("!self.ac_#{s} ? self.ca_#{s} : self.ac_#{s}")
end
}
end
define_method("qi_dynamics_cache"){
puts "qi_dynamics_cache"
puts "hook"
puts self.class
if self.methods.include?(:to_no_archive)
self.to_no_archive.each do |noc|
eval("self.ac_#{noc} = nil")
end
end
self.class.qi_cache_fields.each do |s|
if self.methods.include?(eval(":ca_#{s}"))
eval("self.cc_#{s} = self.#{s}")
end
end
}
after_validation :qi_dynamics_cache
define_method("archive_now"){
self.qi_dynamics_cache
self.archived = true
self.class.qi_cache_fields.each do |s|
eval("self.ac_#{s} = self.cc_#{s} ")
end
self.personalised_archive if self.methods.include?(:personalised_archive)
self.save
}
define_method("unarchive_now"){
self.archived = false
self.qi_dynamics_cache
self.class.qi_cache_fields.each do |s|
eval("self.ac_#{s} = nil ")
end
self.personalised_unarchive if self.methods.include?(:personalised_unarchive)
self.save
}
end
end

View File

@ -0,0 +1,18 @@
require 'rails'
require 'acts_as_caching'
p "Railtie loaded"
begin
module ActsAsCaching
class Railtie < Rails::Railtie
config.to_prepare do
p "hook added"
ActiveRecord::Base.send(:extend, ActsAsCaching::Hook)
end
end
end
rescue
p $!, $!.message
raise $!
end

View File

@ -0,0 +1,9 @@
require 'active_support/core_ext'
p "loading main"
require File.join(File.dirname(__FILE__), "acts_as_csv_import/railtie.rb")
module ActsAsCsvImport
autoload :Hook, File.join(File.dirname(__FILE__), "acts_as_csv_import/hook")
#autoload :InstanceMethods, File.join(File.dirname(__FILE__), "acts_as_csv_import/instance_methods")
end

View File

@ -0,0 +1,46 @@
module ActsAsCsvImport::Hook
def acts_as_csv_import(*args)
@csv_options = args.extract_options!
def self.import_csv_fields
@csv_options[:fields]
end
def self.import_csv(list, import_csv)
puts self.instance_methods
if self.methods.include?(:custom_csv_import)
custom_csv_import(list, import_csv)
else
default_import_csv(list, import_csv)
end
end
def self.default_import_csv(list, import_csv)
list.each do |row|
n = self.new
row.each do |key, value|
eval "n.#{key} = value"
end
n.save
import_csv.import_csv_elements << ImportCsvElement.new(:element => n)
end
end
end
end

View File

@ -0,0 +1,18 @@
require 'rails'
require 'acts_as_csv_import'
p "Railtie loaded"
begin
module ActsAsCsvImport
class Railtie < Rails::Railtie
config.to_prepare do
p "hook csv import added"
ActiveRecord::Base.send(:extend, ActsAsCsvImport::Hook)
end
end
end
rescue
p $!, $!.message
raise $!
end

9
lib/acts_as_sorting.rb Normal file
View File

@ -0,0 +1,9 @@
require 'active_support/core_ext'
p "loading main"
require File.join(File.dirname(__FILE__), "acts_as_sorting/railtie.rb")
module ActsAsSorting
autoload :Hook, File.join(File.dirname(__FILE__), "acts_as_sorting/hook")
#autoload :InstanceMethods, File.join(File.dirname(__FILE__), "acts_as_sorting/instance_methods")
end

View File

@ -0,0 +1,39 @@
module ActsAsSorting::Hook
def acts_as_sorting(*args)
@acts_as_sorting_options = args.extract_options!
def self.qi_table_order
@acts_as_sorting_options[:fields]
end
def self.valid_sort
r = []
self.qi_table_order.each do |key, value|
if value.instance_of? Hash
if value[:reorder] == false
elsif value[:reorder] == true
if value[:sort_name]
r << value[:sort_name]
else
r << key.to_s
end
end
end
end
return r
end
end
end

View File

@ -0,0 +1,18 @@
require 'rails'
require 'acts_as_sorting'
p "Railtie loaded"
begin
module ActsAsSorting
class Railtie < Rails::Railtie
config.to_prepare do
p "hook sorting added"
ActiveRecord::Base.send(:extend, ActsAsSorting::Hook)
end
end
end
rescue
p $!, $!.message
raise $!
end