diff --git a/plugins/delivery/controllers/myprofile/delivery_plugin/admin_method_controller.rb b/plugins/delivery/controllers/myprofile/delivery_plugin/admin_method_controller.rb new file mode 100644 index 0000000..81c3c0b --- /dev/null +++ b/plugins/delivery/controllers/myprofile/delivery_plugin/admin_method_controller.rb @@ -0,0 +1,32 @@ +require_dependency 'delivery_plugin/display_helper' + +class DeliveryPlugin::AdminMethodController < MyProfileController + + protect 'edit_profile', :profile + + helper OrdersPlugin::FieldHelper + helper DeliveryPlugin::DisplayHelper + + def new + @delivery_method = profile.delivery_methods.build + self.edit + end + + def edit + @delivery_method ||= profile.delivery_methods.find_by_id params[:id] + if params[:delivery_method].present? and @delivery_method.update_attributes params[:delivery_method] + render partial: 'list' + else + render partial: 'edit', locals: {delivery_method: @delivery_method} + end + end + + def destroy + @delivery_method = profile.delivery_methods.find params[:id] + @delivery_method.destroy + render nothing: true + end + + protected + +end diff --git a/plugins/delivery/controllers/myprofile/delivery_plugin/admin_options_controller.rb b/plugins/delivery/controllers/myprofile/delivery_plugin/admin_options_controller.rb new file mode 100644 index 0000000..c837073 --- /dev/null +++ b/plugins/delivery/controllers/myprofile/delivery_plugin/admin_options_controller.rb @@ -0,0 +1,38 @@ +class DeliveryPlugin::AdminOptionsController < DeliveryPlugin::AdminMethodController + + helper OrdersPlugin::FieldHelper + helper DeliveryPlugin::DisplayHelper + + protect 'edit_profile', :profile + before_filter :load_context + before_filter :load_owner + + def select + + end + + def new + dms = profile.delivery_methods.find Array(params[:method_id]) + (dms - @owner.delivery_methods).each do |dm| + DeliveryPlugin::Option.create! owner_id: @owner.id, owner_type: @owner.class.name, delivery_method: dm + end + end + + def destroy + @delivery_option = @owner.delivery_options.find params[:id] + @delivery_option.destroy + end + + protected + + def load_owner + @owner_id = params[:owner_id] + @owner_type = params[:owner_type] + @owner = @owner_type.constantize.find @owner_id + end + + def load_context + @delivery_context = 'delivery_plugin/admin_options' + end + +end diff --git a/plugins/delivery/db/migrate/20130719132252_create_delivery_plugin_tables.rb b/plugins/delivery/db/migrate/20130719132252_create_delivery_plugin_tables.rb new file mode 100644 index 0000000..d263afc --- /dev/null +++ b/plugins/delivery/db/migrate/20130719132252_create_delivery_plugin_tables.rb @@ -0,0 +1,44 @@ +class CreateDeliveryPluginTables < ActiveRecord::Migration + def self.up + # check if distribution plugin already moved tables + return if ActiveRecord::Base.connection.table_exists? :delivery_plugin_methods + + create_table :delivery_plugin_methods do |t| + t.integer :profile_id + t.string :name + t.text :description + t.string :recipient + t.string :address_line1 + t.string :address_line2 + t.string :postal_code + t.string :state + t.string :country + t.string :delivery_type + t.datetime :created_at + t.datetime :updated_at + end + + add_index :delivery_plugin_methods, [:profile_id] + add_index :delivery_plugin_methods, [:delivery_type] + + create_table :delivery_plugin_options do |t| + t.integer :delivery_method_id + t.integer :owner_id + t.string :owner_type + t.datetime :created_at + t.datetime :updated_at + end + + add_index :delivery_plugin_options, [:delivery_method_id] + add_index :delivery_plugin_options, [:owner_id, :delivery_method_id], name: :index_delivery_plugin_owner_id_delivery_method_id + add_index :delivery_plugin_options, [:owner_id] + add_index :delivery_plugin_options, [:owner_type] + add_index :delivery_plugin_options, [:owner_id, :owner_type] + + end + + def self.down + drop_table :delivery_plugin_methods + drop_table :delivery_plugin_options + end +end diff --git a/plugins/delivery/db/migrate/20150202122306_add_fixed_cost_to_delivery_plugin_method.rb b/plugins/delivery/db/migrate/20150202122306_add_fixed_cost_to_delivery_plugin_method.rb new file mode 100644 index 0000000..640a8a4 --- /dev/null +++ b/plugins/delivery/db/migrate/20150202122306_add_fixed_cost_to_delivery_plugin_method.rb @@ -0,0 +1,10 @@ +class AddFixedCostToDeliveryPluginMethod < ActiveRecord::Migration + def up + add_column :delivery_plugin_methods, :fixed_cost, :decimal + add_column :delivery_plugin_methods, :free_over_price, :decimal + end + def down + remove_column :delivery_plugin_methods, :fixed_cost + remove_column :delivery_plugin_methods, :free_over_price + end +end diff --git a/plugins/delivery/lib/delivery_plugin.rb b/plugins/delivery/lib/delivery_plugin.rb new file mode 100644 index 0000000..e48abb3 --- /dev/null +++ b/plugins/delivery/lib/delivery_plugin.rb @@ -0,0 +1,13 @@ +module DeliveryPlugin + + extend Noosfero::Plugin::ParentMethods + + def self.plugin_name + I18n.t('delivery_plugin.lib.plugin.name') + end + + def self.plugin_description + I18n.t('delivery_plugin.lib.plugin.description') + end + +end diff --git a/plugins/delivery/lib/delivery_plugin/base.rb b/plugins/delivery/lib/delivery_plugin/base.rb new file mode 100644 index 0000000..20edc4a --- /dev/null +++ b/plugins/delivery/lib/delivery_plugin/base.rb @@ -0,0 +1,13 @@ +class DeliveryPlugin::Base < Noosfero::Plugin + + def stylesheet? + true + end + + def js_files + ['delivery'].map{ |j| "javascripts/#{j}" } + end + +end + + diff --git a/plugins/delivery/lib/delivery_plugin/display_helper.rb b/plugins/delivery/lib/delivery_plugin/display_helper.rb new file mode 100644 index 0000000..1a02e1e --- /dev/null +++ b/plugins/delivery/lib/delivery_plugin/display_helper.rb @@ -0,0 +1,25 @@ +module DeliveryPlugin::DisplayHelper + + def input_group_addon unit + yield + end unless defined? ResponsivePlugin + + def supplier_delivery_options options = {} + selected = options[:selected] + methods = options[:methods] || profile.delivery_methods + + options = methods.map do |method| + cost = if method.fixed_cost.present? and method.fixed_cost > 0 then float_to_currency_cart(method.fixed_cost, environment) else nil end + text = if cost.present? then "#{method.name} (#{cost})" else method.name end + + content_tag :option, text, value: method.id, + data: {label: method.name, type: method.delivery_type, instructions: method.description.to_s}, + selected: if method == selected then 'selected' else nil end + end.join + end + + def delivery_context + @delivery_context || 'delivery_plugin/admin_method' + end + +end diff --git a/plugins/delivery/lib/ext/profile.rb b/plugins/delivery/lib/ext/profile.rb new file mode 100644 index 0000000..a40e513 --- /dev/null +++ b/plugins/delivery/lib/ext/profile.rb @@ -0,0 +1,7 @@ +require_dependency 'profile' + +class Profile + + has_many :delivery_methods, class_name: 'DeliveryPlugin::Method', foreign_key: :profile_id, dependent: :destroy, order: 'id ASC' + +end diff --git a/plugins/delivery/locales/en-US.yml b/plugins/delivery/locales/en-US.yml new file mode 100644 index 0000000..eba15b1 --- /dev/null +++ b/plugins/delivery/locales/en-US.yml @@ -0,0 +1,48 @@ +"en-US": &en-US + + delivery_plugin: + lib: + plugin: + name: "Delivery" + description: "Management of delivery's methods and options" + models: + method: + pickup: 'Pickup' + deliver: 'Deliver' + delivery_type: 'Type' + delivery_type_help: 'Pickup: the products will be delivered in the consumption place.
Delivery: the products will be delivered in the address asked by the consumer.' + name: Name + name_help: Write the name of the Consumption Place or the + fixed_cost: Fixed cost + free_over_price: Order's minimum price for free delivery + instructions: Description + instructions_help: "Write the address and other important informations about the place of this consumption place.
This text will be available" + views: + delivery_option: + select: + add: Add selected + _select_content: + add: Add option + add_new: "add new" + are_you_sure_you_want: "Are you sure you want to remove?" + cancel: cancel + choose_a_delivery_met: "Choose a delivery method from the list" + edit_this: "Edit" + remove_method: "Remover" + _show: + x: X + select: + add_a_delivery_method: "Add a delivery method to the Orders' Cycle" + method: + index: + new: "New delivery or pickup" + edit: + add: Add + back: back + save: Save + +'en_US': + <<: *en-US +'en': + <<: *en-US + diff --git a/plugins/delivery/locales/pt-BR.yml b/plugins/delivery/locales/pt-BR.yml new file mode 100644 index 0000000..26d1e2b --- /dev/null +++ b/plugins/delivery/locales/pt-BR.yml @@ -0,0 +1,48 @@ +"pt-BR": &pt-BR + + delivery_plugin: + lib: + plugin: + name: "Entrega" + description: "Gestão de métodos e opções de entrega" + models: + method: + pickup: 'Retirada' + deliver: 'Entrega' + delivery_type: "Tipo" + delivery_type_help: "Retirada: os produtos serão buscados pela(o) consumidor(a), por exemplo, no empreendimento, numa feira ou num Núcleo de Consumo.
Entrega: os produtos serão entregues no endereço solicitado pelo(a) consumidor(a)." + name: Nome + name_help: "Para opção Retirada: escreva o nome do local onde os produtos deverão ser retirados pela(o) consumidor(a), por exemplo o nome do Núcleo de Consumo, da feira ou do próprio empreendimento.
Para a opção Entrega: escreva o nome do local, (uma cidade ou região) ou a forma de entrega (Correios, transportadora)" + fixed_cost: Custo + free_over_price: "Preço mínimo do pedido para Entrega Grátis" + instructions: Descrição + instructions_help: "Escreva informações importantes sobre esta opção de Retirada ou Entrega.
Por exemplo, o endereço completo do Núcleo de Consumo, a abrangência da região de entrega.
Este texto estará disponível no \"Finalizar pedido\" e, ao confirmar a compra, o(a) consumidor(a) receberá um email com o pedido realizado e as informações deste campo." + views: + delivery_option: + select: + add: "Adicionar selecionados" + _select_content: + add: Adicionar opção + add_new: "adicionar novo" + are_you_sure_you_want: "Tem certeza de que quer remover?" + cancel: Cancelar + choose_a_delivery_met: "Escolha um método de entrega da lista" + edit_this: Editar + remove_method: "Remover" + _show: + x: X + select: + add_a_delivery_method: "Adicionar um método de entrega ao ciclo de pedidos" + method: + index: + new: "Nova forma de entrega ou retirada" + edit: + add: Adicionar + back: voltar + save: Salvar + +'pt_BR': + <<: *pt-BR +'pt': + <<: *pt-BR + diff --git a/plugins/delivery/models/delivery_plugin/method.rb b/plugins/delivery/models/delivery_plugin/method.rb new file mode 100644 index 0000000..05398ed --- /dev/null +++ b/plugins/delivery/models/delivery_plugin/method.rb @@ -0,0 +1,53 @@ +class DeliveryPlugin::Method < ActiveRecord::Base + + extend CurrencyHelper::ClassMethods + + Types = ['pickup', 'deliver'] + + # see also: Profile::LOCATION_FIELDS + AddressFields = %w[ + address address_line2 address_reference district city state country_name zip_code + ].map(&:to_sym) + + attr_accessible :profile, :delivery_type, :name, :description, + :fixed_cost, :free_over_price + + belongs_to :profile + + has_many :delivery_options, class_name: 'DeliveryPlugin::Option', foreign_key: :delivery_method_id, dependent: :destroy + + validates_presence_of :profile + validates_presence_of :name + validates_inclusion_of :delivery_type, in: Types + + scope :pickup, conditions: {delivery_type: 'pickup'} + scope :delivery, conditions: {delivery_type: 'deliver'} + + def pickup? + self.delivery_type == 'pickup' + end + def deliver? + self.delivery_type == 'deliver' + end + + def has_cost? order_price=nil + if order_price.present? and order_price.nonzero? and self.free_over_price.present? and self.free_over_price.nonzero? + order_price <= self.free_over_price + else + self.fixed_cost.present? and self.fixed_cost.nonzero? + end + end + def free? order_price=nil + !self.has_cost? + end + + def cost order_price=nil + if self.has_cost?(order_price) then self.fixed_cost.to_f else 0 end + end + has_currency :fixed_cost + has_currency :free_over_price + has_currency :cost + + protected + +end diff --git a/plugins/delivery/models/delivery_plugin/option.rb b/plugins/delivery/models/delivery_plugin/option.rb new file mode 100644 index 0000000..12998d7 --- /dev/null +++ b/plugins/delivery/models/delivery_plugin/option.rb @@ -0,0 +1,11 @@ +class DeliveryPlugin::Option < ActiveRecord::Base + + belongs_to :delivery_method, :class_name => 'DeliveryPlugin::Method' + belongs_to :owner, :polymorphic => true + + validates_presence_of :delivery_method + validates_presence_of :owner + + attr_accessible :owner_id, :owner_type, :delivery_methods, :delivery_method + +end diff --git a/plugins/delivery/public/javascripts/delivery.js b/plugins/delivery/public/javascripts/delivery.js new file mode 100644 index 0000000..cbba70d --- /dev/null +++ b/plugins/delivery/public/javascripts/delivery.js @@ -0,0 +1,103 @@ + +delivery = { + + order: { + select: { + + onChange: function(input) { + var input = jQuery(input) + var deliverySelect = input.parents('.order-delivery-select') + + var option = input.find('option:selected') + var typeData = option.attr('data-type') + var isPickup = typeData == 'pickup' + var instructionsData = option.attr('data-instructions') + var labelData = option.attr('data-label') + + var instructions = deliverySelect.find('.instructions') + instructions.html(instructionsData) + var consumerData = deliverySelect.find('.consumer-delivery-data') + if (isPickup) { + consumerData.slideUp('fast') + } else { + consumerData.slideDown('fast') + } + }, + + }, + }, + + option: { + }, + + method: { + + view: { + edition: function() { + return jQuery('#delivery-method-edition') + }, + listing: function() { + return jQuery('#delivery-method-list') + }, + toggle: function () { + jQuery('#delivery-method-list, #delivery-method-edition').fadeToggle(); + }, + }, + + changeType: function(select) { + select = jQuery(select) + }, + + new: function(newUrl) { + this.edit(newUrl) + }, + + edit: function(editUrl) { + var listing = this.view.listing() + var edition = this.view.edition() + + loading_overlay.show(listing) + jQuery.get(editUrl, function(data) { + edition.html(data) + delivery.method.view.toggle(); + loading_overlay.hide(listing) + }); + }, + + save: function(form) { + var listing = this.view.listing() + var edition = this.view.edition() + + jQuery(form).ajaxSubmit({ + beforeSubmit: function() { + loading_overlay.show(edition) + }, success: function(data) { + listing.html(data); + delivery.method.view.toggle(); + loading_overlay.hide(edition) + }, + }) + return false; + }, + + destroy: function(id, confirmText, destroy_url) { + if (!confirm(confirmText)) + return + var method = jQuery('#delivery-method-'+id) + jQuery.post(destroy_url, function() { + method.fadeOut(function() { + method.remove() + }) + }) + }, + + }, + + option: { + + add: function(newUrl) { + $.getScript(newUrl) + }, + }, + +}; diff --git a/plugins/delivery/public/style.scss b/plugins/delivery/public/style.scss new file mode 100644 index 0000000..d31d8f3 --- /dev/null +++ b/plugins/delivery/public/style.scss @@ -0,0 +1,2 @@ +@import 'stylesheets/delivery' + diff --git a/plugins/delivery/public/stylesheets/_base.scss b/plugins/delivery/public/stylesheets/_base.scss new file mode 120000 index 0000000..26345f3 --- /dev/null +++ b/plugins/delivery/public/stylesheets/_base.scss @@ -0,0 +1 @@ +../../../suppliers/public/stylesheets/_base.scss \ No newline at end of file diff --git a/plugins/delivery/public/stylesheets/_field.scss b/plugins/delivery/public/stylesheets/_field.scss new file mode 120000 index 0000000..46300a3 --- /dev/null +++ b/plugins/delivery/public/stylesheets/_field.scss @@ -0,0 +1 @@ +../../../suppliers/public/stylesheets/_field.scss \ No newline at end of file diff --git a/plugins/delivery/public/stylesheets/delivery.scss b/plugins/delivery/public/stylesheets/delivery.scss new file mode 100644 index 0000000..a38aac1 --- /dev/null +++ b/plugins/delivery/public/stylesheets/delivery.scss @@ -0,0 +1,40 @@ +@import 'base'; + +#delivery-method-edition { + @extend .container-clean; + + .field-help { + font-size: 10px; + } +} +#delivery-method-list { +} + +#delivery-add { + // to resize popin + overflow: hidden; +} + +.delivery-method { + .select { + width: 20px; + } + +} + +.order-delivery-select { + +} + +#delivery-method-choose { + height: 235px; + + #delivery-menu a { + text-transform: capitalize; + } +} + +.cycle-delete-delivery-option { + font-weight: bold; +} + diff --git a/plugins/delivery/test/test_helper.rb b/plugins/delivery/test/test_helper.rb new file mode 100644 index 0000000..cca1fd3 --- /dev/null +++ b/plugins/delivery/test/test_helper.rb @@ -0,0 +1 @@ +require File.dirname(__FILE__) + '/../../../test/test_helper' diff --git a/plugins/delivery/test/unit/delivery_plugin/method_test.rb b/plugins/delivery/test/unit/delivery_plugin/method_test.rb new file mode 100644 index 0000000..9dec65e --- /dev/null +++ b/plugins/delivery/test/unit/delivery_plugin/method_test.rb @@ -0,0 +1,42 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class DeliveryPlugin::MethodTest < ActiveSupport::TestCase + + def setup + @profile = build(Profile) + end + + attr_accessor :profile + + should 'have a name and a delivery type' do + dm = DeliveryPlugin::Method.new :name => 'Delivery Deluxe', :delivery_type => 'deliver', :profile => profile + assert dm.valid? + dm = DeliveryPlugin::Method.new :profile => profile + assert !dm.valid? + end + + should 'accept only pickup and deliver as delivery types' do + dm = build(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'unkown', :profile => profile) + assert !dm.valid? + dm = build(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'pickup', :profile => profile) + assert dm.valid? + dm = build(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'deliver', :profile => profile) + assert dm.valid? + end + + should 'filter by delivery types' do + dm_deliver = create(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'deliver', :profile => profile) + dm_pickup = create(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'pickup', :profile => profile) + assert_equal [dm_deliver], DeliveryPlugin::Method.delivery + assert_equal [dm_pickup], DeliveryPlugin::Method.pickup + end + + should 'have many delivery options' do + dm = create(DeliveryPlugin::Method, :name => 'Delivery Deluxe', :delivery_type => 'deliver', :profile => profile) + cycle = build(OrdersCyclePlugin::Cycle, :name => 'cycle name', :profile => profile) + option = create(DeliveryPlugin::Option, :cycle => cycle, :delivery_method => dm) + + assert_equal [option], dm.reload.delivery_options + end + +end diff --git a/plugins/delivery/test/unit/delivery_plugin/option_test.rb b/plugins/delivery/test/unit/delivery_plugin/option_test.rb new file mode 100644 index 0000000..f8a3617 --- /dev/null +++ b/plugins/delivery/test/unit/delivery_plugin/option_test.rb @@ -0,0 +1,24 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class DeliveryPlugin::OptionTest < ActiveSupport::TestCase + + def setup + @profile = build(Profile) + @cycle = build(OrdersCyclePluginCycle, :profile => @profile) + @delivery_method = build(OrdersCyclePluginMethod, :profile => @profile) + end + + attr_accessor :profile + attr_accessor :cycle + attr_accessor :delivery_method + + should 'be associated with a cycle and a delivery method' do + option = OrdersCyclePluginOption.new :cycle => @cycle, :delivery_method => @delivery_method + assert option.valid? + option = OrdersCyclePluginOption.new + :wa + + assert !option.valid? + end + +end diff --git a/plugins/delivery/views/delivery_plugin/_order_select.html.slim b/plugins/delivery/views/delivery_plugin/_order_select.html.slim new file mode 100644 index 0000000..4acc741 --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/_order_select.html.slim @@ -0,0 +1,31 @@ +- methods ||= order.delivery_methods +- edition = true if edition.nil? +- readonly = !edition + +div.order-delivery-select + + div.supplier-delivery-data + = labelled_form_field _('Option'), + f.select(:supplier_delivery_id, supplier_delivery_options(methods: methods), {}, disabled: readonly, + onchange: 'delivery.order.select.onChange(this)', onkeyup: 'delivery.order.select.onChange(this)') + p.instructions + + div.consumer-delivery-data + = f.fields_for :consumer_delivery_data, order.consumer_delivery_data do |ff| + = labelled_form_field _('Address (street and number)'), + ff.text_field(:address, value: order.consumer_delivery_data[:address], readonly: readonly) + = labelled_form_field _('Address completion'), + ff.text_field(:address_line2, value: order.consumer_delivery_data[:address_line2], readonly: readonly) + = labelled_form_field _('Address reference'), + ff.text_field(:address_reference, value: order.consumer_delivery_data[:address_reference], readonly: readonly) + = labelled_form_field _('District'), + ff.text_field(:district, value: order.consumer_delivery_data[:district], readonly: readonly) + = labelled_form_field _('City'), + ff.text_field(:city, value: order.consumer_delivery_data[:city], readonly: readonly) + = labelled_form_field _('State'), + ff.text_field(:state, value: order.consumer_delivery_data[:state], readonly: readonly) + = labelled_form_field _('ZIP code'), + ff.text_field(:zip_code, value: order.consumer_delivery_data[:zip_code], readonly: readonly) + + javascript: + delivery.order.select.onChange($('#order_supplier_delivery_id')) diff --git a/plugins/delivery/views/delivery_plugin/admin_method/_edit.html.slim b/plugins/delivery/views/delivery_plugin/admin_method/_edit.html.slim new file mode 100644 index 0000000..717bfd1 --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_method/_edit.html.slim @@ -0,0 +1,26 @@ += form_for delivery_method, as: :delivery_method, + url: request.GET.merge(controller: delivery_context, action: delivery_method.new_record? ? :new : :edit, id: delivery_method.id), + html: {onsubmit: 'return delivery.method.save(this)'} do |f| + + = error_messages_for :delivery_method + + = labelled_field f, :delivery_type, t('delivery_plugin.models.method.delivery_type'), + f.select(:delivery_type, DeliveryPlugin::Method::Types.map{ |t| [t("delivery_plugin.models.method.#{t}"), t] }, + onchange: 'delivery.method.changeType(this)', onkeyup: 'this.onchange()'), + help: t('delivery_plugin.models.method.delivery_type_help') + + = labelled_field f, :name, t('delivery_plugin.models.method.name'), f.text_field(:name), + help: t('delivery_plugin.models.method.name_help') + = labelled_field f, :description, t('delivery_plugin.models.method.instructions'), + f.text_area(:description, rows: 5), help: t('delivery_plugin.models.method.instructions_help') + + = labelled_field f, :fixed_cost, t('delivery_plugin.models.method.fixed_cost'), + input_group_addon(environment.currency_unit){ f.text_field :fixed_cost, type: :number, step: '0.01', value: number_with_precision(delivery_method.fixed_cost, precision: 2, locale: :en)} + + = labelled_field f, :free_over_price, t('delivery_plugin.models.method.free_over_price'), + input_group_addon(environment.currency_unit){ f.text_field :free_over_price, type: :number, step: '0.01', value: number_with_precision(delivery_method.free_over_price, precision: 2, locale: :en)} + + div + = submit_button :save, if delivery_method.new_record? then t('delivery_plugin.views.method.edit.add') else t('delivery_plugin.views.method.edit.save') end + = link_to_function t('delivery_plugin.views.method.edit.back'), "delivery.method.view.toggle()" + diff --git a/plugins/delivery/views/delivery_plugin/admin_method/_index.html.slim b/plugins/delivery/views/delivery_plugin/admin_method/_index.html.slim new file mode 100644 index 0000000..3089dbd --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_method/_index.html.slim @@ -0,0 +1,4 @@ +table#delivery-method-list + = render 'delivery_plugin/admin_method/list' + +#delivery-method-edition style=("display: none") diff --git a/plugins/delivery/views/delivery_plugin/admin_method/_list.html.slim b/plugins/delivery/views/delivery_plugin/admin_method/_list.html.slim new file mode 100644 index 0000000..db3ec43 --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_method/_list.html.slim @@ -0,0 +1,9 @@ +tr + td colspan=3 + = button_to_function :add, t('delivery_plugin.views.method.index.new'), + "delivery.method.new('#{url_for request.GET.merge(controller: 'delivery_plugin/admin_method', action: :new)}')" + +- profile.delivery_methods.each do |m| + tr.delivery-method id="delivery-method-#{m.id}" + = render "delivery_plugin/admin_method/show", method: m + diff --git a/plugins/delivery/views/delivery_plugin/admin_method/_show.html.slim b/plugins/delivery/views/delivery_plugin/admin_method/_show.html.slim new file mode 100644 index 0000000..d9bf24f --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_method/_show.html.slim @@ -0,0 +1,12 @@ +td.name title="#{method.description}" + = method.name +td.actions + - if request.GET[:select_ids].present? and not method.id.to_s.in? Array(request.GET[:selected_ids]) + = button_to_function :add, t('delivery_plugin.views.delivery_option._select_content.add'), + "delivery.option.add('#{url_for request.GET.merge(controller: 'delivery_plugin/admin_options', action: :new, method_id: method.id)}')" + + = button_to_function :edit, t('delivery_plugin.views.delivery_option._select_content.edit_this'), + "delivery.method.edit('#{url_for request.GET.merge(controller: delivery_context, action: :edit, id: method.id)}')" + = button_to_function :remove, t('delivery_plugin.views.delivery_option._select_content.remove_method'), + "delivery.method.destroy(#{method.id}, '#{t('delivery_plugin.views.delivery_option._select_content.are_you_sure_you_want')}', + '#{url_for request.GET.merge(controller: delivery_context, action: :destroy, id: method.id)}')" diff --git a/plugins/delivery/views/delivery_plugin/admin_method/edit.html.slim b/plugins/delivery/views/delivery_plugin/admin_method/edit.html.slim new file mode 120000 index 0000000..74b090f --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_method/edit.html.slim @@ -0,0 +1 @@ +_edit.html.slim \ No newline at end of file diff --git a/plugins/delivery/views/delivery_plugin/admin_method/new.js.erb b/plugins/delivery/views/delivery_plugin/admin_method/new.js.erb new file mode 100644 index 0000000..2b2ec16 --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_method/new.js.erb @@ -0,0 +1,2 @@ +$('#delivery-method-edition').replaceWith('<%=j render 'index' %>') + diff --git a/plugins/delivery/views/delivery_plugin/admin_options/_index.html.slim b/plugins/delivery/views/delivery_plugin/admin_options/_index.html.slim new file mode 100644 index 0000000..1890937 --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_options/_index.html.slim @@ -0,0 +1,3 @@ +- owner.delivery_options.each do |o| + = render 'delivery_plugin/admin_options/show', owner: owner, option: o + diff --git a/plugins/delivery/views/delivery_plugin/admin_options/_new.js.erb b/plugins/delivery/views/delivery_plugin/admin_options/_new.js.erb new file mode 100644 index 0000000..56977ec --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_options/_new.js.erb @@ -0,0 +1,4 @@ +// FIXME: move to orders_cycle plugin +jQuery('#cycle-delivery-options').html('<%= j render('index', owner: @owner) %>'); +noosfero.modal.close() + diff --git a/plugins/delivery/views/delivery_plugin/admin_options/_show.html.slim b/plugins/delivery/views/delivery_plugin/admin_options/_show.html.slim new file mode 100644 index 0000000..937b312 --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_options/_show.html.slim @@ -0,0 +1,5 @@ +.cycle-delivery-option id="cycle-delivery-option-#{option.id}" + span= option.delivery_method.name + = link_to_remote t('delivery_plugin.views.delivery_option._show.x'), + { url: {controller: 'delivery_plugin/admin_options', action: :destroy, id: option.id, owner_id: owner.id, owner_type: owner.class.name} }, + class: 'cycle-delete-delivery-option' diff --git a/plugins/delivery/views/delivery_plugin/admin_options/destroy.rjs b/plugins/delivery/views/delivery_plugin/admin_options/destroy.rjs new file mode 100644 index 0000000..289ceb6 --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_options/destroy.rjs @@ -0,0 +1 @@ +page.remove "cycle-delivery-option-#{@delivery_option.id}" diff --git a/plugins/delivery/views/delivery_plugin/admin_options/new.js.erb b/plugins/delivery/views/delivery_plugin/admin_options/new.js.erb new file mode 120000 index 0000000..073ee2f --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_options/new.js.erb @@ -0,0 +1 @@ +_new.js.erb \ No newline at end of file diff --git a/plugins/delivery/views/delivery_plugin/admin_options/select.html.slim b/plugins/delivery/views/delivery_plugin/admin_options/select.html.slim new file mode 100644 index 0000000..7739600 --- /dev/null +++ b/plugins/delivery/views/delivery_plugin/admin_options/select.html.slim @@ -0,0 +1,8 @@ +#delivery-add.popin + h1= t('delivery_plugin.views.delivery_option.select.add_a_delivery_method') + + / flag to admin_method/show that we want to select an option from methods + - request.GET[:select_ids] = 'true' + - request.GET[:selected_ids] = @owner.delivery_methods.map(&:id).map(&:to_s) + = render 'delivery_plugin/admin_method/index' + -- libgit2 0.21.2