Hello welcome to my application to see the problem please visit the
link above, please click 'login' where the user and pass are already
entered. You will be taken to the dashboard, then click the blue link
'Nick Fish' and on the following page 'Edit invoice'. You should see a
large form for invoicing, this is the Prototype functionality that
needs to be viewed.

Please enter a number into the 'qty' or 'price' fields of the table
and notice a returned numeric total, but if a letter or something that
isn't a number is typed into the input boxes, NaN is returned in
multiple boxes which isn't every user friendly.

Are there any simple revisions I can make to my prototype code below
that prompt/ensure some validation of numbers entered into 'qty' and
'price' or replace the NaN that is returned with 'error enter a
number'?

var Invoice = Class.create({

    line_item_number: 1,

    initialize: function(html, item) {
       this.line_item_html = html
       this.line_item_number = item
       this.validate();
    },

    is_valid: function() {
      return ($F('InvoiceClientId') != '' && this.total() > 0)
    },

    validate: function() {


      if(this.is_valid())
      {
        Field.enable('save');
        $('note').style.display = 'none'
        return true
      }
      else
      {
         Field.disable('save')
         $('note').style.display = ''
         return false
      }

    },

    indexed_line_item_html: function() {
      return this.line_item_html.replace(/INDEX_ID/g,
this.line_item_number)
    },

    add_line_item: function() {
      $('items').insert(this.indexed_line_item_html())
      $('Item'+String(this.line_item_number)+'Quantity').focus()
      this.line_item_number++

    },

    remove_line_item: function(index) {
      Element.remove(index)
      this.refresh()
    },



    to_money: function(amount) {
      return Number(amount).toFixed(2)
    },


    sub_total: function() {
     var In = this
     return $$('.item').inject(0, function(sum, row) {
      var quantity = Number($F('Item' + row.id + 'Quantity'))
      var price = Number($F('Item' + row.id + 'Price'))
      var line_total = quantity * price
      $('Item' + row.id + 'Quantity').value = In.to_money(quantity)
      $('Item' + row.id + 'Price').value = In.to_money(price)
      $('Item' + row.id + 'Total').update('£' +
In.to_money(line_total))
      return sum + line_total
     })
    },

    tax: function() {
     var tax_rate = Number($F('InvoiceTaxRate')) // passes in an item
     var taxable_amount = this.sub_total()
     tax_total = Math.round((tax_rate * 0.01 * taxable_amount) *
1000) / 1000
     return Math.round(tax_total * 100) / 100
    },

    total: function() {
       return this.sub_total() + this.tax()
    },

    refresh: function() {
     $('subtotal').update('£' + this.to_money(this.sub_total()))
     $('total').update('£' + this.to_money(this.total()))
     $('tax').update('£' + this.to_money(this.tax()))
     this.validate();
    }


});

-- 
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com.
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en.

Reply via email to