diff --git a/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee b/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee index cfcf6319af..e9a1bc077f 100644 --- a/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee +++ b/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee @@ -6,6 +6,7 @@ angular.module("admin.enterprises") $scope.navClear = NavigationCheck.clear # htmlVariable is used by textAngular wysiwyg for the long descrtiption. $scope.htmlVariable = longDescription + $scope.pristineEmail = $scope.Enterprise.email # Provide a callback for generating warning messages displayed before leaving the page. This is passed in # from a directive "nav-check" in the page - if we pass it here it will be called in the test suite, diff --git a/app/serializers/api/admin/enterprise_serializer.rb b/app/serializers/api/admin/enterprise_serializer.rb index a23764b84a..37c7e9af27 100644 --- a/app/serializers/api/admin/enterprise_serializer.rb +++ b/app/serializers/api/admin/enterprise_serializer.rb @@ -1,4 +1,4 @@ class Api::Admin::EnterpriseSerializer < ActiveModel::Serializer attributes :name, :id, :is_primary_producer, :is_distributor, :sells, :category, :payment_method_ids, :shipping_method_ids - attributes :producer_profile_only + attributes :producer_profile_only, :email end diff --git a/app/views/admin/enterprises/_form.html.haml b/app/views/admin/enterprises/_form.html.haml index 4dfe15ec11..0d0a54e983 100644 --- a/app/views/admin/enterprises/_form.html.haml +++ b/app/views/admin/enterprises/_form.html.haml @@ -1,216 +1,217 @@ -- content_for :page_actions do - %li= button_link_to "Back to enterprises list", main_app.admin_enterprises_path, icon: 'icon-arrow-left' +%fieldset.eleven.columns.alpha.no-border-bottom + %legend Primary Details + .row + .alpha.eleven.columns + .three.columns.alpha + = f.label :name + .eight.columns.omega + = f.text_field :name, { placeholder: "eg. Professor Plum's Biodynamic Truffles" } + .row + .alpha.eleven.columns + .three.columns.alpha + = f.label :group_ids, 'Groups' + .with-tip{'data-powertip' => "Select any groups or regions that you are a member of. This will help customers find your enterprise."} + %a What's this? + .eight.columns.omega + = f.collection_select :group_ids, EnterpriseGroup.all, :id, :name, {}, class: "select2 fullwidth", multiple: true, placeholder: "Start typing to search available groups..." + - if spree_current_user.admin? + .row + .three.columns.alpha + =f.label :owner_id, 'Owner' + .with-tip{'data-powertip' => "The primary user responsible for this enterprise."} + %a What's this? + .eight.columns + - owner_email = @enterprise.andand.owner.andand.email || "" + = f.hidden_field :owner_id, class: "select2 fullwidth", 'ofn-user-autocomplete' => true, email: owner_email -.fullwidth_inputs - %fieldset.eleven.columns.alpha.no-border-bottom - %legend Primary Details + .row + .three.columns.alpha + %label Primary Producer + .with-tip{'data-powertip' => "Select 'Producer' if you are a primary producer of food."} + %a What's this? + .five.columns.omega + = f.check_box :is_primary_producer, 'ng-model' => 'Enterprise.is_primary_producer' +   + = f.label :is_primary_producer, 'Producer' + - if spree_current_user.admin? .row .alpha.eleven.columns .three.columns.alpha - = f.label :name - .eight.columns.omega - = f.text_field :name, { placeholder: "eg. Professor Plum's Biodynamic Truffles" } - .row - .alpha.eleven.columns - .three.columns.alpha - = f.label :group_ids, 'Groups' - .with-tip{'data-powertip' => "Select any groups or regions that you are a member of. This will help customers find your enterprise."} + = f.label :sells, 'Sells' + .with-tip{'data-powertip' => "None - enterprise does not sell to customers directly.
Own - Enterprise sells own products to customers.
Any - Enterprise can sell own or other enterprises products.
"} %a What's this? - - .eight.columns.omega - = f.collection_select :group_ids, EnterpriseGroup.all, :id, :name, {}, class: "select2 fullwidth", multiple: true, placeholder: "Start typing to search available groups..." - - if spree_current_user.admin? - .row - .three.columns.alpha - =f.label :owner_id, 'Owner' - .with-tip{'data-powertip' => "The primary user responsible for this enterprise."} - %a What's this? - .eight.columns - - owner_email = @enterprise.andand.owner.andand.email || "" - = f.hidden_field :owner_id, class: "select2 fullwidth", 'ofn-user-autocomplete' => true, email: owner_email - + .two.columns + = f.radio_button :sells, "none", 'ng-model' => 'Enterprise.sells' +   + = f.label :sells, "None", value: "none" + .two.columns + = f.radio_button :sells, "own", 'ng-model' => 'Enterprise.sells' +   + = f.label :sells, "Own", value: "own" + .four.columns.omega + = f.radio_button :sells, "any", 'ng-model' => 'Enterprise.sells' +   + = f.label :sells, "Any", value: "any" + .row + .three.columns.alpha + %label Visible in search? + .with-tip{'data-powertip' => "Determines whether this enterprise will be visible to customers when searching the site."} + %a What's this? + .two.columns + = f.radio_button :visible, true +   + = f.label :visible, "Visible", :value => "true" + .five.columns.omega + = f.radio_button :visible, false +   + = f.label :visible, "Not Visible", :value => "false" + - if @enterprise.is_distributor + - # TODO: Angularise this .row .three.columns.alpha - %label Primary Producer - .with-tip{'data-powertip' => "Select 'Producer' if you are a primary producer of food."} + %label Link to shop front + .with-tip{'data-powertip' => "A direct link to your shopfront on the Open Food Network."} %a What's this? - .five.columns.omega - = f.check_box :is_primary_producer, 'ng-model' => 'Enterprise.is_primary_producer' -   - = f.label :is_primary_producer, 'Producer' - - if spree_current_user.admin? - .row - .alpha.eleven.columns - .three.columns.alpha - = f.label :sells, 'Sells' - .with-tip{'data-powertip' => "None - enterprise does not sell to customers directly.
Own - Enterprise sells own products to customers.
Any - Enterprise can sell own or other enterprises products.
"} - %a What's this? - .two.columns - = f.radio_button :sells, "none", 'ng-model' => 'Enterprise.sells' -   - = f.label :sells, "None", value: "none" - .two.columns - = f.radio_button :sells, "own", 'ng-model' => 'Enterprise.sells' -   - = f.label :sells, "Own", value: "own" - .four.columns.omega - = f.radio_button :sells, "any", 'ng-model' => 'Enterprise.sells' -   - = f.label :sells, "Any", value: "any" + .eight.columns.omega + = main_app.shop_enterprise_url(@enterprise) + + += f.fields_for :address do |af| + %fieldset.eleven.columns.alpha.no-border-bottom + %legend Address .row .three.columns.alpha - %label Visible in search? - .with-tip{'data-powertip' => "Determines whether this enterprise will be visible to customers when searching the site."} - %a What's this? - .two.columns - = f.radio_button :visible, true -   - = f.label :visible, "Visible", :value => "true" - .five.columns.omega - = f.radio_button :visible, false -   - = f.label :visible, "Not Visible", :value => "false" - - if @enterprise.is_distributor - - # TODO: Angularise this - .row - .three.columns.alpha - %label Link to shop front - .with-tip{'data-powertip' => "A direct link to your shopfront on the Open Food Network."} - %a What's this? - .eight.columns.omega - = main_app.shop_enterprise_url(@enterprise) - - - = f.fields_for :address do |af| - %fieldset.eleven.columns.alpha.no-border-bottom - %legend Address - .row - .three.columns.alpha - = af.label :address1 - .eight.columns.omega - = af.text_field :address1, { placeholder: "eg. 123 High Street"} - .row - .alpha.three.columns - = af.label :address2 - .eight.columns.omega - = af.text_field :address2 - .row - .three.columns.alpha - = af.label :city, 'Suburb' - \/ - = af.label :zipcode, 'Postcode' - .four.columns - = af.text_field :city, { placeholder: "eg. Northcote"} - .four.columns.omega - = af.text_field :zipcode, { placeholder: "eg. 3070"} - .row - .three.columns.alpha - = af.label :state_id, 'State' - \/ - = af.label :country_id, 'Country' - .four.columns - = af.collection_select :state_id, af.object.country.states, :id, :name, {}, :class => "select2 fullwidth" - .four.columns.omega - = af.collection_select :country_id, available_countries, :id, :name, {}, :class => "select2 fullwidth" - %fieldset.eleven.columns.alpha.no-border-bottom - %legend Contact Details - .row - .alpha.three.columns - = f.label :contact, 'Name' - .omega.eight.columns - = f.text_field :contact, { placeholder: "eg. Gustav Plum"} - -if @enterprise.unconfirmed_email - .alert-box - Email change is pending. - We've sent a confirmation email to - %strong= "#{@enterprise.unconfirmed_email}." - = link_to('Resend', main_app.enterprise_confirmation_path(enterprise: { id: @enterprise.id, email: @enterprise.unconfirmed_email } ), method: :post) - %a.close{ href: "#" } × - .row - .alpha.three.columns - = f.label :email - .omega.eight.columns - = f.text_field :email, { placeholder: "eg. gustav@truffles.com"} - .row - .alpha.three.columns - = f.label :phone - .omega.eight.columns - = f.text_field :phone, { placeholder: "eg. 98 7654 3210"} - %fieldset.eleven.columns.alpha.no-border-bottom - %legend Enterprise Details - .row - .alpha.three.columns - = f.label :abn, 'ABN' - .omega.eight.columns - = f.text_field :abn, { placeholder: "eg. 99 123 456 789"} - .row - .alpha.three.columns - = f.label :acn, 'ACN' - .omega.eight.columns - = f.text_field :acn, { placeholder: "eg. 123 456 789"} - .row - .alpha.three.columns - = f.label :website - .omega.eight.columns - = f.text_field :website, { placeholder: "eg. www.truffles.com"} - .row - .alpha.three.columns - = f.label :facebook, 'Facebook' - .omega.eight.columns - = f.text_field :facebook - .row - .alpha.three.columns - = f.label :instagram, 'Instagram' - .omega.eight.columns - = f.text_field :instagram - .row - .alpha.three.columns - = f.label :linkedin, 'LinkedIn' - .omega.eight.columns - = f.text_field :linkedin - .row - .alpha.three.columns - = f.label :twitter - .omega.eight.columns - = f.text_field :twitter, { placeholder: "eg. @the_prof" } + = af.label :address1 + .eight.columns.omega + = af.text_field :address1, { placeholder: "eg. 123 High Street"} + .row + .alpha.three.columns + = af.label :address2 + .eight.columns.omega + = af.text_field :address2 + .row + .three.columns.alpha + = af.label :city, 'Suburb' + \/ + = af.label :zipcode, 'Postcode' + .four.columns + = af.text_field :city, { placeholder: "eg. Northcote"} + .four.columns.omega + = af.text_field :zipcode, { placeholder: "eg. 3070"} + .row + .three.columns.alpha + = af.label :state_id, 'State' + \/ + = af.label :country_id, 'Country' + .four.columns + = af.collection_select :state_id, af.object.country.states, :id, :name, {}, :class => "select2 fullwidth" + .four.columns.omega + = af.collection_select :country_id, available_countries, :id, :name, {}, :class => "select2 fullwidth" %fieldset.eleven.columns.alpha.no-border-bottom - %legend About Us + %legend Contact Details .row .alpha.three.columns - = f.label :description, 'Short Description' + = f.label :contact, 'Name' .omega.eight.columns - = f.text_field :description, maxlength: 255, placeholder: 'Tell us about your enterprise in one or two sentences' + = f.text_field :contact, { placeholder: "eg. Gustav Plum"} + -if @enterprise.unconfirmed_email + .alert-box + Email change is pending. + We've sent a confirmation email to + %strong= "#{@enterprise.unconfirmed_email}." + = link_to('Resend', main_app.enterprise_confirmation_path(enterprise: { id: @enterprise.id, email: @enterprise.unconfirmed_email } ), method: :post) + %a.close{ href: "#" } × .row .alpha.three.columns - = f.label :long_description, 'About Us' + = f.label :email .omega.eight.columns - -# textAngular toolbar options, add to the ta-toolbar array below and separate into groups with extra ],[ if needed: - -# ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'], - -# ['bold', 'italics', 'underline', 'strikeThrough', 'ul', 'ol', 'redo', 'undo', 'clear'], - -# ['justifyLeft','justifyCenter','justifyRight','indent','outdent'], - -# ['html', 'insertImage', 'insertLink', 'insertVideo'] - %text-angular{'ng-model' => 'htmlVariable', 'id' => 'enterprise_long_description', 'name' => 'enterprise[long_description]', 'class' => 'text-angular', - 'ta-toolbar' => "[['h1','h2','h3','h4','p'],['bold','italics','underline','clear'],['insertLink']]", - 'placeholder' => 'Tell customers about yourself. This information appears on your public profile.'} - %fieldset.eleven.columns.alpha.no-border-bottom - %legend IMAGES - .row + = f.text_field :email, { placeholder: "eg. gustav@truffles.com", "ng-model" => "Enterprise.email" } + .row{ ng: { hide: "pristineEmail == null || pristineEmail == Enterprise.email"} } .alpha.three.columns - = f.label :logo - %br - 100 x 100 pixels +   .omega.eight.columns - = image_tag @object.logo(:medium) if @object.logo.present? - = f.file_field :logo - .row - .alpha.three.columns - = f.label :promo_image, class: 'with-tip', 'data-powertip' => 'This image is displayed in "About Us"' - %br/ - %span{ style: 'font-weight:bold' } PLEASE NOTE: - Any promo image uploaded here will be cropped to 1200 x 260. - The promo image is displayed at the top of an enterprise's profile page and pop-ups. + Note: A new email address may need to be confirmed prior to use + .row + .alpha.three.columns + = f.label :phone .omega.eight.columns - = image_tag @object.promo_image(:large) if @object.promo_image.present? - = f.file_field :promo_image + = f.text_field :phone, { placeholder: "eg. 98 7654 3210"} + %fieldset.eleven.columns.alpha.no-border-bottom + %legend Enterprise Details + .row + .alpha.three.columns + = f.label :abn, 'ABN' + .omega.eight.columns + = f.text_field :abn, { placeholder: "eg. 99 123 456 789"} + .row + .alpha.three.columns + = f.label :acn, 'ACN' + .omega.eight.columns + = f.text_field :acn, { placeholder: "eg. 123 456 789"} + .row + .alpha.three.columns + = f.label :website + .omega.eight.columns + = f.text_field :website, { placeholder: "eg. www.truffles.com"} + .row + .alpha.three.columns + = f.label :facebook, 'Facebook' + .omega.eight.columns + = f.text_field :facebook + .row + .alpha.three.columns + = f.label :instagram, 'Instagram' + .omega.eight.columns + = f.text_field :instagram + .row + .alpha.three.columns + = f.label :linkedin, 'LinkedIn' + .omega.eight.columns + = f.text_field :linkedin + .row + .alpha.three.columns + = f.label :twitter + .omega.eight.columns + = f.text_field :twitter, { placeholder: "eg. @the_prof" } +%fieldset.eleven.columns.alpha.no-border-bottom + %legend About Us + .row + .alpha.three.columns + = f.label :description, 'Short Description' + .omega.eight.columns + = f.text_field :description, maxlength: 255, placeholder: 'Tell us about your enterprise in one or two sentences' + .row + .alpha.three.columns + = f.label :long_description, 'About Us' + .omega.eight.columns + -# textAngular toolbar options, add to the ta-toolbar array below and separate into groups with extra ],[ if needed: + -# ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre', 'quote'], + -# ['bold', 'italics', 'underline', 'strikeThrough', 'ul', 'ol', 'redo', 'undo', 'clear'], + -# ['justifyLeft','justifyCenter','justifyRight','indent','outdent'], + -# ['html', 'insertImage', 'insertLink', 'insertVideo'] + %text-angular{'ng-model' => 'htmlVariable', 'id' => 'enterprise_long_description', 'name' => 'enterprise[long_description]', 'class' => 'text-angular', + 'ta-toolbar' => "[['h1','h2','h3','h4','p'],['bold','italics','underline','clear'],['insertLink']]", + 'placeholder' => 'Tell customers about yourself. This information appears on your public profile.'} +%fieldset.eleven.columns.alpha.no-border-bottom + %legend IMAGES + .row + .alpha.three.columns + = f.label :logo + %br + 100 x 100 pixels + .omega.eight.columns + = image_tag @object.logo(:medium) if @object.logo.present? + = f.file_field :logo + .row + .alpha.three.columns + = f.label :promo_image, class: 'with-tip', 'data-powertip' => 'This image is displayed in "About Us"' + %br/ + %span{ style: 'font-weight:bold' } PLEASE NOTE: + Any promo image uploaded here will be cropped to 1200 x 260. + The promo image is displayed at the top of an enterprise's profile page and pop-ups. + + .omega.eight.columns + = image_tag @object.promo_image(:large) if @object.promo_image.present? + = f.file_field :promo_image diff --git a/app/views/admin/enterprises/_form_data.html.haml b/app/views/admin/enterprises/_form_data.html.haml new file mode 100644 index 0000000000..a7d34a1aad --- /dev/null +++ b/app/views/admin/enterprises/_form_data.html.haml @@ -0,0 +1,4 @@ += admin_inject_enterprise += admin_inject_enterprise_long_description += admin_inject_payment_methods += admin_inject_shipping_methods \ No newline at end of file diff --git a/app/views/admin/enterprises/_ng_form.html.haml b/app/views/admin/enterprises/_ng_form.html.haml index e3ebe95877..e5783f0d8c 100644 --- a/app/views/admin/enterprises/_ng_form.html.haml +++ b/app/views/admin/enterprises/_ng_form.html.haml @@ -1,11 +1,11 @@ -= admin_inject_enterprise -= admin_inject_enterprise_long_description -= admin_inject_payment_methods -= admin_inject_shipping_methods - -.sixteen.columns.alpha{ ng: { app: 'admin.enterprises', controller: 'enterpriseCtrl' }, nav: { check: '', callback: 'enterpriseNavCallback()' }} - .eleven.columns.alpha - = render 'form', f: f - .one.column   - .four.columns.omega - = render 'sidebar', f: f += form_for [main_app, :admin, @enterprise], html: { name: "enterprise", "ng-app" => 'admin.enterprises', "ng-submit" => "navClear()", "ng-controller" => 'enterpriseCtrl' , "nav-check" => '', "nav-callback" => 'enterpriseNavCallback()' } do |f| + .row + .sixteen.columns.alpha + .eleven.columns.alpha.fullwidth_inputs + = render 'form', f: f + .one.column   + .four.columns.omega + = render 'sidebar', f: f + .row + .twelve.columns.alpha + = render partial: "spree/admin/shared/#{action}_resource_links" \ No newline at end of file diff --git a/app/views/admin/enterprises/edit.html.haml b/app/views/admin/enterprises/edit.html.haml index 3c132bf5e2..19ae0f3b44 100644 --- a/app/views/admin/enterprises/edit.html.haml +++ b/app/views/admin/enterprises/edit.html.haml @@ -4,7 +4,9 @@ Editing: = @enterprise.name -= form_for [main_app, :admin, @enterprise], html: { "ng-app" => 'admin.enterprises', "ng-submit" => "navClear()", "ng-controller" => 'enterpriseCtrl' , "nav-check" => '', "nav-callback" => 'enterpriseNavCallback()' } do |f| - = render 'ng_form', f: f - .twelve.columns.alpha - = render partial: 'spree/admin/shared/edit_resource_links' +- content_for :page_actions do + %li= button_link_to "Back to enterprises list", main_app.admin_enterprises_path, icon: 'icon-arrow-left' + += render 'admin/enterprises/form_data' + += render 'admin/enterprises/ng_form', action: 'edit' diff --git a/app/views/admin/enterprises/new.html.haml b/app/views/admin/enterprises/new.html.haml index 3df3551f47..634044bf30 100644 --- a/app/views/admin/enterprises/new.html.haml +++ b/app/views/admin/enterprises/new.html.haml @@ -3,7 +3,9 @@ - content_for :page_title do New Enterprise -= form_for [main_app, :admin, @enterprise], html: { "ng-app" => 'admin.enterprises', "ng-submit" => "navClear()", "ng-controller" => 'enterpriseCtrl' , "nav-check" => '', "nav-callback" => 'enterpriseNavCallback()' } do |f| - = render 'ng_form', f: f - .twelve.columns.alpha - = render partial: 'spree/admin/shared/new_resource_links' +- content_for :page_actions do + %li= button_link_to "Back to enterprises list", main_app.admin_enterprises_path, icon: 'icon-arrow-left' + += render 'admin/enterprises/form_data' + += render 'admin/enterprises/ng_form', action: 'new'