suppliers.js 5.13 KB

suppliers = {

  filter: {
    form: function() {
      return table_filter.form()
    },

    apply: function() {
      this.form().submit()
    },

  },

  add_link: function () {
    if (toggle_edit.isEditing())
      toggle_edit.value_row.toggle_edit();

    var supplier_add = $('#supplier-add');
    toggle_edit.setEditing(supplier_add);
    toggle_edit.value_row.toggle_edit();
  },

  toggle_edit: function () {
    if (toggle_edit.editing().is('#supplier-add'))
      toggle_edit.editing().toggle(toggle_edit.isEditing());
    toggle_edit.editing().find('.box-view').toggle(!toggle_edit.isEditing());
    toggle_edit.editing().find('.box-edit').toggle(toggle_edit.isEditing());
  },

  add: {
    supplier_added: function () {
      $('#results').html('');
    },
    create_dummy: function () {
      $('#find-enterprise, #create-dummy, #create-dummy .box-edit').toggle();
    },

    search: function (input) {
      query = $(input).val();
      if (query.length < 3)
        return;
      input.form.onsubmit();
    },
  },

  // core uses (future product plugin)
  product: {

    pmsync: function (to_price) {
      var margin_input = $('#product_margin_percentage')
      var price_input = $('#product_price')
      var base_price_input = $('#product_supplier_product_attributes_price')

      if (to_price)
        suppliers.price.calculate(price_input, margin_input, base_price_input)
      else
        suppliers.margin.calculate(margin_input, price_input, base_price_input)
    },

    updateBasePrice: function () {
      this.pmsync(this)
    },
  },

  our_product: {

    toggle_edit: function () {
      toggle_edit.editing().find('.box-edit').toggle(toggle_edit.isEditing())
    },

    default_change: function (event) {
      var block = $(this).parents('.block')
      var nonDefaults = block.find('div[data-non-defaults]')
      nonDefaults.toggle(!this.checked)
      nonDefaults.find('input,select,textarea').prop('disabled', this.checked)
    },

    load: function(id) {
      $('#our-product-'+id+' div[data-default-toggle] input').change(suppliers.our_product.default_change).change();
    },

    pmsync: function (context, to_price) {
      var p = $(context).parents('.our-product')
      var margin_input = p.find('.product-margin-percentage')
      var price_input = p.find('.product-price')
      var buy_price_input = p.find('.product-base-price')

      if (to_price)
        suppliers.price.calculate(price_input, margin_input, buy_price_input)
      else
        suppliers.margin.calculate(margin_input, price_input, buy_price_input)
    },

    select: {
      all: function() {
        $('.our-product #product_ids_').attr('checked', true)
      },
      none: function() {
        $('.our-product #product_ids_').attr('checked', false)
      },

      activate: function(state) {
        var selection = $('.our-product #product_ids_:checked').parents('.our-product')
        selection.find('.available input[type=checkbox]').each(function() {
          this.checked = state
          $(this.form).submit()
        });
      },

    },

    import: {
      confirmRemoveAll: function(checkbox, text) {
        if (checkbox.checked && !confirm(text))
          checkbox.checked = false
      },
    },
  },

  basket: {
    searchUrl: null,
    addUrl: null,
    removeUrl: null,

    remove: function (id) {
      var self = this
      $.ajax(self.removeUrl, {method: 'DELETE',
       data: {aggregate_id: id},
       success: function(data) {
        self.reload(data)
       },
      })
    },

    reload: function (data) {
      $('#product-basket').html(data)
      $('#basket-add').focus()
    },

    load: function () {
      var self = this
      var input = $('#basket-add')

      self.source = new Bloodhound({
        datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: this.searchUrl+'?query=%QUERY',
      })
      self.source.initialize()

      input.typeahead({
        minLength: 2, highlight: true,
      }, {
        displayKey: 'label',
        source: this.source.ttAdapter(),
      }).on('typeahead:selected', function(e, item) {
        input.val('')
        $.post(self.addUrl, {aggregate_id: item.value}, function(data) {
          self.reload(data)
        })
      })
    },
  },

  price: {

    calculate: function (price_input, margin_input, base_price_input) {
      var price = unlocalize_currency($(price_input).val());
      var base_price = unlocalize_currency($(base_price_input).val());
      var margin = unlocalize_currency($(margin_input).val());

      var value = base_price + (margin / 100) * base_price;
      if (isNaN(value))
        value = unlocalize_currency(base_price_input.val());
      $(price_input).val(value);
    },
  },

  margin: {

    calculate: function (margin_input, price_input, base_price_input) {
      var price = unlocalize_currency($(price_input).val());
      var base_price = unlocalize_currency($(base_price_input).val());
      var margin = unlocalize_currency($(margin_input).val());

      var value = ((price - base_price) / base_price ) * 100;
      value = !isFinite(value) ? 0.0 : value;
      $(margin_input).val(value);
    },
  },

};